WordEmbedding 和 Word2vec 相关名词解释

本文深入探讨了自然语言处理中词嵌入的概念,包括One-hot表示、分布式表示等词表示方法,以及神经网络语言模型在词向量生成中的应用。特别介绍了Word2Vec的两种模型CBOW和Skip-Gram,展示了如何通过这些模型捕获词的语义信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

WordEmbedding 和 Word2vec 相关名词解释

自然语言理解的问题要转化为机器学习的问题,第一步肯定是要找一种方法把这些符号数学化。之所以希望把每个单词变成一个向量,目的还是为了方便计算,比如“求单词A的同义词”,就可以通过“求与单词A在cos距离下最相似的向量”来做到。

一、NLP 词的表示方法类型(representation)

1. One-Hot representation (词的独热表示)

one-hot representation NLP 中最直观,也是到目前为止最常用的词表示方法是 One-hot Representation,这种方法把每个词表示为一个很长的向量。这个向量的维度是词表大小,其中绝大多数元素为 0,只有一个维度的值为 1,这个维度就代表了当前的词。NLP中最直观,也是到目前为止最常用的词表示方法这种方法把每个词表示为一个很长的向量。这个向量的维度是词表大小,其中绝大多数元素为0,只有一个维度的值为1,这个维度就代表了当前的词。存在一个重要的问题就是,任意两个词之间都是孤立的。光从这两个向量中看不出两个词是否有关系。

One-hot方法很简单,但是它的问题也很明显:
1)它没有考虑单词之间相对位置的关系;任意两个词之间都是孤立的,根本无法表示出在语义层面上词语词之间的相关信息,而这一点是致命的。
2)向量的维度会随着句子的词的数量类型增大而增大;词向量可能非常非常长!

2. Distributed Representation(词的分布式表示)

传统的独热表示( one-hot representation)仅仅将词符号化,不包含任何语义信息。如何将语义融入到词表示中?Harris 在 1954 年提出的分布假说( distributional hypothesis)为这一设想提供了理论基础:上下文相似的词,其语义也相似。Firth 在 1957 年对分布假说进行了进一步阐述和明确:词的语义由其上下文决定( a word is characterized by thecompany it keeps)。

到目前为止,基于分布假说的词表示方法,根据建模的不同,主要可以分为三类:基于矩阵的分布表示、基于聚类的分布表示和基于神经网络的分布表示。尽管这些不同的分布表示方法使用了不同的技术手段获取词表示,但由于这些方法均基于分布假说,它们的核心思想也都由两部分组成:
1)、选择一种方式描述上下文;
2)、选择一种模型刻画某个词(下文称“目标词”)与其上下文之间的关系。

Deep Learning 中一般用到的词向量是用 Distributed Representation 表示的一种低维实数向量。这种向量一般是这个样子:[0.792, −0.177, −0.107, 0.109, −0.542, …]。维度以 50 维和 100 维比较常见。

二、NLP语言模型

语言模型包括文法语言模型和统计语言模型。一般我们指的是统计语言模型。

1. 统计语言模型

统计语言模型把语言(词的序列)看作一个随机事件,并赋予相应的概率来描述其属于某种语言集合的可能性。给定一个词汇集合 V,对于一个由 V 中的词构成的序列S = ⟨w1, · · · , wT ⟩ ∈ Vn,统计语言模型赋予这个序列一个概率P(S),来衡量S 符合自然语言的语法和语义规则的置信度。

用一句简单的话说,语言模型就是计算一个句子的概率大小的这种模型。有什么意义呢?一个句子的打分概率越高,越说明他是更合乎人说出来的自然句子。

就是这么简单。常见的统计语言模型有N元文法模型(N-gram Model),最常见的是unigram model、bigram model、trigram model等等。形式化讲,统计语言模型的作用是为一个长度为 m 的字符串确定一个概率分布 P(w1; w2; :::; wm),表示其存在的可能性,其中 w1 到 wm 依次表示这段文本中的各个词。

2. n-gram (N元模型)

N-Gram是基于一个假设:第n个词出现与前n-1个词相关,而与其他任何词不相关(这也是隐马尔可夫当中的假设)。整个句子出现的概率就等于各个词出现的概率乘积。各个词的概率可以通过语料中统计计算得到。但是它可能会导致计算量的急剧增长。假设句子T是有词序列w1,w2,w3…wn组成,用公式表示N-Gram语言模型如下:

    P(T)=P(w1)*p(w2)*p(w3)***p(wn)=p(w1)*p(w2|w1)*p(w3|w1w2)***p(wn|w1w2w3...)

它主要有两个重要应用场景:
1)、人们基于一定的语料库,可以利用N-Gram来预计或者评估一个句子是否合理。
2)、另外一方面,N-Gram的另外一个作用是用来评估两个字符串之间的差异程度。这是模糊匹配中常用的一种手段。

