深度学习技术选型——文本相似度计算

目录

背景:

目标:

方案一:直接使用Bert预训练模型生成句向量,再进行相似度计算

方案二:使用DSSM模型

方案三:使用sentenceBert

结论:


背景:

笔者由于在做一个检索式智能对话系统的项目,需要用到文本相似度计算深度学习模型(以下简称“文本相似度模型”)。便和团队一起对文本相似度技术进行一波调研。

目标:

1、对同一意思的不同长度的问法,有较好的识别能力

“共青团的基本任务” & “中国共青团的基本任务是什么呢”

比如上面两个句子,我们希望文本相似度模型能够给出较高的相似度得分。

ps: 实际的工程实践中实现此目标,我们也可以考虑结合“去停用词”,将“是”、“什么”、“呢”这样的词汇先去掉。停用词词库可以参考下面的链接。

敏感词汇库及停用词库.zip_涉政敏感词最全词汇,敏感词汇库-搜索引擎文档类资源-CSDN下载

2、对同一意思的不同表达,有较好的识别能力

“北京的天气怎么样” & “中国首都的天气怎样”

比如上面两个句子,我们希望文本相似度模型能在一定程度上认出“北京”和“中国首都”在语义上的相似度。

方案一:直接使用Bert预训练模型生成句向量,再进行相似度计算

在 TensorFlow 2.0和PyTorch的已经集成最新自然语言处理库 transformers的情况下,这种方案非常容易就可以实现。详见我团队的同事写的博客:Bert生成句向量(pytorch)_huangcy的博客-CSDN博客_bert pytorch

方案二:使用DSSM模型

这个模型是微软提出的经典模型,双塔模型。

 图中就是利用DNN的DSSM结构。DNN的输入是用户问句和对应文档的高维未归一化向量(如图中的500K维),DNN的输出是一个低维的语义特征空间向量(如图中的128维)。上图中的Multilayer non-linear projection采用了非线性的多层神经网络,利用tanh作为激活函数,同时问句和文档的神经网络共享参数,并在DNN的输出层利用cosine similarity计算问句和文档之间的语义相关性。其中 yQ和 yD表示DNN输出层问句和文档的低维语义向量,然后通过softmax得到条件概率分布。这种设计很好的增大了类间间距、减小了类内间距。

原始的问句或者文档是一个高维的向量,如向量的维度可能是词表的大小,当输入这些高维度的向量时神经网络可能无法训练。为了使得神经网络更好的训练,论文提出了减少DNN输入层向量维度的 Word hashing方法,也即上图中的word hashing层。word hashing是一种基于字符的n-gram方法。将该词分解为字符n-grams,最后这个词就会被这些n-grams向量表示。一种可能存在的问题是认为不同词的词向量冲突(collision)。但是经过作者的统计,如在500k维的one-hot编码基础上,采用字符级trigram时,向量维度可以降到30k维,且冲突率仅为0.0044%。

后面的一些模型基本都是沿用了这样的一个方法,不同之处一般都是在得到的向量上做文章,比如这个图中的x。也有一些是在输出上做文章,使输出的向量更能表示文本特征。

方案三:使用sentenceBert

目前我们使用比较多的就是SentenceBERT这样一个模型。

作者提出了Sentence-BERT网络结构来解决bert模型的不足。简单通俗地讲,就是借鉴孪生网络模型的框架,将不同的句子输入到两个bert模型中(但这两个bert模型是参数共享的,也可以理解为是同一个bert模型),获取到每个句子的句子表征向量。

我们可以看到整个结构是和DSSM比较相似的,不同的是,encoder端换成了BERT,在DSSM时期,BERT还没出现,一般都是直接使用onehot来作为向量表示的。在这篇论文里,作者在对bert模型进行微调时,设置了三个目标函数,用于不同任务的训练优化。

一个是使用softmax进行分类任务,在得到两个句向量u、v之后,作者将u、v、|u-v|拼接起来做最后的softmax。这个方式是作者实验得出的一个结果,比单纯的u、v连接,或者是u、v、u+v等等形式得到的效果都要好。这里感觉理解为u-v学习到了两个文本相似的一个差异,所以将其拼接到最后的向量中会起到一个正向的结果。这种一般可以直接使用分类数据集进行训练和测试

详见:从Siamse孪生网络到Sentence-BERT综述 - 简书

结论:

用sentenceBert能最好的实现上述两个目标

  • 5
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值