1. 语言模型

语言模型(language model)是自然语言处理的重要技术。自然语言处理中最常见的数据是文本数据。我们可以把一段自然语言文本看作一段离散的时间序列。假设一段长度为T的文本中的词依次为循环神经网络 Notes,那么在离散的时间序列中,循环神经网络 Notes可看作在时间步(time step)t 的输出或标签。给定一个长度为TT的词的序列循环神经网络 Notes,语言模型将计算该序列的概率:

                                     循环神经网络 Notes

语言模型可用于提升语音识别机器翻译的性能。

例如,在语音识别中,给定一段“厨房里食油用完了”的语音,有可能会输出“厨房里食油用完了”和“厨房里石油用完了”这两个读音完全一样的文本序列。如果语言模型判断出前者的概率大于后者的概率,我们就可以根据相同读音的语音输出“厨房里食油用完了”的文本序列。在机器翻译中,如果对英文“you go first”逐词翻译成中文的话,可能得到“你走先”“你先走”等排列方式的文本序列。如果语言模型判断出“你先走”的概率大于其他排列方式的文本序列的概率,我们就可以把“you go first”翻译成“你先走”。

循环神经网络 Notes

循环神经网络 Notes

循环神经网络 Notes

但我们实际情况往往是训练语料很有限,很容易产生数据稀疏,不满足大数定律,算出来的概率失真。比如(“发票”,“点数”,“优惠”)在训练集中竟没有出现,就会导致零概率问题。

又比如在英文语料库IBM, Brown中,三四百兆的语料,其测试语料14.7%的trigram和2.2%的bigram在训练语料中竟未出现!

另一方面,如果n很大,参数空间过大,产生维数灾难,也无法实用。假设词表的大小为100,000 ,那么n-gram模型的参数数量为100,000的n次方。 这么多的参数,估计内存就不够放了。

那么,如何选择依赖词的个数n呢?从前人的经验来看:

经验上,trigram用的最多。尽管如此,原则上,能用bigram解决,绝不使用trigram。n取≥4的情况较少。

  • 当n更大时:对下一个词出现的约束信息更多,具有更大的辨别力
  • 当n更小时:在训练语料库中出现的次数更多,具有更可靠的统计信息,具有更高的可靠性、实用性
     

思考:

  • 假设训练数据集中有10万个词,四元语法需要存储多少词频和多词相邻频率?

正确解析:

10万个词,需要存储每个词的词频p(wi)  共10万个。

相邻词频:

        二相邻:第一个词从10万个里面选一个,第二个词也从10万个里面选一个。共计 10万的平方

        三相邻:第一个词从10万个里面选一个,第二个词也从10万个里面选一个,第三个词也从10万个里面选一个。共计10万的3次方。。。

        四相邻:。。。共计10万的4次方

综上:相邻词频是 10万^2 + 10万^3 + 10万^4

 

错误解析:(下面的解法是错误的!!!)

由于 P(w1,w2,w3,w4,...,w100000) = p(w1)p(w2|w1)p(w3|w1,w2)p(w4|w1,w2,w3)p(w5|w2,w3,w4)...p(w100000|w99997,w99998,w99999)

即若想知道P(w1,w2,w3,w4) 的概率 ,需要之后后面p(w1)、p(w2|w1)、p(w3|w1,w2)、p(w4|w1,w2,w3)这四个概率。

并且:  p(w2|w1) = p(w1,w2) / p(w1)

          p(w3|w1,w2) = p(w1,w2,w3) / p(w1,w2)

          p(w4|w1,w2,w3) = p(w1,w2,w3,w4) / p(w1,w2,w3)

          ......

          p(w100000|w99997,w99998,w99999)  = p(w99997,w99998,w99999,w100000)/p(w99997,w99998,w99999)

综上:

10万个词一共需要存储 p(w1)......p(w100000) 共10万个词频;

一共需要存储 p(w1,w2)......p(w99999,w100000) 共10万-1个 二词相邻频率

                      p(w1,w2,w3)......p(w99998,w99999,w100000) 共10万-2个 三词相邻频率

                      p(w1,w2,w3,w4)......p(w99997,w99998,w99999,w100000)  共10万-3个 四词相邻频率

即相邻词频一共是 30万-6个

CNN

循环神经网络 Notes

循环神经网络 Notes