第六章:向量语义_Dan Jurafsky《自然语言处理综述》(第三版)读书笔记

6.0前言

在不同的地区,如果生存环境类似,不同的物种能进化出类似的特征。在同样语境里的不同词语也有类似意义,这被称为分布假设。两个词意义的差异程度与其所在的环境之间的差异程度相当。向量语义,正是这个假设的实例化。根据词语在文本中的分布,能够学习到词语的语义表示。所有涉及语义的NLP应用中语义表示都要用到。通过无监督方式学习语义表示,而不是通过特征工程人为设计,是当今研究的重点。以下从词义的基本原则讲起。

6.1词汇语义

我们是如何表示一个词的意义的呢?在传统的语言模型中,对于一个词的表示是它在词表中的索引。但这样是不够的,我们需要一个词义模型为我们做更多的事情,比如能告诉我们哪些词意义相近或相反,表示消极还是积极等。更一般地,帮助我们解决语义相关的任务,比如问答、摘要、对话等。语言学领域对于语义的研究称为词汇语义。
首先,区分词根(lemma:sing)与词形(wordforms:sings,sung)。词根存在一词多义的现象。
其次,词义之间的关系有同义(事实上并不存在完全语义相同的词语)、反义(有表示量级的反义,也有表示方向的反义),但即使两个词反义,事实上也只是在某一方面的意义相反,在其他方面却意义相同,所以自动区分同义反义关系是很难的。
词的相似性:同义词并不多,不过多数词都有多个相似词。cat不是dog的同义词,但是cats和dogs确是相似词。同义到相似的转换,实际上是词义关系到词语关系的转换。处理词语的关系,可以帮助简化问题,避免深陷词义表示。大规模语义任务中,词语相似性非常有用。例如,短语或句子的相似性有助解决问答、摘要等任务。如果我们想要知道两个短语或者句子是否有相似意义,可以看两个词的意义是否相似。确定词相似的一个方法是人工判断,比如:为两个词的相似度从0到10打分。

词语1词语2相似分数
vanishdisappear9.8
behaveobey7.3
holeagreement0.3

词语相关性:试想coffee和cup这两个词,完全没有相似性,但是这俩词很显然是有关联的,它们是“drinking coffee out of cup”这一事件的共同参与者。是否属于同一个语义场是判断词语间是否具有相关性的一个方法。语义场是在一个特定的语义领域内的词语的集合,词语间具有结构化的关系。比如,语义场hospitals(surgeon, scalpel, nurse, anaesthetic, hospital)。语义场与主题模型关系紧密,是发现文档主题结构的有用工具。比如LDA,通过无监督的文本学习,从文本中归纳出具有相关性的词语。
框架语义和语义角色:与语义场紧密相关的一个idea是框架语义,指在一个特定的事件类型中,表示事件参与者和参与角度的词语集合。比如,商业交易是这样一个事件:一个实体把钱给另外一个实体,并获得商品或者服务,结果是商品易手或者服务发生。这一事件可以使用进行词汇化编码,动词:buy(buyer角度)、sell(seller角度)、pay(货币角度),名词:buyer。框架内有语义角色,比如buyer、seller、goods、money,句子内的词语将担任这些角色。通过语义框架可以让系统对句子进行转换,比如Sam bought the book from Ling可以转变为Ling sold the book to Sam。这类转换对于问答、机器翻译都有用处。
分类关系:词语意义之间还存在分类关系,或者上下位关系。car是vehicle的下位词,vehicle是car的上位词。上位词表示的类包含下位词表示的类。上位关系也可以定义为蕴涵。所有的A都是B,那么A是B的下位词,A蕴含B,∀x A(x) ⇒ B(x)。上下位关系具有可传递性,如果A是B的下位词,B是C的下位词,那么A就是C的下位词。上下位结构也叫IS-A层次结构,比如A IS-A B。上下位关系可用于的任务有问答、文本蕴含(Textual Entailment (TE) models take a pair of sentences and predict whether the facts in the first necessarily imply the facts in the second one. )比如,知道白血病是癌症的一种,会更有效地回答白血病问题。
隐含意义:最后,词语具有情感意义或者说隐含意义。例如happy具有积极隐含意义,sad具有消极隐含意义。情感分析、舆情监测等都要用到情感意义。早期的情感意义研究将情感表示为3个维度。

  1. valence:the pleasantness of the stimulus: happy>unhappy
  2. arousal: the intensity of emotion provoked by the stimulus: excited>calm
  3. dominance: the degree of control exerted by the stimulus: important>influenced
    比如heartbreak可用三个维度表示为[2.45,5.65,3.58],这在三维空间里是一个点,这也是最早用向量表示语义的形式。

