CS224n--Lecture 1 Introduction and Word Vectors
1 如何表示词的意思(Meaning of a word)
meaning的定义是,一个词或短语表达出的主意,或是一个人想要用词语或符号表达的意思,或者是一个艺术作品或著作表达的意思。通常来讲,用一种语言学的方式去理解meaning,就是指定某个符号(字也可以看做是一种广义的符号)所指某个意思或者事物,也就是指称语义。在计算机科学中,指称语义是通过构造表达其语义的(叫做指称(denotation)或意义的)数学对象来形式化计算机系统的语义的一种方法。
2 如何获得在计算机中可用的语义
Wordnet是一个计算机可使用的词典,顾名思义,wordnet包含了同义词表和反义词表,这类在词与词之间的关系。
但是WordNet存在一些问题:
- 没有两次词的意思是完全相同或者相反的,WordNet只是机械的将近似同义或某些情况下可以在相同语境下使用的词算作了同义词,反之亦然。这样势必会损失一些细节。例如:good和proficient,在某些语境下两者确实意思十分相近,但是直接把两者算作同义词又感觉比较牵强。
- wordnet过于主观,没有办法指定明确的标准去衡量两个词的关系,全靠个人感觉。
- Out of Date,wordnet很难去与时俱进添加新词或修改旧词的新用法,并且新词出现和一些灵活用法的出现的过程是十分频繁的,难以维护。
- 需要大量人力去维护,不能自动化的创建和维护。
- 难以用计算机计算两个词之间的相似程度。
3 离散化的表示词语
在传统的NLP中,常常使用离散符号表示词语。创建一个一定长度N的词表,然后将每个词语都表示成一个单热向量的形式,单热向量的维度等同于词表的长度。
这种表示方式同样存在很多问题:
- 当词表过于长的时候这种表示方法效率很低。
- 两个不同的单热向量永远是正交的,所以单热向量点积恒为0,导致两个词只要不相同则不能表示出两个词之间的关系。
因此引出了后面的方法,用向量的形式,让两个向量自己去学习它们之间的相似性。
4 用语境表示词语的意思
用语境表示词语的思想来源于分布式语义:一个词语的意思由经常的出现在它周围的词语所赋予。英国语言学家J.R.Firth说过,"You shall know a word by the company it keeps"。当一个单词w出现在文本中,他的语境就是出现在附近的一些词(固定的窗口大小),用这些词来表示w的意思。
根据这个思想,使向量自动学习到每个词的词向量,依此为每个词构建一个稠密向量,出现在相似语境中的词会具有相似的词向量。词向量也叫做词嵌入(word embedding)是分布式表示的方式。
将词向量可视化可以看到如下效果,相似意思的词或者有相似特征的词会聚集在一起。
5 Word2vec
5.1 基本思想
Word2vec是一个用来学习词向量的框架,使用词向量的相似性来计算,以向量点积来表示两向量的相似性,通过最大化
来学习词向量。word2vec分为两个模型分别为跳字模型(根据一个中心词生成上下文)和连续词袋模型(根据上下文生成一个中心词),此次主要介绍词袋模型。
基本思想是在一个固定的语料库(corpus)中,每一个词都可以被表示为向量(实际上是两个向量:中心词向量和背景词向量),遍历一个文本,对文本中的每个位置t,对应的词叫做中心词c,语境中的背景词叫做o(选择中心词上下一个固定范围作为移动的窗口大小,窗口随中心词移动)。使用向量c和o来的相似性(c和o点积)来计算给定背景词c时o出现的概率。
中心词上下n个背景词形成一个窗口,n也叫做窗口大小,如上图中的例子窗口大小为2,中心词为into,背景词是problems,turning,banking,cries,分别计算出给定中心词时背景词出现的概率。此时into的向量是中心词向量,接着移动窗口,继续重复上面的步骤计算,此时into的向量是背景词向量,一个词被表示为两个向量,中心词向量和背景词向量。如图:
5.2 word2vec的损失函数
L为目标函数,L是关于θ的函数,改变θ从而使L最大化,这个公式的含义就是将全部的文本连接起来,然后从第一个单词开始遍历,依次取为中心词。设窗口大小为m,求前后m个然后连乘起来。J(θ)是L的等价变换的相反数,对极大似然函数取对数可以将连乘化为连加,方便化简。取相反数可以将最大化变为最小化,方便求解。实际这里是用了一个负对数似然函数,或者叫做对数损失函数。
5.3 计算
- u是背景词向量,向量是d维的
- v是中心词向量
- 词表中一共有V个词
看这个简单的式子更容易理解:
u代表背景词向量,v代表中心词向量。橙色部分表示两向量的相似度,上面提到过,使用两向量的点积来表示两向量的相似度,因为点积天然具备了这样的性质,两个相似向量的点积会是一个相对大的正数,两个相反的向量的点积是一个相对小的负数,可以这样直观理解,也可以参考余弦相似度。分母是所有词与中心词点积之和,exp的作用是把全体实数域映射到正数范围内,保证概率恒正。
其实这也是一个softmax函数,softmax函数具有一些特征,可以把任意值映射为概率分布。同时softmax在向量中保留了最大值,其他维度向量不为0。
5.4 求损失函数梯度
这里就不详细推导了,用链式求导法则对复合函数求导。
最后用梯度下降优化损失函数。
5.5 为什么采用两个词向量?
训练两组词向量是为了计算梯度的时候求导更方便。如果只用一组词向量那分母中会出现一个平方项,再求导就比较麻烦,如果用两组向量求导结果就会很简单。由于在移动窗口时,之前窗口的上下文词就会变成下一个窗口的中心词,所以这两组向量结果会很相近,最终会使用两组向量的平均值作为最终的词向量。