【深度文本匹配】之模型演绎

1,788 阅读7分钟

1. datasets

在两个数据集上进行文本相似度模型的测试,ATEC 和 LCQMC,各自看一下例子:

ATEC:
蚂蚁花呗账单分期当月用还款吗,我的蚂蚁花呗的分期这个月还了,未,0
我花呗绑卡绑不上怎么回事,怎么绑定不了花呗,0
怎么才能关闭借呗,帮我关闭借呗入口,1
借呗怎么只能分成六个月还款,借呗设置额度,下个月还能设置吗,0

LCQMC:
校验失败了,	您好,您还是访客状态呢	0
尼玛什么意思	尼玛啊是什么意思?	0
自找苦吃的地方是哪儿?	自找苦吃的地方是哪儿	1
尾号4位多少	尾号是多少后4位	1
dataset数量(train/dev/test)train类分布(0:1)
ATEC11/22/3375435 : 16870
LCQMC11/22/33100192 : 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主要的改变有三点:

  1. 对Embedding因式分解(Factorized embedding parameterization)
  2. 跨层的参数共享(Cross-layer parameter sharing)
  3. 将NSP任务改变成SOP任务。句间连贯(Inter-sentence coherence loss)

code paper

缺点:

预测时间长

2.3 AlBERT+siameses-net link

模型简述

这个模型的项目结构非常简单,就是BERT作为编码器,使用孪生网络的结构,直接在特定任务上进行fine-tuning来更新BERT的权重。然后产生的句向量,便具有意义了,可以使用cosine-similarity来直接计算距离。如图: image_1e2vihclp11376o314dm1bgfknl9.png-66.4kB 我们这里使用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

模型简述

image_1e36cuasknqj1engku7177f9hc9.png-59.6kB

max0,margin(S(Q,D+)S(Q,D))\max{0,margin-(S(Q,D+)-S(Q,D-))} code document

2.5 MatchPyramid

image_1ec4r3rkc1oe1hk418mjju1cng9.png-216.9kB

思路综述: 从图像识别中得到启发,先计算输入两句话的各位置token之间的相似度,构造相似度矩阵,再相似度矩阵上使用CNN模型提取特征,最后加一层maxpool,然后使用softmax分类。

2.6 PolyEncoder

模型简介

Poly-encoder

在这篇论文里,他把上述siameses-net称之为Bi-encoder,把AlBert这种称之为Cross-encoder。Poly-encoder是两者的折中方案,兼顾predit的性能和准确率。

网络结构仍然是对称的两个encoder,右边Encoder对candidate进行编码,得到ycondiy_{condi}。 左边对输入的Q进行编码,在顶层取mm个向量 (yctxt1...yctxtm)(y^1_{ctxt}...y^m_{ctxt}) ,然后与ycondiy_{condi}做一个attention运算,其中ww可以看作是求得的与当前candidate相关性的数值。即: 图1

对于candidate AA,同样可以事先缓存下来 ycondiy_{condi},所以在QQ 进行predict的时候只需要得到top层的前m个向量,得到yctxty_{ctxt},再与ycondiy_{condi}计算cos距离就是QAQA二者相似度。

现在还剩下一个问题是,怎么选取这mm个向量,作者重点测试了两种策略:

  1. 直接选取前面m个,如图一所示。
  2. 在top层所有的输出向量做attention操作,学习到m个codes (c1,...,cm)(c_1,...,c_m),然后对应下标来取 yctxtiy^i _{ctxt},如图二所示。

图2

paper code 参考1

2.7 《ColBERT》(SIGIR 2020)

1.模型简介

image_1ehu3rmua1q881brs1lehv43138t9.png-63.1kB

ColBERT也是使用Siamese的结构。分为Query-encoder和Doc-encoder,这个模型使用encoder得到的token-level emebdding,然后计算query和doc之间每个token的关联,来衡量相似度。

2.模型介绍

  1. 分别对Query和Doc进行编码 image_1ehu3ukqcbcvlhgusq15if1631m.png-21.5kB

对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

image_1ehu409seatt1pk7ijn3nsr6413.png-7kB 最后计算相似度,是对于query每个token与query-embedding之间的相似度之和作为最终的得分Sq,dS_{q,d},(因为对矩阵先做了L2正则,所以计算dot-products其实就是计算余弦相似度)。

此外论文中好介绍了,一种借助faiss在完整数据集上直接做检索的方法,作者称之为End-to-end Top-k Retrieval

  1. faiss-based candidate filtering
  2. re-ranking

【注释】 faiss:facebook开源的用于对稠密向量进行高效相似度搜索和聚类的工具包

3.结果分析与结论

截屏2020-09-12 上午10.26.34.png-135kB

  • 首先看一下整体结果,上图与主要的四种方案做了对比,分别是:
  1. 基于bag-of-words(bow)的方法,比如BM25.
  2. 基于bow的NLU模型(Effecient NLU-based Models)
  3. 神经网络匹配模型(Neural Matching Models)。
  4. 基于语言模型BERT的交互匹配网络(Language Model Pretraining for IR)。 在**结果有效性(MRP@10)维度,引入预训练语言模型有较大提升。在检索性能(lattency)**维度,以BERT为代表的交互计算模型明显更差,而本文提出的ColBERT可以在两个维度做到很好的权衡和表现。

截屏2020-09-12 上午10.41.46.png-116.7kB 具体数值见上图。 截屏2020-09-12 下午12.43.31image.png-119kB 如果采用end2end的方式,结果好一点,但是latency增加很多,从代价来说,还是不要划算的。

截屏2020-09-12 上午10.42.54.png-56.7kB 在另外一个数据集(TREC CAR)上做的结果,使用BM25+ColBERT也取得了很好的结果。

截屏2020-09-12 上午10.44.14.png-109.3kB 上图,作者对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. 截屏2020-09-12 上午10.55.01.png-70.9kB ColBERT需要对每个Doc使用BERT进行编码,把得到的doc-representation做索引存储,上图是使用不同维度(Dimension)和位(Bytes/Dim)所需要的存储空间(space),以及对应得到的结果(MRP@10)比较。可以看到,设置维度m=24,位数位2,可以非常明显所见存储,同时得到很好的效果。

【参考】 paper code

2.7 Text Matching with Richer Alignment Features

【参考:】 1 paper

3.结果评价指标

precision@k Average Precision@K: Average Precision@K是指到第K个正确的召回为止,从第一个正确召回到第K个正确召回的平均正确率 MAP(Mean Average Precision@K)

code

4. 其他内容

其他材料: Measurement of Text Similarity: A Survey Evolution of Semantic Similarity - A Survey 文本匹配(语义相似度/行为相关性)技术综述 深度学习文本匹配简述 Text_Matching-github