向量语义

我们如何构建一个计算模型,可以有效处理词义的各个方面,比如上面提到的词语相似性、词语相关性、语义场、语义框架、隐含语义等?
目前最好的模型是向量语义,它是来自与50年代语言学与哲学的灵感。维特根斯坦(1953)表示“词语的意义决定于它在语言中的使用”,与其为每个词提供定义,不如把词表示成说话人的实际使用方式。弗斯(1957)等人提出了实现维特根斯坦理论的idea:把一个词定义为它所在的语境或者分布。一个词的分布指的是这个词发生的语境,包括相邻词语或者语法环境。这个idea是说,两个词如果具有类似的分布(语境),就有类似的意义。
向量语义结合了两种直觉:1.分布的直觉(通过观察语境中的其它词语来定义一个词);2.向量的直觉,把一个词定义为一个向量,也就是一串数字,作为N维向量空间中的一个点。向量语义有很多不同的版本,对向量内的数字的定义都不同,不过都是基于词语语境的。
在这里插入图片描述
表示词语的向量也被称为词嵌入,因为词语被嵌入到了一个特定的向量空间。这让向量语义有一个巨大的优势:它提供了一个精细的意义模型,让我们可以找到词语相似性和短语相似性。第四章中的情感分类器起作用的条件是情感词在测试集和训练集中都存在。但如果我们用词嵌入,只要训练集中存在与测试集相似的词语,我们可以进行情感分类。向量语义模型非常实用的一个原因是词嵌入可以通过无监督方式自动习得。
由于以上优势,向量语义模型成为目前标准的词语表示方式。下面介绍两种常用模型:tf-idf模型,常常作为基线,把词语变成稀疏向量;word2vec模型,构建又短又稠密的向量。然后介绍余弦(cosine),它使用词嵌入从词语、句子、文档的水平上来计算语义相似性,用于问答、摘要、论文自动分级等任务。

6.3词语和向量

意义的向量或者分布式模型通常基于共现矩阵,一种显示词语共现的方式。词语-文档矩阵(term-document matrix)是其中一种矩阵。

6.3.1向量与文档

下面的词语-文档矩阵显示,词语fool在文档Twelfth Night中出现的58次。一篇文档就被表示为一个词频向量,也就是矩阵中的一列。
在这里插入图片描述
一个向量,就是一串数字,所以文档as you like it就是[1, 114, 36, 20];向量空间就是这些向量的集合,维度是它的特征。真实的词语-文档矩阵的维度是词表长度,向量的每一个维度都有实际的意义,比较某个维度上的数字可以确定文档的相似性。每一个文档就是向量空间里得一个点。
词语-文档矩阵最初用于文档信息检索。两篇类似的文档所用的词也接近,反之亦然。信息检索(Information Retrieval)是给定一个查询条件q,从文档集D中找到符合条件按的文档d。查询条件q也需要表示成向量。向量的匹配过程可以使用tf-idf和余弦相似矩阵。

6.3.2词语表示为向量

词语的向量表示通常用词语-上下文矩阵获得。这是一个V*V的矩阵,矩阵中的每个元素代表目标词(行)与上下文词(列)在语料库中的共现次数。上下文常常限定为±4,目标词的前后4个词。比如下面红色框线内为digital的向量表示。
在这里插入图片描述
从矩阵中可以直观地看到,apricot和pineapple相似度比较高。下面讲如何通过向量计算词语的相似度。

6.4计算余弦相似度

