第一讲:语言模型

不涉及到神经网络过的模型。语言模型是基础知识,是做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 增加内容

results matching ""

    No results matching ""