Efficient Estimation of Word Representations in Vector Space
向量空间中单词表示的有效估计
这篇论文非常重要,是自然语言词向量的奠基之作,这篇论文虽然不是第一个提出词向量的,但是从这篇论文开始,在大规模语料库上训练词向量成为了现实,要学习自然语言处理,必须先学习词向量,word2vec是大规模语料库词向量的开始。
1. 先导知识
要学习这篇论文,先需要具备一些先导知识:
1.1 语言模型
语言模型:计算一个句子中是正确句子,没有语义和语法错误的概率。
例如:马云后悔创办阿里 0.8
马云后悔创办腾讯 0.00001
马云不喜欢钱 0.000000001
语言模型的作用就是去判断上述句子是不是病句,是否符合事实依据。
下面来介绍语言模型的历史:
1.基于专家语法规则的语言模型:
由语言学家总结出一套通用的规则
这种基于语法规则的语言模型尽管有一定的作用,但是随着时代的发展逐步淘汰你能,例如:丑拒、笑skr人,过去它不是一个词,你能说它有语法错误吗。
2.统计语言模型:通过概率计算来刻画语言模型
举个例子:p(一个亿 是 小目标) = p(一个亿) *p(是 | 一个亿)*p(小目标 | 一个亿,是)
但是各个概率怎么求呢?学术界分为两种学派:
频率派和贝叶斯学派
暂时只介绍一下频率的计算方法:
例如: n为语料库单词总个数, count(wi)为wi在语料库中出现的次数。
公式的求解为:频率加条件概率。
例如某个条件概率:
现在,统计语言模型不难对每个句子求出概率了,但是这种计算方法存在一个大问题,如果一个句子是真实存在,没有任何问题的,但是句子中有一个词在语料库中并不存在,那么这样求出的概率便是0了。语料库中不存在不代表真实情况下不存在,我们不想出现这样的情况,于是开始有了下面一种方法:
laplace smoothing: 给那些没有在语料库中出现过的词或词组一个很小的概率,每个词在原来出现次数的基础上依次加一,比如我们有三个词a,b,c;
没有平滑之前:p(a) = 0/1000
p(b) = 990/1000
p(c) = 10/1000
平滑之后:
p(a) = 0/1003
p(b) = 990/1003
p(c) = 10/1003
尽管平滑解决了语料库中不存在概率就为0的错误现象,但是还存在问题:如果一个句子过长,那么概率因式就非常的长,不利于计算,并且里面还存在许多小概率的形式,最后导致计算出来的概率非常小(稀疏)。
于是有人提出了马尔科夫假设:
一个词的出现仅依赖于前面的一个词或几个词
原式:
马尔科夫假设:细分为下面这几种假设
unigram:一个词的出现仅仅与自己有关
bigram:一个词的出现仅跟前面一个词有关
trigram:一个词的出现仅跟前面两个词有关
k-gram:一个词的出现仅跟前面k个词有关
这种假设可以根据个人的需要选择不同的类型,大大简化了计算需求。
既然有不同的语言模型,那用什么来评价语言模型的好坏呢?
学术界提出了一个困惑度的概念
n代表句子单词个数,s代表句子
2. 论文内容
待续