余弦相似度是目前最常用的度量相似度的方法,测量的是向量间夹角的余弦。余弦基于点积,也叫内积: d o t − p r o d u c t ( v ⇀ , w ⇀ ) = v ⋅ w = ∑ i = 1 N v i w i = v 1 w 1 + v 2 w 2 + . . . + v N w N dot-product(\overset\rightharpoonup v,\overset\rightharpoonup w)=v\cdot w=\sum_{i=1}^Nv_iw_i=v_1w_1+v_2w_2+...+v_Nw_N dotproduct(v,w)=vw=i=1Nviwi=v1w1+v2w2+...+vNwN点积之所以可以作为相似度的测量指标,是因为如果两个向量在同一个维度都有较大的值,点积结果就大。相反,向量在不同维度的值为零,点积结果也将为零,表示差异巨大。点积有一个问题,就是向量越长,点积越大。频率越高的词向量越长(因为它们与更多的词共现,并且共现次数多)。我们应当消除向量长度对向量点积的影响,方法是点积除以两个向量的长度之积,其实就是求向量夹角的余弦值:
a ⇀ ⋅ b ⇀ = ∣ a ∣ ⇀ ∣ b ∣ ⇀ cos ⁡ θ \overset\rightharpoonup a\cdot\overset\rightharpoonup b=\vert\overset\rightharpoonup{a\vert}\vert\overset\rightharpoonup{b\vert}\cos\theta ab=abcosθ a ⇀ ⋅ b ⇀ ∣ a ∣ ⇀ ∣ b ∣ ⇀ = cos ⁡ θ \frac{\overset\rightharpoonup a\cdot\overset\rightharpoonup b}{\vert\overset\rightharpoonup{a\vert}\vert\overset\rightharpoonup{b\vert}}=\cos\theta abab=cosθ
因此两个向量的余弦相似度的计算方式是: cos ⁡ i n e ( v ⇀ , w ⇀ )    =    v ⇀    ⋅ w ⇀    ∣ v ⇀    ∣ ∣ w ⇀ ∣    = ∑ i = 1 N v i w i ∑ i = 1 N v i 2 ∑ i = 1 N w i 2 \cos ine(\overset\rightharpoonup v,\overset\rightharpoonup w)\;=\;\frac{\overset\rightharpoonup v\;\cdot\overset\rightharpoonup w\;}{\vert\overset\rightharpoonup v\;\vert\vert\overset\rightharpoonup w\vert\;}=\frac{{\displaystyle\sum_{i=1}^N}v_iw_i}{\sqrt{{\displaystyle\sum_{i=1}^N}v_i^2}\sqrt{{\displaystyle\sum_{i=1}^N}w_i^2}} cosine(v,w)=vwvw=i=1Nvi2 i=1Nwi2 i=1Nviwi

6.5TF-IDF:向量中的加权项

事实上,简单的共现频率并不是测量词语关系的最好方法。
两个词语共现次数越多,相互间对意义的影响越大;但是有些词跟其他任何词共现又过多,比如the、good等,相互间对意义的影响又很小了。那么如何来平衡这个共现次数呢?我们用tf-idf算法,是两个项的乘积,这个算法也有两种直觉:

  1. 第一项是词频(term frequency-tf):我们并不直接统计文档里某词的数量,而是使用数量的对数,log10(词频),因为某词出现100次,并不代表它与所在文档有100倍的相关性。在这里插入图片描述根据公式,如果一个词在文档中出现10次,那么tf=2,100次,tf=3。
  2. 第二项是逆文档频率(inverse document frequency-idf):那些只出现在少量文档内的词语可以获得较高权重,这些词对所在的文档具有更高的辨别力。先看文档频率(document frequency-df),dft指的是含有词语t的文档数量。全集词频(collection frequency)指的是词语t在整个语料库中出现的次数。
词语全集词频文档频率
Romeo1131
action11331

Romeo和action在莎士比亚语料库中都出现了113次,不过Romeo只在一个文档中出现过。故Romeo对于所在文档有更高的辨别力,所以我们给Romeo更高的辨别力权重,叫做逆文档频率,或者idf。 i d f = N d f t idf=\frac N {df_t} idf=dftN,其中N是语料库中文档总数量,dft是含有词语t的文档数量。最小值为1,表示某个词在所有文档中都有出现。由于语料库中文档数量巨大,我们还是常用对数函数来压缩idf,所以结果是:
在这里插入图片描述
下面是一些词语的idf:

词语dfidf
Romeo11.57
salad21.127
fool360.012
good370

现在将tf和idf结合起来(tf-idf),表示词语t在文档d中的权值 w t , d = t f t , d × i d f t w_{t,d}=tf_{t,d}×idf_t wt,d=tft,d×idft
使用tf-idf将Figure6.2(词语-文档矩阵)转换成Figure6.8(tf-idf矩阵)。常见词good的tf-idf值变成了0,所以再进行文档之间比较的时候good就会被忽略啦。在这里插入图片描述
tf-idf是目前IR领域赋权给共现矩阵的主流方法,也是一个很好的基线。后面,我们会看到其他的赋权方法,比如PPMI。

6.6tf-idf向量模型的应用

