目录

背景:

目标:

方案一:直接使用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能最好的实现上述两个目标

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

  1. 【NLP学习笔记】文本相似度计算——判断两篇文章是否相似

    一.算法流程 (1)使用TF-IDF算法,提取出两篇文章的关键词: (2)每篇文章各取出若干个关键词(比如20个),合并成一个集合,计算每篇文章对于这个集合中的词的词频(为了避免文章长度的差异,可以使 ...

  2. 隐私保护深度学习技术综述

    摘要 当机器学习算法需要为训练过程访问高度敏感的数据时,存在挑战和问题.为了解决这些问题,人们发展了几种保护隐私的深度学习技术,包括安全多方计算和神经网络中的同态加密.也有几种方法可以对神经网络进行改 ...

  3. 深度学习技术在美图个性化推荐的应用实践

    导读:美图秀秀社交化的推进过程中,沉淀了海量的优质内容和丰富的用户行为.推荐算法连接内容消费者和生产者,在促进平台的繁荣方面有着非常大的价值 .本次分享探讨美图在内容社区推荐场景下应用深度学习技术提升 ...

  4. 用深度学习解决大规模文本分类问题

     用深度学习解决大规模文本分类问题 人工智能头条 2017-03-27 22:14:22 淘宝 阅读(228) 评论(0) 声明:本文由入驻搜狐公众平台的作者撰写,除搜狐官方账号外,观点仅代表作者 ...

  5. 【NLP实战】基于ALBERT的文本相似度计算

    实战是学习一门技术最好的方式,也是深入了解一门技术唯一的方式.因此,NLP专栏推出了实战专栏,让有兴趣的同学在看文章之余也可以自己动手试一试. ALBERT是一个比BERT要轻量,效果更好的模型,本篇 ...

  6. 【NLP】相当全面:各种深度学习模型在文本分类任务上的应用

    论文标题:Deep Learning Based Text Classification:A Comprehensive Review 论文链接:https://arxiv.org/pdf/2004. ...

  7. 中文文本相似度计算工具集

    欢迎大家关注我们的网站和系列教程:http://www.tensorflownews.com/,学习更多的机器学习.深度学习的知识! 一.基本工具集 1.分词工具 a.jieba 结巴中文分词 htt ...

  8. 应用于语义分割问题的深度学习技术综述(语义分割综述)

    应用于语义分割问题的深度学习技术综述 基本介绍 摘要 1 .引言 2.术语及背景概念 2.1 常见的深度网络架构 2.1.1 AlexNet 2.1.2 VGG 2.1.3 GoogLeNet 2.1 ...

  9. 应用于语义分割问题的深度学习技术综述

    论文地址:https://arxiv.org/abs/1704.06857 应用于语义分割问题的深度学习技术综述 摘要 计算机视觉与机器学习研究者对图像语义分割问题越来越感兴趣.越来越多的应用场景需要 ...

最新文章

  1. 同样都是调参,为什么人家的神经网络比我牛逼100倍?
  2. 皮一皮:学霸和学渣的区别
  3. php 数组 双向链表,一个字节数组双向链表类,主要针对串口通讯而开发的
  4. matlab中find函数_在R中使用Matlab函数
  5. css clearfix_如何使用CSS清除浮点数(clearfix)?
  6. php弹出是否,Javascript警报弹出窗口是否会扩展PHP会话?
  7. 判断多边形边界曲线顺/逆时针 两种方法
  8. 全网目前最全python例子(附源码)
  9. 咦,我发现了微信的一个秘密
  10. AT070TN92 电源
  11. POJ——多项式加法(WA)
  12. [每周心学]示弟立志说(附译文)
  13. Peekaboo(2019年上海网络赛K题+圆上整点)
  14. 赶时间发布 ChatGPT 竞品后,Google 遭员工反讽:太仓促、拙劣、非 Google Style
  15. 微信开放标签wx-open-launch-app
  16. nrm 安装和 nrm命令
  17. 转型编程的小伙们们快来拿 python 入门证书!
  18. Python实现线性回归(公式推导+源代码)
  19. 【干货】软件安装报“不能注册DLL/OCX:RegSvr32失败;退出代码Ox3”
  20. 小白打卡python day 1

热门文章

  1. acc--›Android无障碍开发手势操作
  2. java毕业生设计星星电影购票网站计算机源码+系统+mysql+调试部署+lw
  3. 5G(IMT-2020)简介
  4. anaconda无法创建新环境
  5. App制作需要哪些技术?
  6. 处理JSON最强命令jq使用详解
  7. 互斥事件的概念和公式_专题49 互斥事件和独立事件的概率及条件概率(打包)-2019年高考数学(理)名师揭秘之一轮总复习...
  8. RTOS 任务间互斥的问题
  9. G7波澜不惊,非美反弹缺乏力度
  10. Rstudio做多元统计分析R语言