共计 9987 个字符,预计需要花费 25 分钟才能阅读完成。
0. 前言
文本匹配工作在自然语言解决中是十分重要的根底工作之一,个别钻研两段文本之间的关系。有很多利用场景;如信息检索、问答零碎、智能对话、文本甄别、智能举荐、文本数据去重、文本类似度计算、自然语言推理、问答零碎、信息检索等,但文本匹配或者说自然语言解决依然存在很多难点。这些自然语言解决工作在很大水平上都能够形象成文本匹配问题,比方信息检索能够归结为搜索词和文档资源的匹配,问答零碎能够归结为问题和候选答案的匹配,复述问题能够归结为两个同义句的匹配。
前置参考我的项目
1. 特定畛域常识图谱交融计划:技术常识前置【一】- 文本匹配算法
https://blog.csdn.net/sinat_39620217/article/details/128718537
2. 特定畛域常识图谱交融计划:文本匹配算法 Simnet、Simcse、Diffcse【二】
https://blog.csdn.net/sinat_39620217/article/details/128833057
3. 特定畛域常识图谱交融计划:文本匹配算法之预训练 ERNIE-Gram 单塔模型【三】
https://aistudio.baidu.com/aistudio/projectdetail/5456683?contributionType=1
NLP 常识图谱我的项目合集(信息抽取、文本分类、图神经网络、性能优化等)
https://blog.csdn.net/sinat_39620217/article/details/128805154
2023 计算机领域顶会以及 ACL 自然语言解决(NLP)钻研子方向汇总
https://blog.csdn.net/sinat_39620217/article/details/128897539
本我的项目链接:https://aistudio.baidu.com/aistudio/projectdetail/5479941?contributionType=1
1. 特定畛域常识图谱交融计划:学以致用千言 - 问题匹配鲁棒性评测较量验证
本较量重点关注问题匹配模型在实在利用场景中的鲁棒性,多维度、细粒度检测模型的鲁棒性,以期推动语义匹配技术的倒退。
https://aistudio.baidu.com/aistudio/competition/detail/130/0/leaderboard
1.1. 赛题背景
问题匹配(Question Matching)工作旨在判断两个天然问句之间的语义是否等价,是自然语言解决畛域一个重要钻研方向。问题匹配同时也具备很高的商业价值,在信息检索、智能客服等畛域施展重要作用。
近年来,神经网络模型尽管在一些规范的问题匹配评测汇合上曾经获得与人类相仿甚至超过人类的准确性,但在解决实在利用场景问题时,性能大幅降落,在简略(人类很容易判断)的问题上无奈做出正确判断(如下图),影响产品体验的同时也会造成相应的经济损失。
以后大多数问题匹配工作采纳繁多指标,在同散布的测试集上评测模型的好坏,这种评测形式可能夸张了模型能力,并且不足对模型鲁棒性的细粒度优劣势评估。本次评测关注问题匹配模型在实在利用场景中的鲁棒性,从词汇了解、句法结构、错别字、口语化、对话了解五个维度检测模型的能力,从而发现模型的不足之处,推动语义匹配技术的倒退。本次比赛次要基于千言数据集,采纳的数据集包含 哈尔滨工业大学(深圳)的 LCQMC 和 BQ 数据集、OPPO 的小布对话短文本数据集以及百度的 DuQM 数据集,冀望从多维度、多畛域登程,全面评估模型的鲁棒性,进一步晋升问题匹配技术的钻研程度。
1.2 数据背景及阐明
本次评测的问题匹配数据集旨在掂量问题匹配模型的鲁棒性,通过建设细粒度的评测体系,系统地评估模型能力的不足之处。本次的评测体系蕴含了词汇、句法、语用 3 大维度和 14 个细粒度的能力,具体分类体系如下图。本次评测数据来自问答搜寻、问答型对话场景的实在问题,所有评测样本通过了人工筛选和语义匹配标注。
Corpus Category Subcategory Perturbation Example Label
DuQM Lexical Feature POS insert n. 高血压吃什么好 / 高血压孕妇吃什么好 N
insert v. 贵州旅游景点 / 贵州旅游景点预约 N
insert adj. 吃芒果上火吗 / 吃青芒果上火吗 N
insert adv. 为什么打嗝 / 为什么始终打嗝 N
replace n. 脂肪肝能吃猪肝吗 / 脂肪肝能吃猪肉吗 N
replace v. 下蹲膝盖疼 / 下跪膝盖疼 N
replace adj. 喉咙哑怎么办 / 喉咙疼怎么办 N
replace adv. 总是胸闷喘不上气 / 偶然胸闷喘不上气 N
replace num. 血压 130/100 高吗 / 血压 120/110 高吗 N
replace quantifier 一枝花多少钱 / 一束花多少钱 N
replace phrase 如何进步本人的记忆力 / 如何减少本人的实力 N
Named Entity replace loc. 山西春节风俗 / 陕西春节风俗 N
replace org. 暨南大学分数线 / 济南大学分数线 N
replace person 王健林哪里人 / 王福林哪里人 N
replace product iphone 6 多少钱 / iphone6x 多少钱 N
Synonym replace n. 吃猕猴桃有什么效用 / 吃奇异果有什么效用 Y
replace v. 如何预防冻疮 / 如何避免冻疮 Y
replace adj. 膝盖冷什么起因 / 膝盖冰凉什么起因 Y
replace adv. 虾不能和什么一起吃 / 虾不能和什么同时吃 Y
Antonym replace adj. 只吃蔬菜会让皮肤变好吗 / 只吃蔬菜会让皮肤变差吗 N
Negation negate v. 为什么宝宝哭 / 为什么宝宝不哭 N
negate adj. 为什么苹果是红的 / 为什么苹果不是红的 N
neg.+antonym 冲动怎么办 / 无奈平静怎么办 Y
Temporal insert 2007 年的修仙小说 / 2007 年以前的修仙小说 N
replace 我在吃饭 / 我刚刚在吃饭 N
Syntactic Feature Symmetry swap 鱼和鸡蛋能一起吃吗 / 鸡蛋和鱼能一起吃吗 Y
Asymmetry swap 北京飞上海航班 / 上海飞北京航班 N
Negative Asymmetry swap + negate 男人比女人更高吗 / 女人比男人更矮吗 Y
Voice insert passive word 我撞了他人怎么办 / 我被他人撞了怎么办 N
Pragmatic Feature Misspelling replace 小孩上吐下泻 / 小孩上吐下泄 Y
Discourse Particle(Simple) insert or replace 人为什么做梦 / 那么人为什么做梦 Y
Discourse Particle(Complex) insert or replace 明孝陵景区怎么走 / 嗨 你晓得明孝陵风景区怎么走吗 Y
OPPO Conversational Semantics - 是学生还是小姐猜一猜我 / 猜猜我是女生还是男生 Y
训练集
蕴含四个文本类似度数据集,别离为哈尔滨工业大学(深圳)的 LCQMC、BQ Corpus、谷歌 PAWS 数据集以及 OPPO 小布对话短文本数据集。4 个数据集的工作统一,都是判断两段文本在语义上是否匹配的二分类工作。
测试集
- 百度 DuQM 测试集:通过对搜寻问答场景中的原始问题进行替换、插入等操作,并过滤掉实在场景中未呈现过的问题,保障扰动后问题的自然性和流畅性,而后进行人工筛选和语义匹配标注,失去最终的评测集。
- OPPO 小布对话短文本测试集:采样自 OPPO 语音助手小布的实在对话场景数据,进行人工筛选和语义匹配标注,失去最终的评测集。
数据统计信息
数据用处 | 数据集名称 | 内容 | 训练集大小 | 开发集大小 | 测试集大小 |
---|---|---|---|---|---|
训练集(train) | LCQMC | (问题对, 标签) | 238,766 | 8,802 | 12,500 |
训练集(train) | BQ | (问题对, 标签) | 100,000 | 10,000 | 10,000 |
训练集(train) | OPPO 小布助手短文本对话 | (问题对, 标签) | 167,174 | 10,000 – | |
训练集(train) | PAWS | (问题对, 标签) | 49,401 | 2000 | 2000 |
测试集(test) | DuQM、OPPO 小布助手短文本对话 | (问题对) | – | – | 100,000 |
- 问题对:问题以中文为主,可能带有大量英文单词,采纳 UTF- 8 编码,未分词,两个问题之间应用 \t 宰割;
- 标签: 标签为 0 或 1,其中 1 代表问题对语义相匹配,0 则代表不匹配,标签与问题对之间也用 \t 宰割;
DuQM 具体介绍,Github 地址: https://github.com/baidu/DuRe…
1.3 赛题工作
给定一组问题对,判断问题对在语义上是否匹配(等价),例如:
类型 | 问题 1 | 问题 2 | 标签(Label) |
---|---|---|---|
匹配 | 胎儿什么时候入盆 | 胚胎什么时候入盆 | 1 |
不匹配 | 人民币怎么换港币 | 港币怎么换 人民币 | 0 |
评估指标
本次评测采纳的评估指标为宏均匀准确率(Macro-Accuracy),即先求得每个维度(词汇了解、句法结构、错别字、口语化、对话了解)的准确率(Accuracy),而后对所有维度的准确率求均匀(Macro-Averaging),具体评分如下:
2. 数据筹备
本我的项目应用比赛提供的 LCQMC、BQ、OPPO、paws 这 4 个数据集的训练汇合集作为训练集,应用这 4 个数据集的验证汇合集作为验证集。
运行如下命令生成本我的项目所应用的训练集和验证集,在参赛过程中能够摸索采取其它的训练集和验证集组合,不须要和基线计划完全一致。
# 合并所有数据集
!cat /home/aistudio/dataset/lcqmc/train.tsv /home/aistudio/dataset/BQ/train /home/aistudio/dataset/paws-x-zh/train.tsv /home/aistudio/dataset/oppo/train > train.txt
!cat /home/aistudio/dataset/lcqmc/dev.tsv /home/aistudio/dataset/BQ/dev /home/aistudio/dataset/paws-x-zh/dev.tsv /home/aistudio/dataset/oppo/dev > dev.txt
#查看合并后数据
import pandas as pd
dev = pd.read_csv('/home/aistudio/dev.txt', sep = '\t', header=None)
# dev.head()
dev.info
<bound method DataFrame.info of 0 1 2
0 开初婚未育证实怎么弄?初婚未育状况证实怎么开?1
1 谁晓得她是网络美女吗?恋情这杯酒谁喝都会醉是什么歌 0
2 人和畜生的区别是什么?人与畜生的区别是什么!1
3 男孩喝女孩的尿的故事 怎么才晓得是生男孩还是女孩 0
4 这种图片是用什么软件制作的?这种图片制作是用什么软件呢?1
... ... ... ..
30797 能够定制充电提示音吗 定制充电提示音 0
30798 有未读信息吗点按两次即可激活 这个好消息 0
30799 丫鸭梦想家 关上丫鸭梦想家 0
30800 我要一口一口吃掉你 我要吃掉你 1
30801 你妈妈叫什么名字啊 我妈妈叫什么名字 0
[30802 rows x 3 columns]>
#报错:ParserError: Error tokenizing data. C error: Expected 1 fields in line 28591, saw 2
#解决办法:退出 error_bad_lines=False
#如呈现报错是 BQ 数据集导致的
train = pd.read_csv('/home/aistudio/train.txt',sep = '\t',header=None,error_bad_lines=False)
train.info
# train.head()
<bound method DataFrame.info of 0 1 2
0 喜爱打篮球的男生喜爱什么样的女生 爱打篮球的男生喜爱什么样的女生 1
1 我手机丢了,我想换个手机 我想买个新手机,求举荐 1
2 大家感觉她难看吗 大家感觉跑男难看吗?0
3 求秋色之空漫画选集 求秋色之空选集漫画 1
4 早晨睡觉带着耳机听音乐有什么坏处吗?孕妇能够戴耳机听音乐吗? 0
... ... ... ..
555335 手机画质不分明了怎么办 手机画质含糊怎么办 1
555336 我条件不行 我问一下都不行吗 0
555337 看我帅不帅 请问我长得帅吗 1
555338 什么本事最大成语 一个人本事很大打一成语的答案 0
555339 手机铃声设置 设置手机电话铃声 0
[555340 rows x 3 columns]>
3. 模型训练预测
代码构造阐明:
├── model.py # 匹配模型组网
├── data.py # 训练样本的数据读取、转换逻辑
├── predict.py # 模型预测脚本,输入测试集的预测后果: 0,1
└── train.py # 模型训练评估
!unset CUDA_VISIBLE_DEVICES
!python -u -m paddle.distributed.launch --gpus "0" train.py \
--train_set train.txt \
--dev_set dev.txt \
--device gpu \
--eval_step 500 \
--save_step 1000 \
--save_dir ./checkpoints \
--train_batch_size 128 \
--learning_rate 2E-5 \
--rdrop_coef 0.0 \
--epochs 3 \
--warmup_proportion 0.1
# 可反对配置的参数:# train_set: 训练集的文件。# dev_set:验证集数据文件。# rdrop_coef:可选,管制 R-Drop 策略正则化 KL-Loss 的系数;默认为 0.0, 即不应用 R-Drop 策略。# train_batch_size:可选,批处理大小,请联合显存状况进行调整,若呈现显存有余,请适当调低这一参数;默认为 32。# learning_rate:可选,Fine-tune 的最大学习率;默认为 5e-5。# weight_decay:可选,管制正则项力度的参数,用于避免过拟合,默认为 0.0。# epochs: 训练轮次,默认为 3。# 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 中。
局部后果展现:
global step 12880, epoch: 3, batch: 4202, loss: 0.1993, ce_loss: 0.1993., kl_loss: 0.0000, accu: 0.9204, speed: 12.02 step/s
global step 12890, epoch: 3, batch: 4212, loss: 0.2516, ce_loss: 0.2516., kl_loss: 0.0000, accu: 0.9202, speed: 12.56 step/s
global step 12900, epoch: 3, batch: 4222, loss: 0.1872, ce_loss: 0.1872., kl_loss: 0.0000, accu: 0.9203, speed: 12.03 step/s
global step 12910, epoch: 3, batch: 4232, loss: 0.1950, ce_loss: 0.1950., kl_loss: 0.0000, accu: 0.9206, speed: 12.16 step/s
global step 12920, epoch: 3, batch: 4242, loss: 0.2245, ce_loss: 0.2245., kl_loss: 0.0000, accu: 0.9205, speed: 12.35 step/s
global step 12930, epoch: 3, batch: 4252, loss: 0.2398, ce_loss: 0.2398., kl_loss: 0.0000, accu: 0.9205, speed: 12.20 step/s
global step 12940, epoch: 3, batch: 4262, loss: 0.2234, ce_loss: 0.2234., kl_loss: 0.0000, accu: 0.9202, speed: 11.87 step/s
global step 12950, epoch: 3, batch: 4272, loss: 0.3007, ce_loss: 0.3007., kl_loss: 0.0000, accu: 0.9202, speed: 11.91 step/s
global step 12960, epoch: 3, batch: 4282, loss: 0.3511, ce_loss: 0.3511., kl_loss: 0.0000, accu: 0.9202, speed: 11.91 step/s
global step 12970, epoch: 3, batch: 4292, loss: 0.1860, ce_loss: 0.1860., kl_loss: 0.0000, accu: 0.9205, speed: 11.51 step/s
global step 12980, epoch: 3, batch: 4302, loss: 0.1380, ce_loss: 0.1380., kl_loss: 0.0000, accu: 0.9204, speed: 11.80 step/s
global step 12990, epoch: 3, batch: 4312, loss: 0.1749, ce_loss: 0.1749., kl_loss: 0.0000, accu: 0.9203, speed: 11.86 step/s
global step 13000, epoch: 3, batch: 4322, loss: 0.1800, ce_loss: 0.1800., kl_loss: 0.0000, accu: 0.9204, speed: 11.89 step/s
dev_loss: 0.33451, accuracy: 0.87163, total_num:30802
训练过程中每一次在验证集上进行评估之后,程序会依据验证集的评估指标是否优于之前最优的模型指标来决定是否存储以后模型,如果优于之前最优的验证集指标则会存储以后模型,否则则不存储,因而训练过程完结之后,模型存储门路下 step 数最大的模型则对应验证集指标最高的模型, 个别咱们抉择验证集指标最高的模型进行预测。
checkpoints/
├── model_10000
│ ├── model_state.pdparams
│ ├── tokenizer_config.json
│ └── vocab.txt
└── ...
# 训练实现后,在指定的 checkpoints 门路下会主动存储在验证集评估指标最高的模型,运行如下命令开始生成预测后果:
!unset CUDA_VISIBLE_DEVICES
!python -u \
predict.py \
--device gpu \
--params_path "./checkpoints_new2/model_14600/model_state.pdparams" \
--batch_size 128 \
--input_file "/home/aistudio/dataset/test.tsv" \
--result_file "predict_result1"
局部后果展现:
0
1
1
0
0
0
0
0
0
1
4. 总结
4.1 基线评测成果
本我的项目别离基于 ERNIE-1.0、Bert-base-chinese、ERNIE-Gram 3 个中文预训练模型训练了单塔 Point-wise 的匹配模型, 基于 ERNIE-Gram 的模型效果显著优于其它 2 个预训练模型。
此外,在 ERNIE-Gram 模型根底上咱们也对最新的正则化策略 R-Drop 进行了相干评测, R-Drop 策略的核心思想是针对同 1 个训练样本过屡次前向网络失去的输入加上正则化的 Loss 束缚。
官网开源了成果最好的 2 个策略对应模型的 checkpoint 作为本次较量的基线计划: 基于 ERNIE-Gram 预训练模型 R-Drop 系数别离为 0.0 和 0.1 的 2 个模型, 用户能够下载相应的模型来复现咱们的评测后果。
模型 | rdrop_coef | dev acc | test-A acc | test-B acc | learning_rate | epochs | warmup_proportion |
---|---|---|---|---|---|---|---|
ernie-1.0-base | 0.0 | 86.96 | 76.20 | 77.50 | 5E-5 | 5 | 0 |
bert-base-chinese | 0.0 | 86.93 | 76.90 | 77.60 | 5E-5 | 5 | 0 |
ernie-gram-zh | 0.0 | 87.66 | 80.80 | 81.20 | 5E-5 | 5 | 0 |
ernie-gram-zh | 0.1 | 87.91 | 80.20 | 80.80 | 5E-5 | 5 | 0 |
ernie-gram-zh | 0.2 | 87.47 | 80.10 | 81.00 | 5E-5 | 5 | 0 |
4.2 最终后果
模型 | rdrop_coef | dev acc | testacc | learning_rate | epochs | warmup_proportion |
---|---|---|---|---|---|---|
ernie-gram-zh | 0 | 87.16 | 73.56 | 2E-5 | 3 | 0.1 |
ernie-gram-zh | 0.05 | 87.84 | 75.98 | 5E-5 | 5 | 0.1 |
ernie-gram-zh | 0.05 | 87.21 | 75.92 | 5E-5 | 5 | 0 |
第一次后果:
发现问题:1. 数据集切割 2. 模型欠拟合 3. 超参数调优(epochs、rdrop_coef、warmup_proption、weight_decay)等进行改良
第二次后果:
依据上表仅简略对参数和数据集进行重新组合失去的成果。能够显著看出模型晋升空间有很大,最次要起因是训练轮数以及数据集调配导致模型泛化能欠佳,须要大家进行粗疏调优
4.3 相干倡议
举荐:
能够理解一些可解释学习相干常识,找出 badcase,对模型进一步优化。如下图:
能够看到榜单上后果都是 90+,这里我狐疑是测试数据标注后泄露导致,在同散布的测试集上评测模型的好坏,这种评测形式可能夸张了模型能力,并且不足对模型鲁棒性的细粒度优劣势评估。
如有谬误还请斧正。
5. 特定畛域常识图谱 (DKG) 交融计划举荐(重点!)
在后面技术常识下能够看看后续的理论业务落地计划和学术计划
对于图神经网络的常识交融技术学习参考上面链接:[PGL 图学习我的项目合集 & 数据集分享 & 技术演绎业务落地技巧[系列十]](https://aistudio.baidu.com/ai…)
从入门常识到经典图算法以及进阶图算法等,自行查阅食用!
文章篇幅无限请参考专栏按需查阅:NLP 常识图谱相干技术业务落地计划和码源
5.1 特定畛域常识图谱常识交融计划(实体对齐):优酷畛域常识图谱为例
计划链接:https://blog.csdn.net/sinat_39620217/article/details/128614951
5.2 特定畛域常识图谱常识交融计划(实体对齐):娱乐常识图谱构建之人物实体对齐
计划链接:https://blog.csdn.net/sinat_39620217/article/details/128673963
5.3 特定畛域常识图谱常识交融计划(实体对齐):商品常识图谱技术实战
计划链接:https://blog.csdn.net/sinat_39620217/article/details/128674429
5.4 特定畛域常识图谱常识交融计划(实体对齐):基于图神经网络的商品异构实体表征摸索
计划链接:https://blog.csdn.net/sinat_39620217/article/details/128674929
5.5 特定畛域常识图谱常识交融计划(实体对齐)论文合集
计划链接:https://blog.csdn.net/sinat_39620217/article/details/128675199
论文材料链接:两份内容不雷同,且依照序号从小到大重要性顺次递加
常识图谱实体对齐材料论文参考(PDF)+ 实体对齐计划 + 特定畛域常识图谱常识交融计划(实体对齐)
常识图谱实体对齐材料论文参考(CAJ)+ 实体对齐计划 + 特定畛域常识图谱常识交融计划(实体对齐)
5.6 常识交融算法测试计划(常识生产品质保障)
计划链接:https://blog.csdn.net/sinat_39620217/article/details/128675698