文章目录

  • NLP基础:语言模型(LM)
    • 1. 模型评估(概率估计)
    • 2. 平滑方法
    • 3. LM在拼写纠正(Spell Correction)中的应用

NLP基础:语言模型(LM)

语言模型(LM,Language Model)就是用来判断某个句子是否语义通顺。首先对句子进行分词,句子的概率可以表示为各个词的联合概率:P(s)=P(w1,w2,...,wn)P(s)=P(w_1,w_2,...,w_n)P(s)=P(w1​,w2​,...,wn​)。

根据Chain rule: P(A,B,C,D)=P(A)P(B|A)P(C|A,B)P(D|A,B,C),可以转化:

P(s)=P(w1,w2,...,wn)=P(w1)P(w2∣w1)P(w3∣w1,w2)...P(wn∣w1,w2,w3,...,wn−1)P(s)=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_3,...,w_{n-1}) P(s)=P(w1​,w2​,...,wn​)=P(w1​)P(w2​∣w1​)P(w3​∣w1​,w2​)...P(wn​∣w1​,w2​,w3​,...,wn−1​)
对于概率P(wn∣w1,w2,w3,...,wn−1)P(w_n|w_1,w_2,w_3,...,w_{n-1})P(wn​∣w1​,w2​,w3​,...,wn−1​),条件很长,corpus里找不到单词,就容易导致稀疏性(sparsity),因此引入Markov Assumption:

  • Unigram Model(1-gram): P(wn∣w1,w2,w3,...,wn−1)=P(wn)P(w_n|w_1,w_2,w_3,...,w_{n-1})=P(w_n)P(wn​∣w1​,w2​,w3​,...,wn−1​)=P(wn​)
  • Bigram Model(2-gram): P(wn∣w1,w2,w3,...,wn−1)=P(wn∣wn−1)P(w_n|w_1,w_2,w_3,...,w_{n-1})=P(w_n|w_{n-1})P(wn​∣w1​,w2​,w3​,...,wn−1​)=P(wn​∣wn−1​)
  • Trigram Model(3-gram): P(wn∣w1,w2,w3,...,wn−1)=P(wn∣wn−2,wn−1)P(w_n|w_1,w_2,w_3,...,w_{n-1})=P(w_n|w_{n-2},w_{n-1})P(wn​∣w1​,w2​,w3​,...,wn−1​)=P(wn​∣wn−2​,wn−1​)
  • N-gram Model

因此,语言模型可表示为:

  • Unigram Model: P(w1,w2,...,wn)=∑i=1nP(wi)P(w_1,w_2,...,w_n)= \sum_{i=1}^n P(w_i)P(w1​,w2​,...,wn​)=∑i=1n​P(wi​)
  • Bigram Model: P(w1,w2,...,wn)=P(w1)∑i=2nP(wi∣wi−1)P(w_1,w_2,...,w_n)= P(w_1)\sum_{i=2}^n P(w_i|w_{i-1})P(w1​,w2​,...,wn​)=P(w1​)∑i=2n​P(wi​∣wi−1​)
  • Trigram Model: P(w1,w2,...,wn)=P(w1)P(w2∣w1)∑i=3nP(wi∣wi−1,wi−2)P(w_1,w_2,...,w_n)= P(w_1)P(w_2|w_1)\sum_{i=3}^n P(w_i|w_{i-1},w_{i-2})P(w1​,w2​,...,wn​)=P(w1​)P(w2​∣w1​)∑i=3n​P(wi​∣wi−1​,wi−2​)

那么如何估计每个单词的概率呢?统计语料库corpus里出现的单词的频数来估计概率,即模型的训练过程。

比如,根据以下不同阶段的工作或选择构建不同的LM?

  • N-gram里N的选择:Unigram, Bigram, Trigram,…
  • 平滑处理方法的不同:Laplace smoothing, Interpolation, Good-Turing smoothing等10几种方法。(计算概率避免出现概率为0,在文本分类的问题中,当一个词语没有在训练样本中出现,该词语调概率为0,使用连乘计算文本出现概率时也为0。)
  • 预处理方法:语料中去掉某些特定的人名地名等词,停用词等。