目前为止,向量语义模型将目标词表示为V维的向量,还是很稀疏。每个维度的值是共现值经过tf-idf赋权后的值,然后计算两个词向量的余弦值,获得两个词的相似度。这整个模型就叫做tf-idf模型。这个模型的常常用于计算词语相似度,是paraphrase词语、追踪词义变化、自动发现不同语料库中词义差异等任务的常用工具。比如我们可以计算词w与语料库中其他词的相似度,排序之后找出最相似的10个词。
tf-idf模型还可以用来计算两个文档之间的相似度,将文档中所有词的向量加和,然后除以向量的数量进行平均: d = w 1 + w 2 + . . . + w k k d=\frac {w_1+w_2+...+w_k}k d=kw1+w2+...+wk,计算两个文档的向量,然后求cos(d1,d2)。文档相似度可以用于IR,抄袭检测、新闻推荐以及其他数字人文(digital humanities)任务。

6.7选修:点互信息Pointwise Mutual Information(PMI)

PPMI(Positive PMI)是另一种赋权函数。PPMI来源于这样的直觉:了解两个词之间联系程度的最好方法是看两个词在语料库中的真实共现次数,是不是多于先验的随机的共现次数。
PMI是NLP中最重要的概念之一。它用来通过与x、y两个事件独立发生的期望做比较,测量它们同时发生的情况: I ( x , y ) = l o g 2 P ( x , y ) P ( x ) P ( y ) I(x,y)=log_2 \frac {P(x,y)}{P(x)P(y)} I(x,y)=log2P(x)P(y)P(x,y)于是目标词w与上下文词c的点互信息定义为: P M I ( w , c ) = l o g 2 P ( w , c ) P ( w ) P ( c ) PMI(w,c)=log_2 \frac {P(w,c)}{P(w)P(c)} PMI(w,c)=log2P(w)P(c)P(w,c)分子表示实际观察到的两个词的共现概率,分母表示假设两词分别独立出现时能够共现的概率。这个比率说明:与期望的随机共现相比,实际共现多了多少。PMI的值域为负无穷到正无穷,但是PMI值为负时说明两个词的实际共现次数比预期还要少,所以负值PMI意义不大。所以我们使用正PMI(Positive PMI),把PMI的负值全部变为0: P P M I ( w , c ) = m a x ( l o g 2 P ( w , c ) P ( w ) P ( c ) , 0 ) PPMI(w,c)=max(log_2\frac {P(w,c)}{P(w)P(c)},0) PPMI(w,c)=max(log2P(w)P(c)P(w,c),0)
假设我们有一个共现矩阵F,W行(words),C列(contexts),fij表示词语wi与词语Cj共现的次数。这个共现矩阵就可以被转化为PPMI矩阵,其中PPMIij表示词语wi与词语Cj的PPMI值。
在这里插入图片描述
PMI有一个问题,非常用词往往会得到非常高的PMI值。解决这个问题的一个方法是:用 P α ( c ) P_\alpha (c) Pα(c)来代替 P ( c ) P(c) P(c): P P M I α ( w , c ) = m a x ( l o g 2 P ( w , c ) P ( w ) P α ( c ) , 0 ) PPMI_\alpha(w,c)=max(log_2\frac {P(w,c)}{P(w)P\alpha(c)},0) PPMIα(w,c)=max(log2P(w)Pα(c)P(w,c),0) 其中 P α ( c ) = c o u n t ( c ) α Σ c c o u n t ( c ) α P_\alpha (c)=\frac {count(c)^\alpha}{\Sigma_c count(c)^\alpha} Pα(c)=Σccount(c)αcount(c)α α = 0.75 \alpha=0.75 α=0.75时,词嵌入在各种任务上表现最好,原因是当 α = 0.75 \alpha=0.75 α=0.75提高了非常用词的发生概率,并因此降低了它们的PMI值。
另外一个方法是使用Laplace平滑:在计算PMI之前,给共现矩阵中每个元素加一个常数k(常用0.1-3),减少转化后的PPMI矩阵的零值。k越大,零值越少。

6.8 Word2vec

