学习
实践
活动
专区
工具
TVP
写文章
专栏首页肖力涛的专栏NLP 点滴 :文本相似度 (下)
原创

NLP 点滴 :文本相似度 (下)

《NLP 点滴 :文本相似度 (中)》

神经网络语言模型

word2vec的思想最早起源于2003年Yoshua Bengio等人的论文A Neural Probabilistic Language Model

Traditional but very successful approaches based on n-grams obtain generalization by concatenating very short overlapping sequences seen in the training set. We propose to fight the curse of dimensionality by learning a distributed representation for words which allows each training sentence to inform the model about an exponential number of semantically neighboring sentences. [16]

从文中摘要中的这段话我们可以看出,神经网络语言模型提出的初衷便是为了解决传统的n-gram模型中维度灾难的问题,用distributed representation词向量的形式来表示每一个词语。 文中提出的模型利用了一个三层神经网络如下图(一般投影层算在输入层中,这里分开阐述):

其中,对于语料库C,词典D的长度为(|D|=N)为语料库C的词汇量

大小。对于任意一个词,表示其前n-1个词语,类似于n-gram模型,二元

对为一个训练样本。我们

为词向量,词向量的维度为m。图中W,U分别为投影层和隐藏层以及隐藏层和输出层之间的权值矩阵,p,q分别为隐藏层和输出层上的偏置向量。

论文中给出的神经网络模型如下图:

其中C(i)表示第i个词的特征向量(词向量),我们看到图中第一层为词

的上下文的每个词向量,在第二层我们将输入层的n-1个词向量按顺序首尾拼接在一起,形成一个长向量,其长度为(n-1)m,输入到激活函数tanh双曲正切函数中,计算方式如下:

经过上述两步计算得到的

只是一个长度为N的向量,我们看到图中第三层还做了一次softmax(Softmax function)归一化,归一化后

就可以表示为:

为词

在词典D中的索引。 在之前的背景知识n-gram模型

我们知道语言模型中很关键的便是F的确定,其中参数

如下:

  • 词向量:

,以及填充向量(上下文词汇不够n时)

  • 神经网络参数:

论文的主要贡献有一下两点:

1 . 词语之间的相似性可以通过词向量来表示 不同于之前我们讨论的One-hot Representation表示方式,论文中指出在进行训练时,向量空间表达的词语维度一般为30、60或100,远远小于词典长度17000,避免了维度灾难。同时语义相似句子的概率是相似的。比如:某个语料库中的两个句子S1=”A dog is running in the room”, S2=”A cat is running in the room”,两个句子从语义上看仅仅是在dog和cat处有一点区别,假设在语料库中S1=1000即出现1000次而S2=1即仅出现一次,按照之前我们讲述的n-gram模型,p(S1)>>p(S2),但是我们从语义上来看dog和cat在句子中无论从句法还是语义上都扮演了相似的角色,所以两者概率应该相似才对。

而神经网络语言模型可以做到这一点,原因是:1)在神经网络语言模型中假设了相似的词在词向量上也是相似的,即向量空间中的距离相近,2)模型中的概率函数关于词向量是光滑的,那么词向量的一个小变化对概率的影响也是一个小变化,这样下面的句子:

A dog is ruuning in the room A cat is running in the room The cat is running in the room A dog is walking in the bedroom The dog was walking in the bedroom

只要在语料库中出现一个,其他句子的概率也会相应增大。

2 .基于词向量的模型在概率计算上已经是平滑的,不需要像n-gram模型一样做额外的平滑处理,因为在softmax阶段我们已经做了归一化,有了平滑性。

我们最终训练得到的词向量,在整个神经网络模型中,似乎只是一个参数,但是这个副作用也正是word2vec中的核心产物。

CBOW和Skip-gram模型

word2vec中用到了两个重要模型:CBOW(Continuous Bag-of-Words Model)和Skip-gram(Continuous Skip-gram Model)模型,文中作者Tomas Mikolov[17]给出了模型图如下:

由图中我们看出word2vec是一个三层结构的神经网络:输入层、投影层和输出层(这里我们发现word2vec与上面我们阐述的神经网络模型的显著区别是去掉了隐藏层)。对于图中左边的CBOW模型,是已知当前词

的上下文

的前提下预测当前词

