斯坦福CS224n-第二课笔记 词向量与word2vec
斯坦福CS224n-第二课笔记 词的向量表示:word2vec
如何表示一个词语的意思
先来看看如何定义“意思”的意思,英文中meaning代表人或文字想要表达的idea。这是个递归的定义,估计查询idea词典会用meaning去解释它。
中文中“意思”的意思更加有意思:
他说:“她这个人真有意思(funny)。”她说:“他这个人怪有意思的(funny)。”于是人们以为他们有了意思(wish),并让他向她意思意思(express)。他火了:“我根本没有那个意思(thought)!”她也生气了:“你们这么说是什么意思(intention)?”事后有人说:“真有意思(funny)。”也有人说:“真没意思(nonsense)”。(原文见《生活报》1994.11.13.第六版)[吴尉天,1999]
——《统计自然语言处理》
语言学中“meaning”近似于“指代、所指、符号”。
计算机如何处理词语的意思
过去几个世纪里一直用的是分类词典。计算语言学中常见的方式是WordNet那样的词库。比如NLTK中可以通过WordNet查询熊猫的hypernyms (is-a,上位词),得到“食肉动物”“动物”之类的上位词。也可以查询“good”的同义词——“just品格好”“ripe熟了”。
discrete representation的问题
-
这种discrete representation虽然是种语言学资源,但丢失了韵味。比如这些同义词的意思实际上还是有微妙的差别:adept, expert, good, practiced, proficient, skillful
-
缺少新词
-
主观化
-
需要耗费大量人力去整理
-
无法计算准确的词语相似度
无论是规则学派,还是统计学派,绝大多数NLP学家都将词语作为最小单位。事实上,词语只是词表长度的one-hot向量,这是一种localist representation(大概是借用localist“局部”的意项)。
在不同的语料中,词表大小不同。Google的1TB语料词汇量是1300万,这个向量的确太长了。
从symbolic representations(符号表示)到distributed representations(分布式表示)
词语在符号表示上体现不出意义的相似性,比如Dell notebook battery size和Dell laptop battery capacity。而one-hot向量是正交的,无法通过任何运算得到相似度。
列如:
[猫,狗,鸡,鸭,汽车旅馆,鸟,骆驼,酒店],对这个数组进行编码之后;
Motel(汽车旅馆)对应的编码应是:
Motel=[0,0,0,0,1,0,0,0];
同理,Hotel(酒店)对应的编码应是:
Hotel=[0,0,0,0,0,0,0,1];
在上面汽车旅馆和酒店的意思是相似,但是对Motel=[0,0,0,0,1,0,0,0]与Hotel=[0,0,0,0,0,0,0,1]内积为0,也就是完全不相关;所以这种方式并不能表示出这种关系。
由于ONE-Hot满足不了相关性,(J.R.Firth)提出了Distributional semantics(分布式语义):单词的意思,应该结合它的上下文来确定的;现代统计NLP成功的理念之一。
e:
用‘banking’许多的上下文来构建它的意思:
词向量:
将选择的每个单词构建了密集的向量,为了更好的预测上下文的意思:
‘banking’对应的维度是8;每一个单词都有一个向量维度,所有单词在一起将会有一个向量空间。
向量中的每个单词具有不同的基础;
通过向量定义词语的含义
通过调整一个单词及其上下文单词的向量,使得根据两个向量可以推测两个词语的相似度;或根据向量可以预测词语的上下文。这种手法也是递归的,根据向量来调整向量,与词典中意项的定义相似。
另外,distributed representations与symbolic representations(localist representation、one-hot representation)相对;discrete representation则与后者及denotation的意思相似。切不可搞混distributed和discrete这两个单词。
学习神经网络word embeddings的基本思路
定义一个以预测某个单词的上下文的模型:
- p(context|wt)=…p(context|wt)=…
损失函数定义如下:
- J=1−p(w−t|wt)J=1−p(w−t|wt)
这里的w−tw−t表示wtwt的上下文(负号通常表示除了某某之外),如果完美预测,损失函数为零。
然后在一个大型语料库中的不同位置得到训练实例,调整词向量,最小化损失函数。
直接学习低维词向量
这其实并不是多么新潮的主意,很早就有一些研究了:
• Learning representations by back-propagating errors (Rumelhart et al., 1986)
• A neural probabilistic language model (Bengio et al., 2003)
• NLP (almost) from Scratch (Collobert & Weston, 2008)
• A recent, even simpler and faster model: word2vec (Mikolov et al. 2013)
只不过以前一直没有引起重视,直到Bengio展示了它的用处之大。后来研究才开始火热起来,并逐渐出现了更快更工业化的模型。
Word2vec:是一个学习单词向量的框架
word2vec的主要思路
通过单词和上下文彼此预测,。
两个算法:
-
Skip-grams (SG):预测上下文
-
Continuous Bag of Words (CBOW):预测目标单词
计算过程:
对于给定的数据集T,固定了窗口的大小(每个面几个字),给定中心单词Wj;
模型的概率
最小化目标函数==最大化概率值;
这个模型中,唯一的一个参数就是我们给定的一个变量;
最小化损失函数;
将每个单词使用俩个向量:当W是中心词时,当W是上下文词时;
然后是中心词C与上下文词O;
e:
定义一个某个单词的上下文模型:
P(context|Wt)=.....
定义损失函数:
J=1-P(Wt+j|Wt)(Wt+j与Wt为上下文)
如果预测结果正确,目标函数为0;
在词料库中的不同位置来训练,调整词向量,最小化目标函数:
预测到的上下文概率P(t|c)由softmax得到
总结一下softmax如何将多分类输出转换为概率,可以分为两步:
1)分子:通过指数函数,将实数输出映射到零到正无穷。
2)分母:将所有结果相加,进行归一化。
分子是:通过点积来计算O与C的相似性;分母是对整个词汇表进行标准化后给出的概率分布;
这是一个SOFEMAX函数R^N——R^n的例子:
在SOFTMAX函数中:
“max”是将一些大的概率表示为最大的概率Xi;
“soft”是将一些小的概率表示为更小的概率Xj;
经常用于深度学习;
通过优化训练参数训练模型:
为了更好的训练模型,调整参数使目标函数最小化;
也就是用梯度下降来找到最优点;
计算所有向量维度:
在D维向量与V维向量中,有许多单词:
每个单词都有俩个向量;沿着这个梯度进行优化;
参考:http://www.hankcs.com/nlp/word-vector-representations-word2vec.html