前面讲到的词向量很长又很稀疏,向量中的值是词语共现次数经过tf-idf或者PPMI函数得到的。本部分将讲解词语的另外一种向量表示方法:很短(大概50-500维);很稠密(dense,大部分的值都非零)。
实践证明稠密向量比稀疏向量在所有的NLP任务上表现都要好。可能的原因是:1.稠密向量更适合作为机器学习系统的输入特征,需要学习的参数较少;2.因为要学习到的参数较少,稠密向量泛化能力更强,并能减少过拟合。3.稠密向量比稀疏向量更容易捕获同义词。
本部分要介绍的构建稠密低维向量的方法是skip-gram with negative sampling,简称SGNS,来自于word2vec包。word2vec的直觉是:我们不去统计两个词的共现频率,而是训练一个二分类器:词语w是否是目标词的上下文词?我们不关心这个分类结果本身,而是将分类器学习到的权重作为词嵌入。
这一革命性的intuition是:我们可以直接使用连续文本,作为这个二分类器的训练数据,并且这些训练数据自身就带有监督信号:因为上下文词s本身就是问题"Is world w likely to show up near apricot?"的正确答案,这样就免去的人工标注监督信号。这个idea最初是由Bengio的神经语言模型提出的,模型的任务是用前词预测后词。我们下一章会讲到神经网络,不过word2vec是比神经网络语言模型(NNLM)更为简单的模型。因为:1. word2vec简化了训练任务,使用二分类,而不是词语预测任务。2. word2vec简化了结构,它训练一个逻辑回归分类器,而不是包含隐藏层的具有复杂算法的多层神经网络。
skip-gram的intuition是:

  1. 把目标词和它附近的上下文词作为正例(Positive samples)。
  2. 在词典中随机取样获得负例(Negative samples)。
  3. 使用逻辑回归训练区分正负例的分类器。
  4. 使用回归权重作为词嵌入。

6.8.1分类器

我们先看分类任务,再看训练方法。看下面句子,目标词为apricot,使用窗口为±2的上下文词。
……lemon, a [tablespoon(c1) of(c2) apricot(t) jam(c3), a(c4)] pinch……
我们的目标是:训练一个分类器。给一个数组(t,c), t是目标词,c是候选的上下文词,例如(apricot, jam),返回c是真正的上下文词的概率 P ( + ∣ t , c ) P(+|t,c) P(+t,c),c不是t的真正上下文词的概率就是 P ( − ∣ t , c ) = 1 − P ( + ∣ t , c ) P(-|t,c)=1-P(+|t,c) P(t,c)=1P(+t,c)
分类器如何来计算这个概率P呢?这个概率基于相似性:两个词的词嵌入相似,那么它们共现的概率就大。计算词嵌入相似性的方法是点积, S i m i l a r i t y ( t , c ) ≈ t ⋅ c Similarity(t,c)≈t·c Similarity(t,c)tc,但是点积的值不是概率值,余弦值也不是概率值。我们使用sigmoid函数 σ ( x ) \sigma(x) σ(x)将点积变成概率。 σ ( x ) = 1 1 + e − x \sigma(x)=\frac{1}{1+e^{-x}} σ(x)=1+ex1那么词语c是目标词t的上下文词的概率是: P ( + ∣ t , c ) = 1 1 + e − t ⋅ c P(+|t,c)=\frac{1}{1+e^{-t·c}} P(+t,c)=1+etc1于是词语c不是目标词t的上下文词的概率是: P ( − ∣ t , c ) = 1 − P ( + ∣ t , c ) = e − t ⋅ c 1 + e − t ⋅ c P(-|t,c)=1-P(+|t,c)=\frac{e^{-t·c}}{1+e^{-t·c}} P(t,c)=1P(+t,c)=1+etcetc上面公式只给了我们1个词作为上下文词的概率,而我们要考虑窗口内所有词的概率。Skip-gram有一个简单却强大的假设:所有上下文词都是独立的。所以我们可以直接把它们的概率乘起来。
在这里插入图片描述
综上,skip-gram训练了一个概率分类器。给定一个目标词t,设定上下文窗口为k个词:c1:k ,根据窗口内词与目标词的相似度计算概率。概率的计算方式是将目标词的词嵌入分别与每个上下文词求点积,然后将结果传入sigmoid函数。那么我们所需要的就是词典中每个词的词嵌入了。下面来看这些词嵌入是如何学到的。

6.8.2学习skip-gram词嵌入

Word2vec首先随机初始化词嵌入,然后通过迭代不断调整词嵌入,使共现词的词嵌入趋同,使不共现词的词嵌入趋异。仍然以下面这个句子为例。