;而正好相反,Skip-gram模型是已知当前词

的前提下来预测其上下文

CBOW模型的目标函数,即其对数似然函数形式如下:

而Skip-gram模型的优化目标函数则形如:

Mikolov在word2vec中提出了两套框架,Hieraichical Softmax和Negative Sampling,这里由于博文篇幅太长了,就不错过多阐述,只对基于Hieraichical Softmax的CBOW模型进行简单总结。

CBOW模型中,与之前神经网络语言模型类似

表示一个样本,其中

表示词

的前后各c个词语(共2c个),其三层结构我们可以细化如下:

  1. 输入层:包含

中2c个词的词向量,每个词向量的维度都是m

  1. 投影层:将输入层的2c个词向量做求和累加,即
  1. 输出层:输出层对应一颗二叉树,它是以语料中出现过的词作为叶子节点,以各词在语料中出现的次数作为权重构造出来的一颗Huffman树(Huffman coding),其叶子节点共N(=|D|)个对应语料库D中的各个词,非叶子节点为N-1个。

对比我们之前讨论的最早的神经网络语言模型,CBOW模型的区别主要为以下三点:

  1. 从输入层到投影层的操作,前者通过拼接,而后者通过累加求和
  2. 前者有隐藏层,后者无隐藏层
  3. 输出层前者是线性结构(softmax),后者是树形结构(Hierarchical softmax)

word2vec对于词典D中的任意词

,Huffman树必存在一条从根结点到词

的路径

(且唯一)。路径

上存在个分支

(每条路径上的总结点数为

),将每个分支看做一次二次分类,每一次分类产生一个概率,将这些概率乘起来,便是所需的

。在二分类的过程中,可以利用Huffman编码值,即左树为1右树为0进行逻辑回归分类。

word2vec在求解的过程中主要利用了梯度下降的方法,调整学习率

,这里我们不再长篇大论的阐述,具体可以参考文献[14],对word2vec中的数学原理阐述的非常清晰。

应用

word2vec从被发布起就是各种大红大紫,在谷歌的翻译系统中,得到了很好的验证。围绕本篇博文的主题,即文本相似度的度量,word2vec产生的词向量可以非常方便的让我们做这件事情,利用欧氏距离或者cos都可以。

在之前Wetest舆情项目,做句法分析时,需要找寻某一个词的同类词语,我们用用户的游戏评论训练word2vec,效果还是不错的如下图:

对于游戏的人工想到的维度词进行同类扩展,得到扩展维度词。 之前在应用时是自己师兄使用的python版word2vec,而Java对于word2vec有一个较好的东东DL4J,但其性能我并没有经过大规模预料测试,这个大家用的时候需谨慎。

OK,长舒一口气~,好长的一篇整理,整个文章虽然涵盖了好多个模型、算法,但是围绕的一个主题便是如何度量两个文本之间的相似性,从字面和语义两个角度对自己平时用过接触过的模型算法进行整理归纳,如有任何纰漏还请留言指出,我会第一时间改正。

最后,本文大多是在平时开发时遇到的问题的总结,也非常感谢组里的同事和大神给予的交流和帮助,欢迎大家来Wetest舆情逛逛,关注游戏舆情信息。 Wetest舆情:http://wetest.qq.com/bee/

参考文献

  1. 莱文斯坦距离
  2. Commons Lang
  3. Jaro–Winkler distance
  4. 字符串相似算法-(1) Jaro-Winkler Distance
  5. Probabilistic Latent Semantic Indexing Thomas Hofmann
  6. [Algorithm & NLP] 文本深度表示模型——word2vec&doc2vec词向量模型
  7. 数学之美番外篇:平凡而又神奇的贝叶斯方法
  8. 概率语言模型及其变形系列(1)-PLSA及EM算法 概率语言模型及其变形系列(2)-LDA及Gibbs Sampling
  9. [Algorithm] 使用SimHash进行海量文本去重 海量数据相似度计算之simhash短文本查找
  10. word2vec 中的数学原理详解 DL4J 机器翻译领域的新突破
  11. word2vec 中的数学原理详解
  12. 《统计自然语言处理第2版》 宗成庆
  13. A Neural Probabilistic Language Model
  14. Exploiting Similarities among Languages for Machine Translation

