Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >NLP 点滴 :文本相似度 (下)

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

原创
作者头像
肖力涛
修改于 2017-08-24 01:57:02
修改于 2017-08-24 01:57:02
3.4K1
举报
文章被收录于专栏:肖力涛的专栏肖力涛的专栏

《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 删除。

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

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

评论
登录后参与评论
1 条评论
热度
最新
肖老师,相似度度量包括基于字面的,基于背景知识库的,基于上下文结构的,还有基于实例的,您从基于字面和语义的角度来介绍我有些不太懂,可否拥有您的联系方式以便更好和您交流,我是一名搞相似度度量的研究生。
肖老师,相似度度量包括基于字面的,基于背景知识库的,基于上下文结构的,还有基于实例的,您从基于字面和语义的角度来介绍我有些不太懂,可否拥有您的联系方式以便更好和您交流,我是一名搞相似度度量的研究生。
回复回复点赞举报
推荐阅读
编辑精选文章
换一批
【NLP】Word2Vec详解(含数学推导)
word2vec可以在百万数量级的词典和上亿的数据集上进行高效地训练;并且,该工具得到的训练结果——词向量(word embedding),可以很好地度量词与词之间的相似性。随着深度学习(Deep Learning)在自然语言处理中应用的普及,很多人误以为word2vec是一种深度学习算法。其实word2vec算法的背后是一个浅层神经网络。
黄博的机器学习圈子
2020/09/04
2.6K0
【NLP】Word2Vec详解(含数学推导)
超详细总结之Word2Vec(一)原理推导[通俗易懂]
本章是介绍Word2Vec的原理推导部分,后面还会有基于TensorFlow的Word2Vec代码实现讲解。
全栈程序员站长
2022/08/30
2.2K0
超详细总结之Word2Vec(一)原理推导[通俗易懂]
不是你无法入门自然语言处理(NLP),而是你没找到正确的打开方式
〇、序 之前一段时间,在结合深度学习做 NLP 的时候一直有思考一些问题,其中有一个问题算是最核心一个:究竟深度网络是怎么做到让各种 NLP 任务解决地如何完美呢?到底我的数据在 NN 中发什么了什么呢? 并且,不少的 terms like: 词向量、word embedding、分布式表示、word2vec、glove 等等,这一锅粥的名词术语分别代表什么,他们具体的关系是什么,他们是否处于平级关系? 出于对知识结构追求完整梳理的强迫症的老毛病,于是不停地查资料、思考、keep revolving……
AI研习社
2018/03/19
1.3K0
不是你无法入门自然语言处理(NLP),而是你没找到正确的打开方式
词嵌入技术解析(一)
在讨论词嵌入之前,先要理解词向量的表达形式,注意,这里的词向量不是指Word2Vec。关于词向量的表达,现阶段采用的主要有One hot representation和Distributed representation两种表现形式。
Bo_hemian
2020/09/09
1.4K0
【深度学习】NLP自然语言处理
语言模型通俗的将就是判断一句话是不是正常人说出来的。统计语言模型是所有 NLP的基础,被广泛应用与语音识别、机器翻译、分词、词性标注和信息检索等任务。传统的统计语言模型是表示语言基本单位(一般为句子)的概率分布函数,这个概率分布也是该语言的生成模型。通俗的讲,如果一句话没有在语料库中出现,可以模拟句子的生成的方式,生成句子在语料库中的概率。一般语言模型可以使用各个词语条件概率的形式表示:
天天Lotay
2023/04/07
5020
【深度学习】NLP自然语言处理
Word2vec原理及其Python实现「建议收藏」
在NLP(自然语言处理)里面,最细粒度的是词语,词语组成句子,句子再组成段落、篇章、文档。所以要处理 NLP 的问题,首先就要拿词语开刀。
全栈程序员站长
2022/08/30
3.8K0
Word2vec原理及其Python实现「建议收藏」
词向量技术 | 从word2vec到ELMo
"词和句子的嵌入已成为所有基于深度学习的自然语言处理(NLP)系统的重要组成部分,它们在固定长度的稠密向量中编码单词和句子,以大幅度提高神经网络处理文本数据的能力。"
用户1332428
2018/08/17
2.5K0
词向量技术 | 从word2vec到ELMo
NLP从词袋到Word2Vec的文本表示
在NLP(自然语言处理)领域,文本表示是第一步,也是很重要的一步,通俗来说就是把人类的语言符号转化为机器能够进行计算的数字,因为普通的文本语言机器是看不懂的,必须通过转化来表征对应文本。早期是基于规则的方法进行转化,而现代的方法是基于统计机器学习的方法。
mantch
2019/07/30
1.4K0
NLP从词袋到Word2Vec的文本表示
word2vec原理与Gensim使用[通俗易懂]
与NNLM相比,word2vec的主要目的是生成词向量而不是语言模型,在CBOW中,投射层将词向量直接相加而不是拼接起来,并舍弃了隐层,这些牺牲都是为了减少计算量。不经过优化的CBOW和Skip-gram中 ,在每个样本中每个词的训练过程都要遍历整个词汇表,也就是都需要经过softmax归一化,计算误差向量和梯度以更新两个词向量矩阵(这两个词向量矩阵实际上就是最终的词向量,可认为初始化不一样),当语料库规模变大、词汇表增长时,训练变得不切实际。为了解决这个问题,word2vec支持两种优化方法:hierarchical softmax 和negative sampling。
全栈程序员站长
2022/08/29
1.6K0
word2vec原理与Gensim使用[通俗易懂]
NLP中的词向量对比:word2vec/glove/fastText/elmo/GPT/bert
一、文本表示和各词向量间的对比 1、文本表示哪些方法? 2、怎么从语言模型理解词向量?怎么理解分布式假设? 3、传统的词向量有什么问题?怎么解决?各种词向量的特点是什么? 4、word2vec和NNLM对比有什么区别?(word2vec vs NNLM) 5、word2vec和fastText对比有什么区别?(word2vec vs fastText) 6、glove和word2vec、 LSA对比有什么区别?(word2vec vs glove vs LSA) 7、 elmo、GPT、bert三者之间有什么区别?(elmo vs GPT vs bert)
zenRRan
2019/06/14
3.8K0
NLP中的词向量对比:word2vec/glove/fastText/elmo/GPT/bert
NLP之——Word2Vec详解
2013年,Google开源了一款用于词向量计算的工具——word2vec,引起了工业界和学术界的关注。首先,word2vec可以在百万数量级的词典和上亿的数据集上进行高效地训练;其次,该工具得到的训练结果——词向量(word embedding),可以很好地度量词与词之间的相似性。随着深度学习(Deep Learning)在自然语言处理中应用的普及,很多人误以为word2vec是一种深度学习算法。其实word2vec算法的背后是一个浅层神经网络。另外需要强调的一点是,word2vec是一个计算word vector的开源工具。当我们在说word2vec算法或模型的时候,其实指的是其背后用于计算word vector的CBoW模型和Skip-gram模型。很多人以为word2vec指的是一个算法或模型,这也是一种谬误。接下来,本文将从统计语言模型出发,尽可能详细地介绍word2vec工具背后的算法模型的来龙去脉。
10JQKA
2018/07/25
1.2K0
NLP之——Word2Vec详解
Word2Vec —— 深度学习的一小步,自然语言处理的一大步
Word2Vec 模型用来学习单词的向量表示,我们称为「词嵌入」。通常作为一种预处理步骤,在这之后词向量被送入判别模型(通常是 RNN)生成预测结果和执行各种有趣的操作。
AI研习社
2018/07/26
4540
Word2Vec —— 深度学习的一小步,自然语言处理的一大步
浅谈词向量
将词语表示为向量的技术并不是最近几年的新思想。例如向量空间模型将词表示为词典维度的高维向量。这种表示带来的问题主要包括两个方面。一方面词与词之间相互独立,无法表达词语之间的关系。另一方面向量过于稀疏,计算和存储的效率都不高。
数据科学人工智能
2023/01/30
9150
机器学习|7种经典预训练模型原理解析
目前无论在CV领域还是NLP领域,预训练都是一个很普遍和普适的方法。我们都知道深度学习的模型越庞大,模型参数越多,为了避免过拟合就需要相应大规模的数据集,但对于很多任务而言,样本标注的成本昂贵。相反,大规模无标签数据库相对容易建立,为了充分利用这些无标记数据,我们可以先使用它们在其他一些任务上学习一个好的特征表示,再用于训练目标任务。
智能生信
2021/02/04
5.5K0
从Word2Vec到Bert,聊聊词向量的前世今生(一)
原文链接:https://zhuanlan.zhihu.com/p/58425003
zenRRan
2019/08/19
1.5K0
从Word2Vec到Bert,聊聊词向量的前世今生(一)
【算法】word2vec与doc2vec模型
小编邀请您,先思考: 1 word2vec算法原理是什么? 2 word2vec与doc2vec有什么差异? 3 如何做word2vec和doc2vec? 深度学习掀开了机器学习的新篇章,目前深度学习应用于图像和语音已经产生了突破性的研究进展。深度学习一直被人们推崇为一种类似于人脑结构的人工智能算法,那为什么深度学习在语义分析领域仍然没有实质性的进展呢?   引用三年前一位网友的话来讲:   “Steve Renals算了一下icassp录取文章题目中包含deep learning的数量,发现有44篇,而n
陆勤_数据人网
2018/03/20
2.2K0
【算法】word2vec与doc2vec模型
深入机器学习系列之Word2Vec
word2vec的核心是神经网络的方法,采用 CBOW(Continuous Bag-Of-Words,即连续的词袋模型)和 Skip-Gram 两种模型,通过训练,可以把对文本内容的处理简化为 K 维向量空间中的向量运算,而向量空间上的相似度可以用来表示文本语义上的相似度。
数据猿
2019/07/26
4130
【Embedding】Word2Vec:词嵌入的一枚银弹
Word2Vec 是 Google 在 2013 年开源的一个词向量(Word Embedding)计算工具,其用来解决单词的分布编码问题,因其简单高效引起了工业界和学术界极大的关注。
阿泽 Crz
2020/07/21
1.7K0
【Embedding】Word2Vec:词嵌入的一枚银弹
词向量算法「建议收藏」
https://www.cnblogs.com/the-wolf-sky/articles/10192363.html
全栈程序员站长
2022/06/30
9260
词向量算法「建议收藏」
词向量表示[通俗易懂]
语音中,用音频频谱序列向量所构成的矩阵作为模型的输入;在图像中,用图像的像素构成的矩阵数据作为模型的输入。这些都可以很好表示语音/图像数据。而语言高度抽象,很难刻画词语之间的联系,比如“麦克风”和“话筒”这样的同义词,从字面上也难以看出这两者意思相同,即“语义鸿沟”现象。
全栈程序员站长
2022/09/01
1.5K0
词向量表示[通俗易懂]
相关推荐
【NLP】Word2Vec详解(含数学推导)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档