详解语言模型

1. 引入

语言模型是两种系统的基础

  • 语音识别系统
  • 机器翻译系统

所谓语言模型,能够告诉你,某个特定的句子(序列),出现的概率是多少。

举个例子,假设一个人说了一句话,这句话可能是如下两种文本中的一种

  1. The apple and pair salad.
  2. The apple and pear salad.

你觉得这个人说的是1的可能性大,还是2的可能性大?

语言模型能给你这两句话各自的可能性,p(text1)=0.002, p(text1)=0.003。所以是2的可能性更高。

2. 语言模型的构建过程

  1. Tokenize

首先,我们得有corpus(语料),就是大量的文本数据。

然后,我们要做Tokenize:建立一个字典,将每个单词都转化成对应的one-hot向量。

如果你需要模型能准确识别句子结尾,那你还需要定义句子的结尾,一般用EOS(end of sentence)。

如果句子中有些词并没有在你的字典中出现过,那你就可以把这个单词替换为UNK(unique token),即代表未知词。

  1. 构建RNN

假设输入的文本为:

  • Cats average 15 hours of sleep a day.

(1)在第0个时刻,输入向量(x<1>)为0向量,对应的输入a<0>也为0向量,输出层用一个softmax来输出概率。他只是预测第一个词的概率,而不去管结果是什么。这个步骤在下图的1处表示。

(2)接下来的时刻,我们告诉模型,第一个词是Cats(把Cats的向量作为输入),让模型告诉我们Cats后面应该接一个什么词,也就是此时y<2>=p(average|Cats)。这个步骤在下图的2处表示

(3)接下来的时刻,y<3> = p(?|“Cats average”)

(4)接下来每个步骤的RNN,都会考虑前面出现过的词

为了训练RNN,我们要定义Cost Function,即下图的3处的公式。有hat的符号,表示预测值。

在这里插入图片描述

3. 一些细节

  1. RNN模型训练时,需要知道y<2>=p(average|Cats),就是条件概率(Cats出现时,后面出现average的概率),那这个条件概率怎么计算呢?
  • 可以在语料中,直接统计而得到,这也是我们需要大量语料做模型训练的原因
  1. 除了RNN,还有其他方法构建语言模型吗?
  • wikipedia上给出了一种直接用统计方法构建语言模型的方法

在这里插入图片描述

这是基于NGRAM的语言模型(概率)计算方式。要注意句子开头会被看做一个字符,句子结束也会被看做一个字符。通过对语料中的单词进行统计,就能算出各个单词出现的条件概率。条件概率乘在一起,就能算出一个序列(一句话)的概率。

4. 总结

A statistical language model is a probability distribution over sequences of words. Given such a sequence, say of length m, it assigns a probability p(w1,w2,…,wm) to the whole sequence.

参考

  • [1]. Andrew Ng. Sequence Model class
  • [2]. https://en.wikipedia.org/wiki/Language_model
  • [3]. 如何用python构建一个语言模型, https://nlpforhackers.io/language-models/
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章