1. 模型评估(概率估计)

根据不同的选择可以有很多LM,又如何从中选择最好的一个呢?训练出来的语言模型效果是好还是坏?

理想情况下:

  1. 假设有语言模型A,B
  2. 选定一个特定的任务,比如拼写纠错,机器翻译(MT,Machine Translation)
  3. 把两个模型都应用到此任务中
  4. 最后比较准确率,从而判断A,B的表现

核心思路:P(w1,w2,...,wn)=P(w1)P(w2∣w1)P(w3∣w1,w2)...P(wn∣w1,w2,w3,...,wn−1)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_3,...,w_{n-1})P(w1​,w2​,...,wn​)=P(w1​)P(w2​∣w1​)P(w3​∣w1​,w2​)...P(wn​∣w1​,w2​,w3​,...,wn−1​)使概率乘积最大。

更简单的评估方法,不需要放在特定任务中——Perplexity

Perplexity=2−x,x:averageloglikelihood\text{Perplexity}=2^{-x}, \quad x:average\quad log\quad likelihood Perplexity=2−x,x:averageloglikelihood
例如,Bigram Model:
BigramModel:P(w1,w2,w3,w4,w5)=P(w1)P(w2∣w1)P(w3∣w2)P(w4∣w3)P(w5∣w4)x=logP(w1)+logP(w2∣w1)+logP(w3∣w2)+logP(w4∣w3)+logP(w5∣w4)5⟹Perplexity=2−xBigram Model: P(w_1,w_2,w_3,w_4,w_5)=P(w_1)P(w_2|w_1)P(w_3|w_2)P(w_4|w_3)P(w_5|w_4)\\ x =\frac{logP(w_1)+logP(w_2|w_1)+logP(w_3|w_2)+logP(w_4|w_3)+logP(w_5|w_4)}{5} \Longrightarrow \text{Perplexity}=2^{-x} BigramModel:P(w1​,w2​,w3​,w4​,w5​)=P(w1​)P(w2​∣w1​)P(w3​∣w2​)P(w4​∣w3​)P(w5​∣w4​)x=5logP(w1​)+logP(w2​∣w1​)+logP(w3​∣w2​)+logP(w4​∣w3​)+logP(w5​∣w4​)​⟹Perplexity=2−x
Perplexity越小(LM中所有单词的概率乘积越大),LM越好。

2. 平滑方法

为了解决使用N-Gram模型时可能引入的稀疏数据问题,人们设计了多种平滑算法。
计算概率应避免出现概率为0,在文本分类的问题中,当一个词语没有在训练样本中出现,该词语概率为0,使用连乘计算文本出现概率时也为0。

可以用平滑处理方法:Laplace smoothing, Interpolation, Good-Turing smoothing等10几种方法。

  • Add-one Smoothing(Laplace Smoothing)

P(wi∣wi−1)=c(wi−1,wi)+1c(wi−1)+VP(w_i|w_{i-1})=\frac{c(w_{i-1},w_i)+1}{c(w_{i-1})+V} P(wi​∣wi−1​)=c(wi−1​)+Vc(wi−1​,wi​)+1​

,V是词库大小(分母+V为了归一化,所有概率和=1)

  • Add-K Smoothing(Laplace Smoothing)

P(wi∣wi−1)=c(wi−1,wi)+kc(wi−1)+kVP(w_i|w_{i-1})=\frac{c(w_{i-1},w_i)+k}{c(w_{i-1})+kV} P(wi​∣wi−1​)=c(wi−1​)+kVc(wi−1​,wi​)+k​

,V是词库大小(V=set(corpus))

  • Interpolation插值

    在使用插值算法时,把不同阶别的N-Gram模型线性加权组合后再来使用。简单线性插值(Simple Linear Interpolation)可以用下面的公式来定义:

