1. datasets
在两个数据集上进行文本相似度模型的测试,ATEC 和 LCQMC,各自看一下例子:
ATEC:
蚂蚁花呗账单分期当月用还款吗,我的蚂蚁花呗的分期这个月还了,未,0
我花呗绑卡绑不上怎么回事,怎么绑定不了花呗,0
怎么才能关闭借呗,帮我关闭借呗入口,1
借呗怎么只能分成六个月还款,借呗设置额度,下个月还能设置吗,0
LCQMC:
校验失败了, 您好,您还是访客状态呢 0
尼玛什么意思 尼玛啊是什么意思? 0
自找苦吃的地方是哪儿? 自找苦吃的地方是哪儿 1
尾号4位多少 尾号是多少后4位 1
| dataset | 数量(train/dev/test) | train类分布(0:1) |
|---|---|---|
| ATEC | 11/22/33 | 75435 : 16870 |
| LCQMC | 11/22/33 | 100192 : 138574 |
从类分布的数量知道,ATEC是一个分布极度不平衡的数据集。
2. solutions
对于这类问题的一般解决方案有下面几种。 首先对数据预处理。使用jieba分词,筛选掉stop_words,使用百度的stop_wotds词表link。
2.1 transformer + siameses-net
实验一:使用glove embedding, dim=300,token-level,
| dataset | F1 score | precision| aveTime| | ---- | ---- | ---- | | ATEC | 0.82157 | 0.82157 | | LCQMC | 0.50272 | 0.50272 |
分析: 在ATEC上面结果全错,全部被预测成负例了。
实验二:使用bert embedding
实验三: 随即初始化embedding
2.2 AlBert
使用AlBert模型进行 fine-tuning,
1. set 1, epoch:1.0
eval_accuracy = 0.81263494
eval_accuracy = 0.81263494
eval_loss = 0.41541135
global_step = 3730
loss = 0.41508695
2. set 2, epoch:2.0
eval_accuracy = 0.78366095
eval_accuracy = 0.78366095
eval_loss = 1.7134513
global_step = 7461
loss = 1.7120895
15.
eval_accuracy = 0.788774
eval_accuracy = 0.788774
eval_loss = 2.2002842
global_step = 55960
| dataset | F1 score | precision| epoch| aveTime| | ---- | ---- | ---- | ----| | LCQMC | 0.84032 | 0.84032 | 1| |LCQMC|0.844|0.844|5| |LCQMC|0.84192|0.84192|10| |LCQMC|0.80304|0.80304|15|
为什么epoch越多表现却越差?
模型简述
ALBert全程是 a lite Bert,也就是bert的精简版,同时也是升级版。相比较Bert,ALBert主要的改变有三点:
- 对Embedding因式分解(Factorized embedding parameterization)
- 跨层的参数共享(Cross-layer parameter sharing)
- 将NSP任务改变成SOP任务。句间连贯(Inter-sentence coherence loss)
缺点:
预测时间长
2.3 AlBERT+siameses-net link
模型简述
这个模型的项目结构非常简单,就是BERT作为编码器,使用孪生网络的结构,直接在特定任务上进行fine-tuning来更新BERT的权重。然后产生的句向量,便具有意义了,可以使用cosine-similarity来直接计算距离。如图:
我们这里使用AlBert模型。
| dataset | F1 score | precision|checkpoint| aveTime| | ---- | ---- | ---- | ----| | LCQMC | 0.80712 | 0.80712 |149228| | LCQMC | 0.71472 | 0.71472 |7461| | LCQMC | 0.71472 | 0.71472 |37307|
使用AlBert构建siameses-net的指南。 code
2.4 simnet
模型简述
2.5 MatchPyramid
思路综述: 从图像识别中得到启发,先计算输入两句话的各位置token之间的相似度,构造相似度矩阵,再相似度矩阵上使用CNN模型提取特征,最后加一层maxpool,然后使用softmax分类。
2.6 PolyEncoder
模型简介
在这篇论文里,他把上述siameses-net称之为Bi-encoder,把AlBert这种称之为Cross-encoder。Poly-encoder是两者的折中方案,兼顾predit的性能和准确率。
网络结构仍然是对称的两个encoder,右边Encoder对candidate进行编码,得到。
左边对输入的Q进行编码,在顶层取个向量 ,然后与做一个attention运算,其中可以看作是求得的与当前candidate相关性的数值。即:
对于candidate ,同样可以事先缓存下来 ,所以在 进行predict的时候只需要得到top层的前m个向量,得到,再与计算cos距离就是二者相似度。
现在还剩下一个问题是,怎么选取这个向量,作者重点测试了两种策略:
- 直接选取前面m个,如图一所示。
- 在top层所有的输出向量做attention操作,学习到m个codes ,然后对应下标来取 ,如图二所示。
2.7 《ColBERT》(SIGIR 2020)
1.模型简介
ColBERT也是使用Siamese的结构。分为Query-encoder和Doc-encoder,这个模型使用encoder得到的token-level emebdding,然后计算query和doc之间每个token的关联,来衡量相似度。
2.模型介绍
- 分别对Query和Doc进行编码
对Query和Doc的编码使用同一个Bert模型,所以,为了区分Query和Doc,分别在输入的sequence前面加上[Q]和[D]。Bert是编码器,CNN做维度变换,用来对BERT的隐层输出进行降维处理,Normalize是为后面计算余弦相似度做l2正则化处理。
构建Query的输入序列时,对于较短长度使用特殊字符 [mask]进行padding,作者解释,这一步的padding可以起到 query angmentation的作用,并且对实验结果表明这一部有很大的影响。 作者对这这种query angmentation有效性的解释是,它可以允许BERT模型在这些掩码的位置上生成基于查询Query的嵌入表示。目的就是学习用新词语或者根据重要性对词语进行再加权(re-weigh),以此来扩充query的表示。
对于Doc,需要过滤掉标点符号。 2. Later Interaction
最后计算相似度,是对于query每个token与query-embedding之间的相似度之和作为最终的得分,(因为对矩阵先做了L2正则,所以计算dot-products其实就是计算余弦相似度)。
此外论文中好介绍了,一种借助faiss在完整数据集上直接做检索的方法,作者称之为End-to-end Top-k Retrieval:
- faiss-based candidate filtering
- re-ranking
【注释】 faiss:facebook开源的用于对稠密向量进行高效相似度搜索和聚类的工具包。
3.结果分析与结论
- 首先看一下整体结果,上图与主要的四种方案做了对比,分别是:
- 基于bag-of-words(bow)的方法,比如BM25.
- 基于bow的NLU模型(Effecient NLU-based Models)
- 神经网络匹配模型(Neural Matching Models)。
- 基于语言模型BERT的交互匹配网络(Language Model Pretraining for IR)。 在**结果有效性(MRP@10)维度,引入预训练语言模型有较大提升。在检索性能(lattency)**维度,以BERT为代表的交互计算模型明显更差,而本文提出的ColBERT可以在两个维度做到很好的权衡和表现。
具体数值见上图。
截屏2020-09-12 下午12.43.31
如果采用end2end的方式,结果好一点,但是latency增加很多,从代价来说,还是不要划算的。
在另外一个数据集(TREC CAR)上做的结果,使用BM25+ColBERT也取得了很好的结果。
上图,作者对ColBERT做了消融实验,结论是:
1.使用query augmentation有较大提升。
2.ColBERT采用 later inteaction的方式比直接使用单个[CLS]向量做dot-product使用效果更好。
3. ColBERT采用maximum similarity ,效果明显好于使用 average similarity。
4. 采用end2end方式直接从完整语聊集中检索要比分布方法(先用BM25 取top-1000,在re-ranking)更好。
5.
ColBERT需要对每个Doc使用BERT进行编码,把得到的doc-representation做索引存储,上图是使用不同维度(Dimension)和位(Bytes/Dim)所需要的存储空间(space),以及对应得到的结果(MRP@10)比较。可以看到,设置维度m=24,位数位2,可以非常明显所见存储,同时得到很好的效果。
2.7 Text Matching with Richer Alignment Features
3.结果评价指标
precision@k Average Precision@K: Average Precision@K是指到第K个正确的召回为止,从第一个正确召回到第K个正确召回的平均正确率 MAP(Mean Average Precision@K)
4. 其他内容
其他材料: Measurement of Text Similarity: A Survey Evolution of Semantic Similarity - A Survey 文本匹配(语义相似度/行为相关性)技术综述 深度学习文本匹配简述 Text_Matching-github