NLP语言模型详解

语言模型

1. 介绍

  • 语言模型刻画词序列概率大小。
  • 通常认为词序列概率更大的更符合语法的标准。所以经常用来判断一句话是否符合语法。
  • 例如 P(I \quad am \quad Light)>P(Light\quad I \quad am)
  • 我们就可以认为I \quad am \quad Light更符合语法

2. 链式法则

  • 把联合概率用条件概率表示

    • 链式法则:P(w_1,w_2,w_3,\cdots,w_n)=P(w_1)P(w_2|w_1)P(w_3|w_1w_2)\cdots P(w_n|w_1w_2w_3 \cdots w_n)

    • 例如:计算句子 今天是春节我们都休息 的联合概率为

      P(今天,是,春节,我们,都,休息)
      =P(今天)P(是|今天)P(春节|今天,是)\cdots P(休息|今天,是,春节,我们,都)

    • 每个词出现的概率计算过程:

      P(w_i|w_1,\cdots,w_{i-1}) = \frac {C{(w_1,w_2,\cdots,w_i)}}{\sum_w C{(w_1,w_2,\cdots,w_{i-1},w)}}

    ​ 解释:C(\cdot)表示子序列在训练集中出现的次数 。例如训练集中出现了以下几处话:

    ​ 今天是春节,我们都休息。
    ​ 今天是春节,我们都出去玩了。
    ​ 今天是工作日,我们都不休息。

    ​ 那么 P(春节|今天,是)=\frac {2}3,P(休息|今天,是,春节,我们,都)=\frac{1}{2}

  • 问题:事实上,如果条件过长,训练库中很少或者没有出现,计算每个词的出现的条件概率也是一种计算上的浪费。

  • 解决:所以我们引入马尔可夫假设(Markov assumption),即假设当前词出现的概率只依赖于前n-1个词。公式如下:

    P(w_i|w_1,\cdots,w_{i-1})=P(w_i|w_{i-n+1},\cdots,w_{i-1})

3. 马尔可夫假设

  • 作用:简化条件概率的计算,即当前词出现的概率只与前几个词有关。

  • 基于马尔可夫假设,定义n-gram语言模型如下:

    n的数值 公式 名称
    n=1 P(w_1,w_2,\cdots,w_n)=\prod_{i=1}^{n} P(w_i) unigram
    n=2 P(w_1,w_2,\cdots,w_n)=\prod_{i=1}^{n} P(w_i|w_{i-1}) bigram
    n=3 P(w_1,w_2,\cdots,w_n)=\prod_{i=1}^{n} P(w_i|w_{i-2}w_{i-1}) trigram
  • n=1时,即unigram模型。调整句子词的顺序,概率不变,这时可以认为词与词之间没有顺序关系。

  • n=2时,即bigram模型。当前词出现的概率只和前一个词出现的概率有关。

4. 使用语言模型过程

  1. 根据语料库(数据集)计算概率和条件概率
  2. 根据计算得到的概率,计算句子的联合概率
  3. 计算出的词语序列的联合概率更大的,我们更倾向于认为该词语序列符合语法。
  • 注意的点:
    1. 为了使句首词的条件概率有意义,需要给原序列加上一个或多个起始符<s>。例如P(今天)P(今天|<s>)的意义是完全不同的。
    2. 通常我们也会在序列末尾加一个结束符</s>。当不加结束符时,n-gram语言模型只能分别对所有固定长度的序列进行概率分布建模,而不是任意长度的序列。