三、词的分布式表示

1. 基于矩阵的分布表示

基于矩阵的分布表示通常又称为分布语义模型,在这种表示下,矩阵中的一行,就成为了对应词的表示,这种表示描述了该词的上下文的分布。由于分布假说认为上下文相似的词,其语义也相似,因此在这种表示下,两个词的语义相似度可以直接转化为两个向量的空间距离。

常见到的Global Vector 模型( GloVe模型)是一种对“词-词”矩阵进行分解从而得到词表示的方法,属于基于矩阵的分布表示

2. 基于聚类的分布表示

3. 基于神经网络的分布表示,词嵌入( word embedding)

基于神经网络的分布式表示一般称为词向量、词嵌入( word embedding)或分布式表示( distributed representation)。这正是我们 today 的主角。

神经网络词向量表示技术通过神经网络技术对上下文,以及上下文与目标词之间的关系进行建模。由于神经网络较为灵活,这类方法的最大优势在于可以表示复杂的上下文。在前面基于矩阵的分布表示方法中,最常用的上下文是词。如果使用包含词序信息的 n-gram 作为上下文,当 n 增加时, n-gram 的总数会呈指数级增长,此时会遇到维数灾难问题。而神经网络在表示 n-gram 时,可以通过一些组合方式对 n 个词进行组合,参数个数仅以线性速度增长。有了这一优势,神经网络模型可以对更复杂的上下文进行建模,在词向量中包含更丰富的语义信息。

四、词嵌入( word embedding)

1. Word Embedding(基于神经网络的分布式表示) 概念

Word embedding 是NLP中一组语言模型(language modeling)和特征学习技术(feature learning techniques)的总称,这些技术会把词汇表中的单词或者短语(words or phrases)映射成由实数构成的向量上。

基于神经网络的分布表示又称为词向量、词嵌入,神经网络词向量模型与其它分布表示方法一样,均基于分布假说,核心依然是上下文的表示以及上下文与目标词之间的关系的建模。

前面提到过,为了选择一种模型刻画某个词(下文称“目标词”)与其上下文之间的关系,我们需要在词向量中capture到一个词的上下文信息。同时,上面我们恰巧提到了统计语言模型正好具有捕捉上下文信息的能力。那么构建上下文与目标词之间的关系,最自然的一种思路就是使用语言模型。从历史上看,早期的词向量只是神经网络语言模型的副产品。

2001年, Bengio 等人正式提出神经网络语言模型( Neural Network Language Model ,NNLM),该模型在学习语言模型的同时,也得到了词向量。所以请注意一点:词向量可以认为是神经网络训练语言模型的副产品。

2. 理解

前面提过,one-hot表示法具有维度过大的缺点,那么现在将vector做一些改进:
1)、将vector每一个元素由整形改为浮点型,变为整个实数范围的表示;
2)、将原来稀疏的巨大维度压缩嵌入到一个更小维度的空间。

word embedding的意思是:给出一个文档,文档就是一个单词序列比如 “A B A C B F G”, 希望对文档中每个不同的单词都得到一个对应的向量(往往是低维向量)表示。

比如,对于这样的“A B A C B F G”的一个序列,也许我们最后能得到:A对应的向量为[0.1 0.6 -0.5],B对应的向量为[-0.2 0.9 0.7] (此处的数值只用于示意)

五、神经网络语言模型与word2vec

1. 神经网络语言模型

上面说,通过神经网络训练语言模型可以得到词向量,那么,究竟有哪些类型的神经网络语言模型呢?个人所知,大致有这么些个:
Neural Network Language Model ,NNLMb)
Log-Bilinear Language Model, LBLc)
Recurrent Neural Network based Language Model,RNNLMd)
Collobert 和 Weston 在2008 年提出的 C&W 模型e)
Mikolov 等人提出了 CBOW( Continuous Bag of-Words)和 Skip-gram 模型

到这,估计有人看到了两个熟悉的term:CBOW、skip-gram,有看过word2vec的同学应该对此有所了解。

2.word2vec

上面提到的5个神经网络语言模型,只是个在逻辑概念上的东西,那么具体我们得通过设计将其实现出来,而实现CBOW( Continuous Bag of-Words)和 Skip-gram 语言模型的工具正是well-known word2vec!另外,C&W 模型的实现工具是SENNA。

所以说,分布式词向量并不是word2vec的作者发明的,他只是提出了一种更快更好的方式来训练语言模型罢了。分别是:连续词袋模型Continous Bag of Words Model(CBOW)和Skip-Gram Model,这两种都是可以训练出词向量的方法,再具体代码操作中可以只选择其一,不过据论文说CBOW要更快一些。

1). CBOW

