1. N gram语言模型
  2. 线性语言模型
  3. 神经网络语言模型

全概率的描述

语言模型

来刻画一个句子(词串序列)存在可能性的概率模型

N-gram

从过去的内容预测未来的内容,但是很难把前面的所有东西都作为“条件”进行建模
image.png

马尔可夫假设

  1. 有限视野假设,只和前面的K个有关。前面的链条只到K,即K阶马尔可夫链
  2. N-1阶马尔可夫链被称为N元语言模型

对应的参数估计,需要估计得到频率
最大似然估计,使用频率来估计概率

Zipf Law 按照词频进行排序,词频和排位的乘积是一个常数

  1. 大部分的词都是稀有的
  2. 数据不足以得到完整的概率分布
  3. 后续2-gram,3-gram的零概率导致整个句子都是零概率

解决的方法

  1. 构造等价类
  2. 参数平滑
    1. 把一部分已经观察到的事件的概率的大小,分配到没有看到过的事件上
    2. 总体的约束概率还是1

参数平滑的方法

  1. 直接加上一个值,效果不好
  2. 拉普拉斯平滑,分母加上词的数目,分子加上k倍的概率

image.png

测试数据:test
交叉验证集合:用来选择参数和优化泛化能力

模型评价

  1. 直接在任务上测试
  2. 计算困惑度,在测试集上存在的概率

N-gram有一定的成功

  1. 只是词汇级别
  2. 没有长距离的依赖
  3. 没有结构和语法依赖

其他的语言的模型

窗口,基于周边的词

线性语言模型

类似于softmax的操作,分母是标准化,分子是分数,但是使用了指数的形式(保证了非负性)
image.png

特征工程

选择一些特征
比如

  1. ngram
  2. 类别特征
  3. 拼写特征

特征太少,欠学习,特征太多,过拟合
image.png

神经网络语言模型

  1. 把词表里每一个词都和一个特征向量联系
  2. 使用词的特征向量表示联合概率
  3. 同时学习特征向量和联合概率函数

独特编码

  1. 没有考虑到词语的相似性
  2. 直接利用id得到一个词的基本表示
  3. 维度爆炸

FeedForward NN 语言模型
使用给一个embedding layer得到词向量,然后使用多个层得到中间表示(非线性)
最后使用一个softmax得到一个概率分布

ngram VS FNNLM

  1. ngram
    1. 简单但是强大
    2. 数据稀疏
    3. 缺乏生成能力
    4. 没有参数的估计
  2. FNNLM
    1. 复杂但是好用
    2. 自动的抽取特征和生成能力