P(wi∣wi−2,wi−1)=λ1P(wi)+λ2P(wi∣wi−1)+λ3P(wi−2,wi−1)λ1+λ2+λ3=1P(w_i|w_{i-2},w_{i-1})=\lambda_1P(w_i)+\lambda_2P(w_i|w_{i-1})+\lambda_3P(w_{i-2},w_{i-1}) \\ \lambda_1 + \lambda_2 + \lambda_3 = 1 P(wi​∣wi−2​,wi−1​)=λ1​P(wi​)+λ2​P(wi​∣wi−1​)+λ3​P(wi−2​,wi−1​)λ1​+λ2​+λ3​=1

  • Good-Turing smoothing

    基本思想: 用观察计数较高的 N-gram 数量来重新估计概率量大小,并把它指派给那些具有零计数或较低计数的 N-gram.

    Idea: reallocate the probability mass of n-grams that occur r+1 times in the training data to the n-grams that occur r times.

    在 Good Turing 下,对每一个计数 r,我们做一个调整,变为 r′r'r′,nrn_rnr​表示出现过r次的N-gram:

r′=(r+1)nr+1/nrP(x:c(x)=r)=r′/Nr'= (r+1)n_{r+1}/n_r \\ P(x:c(x)=r)=r'/N r′=(r+1)nr+1​/nr​P(x:c(x)=r)=r′/N

3. LM在拼写纠正(Spell Correction)中的应用

一般地,拼写错误有两种:第一,词拼写错;第二,没有错词,语法有问题。

对于错词,之前的方法VS现在的方法

