1. 文本相似度计算-文本向量化

2. 文本相似度计算-距离的度量

3. 文本相似度计算-DSSM算法

4. 文本相似度计算-CNN-DSSM算法

1. 前言

最近在学习文本相似度的计算,前面两篇文章分别介绍了文本的向量化文本的距离度量,这两篇文章的思路主要在机器学习的框架下面,本文准备换一个思路,从深度学习的角度来处理文本相似度的问题。

本文介绍DSSM(Deep Structured Semantic Models)深度学习架构。

2. DSSM原理

DSSM的原理很简单,通过搜索引擎里Query和Doc的海量的点击曝光日志,用DNN把Query和Doc转化为低纬语义向量,并通过cosine距离来计算两个语义向量的距离,并且根据用户的点击选择Doc当做标签值进行有监督学习,最终训练出语义相似度模型。该模型既可以用来预测两个句子的语义相似度,又可以获得某句子的低纬语义向量表达。

这里的一个重要的概念是低纬语义向量,它的意思是把一句文本通过一定的方式转换到一个固定维度的空间上,这样就可以对不同句子间计算相似度了。然后我们的任务就是需要去找各种方法在尽量保存文本本身信息的情况下,获得一个低维语义向量。AutoEncoder算法也是一种获得低纬语义向量的方法。

2.1 DSSM架构

DSSM的架构图如下所示:

我们从下到上的看数据流动的过程。

