1. 语言模型
语言模型(language model)是自然语言处理的重要技术。自然语言处理中最常见的数据是文本数据。我们可以把一段自然语言文本看作一段离散的时间序列。假设一段长度为T的文本中的词依次为,那么在离散的时间序列中,可看作在时间步(time step)t 的输出或标签。给定一个长度为TT的词的序列,语言模型将计算该序列的概率:
语言模型可用于提升语音识别和机器翻译的性能。
例如,在语音识别中,给定一段“厨房里食油用完了”的语音,有可能会输出“厨房里食油用完了”和“厨房里石油用完了”这两个读音完全一样的文本序列。如果语言模型判断出前者的概率大于后者的概率,我们就可以根据相同读音的语音输出“厨房里食油用完了”的文本序列。在机器翻译中,如果对英文“you go first”逐词翻译成中文的话,可能得到“你走先”“你先走”等排列方式的文本序列。如果语言模型判断出“你先走”的概率大于其他排列方式的文本序列的概率,我们就可以把“you go first”翻译成“你先走”。
但我们实际情况往往是训练语料很有限,很容易产生数据稀疏,不满足大数定律,算出来的概率失真。比如(“发票”,“点数”,“优惠”)在训练集中竟没有出现,就会导致零概率问题。
又比如在英文语料库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 - Python技术站