定义

什么是语言模型,通俗的讲就是从语法上判断一句话是否通顺。即判断如下的概率成立:

\[p(\text{今天是周末})>p(\text{周末是今天})
\]

链式法则(chain rule)

\[p(w_1,w_2,...,w_n)=p(w_1)p(w_2|w_1)p(w_3|w_1,w_2)...p(w_n|w_1,w_2,...,w_{n-1})
\]

Markov assumption

Markov assumption(first order)

\[p(w_1,w_2,...,w_n)=p(w_1)p(w_2|w_1)...p(w_n|w_{n-1})=p(w_1)\prod_{i=2}^{n}p(w_i|w_{i-1})
\]

Markov assumption(second order)

\[p(w_1,w_2,...,w_n)=p(w_1)p(w_2|w_1)p(w_3|w_1,w_2)...p(w_n|w_{n-2},w_{n-1})=p(w_1)p(w_2|w_1)\prod_{i=3}^{n}p(w_i|w_{i-2},w_{i-1})
\]

N-gram语言模型

我们基于上述的Markov assumption将n=1、n=2、n=3等模型进行说明

Unigram

n=1的情况下,是相对于first order markov assumption情况更简单的语言模型,其假设各个词之间时相互独立的,如下示:

\[p(w_1,w_2,...,w_n)=p(w_1)=p(w_1)p(w_2)...p(w_n)
\]

Bigram

n=2的情况下,即是Bigram语言模型,其来源于first order markov assumption,其考虑了词与词之间的先后顺序,如下所示:

\[p(w_1,w_2,...,w_n)=p(w_1)p(w_2|w_1)...p(w_n|w_{n-1})=p(w_1)\prod_{i=2}^{n}p(w_i|w_{i-1})
\]

trigram

n=3的情况下,即是Trigram语言模型,其来源于second order markov assumption,其考虑了当前词与其前面两个词的先后顺序关系,如下所示:

\[p(w_1,w_2,...,w_n)=p(w_1)p(w_2|w_1)p(w_3|w_1,w_2)...p(w_n|w_{n-2},w_{n-1})=p(w_1)p(w_2|w_1)\prod_{i=3}^{n}p(w_i|w_{i-2},w_{i-1})
\]

基于上述情况,常用的也就是Bigram,Trigram相对计算复杂结果更准确,n>3的情况下目前相对较少。

如何训练语言模型

上述我们说明了n=1、2、3等情况下的语言模型,那如何训练计算中的各个单词的概率值呢?

一般情况下,我们是通过给定的训练语料经过分词后,统计各个词出现的频率(或者条件频率)进行计算的,即在Unigram语言模型中,我们计算单个词的概率,是拿该词出现的次数除以整个训练语料中词的个数;在Bigram语言模型中,计算 \(p(w_i|w_{i-1})\) 的值,则需要先计算 \(w_{i-1}\) 这个词出现的次数 \(C(w_{i-1})\) ,而后计算 \(w_{i-1}\) 词后出现 \(w_i\) 这个词的数目 \(C(w_i|w_{i-1})\) ,则

\[p(w_i|w_{i-1})=C(w_i|w_{i-1}) / C(w_{i-1})
\]

Trigram的计算过程和上述基本一致,这里不再进行说明。

如何评估语言模型

perplexity

基本思想是,给测试集的句子赋予较高概率值的语言模型较好,当语言模型训练完之后,测试集中的句子都是正常的句子,那么训练好的模型就是在测试集上的概率越高越好。表达式为:

\[pp(s)=2^{-\frac{1}{N}\sum logp(w_i)}
\]

上式中 \(logp(w_i)\) 是我们在测试集中计算各个单词的概率,比如Unigram即是单个词的概率,Bigram即是 \(p(w_i|w_{i-1})\) 的概率,依次类推。

smoothing

在计算各个概率的过程中,受限于语料集的问题,并不能涵盖所有的词,如果不做smoothing平滑的话,会导致某些词的概率为0,这种情况下不管其他词概率为多少,计算的结果均为0,这种情况违背了我们的初衷。解决此问题的方式是增加平滑项。

  • Add-one smoothing
  • Add-k smoothing
  • Interpolation
  • Good-turning smoothing
Add-one smoothing

计算公式如下所示:

\[P_{Add-1}(w_i|w_{i-1})=\frac{C(w_i|w_{i-1})+1}{C(w_{i-1})+V}
\]

其中V是词库大小

Add-k smoothing

计算公式如下所示:

\[P_{Add-k}(w_i|w_{i-1})=\frac{C(w_i|w_{i-1})+k}{C(w_{i-1})+k*V}
\]

Interpolation

Interpolation综合Unigram、Bigram、Thrigram等方法进行平滑

\[p(w_n|w_{n-1},w_{n-2})=\lambda_1 p(w_n|w_{n-1},w_{n-2})+\lambda_2 p(w_n|w_{n-1})+\lambda_3 p(w_n)
\]

其中 \(\lambda_1 + \lambda_2 + \lambda_3 = 1\)

Good-turning smoothing

其主要思想是从概率的总量中分配少量的比例给零概率项。

假定给定的语料库中出现\(r\) 次数的词有 \(N_r\) 个,则有

\[N = \sum_{i=1}^{\infty }rN_r
\]

当\(r\) 较小时,我们使用 \(d_r\) 代替 \(r\) ,这里 \(d_r < r\) , \(d_r\) 的值可有下式表示

\[d_r = ( r+1 )N_{r+1}/N_r
\]

其期望可以表示为

\[\hat{\theta }\left ( r \right )=\frac{1}{N}\left (r+1 \right )\frac{N_{r+1}}{N_r}
\]

