特定畛域常识图谱交融计划:文本匹配算法之预训练模型SimBert、ERNIE-Gram
文本匹配工作在自然语言解决中是十分重要的根底工作之一,个别钻研两段文本之间的关系。有很多利用场景;如信息检索、问答零碎、智能对话、文本甄别、智能举荐、文本数据去重、文本类似度计算、自然语言推理、问答零碎、信息检索等,但文本匹配或者说自然语言解决依然存在很多难点。这些自然语言解决工作在很大水平上都能够形象成文本匹配问题,比方信息检索能够归结为搜索词和文档资源的匹配,问答零碎能够归结为问题和候选答案的匹配,复述问题能够归结为两个同义句的匹配。
0.前言:特定畛域常识图谱交融计划
本我的项目次要围绕着特定畛域常识图谱(Domain-specific KnowledgeGraph:DKG)交融计划:文本匹配算法、常识交融学术界计划、常识交融业界落地计划、算法测评KG生产品质保障解说了文本匹配算法的综述,从经典的传统模型到孪生神经网络“双塔模型”再到预训练模型以及有监督无监督联结模型,期间也波及了近几年前沿的比照学习模型,之后提出了文本匹配技巧晋升计划,最终给出了DKG的落地计划。这边次要以原理解说和技术计划论述为主,之后会缓缓把我的项目开源进去,一起共建KG,从常识抽取到常识交融、常识推理、品质评估等争取走通残缺的流程。
0.1 前置参考我的项目
前置参考我的项目
1.特定畛域常识图谱交融计划:技术常识前置【一】-文本匹配算法
https://blog.csdn.net/sinat_39620217/article/details/128718537
2.特定畛域常识图谱交融计划:文本匹配算法Simnet、Simcse、Diffcse【二】
https://blog.csdn.net/sinat_39620217/article/details/128833057
3.特定畛域常识图谱交融计划:文本匹配算法之预训练Simbert、ERNIE-Gram单塔模型等诸多模型【三】
https://blog.csdn.net/sinat_39620217/article/details/129026570
4.特定畛域常识图谱交融计划:学以致用-问题匹配鲁棒性评测较量验证【四】
https://blog.csdn.net/sinat_39620217/article/details/129026193
NLP常识图谱我的项目合集(信息抽取、文本分类、图神经网络、性能优化等)
https://blog.csdn.net/sinat_39620217/article/details/128805154
2023计算机领域顶会以及ACL自然语言解决(NLP)钻研子方向汇总
https://blog.csdn.net/sinat_39620217/article/details/128897539
0.2 论断先看
仿真后果如下:
模型 | dev acc |
---|---|
Simcse(无监督) | 58.97% |
Diffcse(无监督) | 63.23% |
bert-base-chinese | 86.53% |
bert-wwm-chinese | 86.33% |
bert-wwm-ext-chinese | 86.05% |
ernie-tiny | 86.07% |
roberta-wwm-ext | 87.53% |
rbt3 | 85.37% |
rbtl3 | 85.17% |
ERNIE-1.0-Base | 89.34% |
ERNIE-1.0-Base | 89.34% |
ERNIE-Gram-Base-Pointwise | 90.58% |
- SimCSE 模型适宜不足监督数据,然而又有大量无监督数据的匹配和检索场景。
- 相比于 SimCSE 模型,DiffCSE模型会更关注语句之间的差异性,具备准确的向量示意能力。DiffCSE 模型同样适宜不足监督数据,然而又有大量无监督数据的匹配和检索场景。
- 显著看到有监督模型中ERNIE-Gram比之前所有模型性能的优良
1.SimBERT(UniLM)
预训练模型依照训练形式或者网络结构能够分成三类:
- 一是以BERT[2]为代表的自编码(Auto-Encoding)语言模型,Autoencoding Language Modeling,自编码语言模型:通过上下文信息来预测以后被mask的token,代表有BERT、Word2Vec(CBOW)等.它应用MLM做预训练任务,自编码预训模型往往更善于做判断类工作,或者叫做自然语言了解(Natural Language Understanding,NLU)工作,例如文本分类,NER等。
$p(x)=\prod_{x \in \text { Mask }} p(x \mid$ content $)$
毛病:因为训练中采纳了[MASK]标记,导致预训练与微调阶段不统一的问题,且对于生成式问题的反对能力较差
长处:可能很好的编码上下文语义信息,在自然语言了解(NLU)相干的上游工作上体现突出
- 二是以GPT[3]为代表的自回归(Auto-Regressive)语言模型,Aotoregressive Lanuage Modeling,自回归语言模型:依据后面(或前面)呈现的token来预测以后时刻的token,代表模型有ELMO、GTP等,它个别采纳生成类工作做预训练,相似于咱们写一篇文章,自回归语言模型更善于做生成类工作(Natural Language Generating,NLG),例如文章生成等。
$\begin{aligned} & \text { forward: } p(x)=\prod_{t=1}^T p\left(x_t \mid x_{<t}\right) \\ & \text { backward : } p(x)=\prod_{t=T}^1 p\left(x_t \mid x_{>t}\right)\end{aligned}$
毛病:只能利用单向语义而不能同时利用上下文信息
长处:对自然语言生成工作(NLG)敌对,合乎生成式工作的生成过程
- 三是以encoder-decoder为根底模型架构的预训练模,例如MASS[4],它通过编码器将输出句子编码成特征向量,而后通过解码器将该特征向量转化成输入文本序列。基于Encoder-Decoder的预训练模型的长处是它可能兼顾自编码语言模型和自回归语言模型:在它的编码器之后接一个分类层便能够制作一个判断类工作,而同时应用编码器和解码器便能够做生成类工作。
这里要介绍的对立语言模型(Unified Language Model,UniLM)[1]从网络结构上看,它的构造是和BERT雷同的编码器的构造。然而从它的预训练任务上来看,它不仅能够像自编码语言模型那样利用掩码标记的上下文进行训练,还能够像自回归语言模型那样从左向右的进行训练。甚至能够像Encoder-Decoder架构的模型先对输出文本进行编码,再从左向右的生成序列。
UniLM是在微软研究院在BERT的根底上提出的预训练语言模型,被称为对立预训练语言模型。应用三种非凡的Mask的预训练指标,从而使得模型能够用于NLG,同时在NLU工作取得和BERT一样的成果
它能够实现单向、序列到序列和双向预测工作,能够说是联合了AR和AE两种语言模型的长处,UniLM在文本摘要、生成式问题答复等畛域获得了SOTA的问题
[1] Dong, Li, et al. "Unified language model pre-training for natural language understanding and generation." Advances in Neural Information Processing Systems 32 (2019).
[2] Devlin J, Chang M W, Lee K, et al. BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding[J]. arXiv preprint arXiv:1810.04805, 2018.
[3] Radford, A., Narasimhan, K., Salimans, T. and Sutskever, I., 2018. Improving language understanding by generative pre-training.
[4] Song, Kaitao, et al. "Mass: Masked sequence to sequence pre-training for language generation."arXiv preprint arXiv:1905.02450(2019).
1.1 UniLM 模型详解
原始论文:Unified Language Model Pre-training for Natural Language Understanding and Generation
刚介绍的三种不同的类型的预训练架构往往须要应用不同的预训练任务进行训练。然而这些工作都能够演绎为依据已知的内容预测未知的内容,不同的是哪些内容是咱们已知的,哪些是须要预测的。UniLM最外围的内容将用来训练不同架构的工作都对立到了一种相似于掩码语言模型的框架上,而后通过一个变量掩码矩阵M(Mask Matrix)
来适配不同的工作。UniLM所有外围的内容能够概括为下图。
模型框架如上图所示,在预训练阶段,UniLM模型通过三种不同指标函数的语言模型(包含:双向语言模型,单向语言模型和序列到序列语言模型),去独特学习一个Transformer网络;为了管制对将要预测的token可见到的上下文,应用了不同的self-attention mask来实现。即通过不同的掩码来管制预测单词的可见上下文词语数量,实现不同的模型表征.
1.1.1 模型输出
首先对于一个输出句子,UniLM采纳了WordPiece的形式对其进行了分词。除了分词失去的token嵌入,UniLM中增加了地位嵌入(和BERT雷同的形式)和用于辨别文本对的两个段的段嵌入(Segment Embedding)。为了失去整句的特征向量,UniLM在句子的开始增加了[SOS]标记。为了宰割不同的段,它向其中增加了[EOS]标记。具体例子能够参考图中的蓝色虚线框中的内容。包含token embedding,position embedding,segment embedding,同时segment embedding还能够作为模型采取何种训练形式(单向,双向,序列到序列)的一种标识
1.1.2 网络结构
如图1红色虚线框中的内容,UniLM应用了 $L$ 层Transformer的架构,为了辨别使不同的预训练任务能够共享这个网络,UniLM在其中增加了掩码矩阵的运算符。具体的讲,咱们假如输出文本示意为
$\left\{\boldsymbol{x}_i\right\}_{i=1}^{|x|}$,它通过嵌入层后失去第一层的输出 $\boldsymbol{H}^0=\left[\boldsymbol{x}_1, \cdots, \boldsymbol{x}_{|x|}\right]$,而后通过 $L$层Transformer后失去最终的特征向量,示意为 $\boldsymbol{H}^l=\text { Transformer }\left(\boldsymbol{H}^{l-1}\right), l \in[1, L]$,再形象编码成$\mathbf{H}_1=\left[\mathbf{h}_1^{\mathbf{l}}, \ldots, \mathbf{h}_{|\mathbf{x}|}^{\mathbf{1}}\right]$的不同档次的上下文示意。在每个$\text{Transformer}_l$块中,应用多个self-attention heads来聚合前一层的输入向量。对于第$l$个$\text{Transformer}_l$层,self-attention head $\mathbf A_l$的输入通过以下方。 不同于原始的Transformer,UniLM在其中增加了掩码矩阵,以第$l$层为例,此时Transformer转化为式(1)到式(3)所示的模式。
$\begin{gathered}\boldsymbol{Q}_l=\boldsymbol{H}^{l-1} \boldsymbol{W}_l^Q \quad \boldsymbol{K}_l=\boldsymbol{H}^{l-1} \boldsymbol{W}_l^K \quad \boldsymbol{V}_l=\boldsymbol{H}^{l-1} \boldsymbol{W}_l^V \\ \boldsymbol{M}_{i j}= \begin{cases}0, & \text { allow to attend } \\ -\infty & \text { prevent from attending }\end{cases} \\ \boldsymbol{A}_l=\operatorname{softmax}\left(\frac{\boldsymbol{Q}_l \boldsymbol{K}_l^{\top}}{\sqrt{d_k}}+\boldsymbol{M}\right) \boldsymbol{V}_l\end{gathered}$
其中 $\mathbf{H}^{l-1} \in \mathbb{R}^{|x| \times d_h}$别离应用参数矩阵$\boldsymbol{W}_l^Q, \boldsymbol{W}_l^K, \boldsymbol{W}_l^V$别离线性地投影到三元组Query,Key,Value中, $M \in \mathbb{R}^{|x| \times |x| }$是咱们后面屡次提到过的用于管制预训练任务的掩码矩阵。通过依据掩码矩阵$M$确定一对tokens是否能够互相attend,笼罩被编码的特色,让预测时只能关注到与特定工作相干的特色,从而实现了不同的预训练形式.
1.1.3 工作对立
UniLM共有4个预训练任务,除了图1中所示的三个语言模型外,还有一个经典的NSP工作,上面咱们别离介绍它们。
双向语言模型:
- MASK完形填空工作,输出的是一个文本对$[SOS,x_1,x_2,Mask,x_4,EOS,x_5,MASK,x_7,EOS]$
- 双向语言模型是图1的最下面的工作,它和掩码语言模型一样就是利用上下文预测被掩码的局部。,与Bert模型统一,在预测被掩蔽token时,能够察看到所有的token,如上图所示,应用全0矩阵来作为掩码矩阵,模型须要依据所有的上下文剖析,所以$M$是一个0矩阵。
单向语言模型:
- MASK完形填空工作,输出的是一个独自的文本$[x_1,x_2,Mask,x_4]$
- 单向语言模型能够使从左向右也能够是从右向左,图1的例子是从左向右的,也就是GPT[3]中应用的掩码形式。在这种预测形式中,模型在预测第t工夫片的内容时只能看到第t工夫片之前的内容,因而$M$是一个上三角全为 $-\infty$的上三角矩阵(图1中第二个掩码矩阵的暗影局部)。同理,当单向语言模型是从右向左时,$M$是一个下三角矩阵。在这种训练形式中,观测序列分为从左到右和从右向左两种,从左到右,即仅通过被掩蔽token的左侧所有本文来预测被掩蔽的token;从右到左,则是仅通过被掩蔽token的右侧所有本文来预测被掩蔽的token,如上图所示,应用上三角矩阵来作为掩码矩阵,暗影局部为,空白局部为0,
Seq-to-Seq语言模型:
- MASK完形填空工作,输出的是一个文本对$[SOS,x_1,x_2,Mask,x_4,EOS,x_5,MASK,x_7,EOS]$
- 如果被掩蔽token在第一个文本序列中,那么仅能够应用第一个文本序列中所有token,不能应用第二个文本序列的任何信息;如果被掩蔽token在第二个文本序列中,那么应用一个文本序列中所有token和第二个文本序列中被掩蔽token的左侧所有token预测被掩蔽token
- 如上图所示,在训练的时候,一个序列由[SOS]S_1[EOS]S_2[EOS]组成,其中S1是source segments,S2是target segments。随机mask两个segment其中的词,其中如果masked是source segment的词的话,则它能够attend to所有的source segment的tokens,如果masked的是target segment,则模型只能attend to所有的source tokens以及target segment中以后词和该词右边的所有tokens,这样模型能够隐形地学习到一个双向的encoder和单向decoder(相似transformer)
在Seq-to-Seq工作中,例如机器翻译,咱们通常先通过编码器将输出句子编码成特征向量,而后通过解码器将这个特征向量解码成预测内容。UniLM的构造和传统的Encoder-Decoder模型的差别十分大,它仅有一个多层的Transformer形成。在进行预训练时,UniLM首先将两个句子拼接成一个序列,并通过[EOS]来宰割句子,示意为:[SOS]S1[EOS]S2[EOS]。在编码时,咱们须要晓得输出句子的残缺内容,因而不须要对输出文本进行笼罩。然而当进行解码时,解码器的局部便变成一个从左向右的单向语言模型。因而对于句子中的第1个片段(S1局部)对应的块矩阵,它是一个0矩阵(左上块矩阵),对于的句子第2个片段(S2局部)的对应的块矩阵,它是上三角矩阵的一部分(右上块矩阵)。因而咱们能够失去图1中最上面的$M$ 。能够看出,UniLM尽管采纳了编码器的架构,然而在训练Seq-to-Seq语言模型时它也能够像经典的Encoder-to-Decoder那样关注到输出的全副特色以及输入的已生成的特色。
- NSP:UniLM也像BERT一样增加了NSP作为预训练任务。对于双向语言模型(Bidirectional LM),与Bert模型一样,也进行下一个句子预测。如果是第一段文本的下一段文本,则预测1;否则预测0
1.1.4 训练与微调
训练:在训练时,1/3的工夫用来训练双向语言模型,1/3的工夫用来训练单向语言模型,其中从左向右和从右向左各站一半,最初1/3用了训练Encoder-Decoder架构。
微调:对于NLU工作来说,咱们能够间接将UniLM视作一个编码器,而后通过[SOS]标记失去整句的特征向量,再通过在特征向量后增加分类层失去预测的类别。对于NLG工作来说,咱们能够像后面介绍的把句子拼接成序列“[SOS]S1[EOS]S2[EOS]”。其中S1是输出文本的全部内容。为了进行微调,咱们会随机掩码掉指标句子S2的局部内容。同时咱们可会掩码掉指标句子的[EOS],咱们的目标是让模型本人预测何时预测[EOS]从而进行预测,而不是预测一个咱们提前设置好的长度。
- 网络设置:24层Transformer,1024个hidden size,16个attention heads
- 参数大小:340M
- 初始化:间接采纳Bert-Large的参数初始化
- 激活函数:GELU,与bert一样
- dropout比例:0.1
- 权重衰减因子:0.01
- batch_size:330
- 混合训练形式:对于一个batch,1/3工夫采纳双向语言模型的指标,1/3的工夫采纳Seq2Seq语言模型指标,最初1/3平均分配给两种单向学习的语言模型,也就是left-to-right和right-to-left形式各占1/6工夫
- MASK形式:总体比例15%,其中80%的状况下间接用[MASK]代替,10%的状况下随机抉择一个词代替,最初10%的状况用实在值。还有就是80%的状况是每次只mask一个词,另外20%的状况是mask掉bi-gram或者tri-gram
1.1.5 小结
UniLM和很多Encoder-Decoder架构的模型一样(例如MASS)像对立NLU和NLG工作,然而无疑UniLM的架构更加优雅。像MASS在做NLU工作时,它只会采纳模型的Encoder局部,从而抛弃了Decoder局部的全副特色。UniLM有一个问题是在做机器翻译这样经典的Seq-to-Seq工作时,它的掩码机制导致它并没有应用示意[SOS]标记对应的全句特色,而是应用了输出句子的序列。这个形式可能不足了对整句特色的捕捉,从而导致生成的内容不足对全局信息的把控。此外,UniLM在五个NLG数据集上的体现优于以前的最新模型:CNN/DailyMail和Gigaword文本摘要、SQuAD问题生成、CoQA生成问题答复和DSTC7基于对话生成,其劣势总结如下:
- 三种不同的训练指标,网络参数共享
- 网络参数共享,使得模型防止了过拟合于某繁多的语言模型,使得学习进去的模型更加具备普适性
- 采纳了Seq2Seq语言模型,使得其在可能实现NLU工作的同时,也可能实现NLG工作
1.2 SimBert
1.2.1 交融检索和生成的SimBERT模型
基于UniLM思维、融检索与生成于一体的BERT模型。
权重下载:https://github.com/ZhuiyiTech...
UniLM的外围是通过非凡的Attention Mask来赋予模型具备Seq2Seq的能力。如果输出是“你想吃啥”,指标句子是“白切鸡”,那UNILM将这两个句子拼成一个:[CLS] 你 想 吃 啥 [SEP] 白 切 鸡 [SEP],而后接如图的Attention Mask:
换句话说,[CLS] 你 想 吃 啥 [SEP]这几个token之间是双向的Attention,而白 切 鸡 [SEP]这几个token则是单向Attention,从而容许递归地预测白 切 鸡 [SEP]这几个token,所以它具备文本生成能力。
<center>UNILM做Seq2Seq模型图示。输出局部外部可做双向Attention,输入局部只做单向Attention。</center>
Seq2Seq只能阐明UniLM具备NLG的能力,那后面为什么说它同时具备NLU和NLG能力呢?因为UniLM非凡的Attention Mask,所以[CLS] 你 想 吃 啥 [SEP]这6个token只在它们之间互相做Attention,而跟白 切 鸡 [SEP]齐全没关系,这就意味着,只管前面拼接了白 切 鸡 [SEP],但这不会影响到前6个编码向量。再说明确一点,那就是前6个编码向量等价于只有[CLS] 你 想 吃 啥 [SEP]时的编码后果,如果[CLS]的向量代表着句向量,那么它就是你 想 吃 啥的句向量,而不是加上白 切 鸡后的句向量。
因为这个个性,UniLM在输出的时候也随机退出一些[MASK],这样输出局部就能够做MLM工作,输入局部就能够做Seq2Seq工作,MLM加强了NLU能力,而Seq2Seq加强了NLG能力,两全其美。
1.2.2 SimBert
SimBERT属于有监督训练,训练语料是自行收集到的类似句对,通过一句来预测另一句的类似句生成工作来构建Seq2Seq局部,而后后面也提到过[CLS]的向量事实上就代表着输出的句向量,所以能够同时用它来训练一个检索工作,如下图
假如SENT_a和SENT_b是一组类似句,那么在同一个batch中,把[CLS] SENT_a [SEP] SENT_b [SEP]和[CLS] SENT_b [SEP] SENT_a [SEP]都退出训练,做一个类似句的生成工作,这是Seq2Seq局部。
另一方面,把整个batch内的[CLS]向量都拿进去,失去一个bxd的句向量矩阵V(b是batch_size,d是hidden_size),而后对d维度做l2归一化,失去新的V,而后两两做内积,失去bxv的类似度矩阵VV^T,接着乘以一个scale(咱们取了30),并mask掉对角线局部,最初每一行进行softmax,作为一个分类工作训练,每个样本的指标标签是它的类似句(至于本身曾经被mask掉)。说白了,就是把batch内所有的非类似样本都当作负样本,借助softmax来减少类似样本的类似度,升高其余样本的类似度。
具体介绍请看:https://kexue.fm/archives/7427
局部后果展现:
>>> gen_synonyms(u'微信和支付宝哪个好?')[ u'微信和支付宝,哪个好?', u'微信和支付宝哪个好', u'支付宝和微信哪个好', u'支付宝和微信哪个好啊', u'微信和支付宝那个好用?', u'微信和支付宝哪个好用', u'支付宝和微信那个更好', u'支付宝和微信哪个好用', u'微信和支付宝用起来哪个好?', u'微信和支付宝选哪个好', u'微信好还是支付宝比拟用', u'微信与支付宝哪个', u'支付宝和微信哪个好用一点?', u'支付宝好还是微信', u'微信支付宝到底哪个好', u'支付宝和微信哪个实用性更好', u'好,支付宝和微信哪个更平安?', u'微信支付宝哪个好用?有什么区别', u'微信和支付宝有什么区别?谁比拟好用', u'支付宝和微信哪个好玩']>>> most_similar(u'怎么开初婚未育证实', 20)[ (u'开初婚未育证实怎么弄?', 0.9728098), (u'初婚未育状况证实怎么开?', 0.9612292), (u'到哪里开初婚未育证实?', 0.94987774), (u'初婚未育证实在哪里开?', 0.9476072), (u'男方也要开初婚证实吗?', 0.7712214), (u'初婚证实除了村里开,单位能够开吗?', 0.63224965), (u'生孩子怎么发', 0.40672967), (u'是须要您到当地公安局开具变更证实的', 0.39978087), (u'淘宝开店认证未通过怎么办', 0.39477515), (u'您好,是须要当地公安局开具的变更证实的', 0.39288986), (u'没有工作证实,怎么办信用卡', 0.37745982), (u'未成年小孩还没办身份证怎么买高铁车票', 0.36504325), (u'烟草证不给办,应该怎么办呢?', 0.35596085), (u'怎么生孩子', 0.3493368), (u'怎么开福利彩票站', 0.34158638), (u'沈阳烟草证怎么办?好办不?', 0.33718678), (u'男性不孕不育有哪些特色', 0.33530876), (u'结婚证丢了一本怎么办离婚', 0.33166665), (u'怎么到地税局开发票?', 0.33079252), (u'男性不孕不育查看要留神什么?', 0.3274408)]
1.2.3 SimBER训练预测
SimBERT的模型权重是以Google开源的BERT模型为根底,基于微软的UniLM思维设计了融检索与生成于一体的工作,来进一步微调后失去的模型,所以它同时具备类似问生成和类似句检索能力。
数据集应用的是LCQMC相干状况参考:https://aistudio.baidu.com/ai...
#数据筹备:应用PaddleNLP内置数据集from paddlenlp.datasets import load_datasettrain_ds, dev_ds, test_ds = load_dataset("lcqmc", splits=["train", "dev", "test"])#保留数据集并查看import jsonwith open("/home/aistudio/output/test.txt", "w+",encoding='UTF-8') as f: #a : 写入文件,若文件不存在则会先创立再写入,但不会笼罩原文件,而是追加在文件开端 for result in dev_ds: line = json.dumps(result, ensure_ascii=False) #对中文默认应用的ascii编码.想输入真正的中文须要指定ensure_ascii=False f.write(line + "\n")#数据有上传一份也有内置读取,依据集体爱好自行抉择
待预测数据集局部展现:
开初婚未育证实怎么弄? 初婚未育状况证实怎么开? 1谁晓得她是网络美女吗? 恋情这杯酒谁喝都会醉是什么歌 0人和畜生的区别是什么? 人与畜生的区别是什么! 1男孩喝女孩的尿的故事 怎么才晓得是生男孩还是女孩 0这种图片是用什么软件制作的? 这种图片制作是用什么软件呢? 1这腰带是什么牌子 护腰带什么牌子好 0什么牌子的空调最好! 什么牌子的空调扇最好 0
这里要留神数据格式。没有标签的
开初婚未育证实怎么弄? 初婚未育状况证实怎么开? 谁晓得她是网络美女吗? 恋情这杯酒谁喝都会醉是什么歌 人和畜生的区别是什么? 人与畜生的区别是什么! 男孩喝女孩的尿的故事 怎么才晓得是生男孩还是女孩 这种图片是用什么软件制作的? 这种图片制作是用什么软件呢? 这腰带是什么牌子 护腰带什么牌子好 什么牌子的空调最好! 什么牌子的空调扇最好
#模型预测# %cd SimBERT!export CUDA_VISIBLE_DEVICES=0!python predict.py --input_file /home/aistudio/LCQMC/dev.txt
依照predict.py.py进行预测失去类似度,局部展现:
{'query': '开初婚未育证实怎么弄?', 'title': '初婚未育状况证实怎么开?', 'similarity': 0.9500292}{'query': '谁晓得她是网络美女吗?', 'title': '恋情这杯酒谁喝都会醉是什么歌', 'similarity': 0.24593769}{'query': '人和畜生的区别是什么?', 'title': '人与畜生的区别是什么!', 'similarity': 0.9916624}{'query': '男孩喝女孩的尿的故事', 'title': '怎么才晓得是生男孩还是女孩', 'similarity': 0.3250241}{'query': '这种图片是用什么软件制作的?', 'title': '这种图片制作是用什么软件呢?', 'similarity': 0.9774641}{'query': '这腰带是什么牌子', 'title': '护腰带什么牌子好', 'similarity': 0.74771273}{'query': '什么牌子的空调最好!', 'title': '什么牌子的空调扇最好', 'similarity': 0.83304036}
以阈值0.9以上为类似度判断,失去后果和标注答案统一1010100.
2.Sentence Transformers (ERNIE/BERT/RoBERTa/Electra)
随着深度学习的倒退,模型参数的数量飞速增长。为了训练这些参数,须要更大的数据集来防止过拟合。然而,对于大部分NLP工作来说,构建大规模的标注数据集十分艰难(老本过高),特地是对于句法和语义相干的工作。相比之下,大规模的未标注语料库的构建则绝对容易。为了利用这些数据,咱们能够先从其中学习到一个好的示意,再将这些示意利用到其余工作中。最近的钻研表明,基于大规模未标注语料库的预训练模型(Pretrained Models, PTM) 在NLP工作上获得了很好的体现。
近年来,大量的钻研表明基于大型语料库的预训练模型(Pretrained Models, PTM)能够学习通用的语言示意,有利于上游NLP工作,同时可能防止从零开始训练模型。随着计算能力的倒退,深度模型的呈现(即 Transformer)和训练技巧的加强使得 PTM 一直倒退,由浅变深。
百度的预训练模型ERNIE通过海量的数据训练后,其特色抽取的工作曾经做的十分好。借鉴迁徙学习的思维,咱们能够利用其在海量数据中学习的语义信息辅助小数据集(如本示例中的医疗文本数据集)上的工作。以 ERNIE 为代表的模型Fine-tune实现文本匹配工作。
应用预训练模型ERNIE实现文本匹配工作,大家可能会想到将query和title文本拼接,之后输出ERNIE中,取CLS特色(pooled_output),之后输入全连贯层,进行二分类。如下图ERNIE用于句对分类工作的用法:
然而,以上用法的问题在于,ERNIE的模型参数十分宏大,导致计算量十分大,预测的速度也不够现实。从而达不到线上业务的要求。针对该问题,能够应用PaddleNLP工具搭建Sentence Transformer网络。
**Sentence Transformer采纳了双塔(Siamese)的网络结构。Query和Title别离输出ERNIE,共享一个ERNIE参数,失去各自的token embedding特色。之后对token embedding进行pooling(此处教程应用mean pooling操作),之后输入别离记作u,v。之后将三个表征(u,v,|u-v|)拼接起来,进行二分类。网络结构如上图所示。同时,不仅能够应用ERNIR作为文本语义特征提取器,能够利用BERT/RoBerta/Electra等模型作为文本语义特征提取器
**
论文参考:Sentence-BERT: Sentence Embeddings using Siamese BERT-Networks https://arxiv.org/abs/1908.10084
那么Sentence Transformer采纳Siamese的网路构造,是如何晋升预测速度呢?
Siamese的网络结构益处在于query和title别离输出同一套网络。如在信息搜寻工作中,此时就能够将数据库中的title文本提前计算好对应sequence_output特色,保留在数据库中。当用户搜寻query时,只需计算query的sequence_output特色与保留在数据库中的title sequence_output特色,通过一个简略的mean_pooling和全连贯层进行二分类即可。从而大幅晋升预测效率,同时也保障了模型性能。
对于匹配工作罕用的Siamese网络结构能够参考:https://blog.csdn.net/thrivin...
2.1 模型简介
针对中文文本匹配问题,开源了一系列模型:
- BERT(Bidirectional Encoder Representations from Transformers)中文模型,简写bert-base-chinese, 其由12层Transformer网络组成。
- ERNIE(Enhanced Representation through Knowledge Integration),反对ERNIE 1.0中文模型(简写ernie-1.0)和ERNIE Tiny中文模型(简写ernie-tiny)。 其中ernie由12层Transformer网络组成,ernie-tiny由3层Transformer网络组成。
- RoBERTa(A Robustly Optimized BERT Pretraining Approach),反对12层Transformer网络的roberta-wwm-ext。
在LQCMC数据集下各个模型评估:
模型 | dev acc | test acc |
---|---|---|
bert-base-chinese | 0.86537 | 0.84440 |
bert-wwm-chinese | 0.86333 | 0.84128 |
bert-wwm-ext-chinese | 0.86049 | 0.83848 |
ernie-1.0 | 0.87480 | 0.84760 |
ernie-tiny | 0.86071 | 0.83352 |
roberta-wwm-ext | 0.87526 | 0.84904 |
rbt3 | 0.85367 | 0.83464 |
rbtl3 | 0.85174 | 0.83744 |
2.2 模型训练
以中文文本匹配公开数据集LCQMC为示例数据集,能够运行上面的命令,在训练集(train.tsv)上进行模型训练,并在开发集(dev.tsv)验证
局部后果展现:
global step 7010, epoch: 8, batch: 479, loss: 0.06888, accu: 0.97227, speed: 1.40 step/sglobal step 7020, epoch: 8, batch: 489, loss: 0.08377, accu: 0.97617, speed: 6.30 step/sglobal step 7030, epoch: 8, batch: 499, loss: 0.07471, accu: 0.97630, speed: 6.32 step/sglobal step 7040, epoch: 8, batch: 509, loss: 0.05239, accu: 0.97559, speed: 6.32 step/sglobal step 7050, epoch: 8, batch: 519, loss: 0.04824, accu: 0.97539, speed: 6.30 step/sglobal step 7060, epoch: 8, batch: 529, loss: 0.05198, accu: 0.97617, speed: 6.42 step/sglobal step 7070, epoch: 8, batch: 539, loss: 0.07196, accu: 0.97651, speed: 6.42 step/sglobal step 7080, epoch: 8, batch: 549, loss: 0.07003, accu: 0.97646, speed: 6.36 step/sglobal step 7090, epoch: 8, batch: 559, loss: 0.10023, accu: 0.97587, speed: 6.34 step/sglobal step 7100, epoch: 8, batch: 569, loss: 0.04805, accu: 0.97641, speed: 6.08 step/seval loss: 0.46545, accu: 0.87264[2023-02-07 17:31:29,933] [ INFO] - tokenizer config file saved in ./checkpoints_ernie/model_7100/tokenizer_config.json[2023-02-07 17:31:29,933] [ INFO] - Special tokens file saved in ./checkpoints_ernie/model_7100/special_tokens_map.json
代码示例中应用的预训练模型是ERNIE,如果想要应用其余预训练模型如BERT,RoBERTa,Electra等,只需更换model 和 tokenizer即可。
# 应用 ERNIE 预训练模型# ernie-3.0-medium-zhmodel = AutoModel.from_pretrained('ernie-3.0-medium-zh')tokenizer = AutoTokenizer.from_pretrained('ernie-3.0-medium-zh')# 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.Model.from_pretrained('ernie-tiny')# tokenizer = AutoTokenizer.from_pretrained('ernie-tiny')# 应用 BERT 预训练模型# bert-base-chinese# model = AutoModel.Model.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')
更多预训练模型,参考transformers
程序运行时将会主动进行训练,评估,测试。同时训练过程中会主动保留模型在指定的save_dir中。 如:
checkpoints/├── model_100│ ├── model_config.json│ ├── model_state.pdparams│ ├── tokenizer_config.json│ └── vocab.txt└── ...
NOTE:
如需复原模型训练,则能够设置init_from_ckpt, 如init_from_ckpt=checkpoints/model_100/model_state.pdparams。
如需应用ernie-tiny模型,则须要提前先装置sentencepiece依赖,如pip install sentencepiece
#模型预测!export CUDA_VISIBLE_DEVICES=0!python predict.py --device gpu --params_path /home/aistudio/Fine-tune/checkpoints_ernie/model_7100/model_state.pdparams
输入后果:
Data: ['开初婚未育证实怎么弄?', '初婚未育状况证实怎么开?'] Lable: similarData: ['谁晓得她是网络美女吗?', '恋情这杯酒谁喝都会醉是什么歌'] Lable: dissimilarData: ['人和畜生的区别是什么?', '人与畜生的区别是什么!'] Lable: similarData: ['男孩喝女孩的尿的故事', '怎么才晓得是生男孩还是女孩'] Lable: dissimilarData: ['这种图片是用什么软件制作的?', '这种图片制作是用什么软件呢?'] Lable: similarData: ['这腰带是什么牌子', '护腰带什么牌子好'] Lable: dissimilarData: ['什么牌子的空调最好!', '什么牌子的空调扇最好'] Lable: dissimilar
1010100和Simbert以及标注实在标签统一
批改代码api接口参考:https://www.paddlepaddle.org....
2.3小结
基于双塔 Point-wise 范式的语义匹配模型 SimNet 和 Sentence Transformers, 这 2 种计划计算效率更高,适宜对延时要求高、依据语义类似度进行粗排的利用场景。
对于Sentence Transformer更多信息参考www.SBERT.net以及论文:
- Sentence-BERT: Sentence Embeddings using Siamese BERT-Networks (EMNLP 2019)
- Making Monolingual Sentence Embeddings Multilingual using Knowledge Distillation (EMNLP 2020)
- Augmented SBERT: Data Augmentation Method for Improving Bi-Encoders for Pairwise Sentence Scoring Tasks (arXiv 2020)
3.预训练模型 ERNIE-Gram 的单塔文本匹配
文本匹配工作数据每一个样本通常由两个文本组成(query,title)。类别模式为 0 或 1,0 示意 query 与 title 不匹配; 1 示意匹配。
- 基于单塔 Point-wise 范式的语义匹配模型 ernie_matching: 模型精度高、计算复杂度高, 适宜间接进行语义匹配 2 分类的利用场景。
- 基于单塔 Pair-wise 范式的语义匹配模型 ernie_matching: 模型精度高、计算复杂度高, 对文本类似度大小的序关系建模能力更强,适宜将类似度特色作为下层排序模块输出特色的利用场景。
- 基于双塔 Point-Wise 范式的语义匹配模型 这2 种计划计算效率更高,适宜对延时要求高、依据语义类似度进行粗排的利用场景。
- Pointwise:输出两个文本和一个标签,可看作为一个分类问题,即判断输出的两个文本是否匹配。
- Pairwise:输出为三个文本,别离为Query以及对应的正样本和负样本,该训练形式思考到了文本之间的绝对程序。
单塔/双塔
- 单塔:先将输出文本合并,而后输出到繁多的神经网络模型。
- 双塔:对输出文本别离进行编码成固定长度的向量,通过文本的示意向量进行交互计算失去文本之间的关系。
本我的项目应用语义匹配数据集 LCQMC 作为训练集 , 基于 ERNIE-Gram 预训练模型热启训练并开源了单塔 Point-wise 语义匹配模型, 用户能够间接基于这个模型对文本对进行语义匹配的 2 分类工作
代码构造阐明
ernie_matching/├── deply # 部署| └── python| └── predict.py # python 预测部署示例├── export_model.py # 动态图参数导出动态图参数脚本├── model.py # Point-wise & Pair-wise 匹配模型组网├── data.py # Point-wise & Pair-wise 训练样本的转换逻辑 、Pair-wise 生成随机负例的逻辑├── train_pointwise.py # Point-wise 单塔匹配模型训练脚本├── train_pairwise.py # Pair-wise 单塔匹配模型训练脚本├── predict_pointwise.py # Point-wise 单塔匹配模型预测脚本,输入文本对是否类似: 0、1 分类├── predict_pairwise.py # Pair-wise 单塔匹配模型预测脚本,输入文本对的类似度打分└── train.py # 模型训练评估
数据集简介:
LCQMC是百度晓得畛域的中文问题匹配数据集,目标是为了解决在中文畛域大规模问题匹配数据集的缺失。该数据集从百度晓得不同畛域的用户问题中抽取构建数据。
3.1模型训练与预测
以中文文本匹配公开数据集 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 3810, epoch: 1, batch: 3810, loss: 0.27187, accu: 0.90938, speed: 1.25 step/sglobal step 3820, epoch: 1, batch: 3820, loss: 0.24648, accu: 0.92188, speed: 21.63 step/sglobal step 3830, epoch: 1, batch: 3830, loss: 0.23190, accu: 0.92604, speed: 21.38 step/sglobal step 3840, epoch: 1, batch: 3840, loss: 0.35609, accu: 0.91484, speed: 20.81 step/sglobal step 3850, epoch: 1, batch: 3850, loss: 0.06531, accu: 0.91687, speed: 19.64 step/sglobal step 3860, epoch: 1, batch: 3860, loss: 0.16462, accu: 0.91667, speed: 20.57 step/sglobal step 3870, epoch: 1, batch: 3870, loss: 0.26173, accu: 0.91607, speed: 19.78 step/sglobal step 3880, epoch: 1, batch: 3880, loss: 0.26429, accu: 0.91602, speed: 19.62 step/sglobal step 3890, epoch: 1, batch: 3890, loss: 0.09031, accu: 0.91771, speed: 20.49 step/sglobal step 3900, epoch: 1, batch: 3900, loss: 0.16542, accu: 0.91938, speed: 21.26 step/sglobal step 3910, epoch: 1, batch: 3910, loss: 0.27632, accu: 0.92074, speed: 21.87 step/sglobal step 3920, epoch: 1, batch: 3920, loss: 0.13577, accu: 0.92109, speed: 22.31 step/sglobal step 3930, epoch: 1, batch: 3930, loss: 0.15333, accu: 0.91971, speed: 18.52 step/sglobal step 3940, epoch: 1, batch: 3940, loss: 0.10362, accu: 0.92031, speed: 21.68 step/sglobal step 3950, epoch: 1, batch: 3950, loss: 0.14692, accu: 0.92146, speed: 21.74 step/sglobal step 3960, epoch: 1, batch: 3960, loss: 0.17472, accu: 0.92168, speed: 19.54 step/sglobal step 3970, epoch: 1, batch: 3970, loss: 0.31994, accu: 0.91967, speed: 21.06 step/sglobal step 3980, epoch: 1, batch: 3980, loss: 0.17073, accu: 0.91875, speed: 21.22 step/sglobal step 3990, epoch: 1, batch: 3990, loss: 0.14955, accu: 0.91891, speed: 21.51 step/sglobal step 4000, epoch: 1, batch: 4000, loss: 0.13987, accu: 0.91922, speed: 21.74 step/seval dev loss: 0.30795, accu: 0.87253
如果想要应用其余预训练模型如 ERNIE, BERT,RoBERTa,Electra等,只需更换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-Gram 预训练模型model = AutoModel.from_pretrained('ernie-gram-zh')tokenizer = AutoTokenizer.from_pretrained('ernie-gram-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_ckpt=checkpoints/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': 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': 0}{'query': '话费充值哪里便宜', 'title': '哪里充值(话费)最便宜?', 'pred_label': 1}{'query': '怎么下载歌曲到手机', 'title': '怎么往手机上下载歌曲', 'pred_label': 1}{'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': 1}{'query': '世界上真的有僵尸吗?', 'title': '这个世界上真的有僵尸吗', 'pred_label': 1}{'query': '梦见小女孩哭', 'title': '梦见小女孩对我笑。', 'pred_label': 0}{'query': '这是神马电影?说什的?', 'title': '这是神马电影?!', 'pred_label': 1}{'query': '李易峰高兴大本营饭拍', 'title': '看李易峰上高兴大本营吻戏', 'pred_label': 0}
3.2 基于动态图部署预测
模型导出
应用动态图训练完结之后,能够应用动态图导出工具 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
局部后果展现:
Data: {'query': '〈我是特种兵之火凤凰〉难看吗', 'title': '特种兵之火凤凰难看吗?'} Label: similarData: {'query': '当初看电影用什么软件好', 'title': '当初下电影个别用什么软件'} Label: similarData: {'query': '什么水取之不尽用之不竭是什么生肖', 'title': '什么水取之不尽用之不竭打一生肖'} Label: similarData: {'query': '愤恨的小鸟哪里下载', 'title': '愤恨的小鸟在哪里下载'} Label: similarData: {'query': '中国象棋巨匠网', 'title': '中国象棋巨匠'} Label: dissimilarData: {'query': '怎么注册谷歌账号?', 'title': '谷歌账号怎么注册'} Label: similarData: {'query': '哪里能够看点金胜手', 'title': '点金胜手哪里能看完'} Label: similarData: {'query': '什么牌子的行车记录仪好,怎么选', 'title': '行车记录仪什么牌子好;选哪个?'} Label: similarData: {'query': '芭比公主系列总共有哪些QUQ', 'title': '芭比公主系列动漫有哪些'} Label: dissimilarData: {'query': '新疆省会哪里', 'title': '新疆省会是哪里?'} Label: similarData: {'query': '明天星期几!', 'title': '明天星期几呢'} Label: similarData: {'query': '蜂蛹怎么吃', 'title': '蜂蛹怎么养'} Label: dissimilarData: {'query': '少年老成是什么生肖', 'title': '什么生肖是少年老成'} Label: similarData: {'query': '无关爱国的歌曲', 'title': '爱国歌曲有哪些'} Label: similar
3.3 小结
模型 | dev acc |
---|---|
Simcse(无监督) | 58.97% |
Diffcse(无监督) | 63.23% |
bert-base-chinese | 86.53% |
bert-wwm-chinese | 86.33% |
bert-wwm-ext-chinese | 86.05% |
ernie-tiny | 86.07% |
roberta-wwm-ext | 87.53% |
rbt3 | 85.37% |
rbtl3 | 85.17% |
ERNIE-1.0-Base | 89.34% |
ERNIE-1.0-Base | 89.34% |
ERNIE-Gram-Base-Pointwise | 90.58% |
- SimCSE 模型适宜不足监督数据,然而又有大量无监督数据的匹配和检索场景。
- 相比于 SimCSE 模型,DiffCSE模型会更关注语句之间的差异性,具备准确的向量示意能力。DiffCSE 模型同样适宜不足监督数据,然而又有大量无监督数据的匹配和检索场景。
- 显著看到有监督模型中ERNIE-Gram比之前所有模型性能的优良
参考文章:https://aistudio.baidu.com/ai...
4.学以致用--千言问题匹配鲁棒性评测较量验证
特定畛域常识图谱交融计划:学以致用-问题匹配鲁棒性评测较量验证
本我的项目次要讲述文本匹配算法的利用实际、并给出相应的优化计划介绍如:可解释学习等。最初文末介绍了常识交融学术界计划、常识交融业界落地计划、算法测评KG生产品质保障等,波及比照学习和文本。
https://blog.csdn.net/sinat_39620217/article/details/129026193
5.特定畛域常识图谱(Domain-specific KnowledgeGraph: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
6. 总结
文本匹配工作在自然语言解决中是十分重要的根底工作之一,个别钻研两段文本之间的关系。有很多利用场景;如信息检索、问答零碎、智能对话、文本甄别、智能举荐、文本数据去重、文本类似度计算、自然语言推理、问答零碎、信息检索等,但文本匹配或者说自然语言解决依然存在很多难点。这些自然语言解决工作在很大水平上都能够形象成文本匹配问题,比方信息检索能够归结为搜索词和文档资源的匹配,问答零碎能够归结为问题和候选答案的匹配,复述问题能够归结为两个同义句的匹配。
本我的项目次要围绕着特定畛域常识图谱(Domain-specific KnowledgeGraph:DKG)交融计划:文本匹配算法、常识交融学术界计划、常识交融业界落地计划、算法测评KG生产品质保障解说了文本匹配算法的综述,从经典的传统模型到孪生神经网络“双塔模型”再到预训练模型以及有监督无监督联结模型,期间也波及了近几年前沿的比照学习模型,之后提出了文本匹配技巧晋升计划,最终给出了DKG的落地计划。这边次要以原理解说和技术计划论述为主,之后会缓缓把我的项目开源进去,一起共建KG,从常识抽取到常识交融、常识推理、品质评估等争取走通残缺的流程。
模型 | dev acc |
---|---|
Simcse(无监督) | 58.97% |
Diffcse(无监督) | 63.23% |
bert-base-chinese | 86.53% |
bert-wwm-chinese | 86.33% |
bert-wwm-ext-chinese | 86.05% |
ernie-tiny | 86.07% |
roberta-wwm-ext | 87.53% |
rbt3 | 85.37% |
rbtl3 | 85.17% |
ERNIE-1.0-Base | 89.34% |
ERNIE-1.0-Base | 89.34% |
ERNIE-Gram-Base-Pointwise | 90.58% |
- SimCSE 模型适宜不足监督数据,然而又有大量无监督数据的匹配和检索场景。
- 相比于 SimCSE 模型,DiffCSE模型会更关注语句之间的差异性,具备准确的向量示意能力。DiffCSE 模型同样适宜不足监督数据,然而又有大量无监督数据的匹配和检索场景。
- 显著看到有监督模型中ERNIE-Gram比之前所有模型性能的优良
我的项目参考链接:
UniLM详解:https://zhuanlan.zhihu.com/p/...
原论文:Unified Language Model Pre-training for Natural Language Understanding and Generation:https://arxiv.org/pdf/1905.03...
UniLM 模型详解:https://www.jianshu.com/p/22e...
苏神:交融检索和生成的SimBERT模型:https://kexue.fm/archives/7427
simbert:https://github.com/PaddlePadd...
simbert:https://github.com/ZhuiyiTech...
开源预训练语言模型合集 :https://github.com/ZhuiyiTech...