文本匹配任务(下)
文本匹配任务
- 1.文本匹配-深度学习
- 1.1表示型
- 1.1.1训练方式一
- 1.1.2训练方式二(Triplet Loss)
- 1.2交互型
- 1.3交互型和表示型对比
- 2.对比学习
- 2.1图像中
- 2.2NLP中
- 3.真实场景-海量向量查找
- 3.1CD树
- 3.1.1空间切割
- 3.1.2Annoy
1.文本匹配-深度学习
简介: 深度学习实现文本匹配任务主要包含,表示型和交互型两种实现逻辑;表示型:就是将输入表示为向量;交互性,就是对输入直接输出一个匹配的判断结果。
1.1表示型
释义: 表示型方案,模型是将输入转化为向量,目标是使得向量尽可能表示出词的含义。这个模型可以称为一个解码器Decoder。通过模型表达的向量,再使用相似度计算的算法,求出相似度分数。
示意图:
解释:
1.上面图示中,有两个Encoder;其实可以看成一个。
2.除了Encoder部分外,matching layer是对表示的向量进行分类的,也很重要,除了通过余弦函数、欧式距离外,还可以通过一层网络进行计算。
1.1.1训练方式一
步骤:
1.对于两个匹配的样本,预期输出分值为1。
2.对于两个不匹配的样本,预期输出分值为0。
3.本质上相当于2分类任务。
4.对于输入进行匹配任务的两个向量,在进行matching layer计算输入时,也可以尝试实验不同的方案和组合
。
举例如下:
介绍:
上述举例方案采用的是BERT模型;并且在实验中,进行matching layer输入:u、v、|u-v|的效果最好。
1.1.2训练方式二(Triplet Loss)
训练目标: 使具有相同标签的样本在embedding空间尽量接近。使具有不同标签的样本在embedding空间尽量远离。
示意图
介绍: 左侧表示随机化时,正样本与负样本相对匹配样本的距离。匹配样本也称为锚点、原点。Triplet Loss还可用于图像识别,即人脸核验等操作。
原理释义:
1.输入是一个三元组<a, p, n>
2.a:anchor 原点
3.p:positive 与a同一类别的样本
4.n:negative 与a不同类别的样本
5.在embedding空间中,三元组损失函数如下:
6.𝐿=max(𝑑(𝑎, 𝑝)−𝑑(𝑎, 𝑛)+𝑚𝑎𝑟𝑔𝑖𝑛, 0)
7. 最小化L,则d(a,p)->0,d(a,n)->margin
8.d代表余弦距离
,margin代表正样本和负样本的区别度
;一般取0.1
1.2交互型
释义: 即输入两个匹配文本,交由大模型对两个文本间的关系进行打分。类似二分类任务。
示意图如下:
注意:虽然这里图上展示是使用的两个embedding layer;但是实际是同一个。
1.3交互型和表示型对比
表示型
优点:训练好的模型可以对知识库内的问题提前计算向量,在实际查找过程中,只对输入文本做一次向量化。就可以完成计算。而交互性对知识库中的内容,每来一次输入的问题,都需要全部匹配知识库内容计算一次。
缺点:在向量化的过程中不知道文本重点
交互型
优点:通过对比把握句子重点。而表示型不可以(举例:明天可能要下雨。明天一定要下雨。明天可能要下雪。)
缺点:每次计算需要都需要两个输入。
2.对比学习
训练目标: 和表示型训练任务一样,为了训练一个Encoder编码器。将输入表示成合理的向量。
思想原理: 表示型、交互型编码器训练都离不开标注数据(负样本、正样本),标注的数据需要耗费大量的人力;对比学习
考虑通过对未标注的数据,自动的添加轻微遮挡,来构建正样本
,而不同的原始数据之间构成负样本
,就可以完成训练并且无须手动标注了。
2.1图像中
示意图:
释义:
1.这里将猫的图片,加上不同的滤镜,就构成了两张相似的正样本材料,即可进行训练。
2.除了数据上的处理外,后面的模型层的训练和构成逻辑和表示型、交互型一致。
3.不同原始材料之间就构成负样本。
2.2NLP中
示意图:
释义:
1.在NLP中,同样是对一条输入,进行语义相似的调整,取构建正样本,不同原始材料之间构成负样本。
2.语义相似度的自动调整,有不同的方案。
3.语义相似的调整a:,在字符的时候,就对输入的文本行调整,替换同义词、近义词、加停用词等。
4.语义相似的调整b:在字符转化成向量后,在网络中调整;比如在BERT层之后,Pooling层前,加入Dropout层
;向量就会有一定几率省略或者增大;这样就有过Dropout层向量和没有过两个
,进行下一步的训练。或者在embedding时,将其中随机抽掉几行向量
,也可以得到两个训练的样本。
5.这样的调整训练是有一定效果的;结合着部分标注数据来做,相对于只用标注数据做,有一定优化效果。而且标注数据需求要小些。
注意: 这种方案的思想本质是希望通过无监督、或自监督的方式,能够用海量的数据进行模型训练,而不依赖于人的标注。
3.真实场景-海量向量查找
备注: 下面介绍的2种算法,只是作为一种思想的了解;真实的场景中,都是根据数据情况,调研选择成熟的框架来实现即可。
3.1CD树
备注: 在这里介绍的是一种典型或者基础的算法,纯数学的一种应用,只做一个简单的介绍。
3.1.1空间切割
示意图介绍:
1.左侧是切割的示意图,右侧是根据切割的方式构建的树。
2.每一个点代表知识库中需要匹配的向量,这里使用2维向量举例。
相似度计算举例
1.现在有向量(3,5),需要查找一个相似度最高的向量。
2.根据横纵坐标,简单的比较可以得到,横坐标3;位于(2,3)(4,7)之间;纵坐标5,位于(5,4),(4,7)之间。所以向量(3,5)快速匹配到最下方的节点(4,7)上。
3.计算(3,5)到(4,7)的距离S1;和(3,5)到(4,7)切割平面的距离D1;由图可知,D1<S1
4.说明可能存在点,在(4,7)平面的右侧,可能存在一个点,使得距离更接近(3,5);这一侧最近的节点为(5,4)
5.重复3,4步骤;完成(2,3)点的计算,最后计算(7,2)根节点,距离比之前的计算都大了,则根据点右侧无须计算;停止
6.在已有的计算向量中,使用相似度计算(余弦、欧式距离等),选出最相似的向量即可。
切割逻辑:
1.首先根据X或者Y寻找所有知识库向量的中位数。这里根据X,找到(7,2)
2.计算所有点的X轴的方差,和Y轴的方差,X轴>Y轴;所以X=7的平面切割。
3.下一步寻找Y轴的中位数,左侧则找到(5,4)。
4.计算Y=7的平面左侧三个数(2,3)(5,4)(4,7)X轴的方差,和Y轴的方差;Y轴>X轴;所以切割Y=4。
依次计算,最后完成切割。
3.1.2Annoy
方法逻辑: 分割过程相当于Kmeans聚类,通过不断的进行2聚类,将平面拆分切割。重复分割过程,直到每个空间内的点个数小于设定值。下面通过图示大概表示过程。
下面图片表示过程:
最后组成一个CD树:
注意: 上线介绍的方法都属于比较古老的内容,当前RAG使用的检索方案是通过较为复杂的优化的。可以达到上亿数据,在10ms内完成检索。