第一讲:语言模型
不涉及到神经网络过的模型。语言模型是基础知识,是做NLP必须掌握的内容。
可以动手做一些有趣的东西:
- 可以从文本数据(语料)当中得到一个“语言模型”:句子的概率
- 错别句子/短语检验
- 衅端与发现
- 用该语言模型“生成”不同的句子
- 像汪峰一样写歌
机器要怎样才能"理解"自然语言?
语法
- 识别词性
- 了解词性有什么用?
- 句子压缩
- 中文分词:N和V之间 - 切分
- “语法”不能保证“语义”
- 了解词性有什么用?
- 识别句子成分
概率统计:用概率统计建模自然语言
- 齐夫定律
- 一个词出现的频率和这个词在词典里的排序成反比
- 香农:信息论
- 每个词的信息量大小
- 乔姆斯基批评,人脑不是按概率率的方式来处理语言。
概率论是机器学习,包括深度学习的基石
概率语言模型
- 本质:计算句子的概率
- P(S) = P(w1,w2,w3,...,wn)
- 用处:
- 句子错误检查、输入法候选、“生成”有趣的句子等
统计:数据太稀疏
即使语料库很大也会面临数据稀疏的问题
- 词表大小:V
- 参数个数: V^n
P(w1,w2) = P(w2|w1) * P(w1)
这种分解没有减少参数个数
Naive的人为假设:P(w2|w1) ≈ P(w2) P(w1,w2) ≈ P(w2) * P(w1)
N-gram语言模型与实现
Naive的人为假设:P(w2|w1) ≈ P(w2) 虽然有效的简化模型、减少参数个数;但实现的效果不是特别好。
$P(w_1,w_2) = P(w_2|w_1) * P(w_1)$
P(w1,w2,w3) = P(w2|w1) P(w3|w1,w2) = P(w1) P(w2|w1) * P(w3|w1,w2)
改进的语言模型:n-gram
看每个词的前n个词
Google做的Ngram Viewer可以玩一下
开始的n-1个词怎么办?
- 方案1:退化成unigram(1-gram)
- 方案2:在训练数据加上人造token
- 构造语言模型 ->
- 句子和句子之间,或段落和段落之间断开
- 构造语言模型 ->
Change log
2017.10.16 创建 2017.10.17 增加内容