特定领域知识图谱融合方案:文本匹配算法 (Simnet、Simcse、Diffcse)
特定领域知识图谱融合方案:文本匹配算法(Simnet、Simcse、Diffcse)
本项目链接:https://aistudio.baidu.com/aistudio/projectdetail/5423713?contributionType=1
文本匹配任务在自然语言处理中是非常重要的基础任务之一,一般研究两段文本之间的关系。有很多应用场景;如信息检索、问答系统、智能对话、文本鉴别、智能推荐、文本数据去重、文本相似度计算、自然语言推理、问答系统、信息检索等,但文本匹配或者说自然语言处理仍然存在很多难点。这些自然语言处理任务在很大程度上都可以抽象成文本匹配问题,比如信息检索可以归结为搜索词和文档资源的匹配,问答系统可以归结为问题和候选答案的匹配,复述问题可以归结为两个同义句的匹配。
0.前言:特定领域知识图谱融合方案
本项目主要围绕着特定领域知识图谱(Domain-specific KnowledgeGraph:DKG)融合方案:文本匹配算法、知识融合学术界方案、知识融合业界落地方案、算法测评 KG 生产质量保障讲解了文本匹配算法的综述,从经典的传统模型到孪生神经网络“双塔模型”再到预训练模型以及有监督无监督联合模型,期间也涉及了近几年前沿的对比学习模型,之后提出了文本匹配技巧提升方案,最终给出了 DKG 的落地方案。这边主要以原理讲解和技术方案阐述为主,之后会慢慢把项目开源出来,一起共建 KG,从知识抽取到知识融合、知识推理、质量评估等争取走通完整的流程。
0.1 详细细节参考第一篇项目:特定领域知识图谱融合方案:技术知识前置【一】-文本匹配算法
https://aistudio.baidu.com/aistudio/projectdetail/5398069?contributionType=1
0.2 特定领域知识图谱(Domain-specific KnowledgeGraph:DKG)融合方案(重点!)
在前面技术知识下可以看看后续的实际业务落地方案和学术方案
关于图神经网络的知识融合技术学习参考下面链接:PGL图学习项目合集&数据集分享&技术归纳业务落地技巧[系列十]
从入门知识到经典图算法以及进阶图算法等,自行查阅食用!
文章篇幅有限请参考专栏按需查阅:NLP知识图谱相关技术业务落地方案和码源
1.特定领域知识图谱知识融合方案(实体对齐):优酷领域知识图谱为例
方案链接:https://blog.csdn.net/sinat_39620217/article/details/128614951
2.特定领域知识图谱知识融合方案(实体对齐):文娱知识图谱构建之人物实体对齐
方案链接:https://blog.csdn.net/sinat_39620217/article/details/128673963
3.特定领域知识图谱知识融合方案(实体对齐):商品知识图谱技术实战
方案链接:https://blog.csdn.net/sinat_39620217/article/details/128674429
4. 特定领域知识图谱知识融合方案(实体对齐):基于图神经网络的商品异构实体表征探索
方案链接:https://blog.csdn.net/sinat_39620217/article/details/128674929
5.特定领域知识图谱知识融合方案(实体对齐)论文合集
方案链接:https://blog.csdn.net/sinat_39620217/article/details/128675199
论文资料链接:两份内容不相同,且按照序号从小到大重要性依次递减
知识图谱实体对齐资料论文参考(PDF)+实体对齐方案+特定领域知识图谱知识融合方案(实体对齐)
知识图谱实体对齐资料论文参考(CAJ)+实体对齐方案+特定领域知识图谱知识融合方案(实体对齐)
6.知识融合算法测试方案(知识生产质量保障)
方案链接:https://blog.csdn.net/sinat_39620217/article/details/128675698
1.传统深度模型:SimNet
短文本语义匹配(SimilarityNet, SimNet)是一个计算短文本相似度的框架,可以根据用户输入的两个文本,计算出相似度得分。 SimNet 框架主要包括 BOW、CNN、RNN、MMDNN 等核心网络结构形式,提供语义相似度计算训练和预测框架, 适用于信息检索、新闻推荐、智能客服等多个应用场景解决语义匹配问题。
模型简介:
通过调用 Seq2Vec 中内置的模型进行序列建模,完成句子的向量表示。包含最简单的词袋模型和一系列经典的 RNN 类模型。
详情可以查看 SimNet 文件下的 encoder 文件 or 参考:https://github.com/PaddlePaddle/PaddleNLP/tree/develop/paddlenlp/seq2vec
1.1 TCN:时间卷积网络
Temporal Convolutional Networks (TCN)时间卷积网络,18 年提出的时序卷积神经网络模型用来解决时间序列预测的算法。其中,时序问题建模通常采用 RNN 循环神经网络及其相关变种,比如 LSTM、GRU 等,这里将卷积神经网络通过膨胀卷积达到抓取长时依赖信息的效果,TCN 在一些任务上甚至能超过 RNN 相关模型。
作为一个新的序列分析 model 它的特点主要有两个:
其卷积网络层层之间是有因果关系的,意味着不会有“漏接”的历史信息或是未来数据的情况发生,即便 LSTM 它有记忆门,也无法完完全全的记得所有的历史信息,更何况要是该信息无用了就会逐渐被遗忘。
这个 model 的架构可以伸缩自如的调整成任何长度,并可以根据输出端需要几个接口就 mapping 成对应的样子,这点和 RNN 的框架意思相同,非常的灵活。
论文链接:https://arxiv.org/pdf/1803.01271.pdf
github 链接:https://github.com/LOCUSLAB/tcn
时序问题的建模大家一般习惯性的采用循环神经网络(RNN)来建模,这是因为 RNN 天生的循环自回归的结构是对时间序列的很好的表示。传统的卷积神经网络一般认为不太适合时序问题的建模,这主要由于其卷积核大小的限制,不能很好的抓取长时的依赖信息。 但是最近也有很多的工作显示,特定的卷积神经网络结构也可以达到很好的效果,比如 Goolgle 提出的用来做语音合成的 wavenet,Facebook 提出的用来做翻译的卷积神经网络。这就带来一个问题,用卷积来做神经网络到底是只适用于特定的领域还是一种普适的模型? 本文就带着这个问题,将一种特殊的卷积神经网络——时序卷积网络(Temporal convolutional network, TCN)与多种 RNN 结构相对比,发现在多种任务上 TCN 都能达到甚至超过 RNN 模型。
1.1.1 因果卷积(Causal Convolution)
因果卷积可以用上图直观表示。 即对于上一层 t 时刻的值,只依赖于下一层 t 时刻及其之前的值。和传统的卷积神经网络的不同之处在于,因果卷积不能看到未来的数据,它是单向的结构,不是双向的。也就是说只有有了前面的因才有后面的果,是一种严格的时间约束模型,因此被成为因果卷积。
1.1.2 膨胀卷积(Dilated Convolution)
单纯的因果卷积还是存在传统卷积神经网络的问题,即对时间的建模长度受限于卷积核大小的,如果要想抓去更长的依赖关系,就需要线性的堆叠很多的层。为了解决这个问题,研究人员提出了膨胀卷积。如下图 a 所示。
1.1.3 残差链接(Residual Connections)
上图 b、c 所示
残差链接被证明是训练深层网络的有效方法,它使得网络可以以跨层的方式传递信息。本文构建了一个残差块来代替一层的卷积。如上图所示,一个残差块包含两层的卷积和非线性映射,在每层中还加入了 WeightNorm 和 Dropout 来正则化网络。
1.1.4 小结分析
总体来讲,TCN 模型上的创新并不是很大,因果卷积和扩展卷积也并不是本论文提出来,本文主要是将 TCN 的结构梳理了一下,相比于 wavenet 中的结构,去掉了门机制,加入了残差结构,并在很多的序列问题上进行了实验。实验效果如下:
在多个任务上,都比标准的 LSTM、GRU 等效果好。
其余仿真结果:
优点 :
缺点:
参考链接:
https://blog.csdn.net/qq_27586341/article/details/90751794
1.2 模型训练与预测
1.2.1 数据准备
代码说明:
程序运行时将会自动进行训练,评估,测试。同时训练过程中会自动保存模型在指定的 save_dir 中。 如:
NOTE: 如需恢复模型训练,则 init_from_ckpt 只需指定到文件名即可,不需要添加文件尾缀。如--init_from_ckpt=checkpoints/0 即可,程序会自动加载模型参数 checkpoints/0.pdparams,也会自动加载优化器状态 checkpoints/0.pdopt。
部分结果展示:
1.2.3 模型预测
启动预测
测试案例可以在 output 文件下 test_1 中有 125000 待预测结果,
如果需要批量预测自行修改代码,data 部分。
1.3 模型结果对比
关于 RNN、TCN 自行修改 model 文件即可,参考/home/aistudio/SimNet/encoder.py 修改/home/aistudio/SimNet/model.py
CNN:
Data: ['淘宝上怎么用信用卡分期付款', '淘宝怎么分期付款,没有信用卡?'] Label: similar
Data: ['石榴是什么时候成熟的?', '成熟的石榴像什么?'] Label: similar
Data: ['为什么坐车玩手机会晕车', '为什么我坐车玩手机不晕车'] Label: similar
BOW:
Data: ['淘宝上怎么用信用卡分期付款', '淘宝怎么分期付款,没有信用卡?'] Label: similar
Data: ['石榴是什么时候成熟的?', '成熟的石榴像什么?'] Label: dissimilar
Data: ['为什么坐车玩手机会晕车', '为什么我坐车玩手机不晕车'] Label: similar
GRU:
Data: ['淘宝上怎么用信用卡分期付款', '淘宝怎么分期付款,没有信用卡?'] Label: similar
Data: ['石榴是什么时候成熟的?', '成熟的石榴像什么?'] Label: dissimilar
Data: ['为什么坐车玩手机会晕车', '为什么我坐车玩手机不晕车'] Label: similar
LSTM:
Data: ['淘宝上怎么用信用卡分期付款', '淘宝怎么分期付款,没有信用卡?'] Label: dissimilar
Data: ['石榴是什么时候成熟的?', '成熟的石榴像什么?'] Label: dissimilar
Data: ['为什么坐车玩手机会晕车', '为什么我坐车玩手机不晕车'] Label: similar
抽样结果还是显而易见的,越新的算法一般越优越。
1.4 篇幅有限更多程序代码请参考:
本项目链接:https://aistudio.baidu.com/aistudio/projectdetail/5423713?contributionType=1
2.无监督语义匹配模型 SimCSE
SimCSE 模型适合缺乏监督数据,但是又有大量无监督数据的匹配和检索场景。
相关原理参考项目:https://aistudio.baidu.com/aistudio/projectdetail/5398069?contributionType=1 第 4.2.4 节 SimSCE 2021.04
下面将分别使用 LCQMC、BQ_Corpus、STS-B、ATEC 这 4 个中文语义匹配数据集的训练集作为无监督训练集(仅使用文本信息,不使用 Label),并且在各自数据集上的验证集上进行效果评估,评估指标采用 SimCSE 论文中采用的 Spearman 相关系数,Spearman 相关系数越高,表示模型效果越好. 压缩包名称:senteval_cn
代码结构说明
2.1 模型训练与预测(LCQMC)
我们以中文文本匹配公开数据集 LCQMC 为示例数据集, 仅使用 LCQMC 的文本数据构造生成了无监督的训练数据。可以运行如下命令,开始模型训练并且在 LCQMC 的验证集上进行 Spearman 相关系数评估。
部分结果展示:
配置的参数:
infer_with_fc_pooler:可选,在预测阶段计算文本 embedding 表示的时候网络前向是否会过训练阶段最后一层的 fc; 建议关闭模型效果最好。
dup_rate: 可选,word reptition 的比例,默认是 0.32,根据论文 Word Repetition 比例采用 0.32 效果最佳。
scale:可选,在计算 cross_entropy loss 之前对 cosine 相似度进行缩放的因子;默认为 20。
dropout:可选,SimCSE 网络前向使用的 dropout 取值;默认 0.1。
save_dir:可选,保存训练模型的目录;默认保存在当前目录 checkpoints 文件夹下。
max_seq_length:可选,ERNIE-Gram 模型使用的最大序列长度,最大不能超过 512, 若出现显存不足,请适当调低这一参数;默认为 128。
batch_size:可选,批处理大小,请结合显存情况进行调整,若出现显存不足,请适当调低这一参数;默认为 32。
learning_rate:可选,Fine-tune 的最大学习率;默认为 5e-5。
weight_decay:可选,控制正则项力度的参数,用于防止过拟合,默认为 0.0。
epochs: 训练轮次,默认为 1。
warmup_proption:可选,学习率 warmup 策略的比例,如果 0.1,则学习率会在前 10%训练 step 的过程中从 0 慢慢增长到 learning_rate, 而后再缓慢衰减,默认为 0.0。
init_from_ckpt:可选,模型参数路径,热启动模型训练;默认为 None。
seed:可选,随机种子,默认为 1000.
device: 选用什么设备进行训练,可选 cpu 或 gpu。如使用 gpu 训练则参数 gpus 指定 GPU 卡号。
程序运行时将会自动进行训练,评估。同时训练过程中会自动保存模型在指定的 save_dir 中。 如:
NOTE:如需恢复模型训练,则可以设置 init_from_ckpt, 如 init_from_ckpt=checkpoints/model_100/model_state.pdparams。
我们用 LCQMC 的测试集作为预测数据, 测试数据示例如下:
2.2 评估效果
所有数据集可自行调整运行,超参数也可自行调优,下面展示部分结果:
中文语义匹配数据集效果
SimCSE + WR 策略在中文数据集训练的超参数设置如下:
3.无监督语义匹配模型 DiffCSE
相关原理参考项目:https://aistudio.baidu.com/aistudio/projectdetail/5398069?contributionType=1 第 4.2.9 节 DiffSCE 2022.04
相比于 SimCSE 模型,DiffCSE 模型会更关注语句之间的差异性,具有精确的向量表示能力。DiffCSE 模型同样适合缺乏监督数据,但是又有大量无监督数据的匹配和检索场景。
代码结构:
3.1 模型训练与预测 (LCQMC)
默认使用无监督模式进行训练 DiffCSE,模型训练数据的数据样例如下所示,每行表示一条训练样本:
3.2 模型训练与预测 (STS-B 数据集)
数据集以及相关指标参考:Chinese-STS-B 数据集,共包含 0 到 5 的 6 个标签,数字越大表示文本对越相似。在数据处理过程中,将标签为 5 的文本对当作匹配文本对(标记为 1),将标签为 0-2 的文本对当作不匹配文本对(标记为 0)。
https://zhuanlan.zhihu.com/p/388680608
https://zhuanlan.zhihu.com/p/454173790
部分展示
评测指标:斯皮尔曼等级相关系数 Spearman's rank correlation coefficient 把句子对分别输入模型编码得到 embedding 对后,计算 embedding 对的余弦距离。由于 STS-B 数据集是把句子对进行 0~5 的打分,所以评测指标采用斯皮尔曼等级相关系数。
3.3 评估效果
调优过程可以参考文章:
https://zhuanlan.zhihu.com/p/388680608
整体看出 Diffcse 优于 Simcse
4. 总结
文本匹配任务在自然语言处理中是非常重要的基础任务之一,一般研究两段文本之间的关系。有很多应用场景;如信息检索、问答系统、智能对话、文本鉴别、智能推荐、文本数据去重、文本相似度计算、自然语言推理、问答系统、信息检索等,但文本匹配或者说自然语言处理仍然存在很多难点。这些自然语言处理任务在很大程度上都可以抽象成文本匹配问题,比如信息检索可以归结为搜索词和文档资源的匹配,问答系统可以归结为问题和候选答案的匹配,复述问题可以归结为两个同义句的匹配。
本项目主要围绕着特定领域知识图谱(Domain-specific KnowledgeGraph:DKG)融合方案:文本匹配算法、知识融合学术界方案、知识融合业界落地方案、算法测评 KG 生产质量保障讲解了文本匹配算法的综述,从经典的传统模型到孪生神经网络“双塔模型”再到预训练模型以及有监督无监督联合模型,期间也涉及了近几年前沿的对比学习模型,之后提出了文本匹配技巧提升方案,最终给出了 DKG 的落地方案。这边主要以原理讲解和技术方案阐述为主,之后会慢慢把项目开源出来,一起共建 KG,从知识抽取到知识融合、知识推理、质量评估等争取走通完整的流程。
5.篇幅有限更多程序代码请参考:
本项目链接:https://aistudio.baidu.com/aistudio/projectdetail/5423713?contributionType=1
版权声明: 本文为 InfoQ 作者【汀丶】的原创文章。
原文链接:【http://xie.infoq.cn/article/55b03b86a7f40f14269d01d1d】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
评论