输入数据:\(Q\)代表用户的输入,\(D_i\)代表比对的第\(i\)个文档。

  • Term Vector层可以理解为输入层,我们简单的理解成把文本做one-hot处理后的词向量。这一层的矩阵维度在50W左右,矩阵太大,并且太稀疏,不容易训练。
  • Word Hashing层可以理解为数据预处理层,这一层主要是通过n-gram的方式降低矩阵维度。举个例子,假设用letter-trigams来切分单词(3个字母为一组,#表示开始和结束符),boy这个单词会被切为#-b-o,b-o-y,o-y-#。这样做的好处有两个:首先是压缩空间,50万w个词的one-hot向量空间可以通过letter-trigram压缩为一个3w维的向量空间。其次是增强范化能力,三个字母的表达往往能代表英文中的前缀和后缀,而前缀后缀往往具有通用的语义,在通过BOW对文本向量化。

这里之所以用 3 个字母的切分粒度,是综合考虑了向量空间和单词冲突:

以50w个单词的词库为例,Bigram的切分粒度的单词冲突为1192(冲突的定义:至少有两个单词的letter-bigram向量完全相同),而TriGram的单词冲突降为22效果很好,且转化后的向量空间3w维不是很大,综合考虑选择TriGram的切分粒度。

  • Multi-layer nonlinear projection这一层就是DNN的处理了。上面的架构图中画了3层DNN结构。做了一个降维操作,3w->300->300->128。
    \[
    l_1=W_1x
    \]
    \[
    l_i=f(W_il_{i-1}+b_i)
    \]
    \[
    y=f(W_Nl_{N-1}+b_N)
    \]
  • Relevance层是把Query的向量和Doc中的所有向量做一个cosine的相似度计算。

\[
P(D|Q) = \frac{exp(\gamma R(Q,D))}{\sum_{d_i \in D} exp(\gamma R(Q,D))}
\]

  • softmax层把计算出的概率进行归一化输出。

最终的loss是
\[
L(\Lambda) = - \text{log} \prod_{(Q,D^+)} P(D^+|Q)
\]

2.2 DSSM优缺点

从整体上看,DSSM还是对传统的机器学习和深度学习的方法进行了组合,先用n-gram进行矩阵压缩,再通过DNN网络进一步压缩,再通过cosine计算相似度,softmax输出归一化的相似度概率。

  • 优点:
  1. DSSM 用字向量作为输入既可以减少切词的依赖,又可以提高模型的范化能力,因为每个汉字所能表达的语义是可以复用的。
  2. 传统的输入层是用Embedding的方式(如Word2Vec的词向量)或者主题模型的方式(如LDA的主题向量)来直接做词的映射,再把各个词的向量累加或者拼接起来,由于Word2Vec和LDA都是无监督的训练,这样会给整个模型引入误差,DSSM采用统一的有监督训练,不需要在中间过程做无监督模型的映射,因此精准度会比较高。
  • 缺点:
  1. 上文提到 DSSM 采用词袋模型(BOW),因此丧失了语序信息和上下文信息。
  2. DSSM采用的是端到端的模型,预测结果不可控。
  3. DSSM是弱监督模型,因为引擎的点击曝光日志里Query和Doc的语义信息比较弱。首先搜索引擎有自己的排序算法,排序算法决定了那些Doc显示在第一页。因为第一页的被点击率大大大于后面的Doc的点击率。所以用户点击第一页的概率的置信度不是太高。

3. 文本相似度计算-DSSM算法的更多相关文章

  1. 4. 文本相似度计算-CNN-DSSM算法

    1. 文本相似度计算-文本向量化 2. 文本相似度计算-距离的度量 3. 文本相似度计算-DSSM算法 4. 文本相似度计算-CNN-DSSM算法 1. 前言 之前介绍了DSSM算法,它主要是用了DN ...

  2. Finding Similar Items 文本相似度计算的算法——机器学习、词向量空间cosine、NLTK、diff、Levenshtein距离

    http://infolab.stanford.edu/~ullman/mmds/ch3.pdf 汇总于此 还有这本书 http://www-nlp.stanford.edu/IR-book/ 里面有 ...

  3. 转:Python 文本挖掘:使用gensim进行文本相似度计算

    Python使用gensim进行文本相似度计算 转于:http://rzcoding.blog.163.com/blog/static/2222810172013101895642665/ 在文本处理 ...

  4. python 文本相似度计算

    参考:python文本相似度计算 原始语料格式:一个文件,一篇文章. #!/usr/bin/env python # -*- coding: UTF-8 -*- import jieba from g ...

  5. word2vec词向量训练及中文文本类似度计算

    本文是讲述怎样使用word2vec的基础教程.文章比較基础,希望对你有所帮助! 官网C语言下载地址:http://word2vec.googlecode.com/svn/trunk/ 官网Python ...

  6. java文章标题及文章相似度计算hash算法实现

    参看了 https://github.com/awnuxkjy/recommend-system 对方用了 余弦 函数实现相似度计算,我则用的是 hanlp+hash 算法(Hash算法总结) 再看服 ...

  7. java算法(1)---余弦相似度计算字符串相似率

    余弦相似度计算字符串相似率 功能需求:最近在做通过爬虫技术去爬取各大相关网站的新闻,储存到公司数据中.这里面就有一个技术点,就是如何保证你已爬取的新闻,再有相似的新闻 或者一样的新闻,那就不存储到数据 ...

  8. NLP点滴——文本相似度

    [TOC] 前言 在自然语言处理过程中,经常会涉及到如何度量两个文本之间的相似性,我们都知道文本是一种高维的语义空间,如何对其进行抽象分解,从而能够站在数学角度去量化其相似性.而有了文本之间相似性的度 ...

  9. 海量数据相似度计算之simhash和海明距离

    通过 采集系统 我们采集了大量文本数据,但是文本中有很多重复数据影响我们对于结果的分析.分析前我们需要对这些数据去除重复,如何选择和设计文本的去重算法?常见的有余弦夹角算法.欧式距离.Jaccard相 ...

随机推荐

  1. Magento模块升级修改数据库表结构

    Magento支持在模块中创建.删除.更新数据库表及字段.通过该方式,在插件开发的过程中,添加和修改字段变成了一件非常轻松的事情.只需要修改模块的版本号,同时在文件中添加一个符合命名规则的脚本就可以了 ...

  2. 你永远学不会的设计-->百度地图map api key 的设置

    哈哈 说到咱的互联网大佬 baidu, 真是无人不知,无人不晓,可是多少人能领会他的设计哲学呢? 来看看吧.... 事情要从上周的一个小实验说起,目标是调用baidu map api 做个产品原型. ...

  3. Sublime Text增加Build system类型,打造一个全能IDE

    Sublime text2是一款非常方便的文本编辑器,现在我基本上不用IDE去编写代码,一般都是在Sublime text2中编辑,当然,这里无法执行.debug是软肋,于是上网找了下资料,可以把添加 ...

  4. Android应用的自动更新模块

    软件的自动更新一般都与Splash界面绑定在一起, 由于需要维护的软件界面很复杂, 一个Activity中嵌入ViewPager, 并且逻辑比较复杂, 索性重新写一个Activity, 现在的软件都很 ...

  5. Scipy:高端科学计算

    转 :https://blog.csdn.net/lwfcgz/article/details/23290623 Scipy scipy包包含致力于科学计算中常见问题的各个工具箱.它的不同子模块相应于 ...

  6. 转:zTree树控件入门之checkbox:如何动态设置节点的checkbox选择框启用与禁用状态(chkDisabled)

    当一棵树的部分节点根据登入用户角色不同而决定是否启用节点前的checkbox选择框的时候,我们应该如何做呢?也或者如何在页面加载的时候动态根据当前登入用户角色动态切换节点前的checkbox的禁用状态 ...

  7. js评价五星

    js评价五星 1.图片(star.png): 2.图片和html文件在同级目录 <html> <head> <script src="http://libs.b ...

  8. React Native在开发过程中遇到的一些问题(俗称:坑)

    4900 服务器地址错误 运行时产生以下错误:Could not connect to development server. 1.URL地址设置 问题: Could not connect to d ...

  9. Android 自定义 View 知识点

    根据 Hencoder 提供的知识点,进行学习和总结. 三个要点: 布局 绘制 触摸反馈 绘制 自定义绘制:由自己实现绘制过程 常用绘制方法 onDraw(Canvas canvas) 绘制关键: c ...

  10. Android 移动端数据结构

    ## SparseArray ## SparseBooleanArray ## SparseIntArray ## SparseLongArray * 位于android.util,Android 中 ...