之前的方法:用户输入 --> 从词典中寻找编辑距离最小的词(需要遍历整个词典O(|V|) --> 返回现在的方法:用户输入 --> 生成编辑距离为1,2的字符串(candidates) --> 过滤 (根据上下文)--> 返回

如何过滤?

假设w是错词,改成正确的形式c:
c∗=arg⁡max⁡c∈CandidatesP(c∣w)=arg⁡max⁡c∈CandidatesP(w∣c)P(c)/P(w)=arg⁡max⁡c∈CandidatesP(w∣c)P(c)\begin{aligned} c^{*} &= \mathop{\arg\max}\limits_{c \in Candidates} P(c|w) \\ &= \mathop{\arg\max}\limits_{c \in Candidates} P(w|c)P(c)/P(w) \\ &= \mathop{\arg\max}\limits_{c \in Candidates} P(w|c)P(c) \\ \end{aligned} c∗​=c∈Candidatesargmax​P(c∣w)=c∈Candidatesargmax​P(w∣c)P(c)/P(w)=c∈Candidatesargmax​P(w∣c)P(c)​

P(w∣c)P(w|c)P(w∣c)是(w,c)相关的score,P(c)P(c)P(c)是语言模型

第一,词拼写错:

  1. 首先是获取candidates,w所有可能的c,有两种方法来过滤出最优的正确词。
  • Edit Distance

    设定不同编辑距离下(w,c)相关的score,例如d=1, score=0.8; d=2, score=0.2; other, score=0.

  • Collected data
    P(w|c):当用户拼c时,有多少概率把它拼错位w?
    从搜索引擎可以得到相关的历史数据,例如输入搜索词“appl",搜索框历史给出相关的可能的匹配词,统计出现的频率即可。

  1. 然后对候选词根据N-gram的概率最大化来选择最优的词c。

第二,没有错词,语法有问题。

根据LM来检查。

欢迎各位关注我的个人公众号:HsuDan,我将分享更多自己的学习心得、避坑总结、面试经验、AI最新技术资讯。

NLP基础——语言模型(LM)相关推荐

  1. 语言模型(LM)介绍及实操

    原文地址:https://medium.com/analytics-vidhya/a-comprehensive-guide-to-build-your-own-language-model-in-p ...

  2. NLP常见语言模型及数据增强方法总结

    文章目录 一.NLP常见语言模型 1.词的离散表示 1.One-hot编码(独热编码) 2.Bag of Words(BOW,词袋模型) 3.N-gram语言模型 2.词的分布式表示 1.共现矩阵(C ...

  3. 2021秋招-NLP基础任务模型-NER

    NLP基础任务模型-NER 注: 基本全是转载,也都附加了转载链接,侵删. 多谢各位大佬的总结. 目录: 任务定义 简单综述 数据集细节总结 模型细节总结 损失函数计算 总结 NLP实战-中文命名实体 ...

  4. NLP基础:编辑距离+拼写纠错实战

    NLP基础:编辑距离+拼写纠错实战 1. 编辑距离相关 1.1 编辑距离的计算 1.2 运行结果 1.3 生成特定编辑距离的字符串 1.3.1 生成与目标字符编辑距离为1的字符 1.3.2 运行结果 ...

  5. NLP《语言模型(一)-- 基于统计的N-Gram语言模型》

    前言,上一篇我们学习了一些基于醉打匹配规则的分词方法,这一篇我们介绍基于概率统计的方法之一,概率语言模型LM. 一:什么是语言模型? 每一句话,都是由若干个词语组成,这些词语的排列组合由若干种,但是只 ...

  6. nlp基础—8.隐马尔科夫模型(HMM)分词实现

    文章目录 引言 HMM分词实现 理论部分传送门: nlp基础-7.隐马尔可夫模型(HMM算法) 数据代码链接见:https://gitee.com/lj857335332/hmm-for-word-s ...

  7. 文本标注十要点 | NLP基础

    NLP基础系列 1. 浅论语言与认知的关系 2. 为什么要处理自然语言 3. 计算机是如何理解自然语言的 文本标注十要点 实验 vs 应用 自然语言处理(NLP)是机器学习领域非常有挑战的一个分支. ...

  8. NLP基础 - 计算文本的相似度

    NLP基础 - 计算文本的相似度 一.计算文本的相似度简介 二.举例 一.计算文本的相似度简介 计算两个文本间的相似度在NLP领域中的应用非常广,包括:搜索引擎.问答系统.聊天机器人.文本分类等. 计 ...

  9. bio和bieos哪个标注模式好_2021秋招-NLP基础任务模型-NER

    NLP基础任务模型-NER 注: 基本全是转载,也都附加了转载链接,侵删. 多谢各位大佬的总结. 目录: 任务定义 简单综述 数据集细节总结 模型细节总结 损失函数计算 总结 NLP实战-中文命名实体 ...

最新文章

  1. 第一次冲刺-个人工作总结01
  2. C#实现树型结构TreeView节点拖拽的简单功能,附全部源码,供有需要的参考
  3. 教师计算机考试登记网,计算机等级考试及计算机资格考试
  4. 让Apache支持Wap网站
  5. wepy公共样式_小程序开发wepy框架类vue的开发方式
  6. 年底绩效考核期又来临,企业如何挑选一款好用的绩效考核管理系统?
  7. DUET DISPLAY分屏软件IOS账号共享
  8. weka进行十折交叉验证
  9. C++ 字符跑酷#3 游戏制作实录
  10. (32)【文件下载漏洞专题】Filedownload原理、漏洞出现、危害、漏洞利用……
  11. 移动硬盘不被系统识别的处理
  12. navicat的基本使用技巧
  13. Mixly for Mac米思齐安装过程遇到的问题(已解决)
  14. vue+node(express)+socket实现简单聊天
  15. FL Studio水果软件好用吗?对电脑硬件环境有哪些需求
  16. 熊掌号PHP,MIP企业网站模板(熊掌号)
  17. 【§狼族少年之淳伊美女主题(oo)】
  18. 旋转标注框数据标签制作-roLabelImg
  19. 图卷积神经网络--Graph Convolutional Networks for Hyperspectral Image Classification
  20. (三)ls-dyna做入水冲击仿真操作步骤

热门文章

  1. 世界10大编程语言,Java不是第一,PHP才第五
  2. Idea使用git拉取新分支教学
  3. “打工人”这个梗,怎么就突然火了?
  4. 追忆-千千静听7.07美化增强版
  5. idea如何全局替换
  6. Nginx访问本地静态资源详细步骤
  7. Python Selenium库的使用【从安装到实战】
  8. Oracle添加字段
  9. c语言用printf画熊猫,STM32重定向printf()和scanf()到UART
  10. asp.net基于net的居民小区疫情防控管理系统-计算机毕业设计