山东做网站建设公司排名,中文域名做的网站,百度惠生活商家怎么入驻,个人网站模块文本匹配任务在自然语言处理领域中是非常重要的基础任务#xff0c;一般用于研究两段文本之间的关系。文本匹配任务存在很多应用场景#xff0c;如信息检索、问答系统、智能对话、文本鉴别、智能推荐、文本数据去重、文本相似度计算、自然语言推理、问答系统、信息检索等一般用于研究两段文本之间的关系。文本匹配任务存在很多应用场景如信息检索、问答系统、智能对话、文本鉴别、智能推荐、文本数据去重、文本相似度计算、自然语言推理、问答系统、信息检索等这些自然语言处理任务在很大程度上都可以抽象成文本匹配问题比如信息检索可以归结为搜索词和文档资源的匹配问答系统可以归结为问题和候选答案的匹配复述问题可以归结为两个同义句的匹配。 而在知识融合过程中的关键技术是实体对齐又被称为实体匹配其旨在推断来自不同数据集合中的不同实体是否映射到物理世界中同一对象的处理过程。实体对齐的终极目标是将多源知识库中的实体建立映射关系也正因如此文本匹配算法可以在知识融合过程中针对非结构化文本进行较好的语义对齐建立映射关系具体方案如下图所示。 在粗选阶段我们需要根据知识库寻找相似实体对通过精准匹配和部分匹配的方式进行实体簇的粗选。其中精准匹配主要采用同名召回、同音召回、别名召回三类策略。部分匹配主要采用jaccard距离等方法构建倒排根据阈值进行挑选。 在精排阶段我们根据粗选出来的实体对构建Pair-wise类特征进行精细算分。根据特征的种类可以划分为标签、属性、非结构化文本三类特征。在实际对齐任务中头尾部的实体经常缺失各种关键属性难以判断实体是否可以对齐此时就利用非结构化文本提供关键信息这里就可以通过使用飞桨ERNIE-Gram模型将根据计算的三类特征进行实体对齐。由于各领域的schema不同涉及到的属性类特征也不尽相同。故根据对数据的分析为schema相差较大的领域设计不同的GBDT模型最终完成对齐。 本文主要讲解精排阶段的文本匹配算法更多方案和技术细节请参考下述项目。 项目链接 https://aistudio.baidu.com/aistudio/projectdetail/5456683?channelType0channel0 项目合集 https://aistudio.baidu.com/aistudio/projectdetail/5427356?contributionType1 01 融合方案操作步骤 Part-1 环境版本要求 环境安装需根据Python和飞桨框架的版本要求进行选择。 Python3 版本要求 python3.7及以上版本参考 https://www.python.org/ 飞桨框架版本要求 飞桨框架2.0版本参考 https://www.paddlepaddle.org.cn/documentation/docs/zh/install/pip/macos-pip.html 飞桨环境的安装 需首先保证Python和pip是64bit且处理器架构为x86_64或称作x64、Intel 64、AMD64。目前飞桨暂不支持arm64架构mac M1除外飞桨已支持Mac M1 芯片。 Part-2 数据集简介 LCQMC[1]是百度知道领域的中文问题匹配数据集以解决中文领域大规模问题匹配。该数据集从百度知道的不同领域用户问题中抽取构建数据。部分数据集展示如下 西安下雪了是不是很冷啊? 西安的天气怎么样啊还在下雪吗 0 第一次去见女朋友父母该如何表现 第一次去见家长该怎么做 0 猪的护心肉怎么切 猪的护心肉怎么吃 0 显卡驱动安装不了为什么 显卡驱动安装不了怎么回事 1 一只蜜蜂落在日历上打一成语 一只蜜蜂停在日历上猜一成语 1 Part-3 模型情况 在ERNIE-Gram模型[2]发布以前学界工作主要集中在将BERT的掩码语言建模MLM的目标从Mask单个标记扩展到N个标记的连续序列但这种连续屏蔽方法忽略了对粗粒度语言信息的内部依赖性和相互关系的建模。作为一种改进方法ERNIE-Gram采用了一种显式n-gram掩码方法以加强对预训练中粗粒度信息的整合。在ERNIE-Gram中n-grams被Mask并直接使用明确的n-gram序列号而不是n个标记的连续序列进行预测。此外ERNIE-Gram采用了一个生成器模型对可信的n-gram序列号进行采样作为可选的n-gram掩码并以粗粒度和细粒度的方式进行预测以实现全面的n-gram预测和关系建模。在论文中实验表明ERNIE-Gram在很大程度上优于XLNet和RoBERTa等预训练模型。其中掩码的流程见下图所示。 ERNIE-Gram模型充分地将粗粒度语言信息纳入预训练进行了全面的n-gram预测和关系建模消除之前连续掩蔽策略的局限性进一步增强了语义n-gram的学习。n-gram关系建模的详细架构如下图所示子图(b)中是一个n-gram抽样的例子其中虚线框代表抽样模块绿色的文本是原始n-gram蓝色的斜体文本是抽样的n-gram。本文不一一展开更多算法原理和技术细节请参考原论文。 为让同学们快速上手本项目使用语义匹配数据集LCQMC作为训练集基于ERNIE-Gram预训练模型训练了单塔Point-wise语义匹配模型用户可以直接基于这个模型对文本对进行语义匹配的二分类任务。在文本匹配任务数据的每一个样本通常由两个文本组成query和title。类别形式为0或10表示query与title不匹配1表示匹配。同时考虑到在不同应用场景下的需求下面也将简单讲解一下不同类型的语义匹配模型和应用场景。 基于单塔Point-wise范式的语义匹配模型Ernie_Matching模型精度高、计算复杂度高, 适合直接进行语义匹配二分类的应用场景。基于单塔Pair-wise范式的语义匹配模型Ernie_Matching模型精度高、计算复杂度高对文本相似度大小的序关系建模能力更强适合将相似度特征作为上层排序模块输入特征的应用场景。基于双塔Point-Wise范式的语义匹配模型计算效率更高适合对延时要求高、根据语义相似度进行粗排的应用场景。 Part-4 模型训练与预测 以中文文本匹配公开数据集LCQMC为示例数据集可在训练集train.tsv上进行单塔 Point-wise 模型训练并在开发集dev.tsv验证。 模型训练 %cd ERNIE_Gram
!unset CUDA_VISIBLE_DEVICES
!python -u -m paddle.distributed.launch --gpus 0 train_pointwise.py \--device gpu \--save_dir ./checkpoints \--batch_size 32 \--learning_rate 2E-5\--save_step 1000 \--eval_step 200 \--epochs 3 # save_dir可选保存训练模型的目录默认保存在当前目录checkpoints文件夹下。
# max_seq_length可选ERNIE-Gram 模型使用的最大序列长度最大不能超过512, 若出现显存不足请适当调低这一参数默认为128。
# 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卡号。 预测结果部分展示。 global step 3920, epoch: 1, batch: 3920, loss: 0.13577, accu: 0.92109, speed: 22.31 step/s
global step 3930, epoch: 1, batch: 3930, loss: 0.15333, accu: 0.91971, speed: 18.52 step/s
global step 3940, epoch: 1, batch: 3940, loss: 0.10362, accu: 0.92031, speed: 21.68 step/s
global step 3950, epoch: 1, batch: 3950, loss: 0.14692, accu: 0.92146, speed: 21.74 step/s
global step 3960, epoch: 1, batch: 3960, loss: 0.17472, accu: 0.92168, speed: 19.54 step/s
global step 3970, epoch: 1, batch: 3970, loss: 0.31994, accu: 0.91967, speed: 21.06 step/s
global step 3980, epoch: 1, batch: 3980, loss: 0.17073, accu: 0.91875, speed: 21.22 step/s
global step 3990, epoch: 1, batch: 3990, loss: 0.14955, accu: 0.91891, speed: 21.51 step/s
global step 4000, epoch: 1, batch: 4000, loss: 0.13987, accu: 0.91922, speed: 21.74 step/s
eval dev loss: 0.30795, accu: 0.87253 如果想要使用其他预训练模型如ERNIE、BERT、RoBERTa等只需更换model和tokenizer即可。 # 使用 ERNIE-3.0-medium-zh 预训练模型
model AutoModel.from_pretrained(ernie-3.0-medium-zh)
tokenizer AutoTokenizer.from_pretrained(ernie-3.0-medium-zh)# 使用 ERNIE 预训练模型
# ernie-1.0
#model AutoModel.from_pretrained(ernie-1.0-base-zh))
#tokenizer AutoTokenizer.from_pretrained(ernie-1.0-base-zh)# ernie-tiny
# model AutoModel.from_pretrained(ernie-tiny))
# tokenizer AutoTokenizer.from_pretrained(ernie-tiny)# 使用 BERT 预训练模型
# bert-base-chinese
# model AutoModel.from_pretrained(bert-base-chinese)
# tokenizer AutoTokenizer.from_pretrained(bert-base-chinese)# bert-wwm-chinese
# model AutoModel.from_pretrained(bert-wwm-chinese)
# tokenizer AutoTokenizer.from_pretrained(bert-wwm-chinese)# bert-wwm-ext-chinese
# model AutoModel.from_pretrained(bert-wwm-ext-chinese)
# tokenizer AutoTokenizer.from_pretrained(bert-wwm-ext-chinese)# 使用 RoBERTa 预训练模型
# roberta-wwm-ext
# model AutoModel.from_pretrained(roberta-wwm-ext)
# tokenizer AutoTokenizer.from_pretrained(roberta-wwm-ext)# roberta-wwm-ext
# model AutoModel.from_pretrained(roberta-wwm-ext-large)
# tokenizer AutoTokenizer.from_pretrained(roberta-wwm-ext-large) NOTE如需恢复模型训练则可以设置init_from_ckpt如 init_from_ckptcheckpoints/model_100/model_state.pdparams。如需使用ernie-tiny模型则需提前先安装sentencepiece依赖如pip install sentencepiece。 模型预测 !unset CUDA_VISIBLE_DEVICES
!python -u -m paddle.distributed.launch --gpus 0 \predict_pointwise.py \--device gpu \--params_path ./checkpoints/model_4000/model_state.pdparams\--batch_size 128 \--max_seq_length 64 \--input_file /home/aistudio/LCQMC/test.tsv 预测结果部分展示 {query: 这张图是哪儿, title: 这张图谁有, pred_label: 0}
{query: 这是什么水果, title: 这是什么水果。怎么吃, pred_label: 1}
{query: 下巴长痘痘疼是什么原因, title: 下巴长痘痘是什么原因, pred_label: 1}
{query: 北京的市花是什么, title: 北京的市花是什么花, pred_label: 1}
{query: 这个小男孩叫什么, title: 什么的捡鱼的小男孩, pred_label: 0}
{query: 蓝牙耳机什么牌子最好的, title: 什么牌子的蓝牙耳机最好用, pred_label: 1}
{query: 湖南卫视我们约会吧中间的歌曲是什么, title: 我们约会吧约会成功歌曲是什么, pred_label: 0}
{query: 什么鞋子比较好, title: 配什么鞋子比较好…, pred_label: 1}
{query: 怎么把词典下载到手机上啊, title: 怎么把牛津高阶英汉双解词典下载到手机词典上啊, pred_label: 0}
{query: 话费充值哪里便宜, title: 哪里充值(话费)最便宜, pred_label: 1}
{query: 怎样下载歌曲到手机, title: 怎么往手机上下载歌曲, pred_label: 1}
{query: 苹果手机丢了如何找回, title: 苹果手机掉了怎么找回, pred_label: 1}
{query: 考试怎么考高分, title: 考试如何考高分, pred_label: 1} 在深度学习模型构建上飞桨框架支持动态图编程和静态图编程两种方式两种方式下代码编写和执行方式均存在差异。动态图编程体验更佳、更易调试但是因为采用Python实时执行的方式开销较大在性能方面与 C 有一定差距。静态图调试难度大但是将前端Python编写的神经网络预定义为Program描述转到C端重新解析执行从而脱离了对Python的依赖往往执行性能更佳并且预先拥有完整网络结构也更利于全局优化。 同时你可以进行基于静态图的部署预测和模型导出。使用动态图训练结束之后可以使用静态图导出工具export_model.py将动态图参数导出成静态图参数。实现方式可参考如下指令 !python export_model.py --params_path checkpoints/model_4000/model_state.pdparams --output_path./output
# 其中params_path是指动态图训练保存的参数路径output_path是指静态图参数导出路径。 # 预测部署
# 导出静态图模型之后可以基于静态图模型进行预测deploy/python/predict.py 文件提供了静态图预测示例。执行如下命令
!python deploy/predict.py --model_dir ./output 02 结论 Part-1 项目小结 该项目中还涉及部分对无监督模型以及有监督模型的对比内容如下图所示。 结论如下 SimCSE模型适合缺乏监督数据但是又有大量无监督数据的匹配和检索场景。 相比于SimCSE模型DiffCSE模型会更关注语句之间的差异性具有精确的向量表示能力。DiffCSE模型同样适合缺乏监督数据又有大量无监督数据的匹配和检索场景。 明显看到有监督模型中ERNIE-Gram比之前所有模型性能的优秀。 受篇幅限制影响这里不详细展开模型的对比详情感兴趣的同学可以点击下方链接详细了解。同时欢迎同学们在飞桨AI Studio平台发挥自己的创造力和想象力。 项目链接 https://aistudio.baidu.com/aistudio/projectdetail/5456683?channelType0channel0 项目合集 https://aistudio.baidu.com/aistudio/projectdetail/5427356?contributionType1 Part-2 未来展望 本项目主要围绕着特定领域知识图谱(Domain-specific Knowledge GraphDKG)融合方案中的一环讲解了基于ERNIE-Garm的文本匹配算法。希望看到这篇项目的开发者们能够在此基础上共同努力共建知识图谱领域走通知识抽取、知识融合、知识推理和质量评估的完整流程。 参考文献 [1] Xin Liu, Qingcai Chen, Chong Deng, Huajun Zeng, Jing Chen, Dongfang Li, Buzhou Tang, LCQMC: A Large-scale Chinese Question Matching Corpus,COLING2018. [2] Xiao, Dongling, Yu-Kun Li, Han Zhang, Yu Sun, Hao Tian, Hua Wu, and Haifeng Wang. “ERNIE-Gram: Pre-Training with Explicitly N-Gram Masked Language Modeling for Natural Language Understanding.”ArXiv:2010.12148 [Cs].