……lemon, a [tablespoon(c1) of(c2) apricot(t) jam(c3), a(c4)] pinch……
一个目标词t,4个上下文词,也就是4个正例(下图左侧):在这里插入图片描述
要训练一个二分类器,我们还需要负例,skip-gram使用比正例数量更多的负例,负例/正例=k,所以对于每一个正例,我们还要创造k个负例,也就是给目标词t加一个“噪声词”。噪声词是字典中随机的一个词语,但不能是目标词t本身。上图的右侧表示k=2,所以对于每一个正例(t,c),都有两个负例。
噪声词通过词语带权重的一元语法频率 P α ( w ) P_\alpha(w) Pα(w)来选择,这里 α \alpha α是一个权重。
在这里插入图片描述
α = 0.75 \alpha = 0.75 α=0.75表现会比较好,这会给罕见词更高的被采样几率:对于罕见词来说, P α ( w ) > P ( w ) P_\alpha(w)>P(w) Pα(w)>P(w),比如a和b两个事件。

在这里插入图片描述
训练集中有了正例和负例,还有初始化的词嵌入,算法的目标就是调整这些词嵌入:最大化正例中目标词与上下文词的相似度;最小化负例中目标词与上下文词的相似度。用公式来表示目标函数为:
在这里插入图片描述
拿一个正例和其k个负例噪声词 n 1 . . . n k n_1...n_k n1...nk来看,学习的目标函数 L L L为:
在这里插入图片描述
也就是说,我们要最大化目标词与其真上下文词的点积,最小化目标词与其k个非上下文词的点积。我们可以使用随机梯度下降来训练这个目标,通过迭代修改参数(也就是每个词的词嵌入)来最大化目标函数。
注意:skip-gram模型中每个词实际上学习到了2个独立的词嵌入:目标词t的词嵌入和上下文词c的词嵌入。这些词嵌入保存为两个矩阵,目标矩阵T(W)和上下文矩阵C。矩阵T(W)的第i行是字典中词语i的1Xd维的向量ti;上下文矩阵C的第i列是词语i的dX1维的向量ci 。下图是这两个矩阵的学习方式。
在这里插入图片描述
从左侧矩阵获得目标词向量,从右侧矩阵获得上下文词向量,二者相乘求点积,输入分类器,调整参数(也就是两个矩阵)。
词嵌入学习结束后,每个词将获得2个词嵌入:ti和ci。我们舍弃矩阵C,保留矩阵W,也就是保留ti
就像基于频次的tf-idf方法一样,上下文窗口的大小L影响skip-gram的表现,因此常常需要通过开发集来调整参数L。与基于频次的方法不同的是,窗口越大,算法的计算量越大。

6.9可视化词嵌入

可视化词嵌入可以帮助理解、应用、提高那些词语意义模型。那么如何可视化一个词的意义呢?
最简单的一个方法是:通过计算余弦值,列出与词语w最相似的词语。例如,与frog最相似的7个词语是:frogs, toad, litoria, leptodactylidae, rana, lizard, eleutherodactylus。
另一个可视化方法是:使用聚类算法画出层级图示,表示出向量空间中哪些词语是相似的。如下图所示。
在这里插入图片描述
最常用的可视化方法是:将高维向量投射到2维空间中。投射的常用方法是t-SNE。

6.10词嵌入的语义特性

向量语义模型有大量的参数。其中一个参数对tf-idf和word2vec都很重要,就是上下文窗口。在上下文为3-20个词时,通常窗口大小取1-10。
对窗口大小的选择取决于你的任务目标。选择较小窗口可以使学习到的词向量包含更多的句法特征,因为较小窗口使得目标词直接从最相近的上下文词获取语义信息。比如与目标词w最相近的词将会在语义上相似并且在词类上也相似。选择较大窗口来训练词向量,那么与词语w具有最高余弦相似性的词语,与词语w的话题相关性高,但意义相关性低。比如,窗口小时,与Hogwarts最相似的词为Sunnydale, Evernight等,都是小说里的学校名;窗口大时,与Hogwarts最相似的词为Dumbledore,Malfoy,half-blood等。
区分词语间的两类相似性也很有用,一种是横组合关系(first-order co-occurrence):两个词语位置相近,比如wrote与book为横组合关系;一种是纵聚合关系(second-order co-occurrence):两个词语意义相近,比如wrote和said。
类比(Analogy) 词嵌入的另一个语义特性是:捕获语义关系的能力。比如向量(‘king’)-向量(‘man’)+向量(‘woman’)得到的向量,与向量(‘queen’)非常相近。
词向量与历史语义 ,对于研究词义随时间的变化,词嵌入也是一个有用的工具。使用历时的语料库,在每一个特定的时间段,计算出多个词嵌入空间。比如使用每十年的语料构建一个词嵌入空间,观察词义随时间的变化。
在这里插入图片描述

6.11偏见与词嵌入

