- N gram语言模型
- 线性语言模型
- 神经网络语言模型
全概率的描述
语言模型
来刻画一个句子(词串序列)存在可能性的概率模型
N-gram
从过去的内容预测未来的内容,但是很难把前面的所有东西都作为“条件”进行建模
马尔可夫假设
- 有限视野假设,只和前面的K个有关。前面的链条只到K,即K阶马尔可夫链
- N-1阶马尔可夫链被称为N元语言模型
对应的参数估计,需要估计得到频率
最大似然估计,使用频率来估计概率
Zipf Law 按照词频进行排序,词频和排位的乘积是一个常数
- 大部分的词都是稀有的
- 数据不足以得到完整的概率分布
- 后续2-gram,3-gram的零概率导致整个句子都是零概率
解决的方法
- 构造等价类
- 参数平滑
- 把一部分已经观察到的事件的概率的大小,分配到没有看到过的事件上
- 总体的约束概率还是1
参数平滑的方法
- 直接加上一个值,效果不好
- 拉普拉斯平滑,分母加上词的数目,分子加上k倍的概率
测试数据:test
交叉验证集合:用来选择参数和优化泛化能力
模型评价
- 直接在任务上测试
- 计算困惑度,在测试集上存在的概率
N-gram有一定的成功
- 只是词汇级别
- 没有长距离的依赖
- 没有结构和语法依赖
其他的语言的模型
窗口,基于周边的词
线性语言模型
类似于softmax的操作,分母是标准化,分子是分数,但是使用了指数的形式(保证了非负性)
特征工程
选择一些特征
比如
- ngram
- 类别特征
- 拼写特征
特征太少,欠学习,特征太多,过拟合
神经网络语言模型
- 把词表里每一个词都和一个特征向量联系
- 使用词的特征向量表示联合概率
- 同时学习特征向量和联合概率函数
独特编码
- 没有考虑到词语的相似性
- 直接利用id得到一个词的基本表示
- 维度爆炸
FeedForward NN 语言模型
使用给一个embedding layer得到词向量,然后使用多个层得到中间表示(非线性)
最后使用一个softmax得到一个概率分布
ngram VS FNNLM
- ngram
- 简单但是强大
- 数据稀疏
- 缺乏生成能力
- 没有参数的估计
- FNNLM
- 复杂但是好用
- 自动的抽取特征和生成能力