神经网络语言模型

什么是统计语言模型?

"A language model is a function that puts a probability measure over strings drawn from some vocabulary" -- 《Introduction to Information Retrieval》

在实际使用中,一般都是n-gram模型。即,根据前n-1个词判断第n个词的出现概率。由于训练集中的样本(strings)是变长的,所以需要在原始的词表中加入两个特殊的token: START 和 STOP。前者用于表示序列的开始,后者用于表示结束。

下面举个tri-gram的例子。对tri-gram来说:

$$ p(x_1,x_2, ... , x_n) = \prod_{i=1}^np(x_i|x_{i-2},x_{i-1})$$

比如对the dog barks这句话来说,
p(the dog barks STOP) = p(the | START, START) * p(dog| START, the) * p(barks| the, dog) * p(STOP | dog, barks)

这里的概率函数p,一般是通过统计或者机器学习的方式得到的。我个人的理解是:统计语言模型并不是为了对人类的某种语言建立一个通用的模型。因为同一个词在不同的文档集中出现的频率差别很大。
其次,样本中没有出现的,不代表它的概率就是0。平滑化,即为这些未出现过的strings赋予一个非0 的概率,在传统的以counting为主的语言模型中扮演着至关重要的角色。

Distributed representation 是20世纪以Hinton 为代表的Connectionism的一个老旧概念。所有的神经网络模型,都可以认为是input的一种Distributed representation。所以我觉得可以先不去考虑这两个词的意思。常与之混淆的是Distributional representation,这个通常指的是空间向量模型(VSM)。

此博客中的热门博文

在windows下使用llvm+clang

少写代码,多读别人写的代码

tensorflow distributed runtime初窥