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. Java8 lambda表达式10个示例

    Java 8 刚于几周前发布,日期是2014年3月18日,这次开创性的发布在Java社区引发了不少讨论,并让大家感到激动.特性之一便是随同发布的lambda表达式,它将允许我们将行为传到函数里.在Ja ...

  2. Go语言开发的第一步,安装开发环境编写第一个Go程序

    关于go就不介绍了,google自己的语言.其它的百科,最近比较郁闷,处于纠结状态,不想说话,真心不想说话. 开发工具安装: 安装包下载: http://code.google.com/p/go/do ...

  3. KnockoutJs学习笔记

    1.缘由 新公司前端用的是Jquery+Knockout,Knockout只知道是MVVM,未曾接触.报到前,先学习下. 2.前置知识 MVVM模式介绍 MVVM:模型-视图-视图模型(Model-V ...

  4. mysql快速移植表数据

    使用select into outfile xxx ,  load data infile xxx 例如 : SELECT * into outfile '/tmp/out.txt' FROM `db ...

  5. 关于less在DW中高亮显示问题

    首先, 找到DW 安装目录. Adobe Dreamweaver CS5.5\configuration\DocumentTypes 中的,MMDocumentTypes.xml 这个文件,然后用记事 ...

  6. Android 上传文件,图片。以及服务器端接收相关。

    前面一篇文章写了实现照相功能的一个例子,其实那个实现效果是个略缩图.要查看全图就要先指定照片的存放路径.以后我会修改那个文章.今天先说下图片,文件等上传的实现.接着拿照片说事,光照完了不行还得往服务器 ...

  7. Spring Boot启动过程及回调接口汇总

    Spring Boot启动过程及回调接口汇总 链接: https://www.itcodemonkey.com/article/1431.html 来自:chanjarster (Daniel Qia ...

  8. InlineModelAdmin对象的学习

    一.InlineModelAdmin的介绍 管理界面可以在与父模型相同的页面上编辑模型.这些被称为内联. Django提供了两个子类,InlineModelAdmin它们是: TabularInlin ...

  9. MySQL 5.6学习笔记(数据表基本操作)

    1. 创建数据表 1.1 最基本的语法 CREATE TABLE tbl_name (col_name column_definition,...) [table_options] -column_d ...

  10. javascrip json2

    http://www.json.org/json-zh.html 下载: https://github.com/douglascrockford/JSON-js