原创声明,本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

登录 后参与评论
0 条评论

相关文章

  • NLP 点滴 :文本相似度 (上)

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

    肖力涛
  • NLP 点滴 :文本相似度 (中)

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

    肖力涛
  • 文本相似度 | 余弦相似度思想

    我一直觉得,在数据分析领域,只有文本分析是最“接地气儿”的,“接地气儿”不是指最简单,而是我们普通大众的使用它最多。 我们每天使用互联网,但不一定每个人都炒股...

    数说君
  • 【NLP实战】基于ALBERT的文本相似度计算

    实战是学习一门技术最好的方式,也是深入了解一门技术唯一的方式。因此,NLP专栏推出了实战专栏,让有兴趣的同学在看文章之余也可以自己动手试一试。

    用户1508658
  • 文本相似度计算_文本相似度分析算法

    一. Simhash 计算文档相似度的算法, 比如用在搜索引擎的爬虫系统中,收录重复的网页是毫无意义的,只会造成存储和计算资源的浪费。有时候我们需要处理类似...

    全栈程序员站长
  • 文本相似度度量_文本相似度分析

    文本相似度度量就是衡量两个文本相似度的算法。主要包括两个步骤:将文本表示为向量(文本表示);衡量两个向量的相似度(相似度度量)。

    全栈程序员站长
  • 文本相似度计算

    BM25(i) = \frac{词i的数量}{总词数}\frac{(k+1)C}{C+k(1-b+b\frac{|d|}{avdl})}log(\frac{总文...

    luxuantao
  • 文本相似度计算

    最近在处理文本多分类时,需要用到文本相似度计算,在github上找到了一个很不错的Python 第三方包。叫相识(Xiangshi)

    用户7532413
  • 从0到1,了解NLP中的文本相似度

    本文将从预备知识的概念开始介绍,从距离名词,到文本分词,相似度算法。

    netkiddy
  • 文本相似度——自己实现文本相似度算法(余弦定理)

    最近由于工作项目,需要判断两个txt文本是否相似,于是开始在网上找资料研究,因为在程序中会把文本转换成String再做比较,所以最开始找到了这篇关于 距离编辑算...

    shirayner
  • python文本相似度计算

    步骤 分词、去停用词 词袋模型向量化文本 TF-IDF模型向量化文本 LSI模型向量化文本 计算相似度 理论知识 ...

    小莹莹
  • 文本相似度——编辑距离

    莫斯
  • 文本相似度算法小结

    首先是最简单粗暴的算法。为了对比两个东西的相似度,我们很容易就想到可以看他们之间有多少相似的内容,又有多少不同的内容,再进一步可以想到集合的交并集概念。

    Marky Lumin
  • python文本相似度计算

    步骤 分词、去停用词 词袋模型向量化文本 TF-IDF模型向量化文本 LSI模型向量化文本 计算相似度 理论知识...

    机器学习AI算法工程
  • 句子相似度的计算 | NLP基础

    自然语言处理的终极目标是让计算机理解人类所使用的语言。但是由于人类语言的多样性,语义的多样性等原因使得这一目标复杂度极高,目前还无法直接建模和解决。

    叶锦鲤
  • python文本相似度计算

    两篇中文文本,如何计算相似度?相似度是数学上的概念,自然语言肯定无法完成,所有要把文本转化为向量。两个向量计算相似度就很简单了,欧式距离、余弦相似度等等各种方法...

    周小董
  • 研究中文文本相似度能解决很多NLP领域文本相关的问题

    人与计算机的交互过程中,如果能提供人类的自然语言形式来进行交流,那人与计算机就能更加亲密友好。而要实现这一机制就需要自然语言处理来处理,一般来说自然语言处理会涉...

    人工智能的秘密
  • 角度和文本相似度原理

    在欧几里得空间中定义了距离和向量长度(范数)之后,就可以继续定义角度,以平面几何空间为例,如图1-5-9所示,设

    老齐
  • 文本相似度——汉明距离

    汉明距离定义:在信息论中,两个等长字符串之间的汉明距离(英语:Hamming distance)是两个字符串对应位置的不同字符的个数。换句话说,它就是将一个字符...

    莫斯

扫码关注腾讯云开发者

领取腾讯云代金券