在对语言建模之前,先来说明一些基本的简单的概念。
我们假设:
有这样一个集合,在这个集合里面,是我们所有的涉及到的单词集,并且这个单词的集合是有限的(finite)。为了表示这个集合,用字母V来表示,例如V={the,a,man,telescopo,Beckham,two…}
有了单词的集合,然后还需要有一个单词串的集合,为了更形象的解释,比如:
the STOP
a STOP
the fan STOP
the fan saw Beckham STOP
the fan saw saw STOP
the fan saw Beckham play for Real Madrid STOP
…
这个单词串的集合使用V+来表示。
为什么在每个的末尾要加一个STOP呢,这在以后的学习当中会用到,他有利于帮助我们开发一个概率模型。(convenient start to develop a probabilistic model)
现在有了上面的定义,继续探讨自然语言处理建模当中的问题。
现在:
- 我们有一个有许多句子的样本,叫它训练样本training sample.
- 我们需要学习一个概率分布p(learn a probability distribution p),p满足下面的条件:
这个公式向我们表明了,x属于V+当中的元素,所有其中的元素的概率相加结果应该是1.
为了更形象的说明P是什么,可以看下面的例子:
那么,整体的流程是怎样的呢?
我们把training sample测试样本当中的句子当作输入input,经过模型的处理,最终的输出便是p(output)。这是我们建立模型的作用。
为什么要做这些事情(这些事情指的是上面的准备测试样本,计算概率、建模等)?
起初,研究这些是为了解决语音识别当中遇到的难题,相关的还有手写识别等。这些技术的发展在NLP的很多领域楼来都证明十分的有用。
这些概率p该怎么计算出来呢?
原始的办法:
- 假设我们有N个训练用的句子sentences
- 每一个单词串,用x1 x2 x3…xn来表示,x表示每一个单词。使用c(x1…xn)来表示这个单词串在训练数据training data当中出现的次数。
- 计算方法为:p(x1…xn)=c(x1…xn)/N
这个办法,刚一看到会觉得没有什么不妥,其实如果细心的话可以发现这个公式是有问题的。如果某一个单词串并没有在训练数据中出现,那么这个概率p的值就会变为0,如果P=0的话,那么就没有能力去生成新的句子(has no ability to generalize to new sentences)。因为,在训练样本中没有出现,并不代表在测试的时候或者在实际生活中p=0的单词串不会出现,所以,必须要解决p=0的问题,在0-4中会提到。