感性认识-什么是Language Model
感性定义:能够对一个词序(word sequences)赋予一个合理的概率的模型,我们称之为语言模型-Language Model[^1]。
例子:
“我明天请你去吃…..”
上述这个句子是一个所谓的 word sequences, 最后一个词是吃, 如果现在问你一个问题,你认为吃后面最可能出现的词是什么?从以下几个选项:饭、烤肉、足球、计算机,中选择一个。
正常人类都会认为饭 和烤肉 出现的概率要高些,而 足球 和 计算机 基本不可能。为了表示可能的程度,应该赋予这些词一个概率,如:
$$
\begin{align}
&P(\text{next_word= 饭}) =0.48 \\
&P(\text{next_word= 烤肉})=0.48 \\
&P(\text{next_word= 皮球})=0.03\\
&P(\text{next_word= 计算机})=0.01
\end{align}
$$
上述的概率表明了我们对这个问题的认知,即:有些词是可能出现的,而有些词是不可能出现在吃 的后面。
从定义及上述例子即可得知,语言模型的作用是:
- 为每一个可能的next word 赋予一个概率。
- 给整个句子(word sequence)赋予一个概率。
其实,1和2 是等价的,下文会逐渐介绍。总而言之,语言模型就是使用概率、统计等工具来判断一个word sequence 是一个符合人类认知的句子的可能性的模型。
形式化定义
基于上述感性的认识,在我们尝试形式化地定义Language Model[^2].
首先,我们有一个英文语料(corpus),它由非常多的英语句子构成。
我们记 $\color{blue}{\mathbb{V}}$ 为该语料中所有词的集合,即:$\color{blue}{\mathbb{V}}={apple, football, cat, cats,…}$
在实际应用中,$\color{blue}{\mathbb{V}}$ 通常非常大,几万、几十万,,但它是个有限集。一个句子$s$ 是一个词序列,
$$
s = x_1x_2…x_n\
$$
其中,n>=1。我们有 $x_i\in \color{blue}{\mathbb{V}}$ for $i\in{1,2,…,n-1}$ . 我们一般假设最后一个 $x_n$ 是一个特殊符号,如:STOP ,用来标记句子结束,并且它不属于 $\color{blue}{\mathbb{V}}$.
我们所处理的句子是如下这种样子:
The dog barks STOP
The boy smile STOP
A girl is reading a book STOP
……
基于$\color{blue}{\mathbb{V}}$ ,我们可以定义一个集合$\color{blue}{\mathbb{S}}$ ,其为用$\color{blue}{\mathbb{V}}$ 中的词组成的所有句子集合。$\color{blue}{\mathbb{S}}$ 显然是一个无限集合,因为句子可以是任意长度的。在稍后给出 Language Model形式化定义前,先做几个说明。
- 表示一个特定的随机变量$X_i$ 取某个值$x_i$ 的概率,i.e. $P(X_i = x_i)$, 我们简记为:$P(x_i)\ or\ p_X(x_i)$.
- 我们以后简记一个长度为$n$ 的句子:$x_1,x_2,…,x_n$为 $x_{1:n}$ 或者 $x^n_1$.
- 我们将句子(词序列)中的每一个词看作一个随机变量。那么,句子中每个词取一个特定值时整个句子的联合概率应该是:$P(X_1 = x_1,X_2=x_2,…,X_n=x_n)$, 我们简记为:$P(x_1,x_2,…,x_n)$.
定义1(Language Model):
一个Language Model 由一个有限集合$\color{blue}{\mathbb{V}}$ 及一个函数$p(x_1,x_2,…,x_n)$ ,满足如下两个约束:
对于任何 $<x_1,x_2,…,x_n>\in\color{blue}{\mathbb{S}}$, $p(x_1,x_2,…,x_n)\geq 0$.
并且:
$$
\sum_{<x_1…x_n>\in \color{blue}{\mathbb{S}}}p(x_1,x_2,…,x_n)=1
$$
这样一来,$p(x_1,x_2,…,x_n)$就是一个定义在在集合 $\color{blue}{\mathbb{S}}$ 中句子上的概率分布, 即:随机变量${X_1,…,X_n}$ 的PMF(probability mass function).
定义完成了。那接下来, 在给定一个词之前的词(history),如何计算(estimate)计算该词出现的概率,或者如何计算整个句子的联合概率呢?
一个最简单的语言模型(Simple LMs)
Task 1:考虑这样一个任务,计算$P(w|h)$。其中,$w$ 是一个具体的词,$h$ 代表history,即:$w$之前出现的词序列。
具体来讲,我们让 $h$=”The book store near my”, $w$ = “university”。计算:
$$
P(\text{university}|\text{The book store near my})
$$
一种最简单估计(estimate)上述概率的做法就是计算相对频率(relative frequency counts):
- 我们在语料库中数一下 “The book store near my” 这个word sequence 出现的次数,记为:$C(\text{The book store near my})$.
- 我们继续数”The book store neary my university” 出现的次数。记为:$C(\text{The book store near my university})$.
- 计算二者的相对频率。
这样就可以如下回答这个问题,在我们看到history $h$ 的所有次中, 有多少次它背后跟的是 $w$:
$$
P(\text{university}|\text{The book store near my})=
\frac{C(\text{The book store near my university})}{C(\text{The book store near my})}
$$
Task2: 我们要计算整个句子的联合概率(joint probability):$p(s)$, i.e. $P(\text{The book store near my university})$.
我们只需要回答这样一个问题:基于$\color{blue}{\mathbb{V}}$ 的所有6个word sequences中,有多少个是 “The book store near my university”. 因此:
$$
P(\text{The book store near my university})=\frac{C(\text{The book store near my university})}{\color{blue}{\mathbb{|V|}}^6}
$$
好了,这个简单语言模型针对两种任务的计算过程就结束了。你有一个语料,你构建一个词汇表$\color{blue}{\mathbb{V}}$, 然后按照上述方式计算就好了。
我们现在看这种基于Task1,Task2简单模型能否充分满足我们的要求:
- 在“估计next word的概率” 中,这个模型要求我们能够数出来一个word sequence/句子在语料中出现的个数。现实中这种模型非常容易出现问题,因为上述例子中的句子简单的扩展,就会导致计数结果为0. 比如把句子改为:“Clinton‘s book store near my university.” 这句话在预料中就很难找到,甚至在google 中也无法找到这个句子。分子分母都为0,模型不work。
- 在估计整个句子的联合概率问题中,我们其实是要回答:基于$\color{blue}{\mathbb{V}}$,所有的由6个词组成的词序列中,”The book store near my university” 有多少个。分母太大了,尤其是当句子长度L变得比较大的时候,比如:25,会导致估计过程将十分艰难。
显然,我们需要更加鲁棒、强大的LMs. 当然,在此前我们仍然需要补充更多一点概率知识,因为新的LM需要概率作为支撑,下一篇文章会介绍Markov Models 以及基于它的 N-Grams LMs。
(PS: 强大的模型都需要概率作为支撑,记住这个公理就好)。
参考资料
[^1]: Speech and Language Processing-Chapter 4- Language Modeling with N-Grams by Dan Jurafsky.
[^2]: Language Modeling- Course notes for NLP by Michael Collins.