词嵌入不仅从文本中学到了词义,也顺带学到了文本中隐含的一些偏见。比如使用词嵌入进行类比:‘man’-‘computer programmer’+‘woman’就与’homemaker’非常相近。Algorithms that used embeddings as part of an algorithm to search for potential programmers or doctors might thus incorrectly downweight documents with women’s names.
一些隐含关系也被编码入了词嵌入中,比如人类的推断能力。1998年的一项隐含关系测试测量了人们关于概念和属性的关联关系。这项测试发现,非裔美国人多与负面词汇关联,男性名字多与数学关联,女性名字多与艺术关联,老人名字多与负面词汇关联。Caliskan(2017)使用GloVe获得的词向量,通过计算余弦相似性复现了上面的研究。例如非裔美国人的名字Leroy与负面词汇有着更高的GloVe余弦值。因此,那些基于词嵌入的算法在做词汇的情感任务时,将导致对非裔美国人的偏见。近来的一个研究热点就是消除偏见,例如将词嵌入空间进行转换,消除性别偏见,保留definitional gender.
历时的词嵌入也常常被用来观察过往的偏见。Garg(2018)使用从20世纪的历史文本中获得的词向量测量了职业与不同种族、性别的关系。它们的研究结果与历史记录的各个职业中性别、种族的比例相符。历时词嵌入也复现了早前关于关于种族偏见的调查。比如使用1930年代的文本获得词嵌入,中国人名与’industrous’、'superstitious’等词语余弦相似度高,这与1933年的实验结果相符。他们还证实了历史上的性别偏见,比如一些关于能力的词,‘smart’, 'wise’等与男性有更高的余弦值,并发现这样的偏见自1960年以后逐渐减少。

6.12 评测向量模型

对向量模型的最重要评测方法是进行外部任务评测。把词嵌入作为特征传入NLP任务中,然后看看是否能够提高模型的表现。
不过进行内部评测也很有用。最常用的指标是检测词语在相似性上的表现,方法是比较算法计算的词语相似性和人工标注的词语相似性,常用的测试集有WordSim-353,SimLex-999. TOEFL数据集包含80个问题,每个问题含有一个目标词和四个选择项,选出哪个词是目标词的同义词。不过这些数据集都不含上下文。
更加务实的内部相似度测试任务须包含上下文。斯坦福语境词相似度数据集(SCWS)提供了一个更为广阔的评测场景,由人对句子中的2003对词进行判断。这个数据集使算法可以利用语境内的词语。还有的测试集可以评测算法在句子级别上的相似度,使用句子对,每个句子对都有人工标注的相似度分数。
还有一种评测是语义推理,系统需要解决的问题如a is to b as c is to d,给定a,b,c,找到d。

6.13总结

  • 在向量语义中,一个词就是一个向量,一个高维空间中的点,也叫词嵌入。
  • 向量语义模型分为两类:稀疏与稠密。在稀疏模型中,如tf-idf,每一个维度与词典V中的一个词对应。
  • 稀疏模型中的每个元素是词语的共现频次。词语-文档矩阵中每一行代表一个词,每一列代表一个文档。
  • 词语-上下文矩阵中,每一行代表一个目标词,每一列代表一个上下文词。
  • 词语和文档的相似性通过计算向量之间的点积获得。两个向量的余弦值,作为一个标准化了的点积,是目前最通用的测量指标。
  • PPMI(pointwise positive mutual information)是tf-idf的另一种赋权方案。
  • 稠密向量模型有50-300个维度,并且这些维度难以解读。
  • word2vec模型,包括skip-gram和CBOW,是计算稠密词嵌入的有效方法。
  • Skip-gram通过训练一个逻辑回归分类器来计算两个词在文本中共现的概率。这个概率是通过求两个词嵌入的点积获得的。
  • Skip-gram使用随机梯度下降来训练分类器,共现词有较高的点积,不共现的词有较低的点积,通过这个目标来学习到词嵌入。
  • 其他重要的词嵌入算法有GloVe,它是基于词语共现概率计算;还有fasttext,它是一个开源库,利用语素级别的n元语法,将语素的向量加起来求词的向量。

文献和历史说明