5. n-gram语言模型中的平滑技术(smoothing)

  • 问题:当测试集中出现了训练集中未出现过的词,导致语言模型计算出的联合概率为零,此时就可以认为该词语序列不符合语法。但这是不合理的。例如 今天是星期三,我们都工作

    • **P(今天,是,星期三,我们,都,工作) **
      =P(今天)P(是|今天)P(星期三|今天,是)\cdots P(工作|今天,是,星期三,,我们,都)
    • 星期三 这个词在训练集中没出现,导致P(星期三|今天,是)=0,从而导致P(今天,是,星期三,我们,都,工作)=0。但这并不代表这句话不符合语法。
  • 解决上述问题,我们需要平滑技术。有以下几种平滑技术:

      1. Add-one平滑
      • P(w_i|w_{i-1})=\frac{C(w_{i-1},w_i)+1}{C(w_i)+v}
      • V是词典的大小。这样能满足P(w_i|w_0)的所有 i 求和是1。
      1. Add-K平滑
      • P(w_i|w_{i-1})=\frac {C(w_{i-1},w_i)+k}{C(w_i)+kv}
      • k的选择:用不同的k训练模型,在验证集上计算f(k)=perplexity,k=k*arg min f(k)
      1. interpolation平滑
      • 为什么要使用interpolation平滑?
        • P(a|c,d)=0,P(b|c,d)=0
        • P(c,d,a)=P(c)P(d|c)P(a|c,d)=0
        • P(c,d,b)=P(c)P(d|c)P(b|c,d)=0
        • 概率相同,不合理。(因为我们想知道c,d词后面更容易出现a还是b
      • 核心思路:计算Trigram概率时,同时考虑Unigram,Bigram,Trigram出现的频次。
      • P(w_i|w_{i-2},w_{i-1})=\lambda_1 P(w_i|w_{i-2},w_{i-1})+\lambda_2 P(w_i|w_{i-1})+\lambda_3P(w_i),其中\lambda_1+\lambda_2+\lambda_3=1
      1. 此外还有Laplace Smoothing,good-turning等平滑技术。

6. 神经网络语言模型NNLM

在神经网络(Neural Network, NN)被成功应用于语言建模之前,主流的语言模型为N-gram模型,采用计数统计的方式,在离散空间下表示语言的分布。由于缺乏对词的相似性的有效表示,N-gram语言模型存在严重的数据稀疏问题。虽然引入平滑技术,但数据稀疏问题仍不能得到有效的解决。神经网络语言模型则采用分布式的方式表示词,即通常所说的词向量,将词映射到连续的空间内,有效地解决了数据稀疏问题。并且神经网络具有很强的模式识别能力,神经网络语言模型的性能远优于N-gram模型。

前向神经网络是最早被引入到语言建模中的神经网络结构,随后是循环神经网络,包括标准循环神经网络、长短期记忆循环神经网络和门限循环单元神经网络,接着卷积神经网络也被引入语言建模中。

掌握NNLM对理解后续的ELMo,Transformer,BERT等NLP模型很有帮助。


神经网络语言模型.jpg

神经网络语言模型结构示意图如下图所示


神经网络语言模型结构示意图.png

添加LSTM网络的神经语言模型结构示意图如下图所示


循环神经网络语言模型.png

7. 评估语言模型-perplexity

  • 对于自然语言序列W=w_1,w_2,\cdots,w_n,可以推导出每个词的平均交叉熵为:

    H(W)=-\frac{1}{n}logP(w_1,w_2,\cdots,w_n)

  • 定义困惑度(perplexity)

    Perplexity(W)=2^{H(W)}=\sqrt[n]\frac{1}{P(w_1,\cdots,w_n)}

  • 困惑度在语言模型中的意义可以理解为 对于任意给定的序列,下一个候选词的可选范围大小。困惑度越小,说明所建模的语言模型越精确。

  • 扩展(与语言模型无关,可以跳过):

    • 信息论中常采用相对熵(relative entropy)来衡量两个分布之间的相近程度。
    • 对于离散随机变量X,熵、交叉熵以及相对熵的定义如下:
      • 熵:H(p)=-\sum_ip(x_i)logp(x_i)
      • 交叉熵:H(p,q)=-\sum_ip(x_i)logq(x_i)
      • 相对熵:D(p||q)=H(p,q)-H(p)=\sum_ip(x_i)logP(x_i)/q(x_i)
      • 其中 p(x)q(x)都是对随机变量概率分布的建模。
      • 假定p 是样本的真实分布,q是对其的建模。因为真实分布的熵H(P)值是确定的,因此优化相对熵D(p||q)等价于优化交叉熵H(p,q)
文档说明

读了一些文档,经过一段时间快忘了,才整理下来的。参考的文献和博客记不起来了,所以请原谅我不附参考链接了。文章用typora写的,自己码的字和公式,喜欢写作的伙伴,可以尝试一下。欢迎大家的评论与转发,转发时请附上文章出处。如果感觉文章对您有帮助,欢迎赞赏,您的支持是我及时记录的动力。

pdf文档链接:https://pan.baidu.com/s/10mfyX-A0S3Ji1-AOn6NTpA
提取码:kmmx

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,558评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,002评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,036评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,024评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,144评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,255评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,295评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,068评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,478评论 1 305
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,789评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,965评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,649评论 4 336
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,267评论 3 318
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,982评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,223评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,800评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,847评论 2 351

推荐阅读更多精彩内容