其中\(N\) 为现有语料库中所有单词频数的总和,这样可以保证

\[N = \sum_{r}^{ }d_rN_r
\]

一般情况下,发生次数为\(r\) 的词个数大于发生次数为 \(r\) +1的词个数, \(r\) 越大,词的数量 \(N_r\) 越小。通过Good-turning smooth可以让数据稀疏度有效的降低,所有词的概率估计会看起来很平滑。

语言模型 Language Model (LM)的更多相关文章

  1. 用CNTK搞深度学习 (二) 训练基于RNN的自然语言模型 ( language model )

    前一篇文章  用 CNTK 搞深度学习 (一) 入门    介绍了用CNTK构建简单前向神经网络的例子.现在假设读者已经懂得了使用CNTK的基本方法.现在我们做一个稍微复杂一点,也是自然语言挖掘中很火 ...

  2. 线上学习-语言模型 language model

    chain rule markov assumption 评估语言模型 平滑方法

  3. NLP问题特征表达基础 - 语言模型(Language Model)发展演化历程讨论

    1. NLP问题简介 0x1:NLP问题都包括哪些内涵 人们对真实世界的感知被成为感知世界,而人们用语言表达出自己的感知视为文本数据.那么反过来,NLP,或者更精确地表达为文本挖掘,则是从文本数据出发 ...

  4. 论文分享|《Universal Language Model Fine-tuning for Text Classificatio》

    https://www.sohu.com/a/233269391_395209 本周我们要分享的论文是<Universal Language Model Fine-tuning for Text ...

  5. Traditional Language Model

    Traditional Language Model通常用于回答下述问题: How likely is a string of English words good English ? \(p_{LM ...

  6. A Neural Probabilistic Language Model

    A Neural Probabilistic Language Model,这篇论文是Begio等人在2003年发表的,可以说是词表示的鼻祖.在这里给出简要的译文 A Neural Probabili ...

  7. (六) 语言模型 Language Madel 与 word2vec

    语言模型简介(Language Model) 简单的说,语言模型 (Language Model) 是用来计算一个句子出现概率的模型,假设句子  ,其中  代表句子中的第  个词语,则语句 W 以该顺 ...

  8. 将迁移学习用于文本分类 《 Universal Language Model Fine-tuning for Text Classification》

    将迁移学习用于文本分类 < Universal Language Model Fine-tuning for Text Classification> 2018-07-27 20:07:4 ...

  9. #论文阅读# Universial language model fine-tuing for text classification

    论文链接:https://aclweb.org/anthology/P18-1031 对文章内容的总结 文章研究了一些在general corous上pretrain LM,然后把得到的model t ...

随机推荐

  1. 008.Nginx静态资源

    一 Nginx静态资源概述 1.1 静态资源类型 Nginx作为静态资源Web服务器部署配置, 传输非常高效, 常常用于静态资源处理,请求以及动静分离.通常非服务器动态运行生成的文件属于静态资源. 类 ...

  2. three.js 制作属于自己的动态二维码

    今天郭先生说一下用canvas解析图片流,然后制作一个动态二维码的小案例,话不多说先上图,在线案例点击博客原文.这是郭先生的微信二维码哦! 1. 解析图片流 canvas = document.cre ...

  3. Java实现简单的增删改查操作

    需求分析:通过数组 ,完成 对学生信息的 管理 (增删改查)创建1个 学生类创建1个 CRUD的类 – 学生管理类 并测试 在这个程序中我只运用了两个类进行操作 package com.hopu.de ...

  4. CentOS7 安装nginx部署vue项目

    简单描述:代码开发完了,需要环境来运行测试.服务器上没有nginx,搞起搞起.   在Centos下,yum源不提供nginx的安装,可以通过切换yum源的方法获取安装.也可以通过直接下载安装包的方法 ...

  5. Head First HTML与CSS(第2版)PDF高清完整版免费下载|百度云盘

    百度云盘:Head First HTML与CSS(第2版)PDF高清完整版免费下载 提取码:i8q4 内容简介 是不是已经厌倦了那些深奥的HTML书?你可能在抱怨,只有成为专家之后才能读懂那些书.那么 ...

  6. js 从目标数组中过滤掉 一个数组元素,

    标题描述的有点僵硬,大概需求是,从目标数组中过滤掉我想要删除的元素集合,这里使用的是遍历+过滤器的组合,很方便,做个笔记! let old = ["AE_CN_SUPER_ECONOMY_G ...

  7. 【接单】找我付费定制Python工具软件或网站开发、Chrome浏览器插件、油猴脚本

    各位可付费找我定制Python工具软件或网站开发.Chrome插件.油猴脚本.自动化软件,可通过我做的软件来评判我的实力,一定要先和我沟通你的需求,做不了的我也不会接. 费用50元起,通过淘宝APP或 ...

  8. python基础--深浅copy(重点)

    在此申明一下,博客参照了https://www.cnblogs.com/jin-xin/,自己做了部分的改动 深浅copy(重点) 先问问大家,什么是拷贝?拷贝是音译的词,其实他是从copy这个英文单 ...

  9. PHP filetype() 函数

    定义和用法 filetype() 函数返回指定文件或目录的类型. 如果成功,该函数返回 7 种可能的值之一.如果失败,则返回 FALSE. 可能的返回值: fifo char dir block li ...

  10. PHP zip_entry_open() 函数

    定义和用法 zip_entry_open() 函数打开一个 zip 档案以供读取.高佣联盟 www.cgewang.com 如果成功,该函数则返回 TRUE.如果失败,则返回 FALSE. 语法 zi ...