向量语义这个idea起源于1950年代。语言学、心理学、计算机科学都对这个模型做出贡献。
意义与词在上下文的分布相关,这个idea50年代在语言学界流行开来,著名学者有Firth等,符号学家Sebeok。Joos(1950)提出:一个词素的意义,决定于它与共现词素的条件概率。
词义可以作为多维语义空间中的一个点,这个idea来自于心里学家Osgood,他的研究给词语在多个维度上赋值,比如happy/sad,hard/soft。词语意义是欧几里得空间内的一个点,词义的相似性可以通过测量两个点在空间内的距离获得。
50-60年代的最后贡献是信息检索(IR)。研究者们使用新的向量表示法定义词义,并且使用互信息、idf等统计方法测量词语相似性,并指出文档意义也可以用词语的向量空间表示得到。
20世纪中叶,开始使用语义特征表示词义。这时的语义维度是少量的固定的人工设计的维度。
第一个使用稠密向量的模型是latent semantic indexing,后来称为latent semantic analysis(LSA).在LSA中,SVD被用到了词语-文档矩阵,然后使用前300维作为词嵌入。LSA作为认知模型很快被广泛应用,比如拼写检查、语言模型、论文评级等。相似的模型也被开发出来解决词义消歧。LSA也是最早提出在概率分类器中使用嵌入表示词语。SVD这个idea在词-词矩阵这种意义模型中的应用也是在LSA提出后开始的。Schutze(1997)使用SVD制作了低维向量来处理词义消歧问题。分析了语义空间,并提出降维的技术。SVD之后又发展出更多的矩阵模型,包括PLSI,LDA,NMF等。
到了2000年以后,Bengio(2003)发明了神经语言模型发展了词嵌入技术。Collobert等研究者展示了词嵌入作为词义的表示可以用于很多NLP任务。Turian(2010)比较了不同模型获得的词嵌入在不同任务上的标新啊。Mikolov(2011)使用RNN建立语言模型。Mikolov(2013)简化了神经网络的隐藏层,设计了skip-gram和CBOW算法,同时还提出负例采样的训练算法。
关于词嵌入的研究探究了稀疏向量和稠密向量之间的数学关系,还有词嵌入本身和其参数化。
还有很多的词嵌入算法,比如使用SVD把稀疏的PPMI词嵌入降维。除了word2vec以外,最常用的词嵌入模型是GloVe(2014):Global Vectors,使用了global corpus(综合语料库)。GloVe基于词与词的共现矩阵,从中获取概率,结合PPMI等基于频次的模型,同时也使用到了word2vec的线性结构。
还有fasttext,使用subword模型处理未知词和稀疏性。在fasttext中,每一个词被表示为它本身+一组n元语法的组成成分,并使用尖括号< ,>作为边界。例如,使用3元语法时,词语where可以表示为<wh, whe, her, ere, re>加上< where >。然后使用skip-gram来训练n元语法中每个成分的向量,词语where的词嵌入就是组成它的所有成分的向量的和。Cruse(2004)介绍了词汇语义,很有用处。

  • 4
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是适合本科学习的人工智能自然语言处理资料: 1. "自然语言处理入门"(第二版) by Jacob Eisenstein, Emily Bender and Martha Palmer:这本教科书是介绍自然语言处理基础的经典著作。它涵盖了自然语言处理的各个方面,包括语言模型、文本分类、信息抽取、词向量、机器翻译等等。该书也提供了许多练习和案例研究,帮助读者巩固所学知识。 2. "Python自然语言处理"(第二版) by Steven Bird, Ewan Klein, and Edward Loper:这本书介绍了如何使用Python进行自然语言处理。它涵盖了许多有用的技术,包括正则表达式、词干提取、文本分类、语言模型等等。书中还包含了很多代码示例和案例研究,非常适合自学。 3. "自然语言处理综述"(第二版) by Daniel Jurafsky and James H. Martin:这本书介绍了自然语言处理的一些基础概念和技术,如句法分析、语义分析、情感分析等等。该书的目的是介绍自然语言处理的广泛领域,对于对该领域感兴趣的学生来说非常有价值。 4. "机器学习"(周志华著):虽然该书不是关于自然语言处理的专业书籍,但它是机器学习方面的经典教材。由于自然语言处理是一个机器学习的应用领域,因此该书的知识对于理解和应用自然语言处理技术非常有帮助。 5. "TensorFlow实战Google深度学习框架"(第二版) by 黄文坚, 唐源等人:本书介绍了如何使用TensorFlow这个流行的深度学习框架来构建自然语言处理模型。读者可以学习如何使用神经网络来处理文本数据、进行文本分类、语言模型等等。书中还包含了许多代码示例和案例研究,适合自学。 以上是一些适合本科学习的人工智能自然语言处理资料,建议学生们选择自己感兴趣的书籍进行学习。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值