统计语言模型(statistical language model)就是给你几个词,在这几个词出现的前提下来计算某个词出现的(事后)概率。CBOW也是统计语言模型的一种,顾名思义就是根据某个词前面的C个词或者前后C个连续的词,来计算某个词出现的概率。

2). Skip-Gram Model

Skip-Gram Model相反,是根据某个词,然后分别计算它前后出现某几个词的各个概率。

以“我爱北京天安门”这句话为例。假设我们现在关注的词是“爱”,C=2时它的上下文分别是“我”,“北京天安门”。CBOW模型就是把“我” “北京天安门” 的one hot表示方式作为输入,也就是C个1xV的向量,分别跟同一个VxN的大小的系数矩阵W1相乘得到C个1xN的隐藏层hidden layer,然后C个取平均所以只算一个隐藏层。这个过程也被称为线性激活函数(这也算激活函数?分明就是没有激活函数了)。然后再跟另一个NxV大小的系数矩阵W2相乘得到1xV的输出层,这个输出层每个元素代表的就是词库里每个词的事后概率。输出层需要跟ground truth也就是“爱”的one hot形式做比较计算loss。这里需要注意的就是V通常是一个很大的数比如几百万,计算起来相当费时间,除了“爱”那个位置的元素肯定要算在loss里面,word2vec就用基于huffman编码的Hierarchical softmax筛选掉了一部分不可能的词,然后又用nagetive samping再去掉了一些负样本的词所以时间复杂度就从O(V)变成了O(logV)。Skip gram训练过程类似,只不过输入输出刚好相反。

六、 补充

1. Word2Vec

现在最常用、最流行的词嵌入的方式,就是Word2Vec。这是Tomas Mikolov在谷歌工作时发明的一类方法,也是由谷歌开源的一个工具包的名称。具体来说,Word2Vec中涉及到了两种算法,一个是CBOW一个是Skip-Gram。这也是因为深度学习流行起来之后,基于神经网络来完成的Word Embedding方法。

word2vec是google最新发布的深度学习工具,它利用神经网络将单词映射到低维连续实数空间,又称为单词嵌入。词与词之间的语义相似度可以通过两个单词的嵌入向量之间的余弦夹角直接衡量,更不用说使用诸如kmeans、层次聚类这样的算法来挖掘其功能了,同时作者TomasMikolov发现了比较有趣的现象,就是单词经过分布式表示后,向量之间依旧保持一定的语法规则,比如简单的加减法规则。

word2vec工具包:里面包含了几种word embedding的方法,这些方法有两个特点。一个特点是速度快,另一个特点是得到的embedding vectors具备analogy性质。analogy性质类似于“A-B=C-D”这样的结构,举例说明:“北京-中国 = 巴黎-法国”。word2vec是一个将单词转换成向量形式的工具。可以把对文本内容的处理简化为向量空间中的向量运算,计算出向量空间上的相似度,来表示文本语义上的相似度。

Word2Vec之所以现在这么流行,不同于之前的一些Word Embedding方法,它能够自动实现:
1)单词语义相似性的度量;
2)词汇的语义的类比。

除了google自己的word2vec工具,各位对词向量感兴趣的牛人们也相继编写了各自不同的版本。其中比较好用的是Python Gensim主题模型包中的word2vec,但通过阅读其源码python版本只实现了skip-gram模型,并且只实现了通过分层softmax方法对其训练,并没有使用negative sampling。下面列举一下目前出现的版本以及相对应的地址,供大家选择。如下表:

详细查看: https://blog.youkuaiyun.com/zhoubl668/article/details/24314769

版本地址CBOWSkip-Gram
Chttp://word2vec.googlecode.com/svn/trunk/HS、ENGHS 、 ENG
pythonhttp://radimrehurek.com/gensim/HS
Javahttps://github.com/ansjsun/Word2VEC_javaHSHS
C++https://github.com/jdeng/word2vec未知未知

2. Cocurrence matrix

一个非常重要的思想是,我们认为某个词的意思跟它临近的单词是紧密相关的。这是我们可以设定一个窗口(大小一般是5~10),如下窗口大小是2,那么在这个窗口内,与rests 共同出现的单词就有life、he、in、peace。然后我们就利用这种共现关系来生成词向量。

虽然Cocurrence matrix一定程度上解决了单词间相对位置也应予以重视这个问题。但是它仍然面对维度灾难。也即是说一个word的向量表示长度太长了。

本文参考并摘自:
http://licstar.net/archives/328
https://blog.youkuaiyun.com/Scythe666/article/details/78831268
https://blog.youkuaiyun.com/baimafujinji/article/details/77836142
https://blog.youkuaiyun.com/jdbc/article/details/49467239?utm_source=blogxgwz0
https://blog.youkuaiyun.com/jdbc/article/details/47406867
https://blog.youkuaiyun.com/zhoubl668/article/details/24314769

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值