Language Model-(一)

感性认识-什么是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}
$$

上述的概率表明了我们对这个问题的认知,即:有些词是可能出现的,而有些词是不可能出现在 的后面。

从定义及上述例子即可得知,语言模型的作用是:

  1. 为每一个可能的next word 赋予一个概率。
  2. 给整个句子(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)$ ,满足如下两个约束:

  1. 对于任何 $<x_1,x_2,…,x_n>\in\color{blue}{\mathbb{S}}$, $p(x_1,x_2,…,x_n)\geq 0$.

  2. 并且:
    $$
    \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简单模型能否充分满足我们的要求:

  1. 在“估计next word的概率” 中,这个模型要求我们能够数出来一个word sequence/句子在语料中出现的个数。现实中这种模型非常容易出现问题,因为上述例子中的句子简单的扩展,就会导致计数结果为0. 比如把句子改为:“Clinton‘s book store near my university.” 这句话在预料中就很难找到,甚至在google 中也无法找到这个句子。分子分母都为0,模型不work。
  2. 在估计整个句子的联合概率问题中,我们其实是要回答:基于$\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.

坚持原创分享,您的支持是我继续创作的动力!