当前位置: 首页 > news >正文

统计语言模型——Ngram

文章目录

  • 什么是语言模型
  • 语言模型的分类
    • 自回归(auto regressive)语言模型
    • 自编码(auto encoding)语言模型
  • N-gram语言模型
    • 马尔可夫假设
      • 马尔可夫假设的缺陷
      • 平滑问题
  • 语言模型的评价指标
    • 困惑度 perplexity
  • 神经网络语言模型

什么是语言模型

机器是怎么识别语言的呢?语言是灵活的,语言也是有规律的。人们可以了解一门语言的人可以判断一句话是否”合理”。通俗来讲,语言模型评价一句话是否“合理”或“是人话”,也就是判断这句话的成句概率。目前语言模型在输入法和语音识别和手写识别都有很大的应用,输入法可以通过拼音对各个词句的概率,将所需要输入的词句优先排在更前面的位置。从而有更快的打字输入。目前语言模型的发展有统计语言模型、神经语言模型、预训练模型、大语言模型。

语言模型的分类

自回归(auto regressive)语言模型

  • 在训练时由上文预测下文(或反过来)。
  • 单向模型,仅使用单侧序列信息。
  • 代表:N-gram,ELMO, GPT。

自编码(auto encoding)语言模型

  • 在训练时预测序列中任意位置的字符。
  • 双向模型,吸收上下文信息。
  • 代表:BERT。

N-gram语言模型

N-gram是一种统计语言模型,它是如何计算成句概率的呢?用 S S S代表句子, w w w代表单个字或词
S = w 1 w 2 w 3 w 4 w 5 … w n S = w_1w_2w_3w_4w_5…w_n S=w1w2w3w4w5wn P ( S ) = P ( w 1 , w 2 , w 3 , w 4 , w 5 … w n ) P(S) = P(w_1,w_2,w_3,w_4,w_5…w_n) P(S)=P(w1,w2,w3,w4,w5wn)
对句有着不同的程度切分就会有不一样的概率计算效果。如何计算这些概率呢?
如果以字为单位
P(今天天气不错) = P(今)*P(天|今) *P(天|今天) *P(气|今天天) *P(不|今天天气) *P(错|今天天气不)
如果以词为单位
P(今天 天气 不错) = P(今天)*P(天气|今天) *P(不错|今天 天气)
对于学过统计的同学来说,我们知道可以用频率来估计概率
P ( 今天 ) = c o u n t ( 今天 ) c o u n t ( a l l ) P(今天)=\frac{count(今天)}{count(all)} P(今天)=count(all)count(今天)
对于学过条件概率的同学来说知道
P ( 天气 ∣ 今天 ) = c o u n t ( 天气 , 今天 ) c o u n t ( 天气 ) P(天气|今天)=\frac{count(天气,今天)}{count(天气)} P(天气今天)=count(天气)count(天气,今天)
c o u n t ( 天气 , 今天 ) {count(天气,今天)} count(天气,今天)代表天气和今天出现在一起的次数。

马尔可夫假设

统计语言模型有着很明显的困难,就是句子太多了,对任意一门语言,N-gram数量都非常庞大,无法穷举,需要简化。
马尔可夫假设
P ( w n ∣ w 1 , … , w n − 1 ) ≈ P ( w n ∣ w n − 3 , w n − 2 , w n − 1 ) P(w_n|w_1,…,w_{n-1}) ≈ P(w_n|w_{n-3},w_{n-2},w_{n-1}) P(wnw1,,wn1)P(wnwn3,wn2,wn1)假设第n个词出现的概率,仅受其前面有限个词影响。这里的n就代表着Ngram的N是多少。假如n=3,用字来计算概率
P ( 今天天气不错 ) = P ( 今 ) ∗ P ( 天 ∣ 今 ) ∗ P ( 天 ∣ 今天 ) ∗ P ( 气 ∣ 天天 ) ∗ P ( 不 ∣ 天气 ) ∗ P ( 错 ∣ 气不 ) P(今天天气不错) = P(今)*P(天|今) *P(天|今天) *P(气|天天) *P(不|天气) *P(错|气不) P(今天天气不错)=P()P()P(今天)P(天天)P(天气)P(气不)
这样看就简化许多。

马尔可夫假设的缺陷

1、影响第n个词的因素可能出现在前面很远的地方。例如,我过关于马尔科夫的生平的,我过关于马尔科夫的生平的电影,我过关于马尔科夫的生平的故事
2、影响第n个词的因素可能出现在其后面。
3、影响第n个词的因素可能不在文中。
*所以对于第3点,如何给出语料中没出现过的词或ngram概率?*对于文中没有出现的词,一句话的成句概率里面变成为0。

平滑问题

理论上说,任意的词组合成的句子,概率都不应当为零,如何给没见过的词或ngram分配概率即为平滑问题,也称折扣问题(discounting)。
1、回退(backoff)
当三元组a b c不存在时,退而寻找b c二元组的概率,P(c | a b) = P(c | b) * Bow(ab),Bow(ab)称为二元组a b的回退概率,回退概率有很多计算方式,甚至可以设定为常数,回退可以迭代进行,如序列 a b c d,
P(d | a b c) = P(d | b c) * Bow(abc),
P(d | bc) = P(d | c) * Bow(bc),
P(d | c ) = P(d) * Bow (c)
2、加1平滑
对于P(word)不存在如何处理,可以对概率进行加1修正: P ( w o r d ) = w o r d + 1 c o u n t ( t o t a l ) + V P(word)=\frac{word+1}{count(total)+V} P(word)=counttotal+Vword+1
V是词表的数量。
3、OOV
NLP中常见处理一种的未登录词的一种方法就是OOV,将低频词替换为UNK,预测中遇到的未见过的词,也用UNK代替,例如:
一语成谶 —> 一语成UNK
P ( U N K ∣ 一语成 ) P(UNK|一 语 成) P(UNK一语成)
4、插值
受到回退平滑的启发,在计算高阶ngram概率是同时考虑低阶的ngram概率值,以插值给出最终结果: P ( w n ∣ w n − 1 , w n − 2 ) = λ 1 ∗ P ( w n ∣ w n − 1 , w n − 2 ) + λ 2 ∗ P ( w n ∣ w n − 1 ) + λ 3 ∗ P ( w n ) 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) P(wnwn1,wn2)=λ1P(wnwn1,wn2)+λ2P(wnwn1)+λ3P(wn) λ 1 + λ 2 + λ 3 = 1 \lambda_1+\lambda_2+\lambda_3=1 λ1+λ2+λ3=1
对于 λ \lambda λ可以在训练时进行超参数调节。

语言模型的评价指标

困惑度 perplexity

P P ( S ) = P ( w 1 w 2 . . . w n ) − 1 n PP(S)=P(w_1w_2...w_n)^{-\frac{1}{n}} PP(S)=P(w1w2...wn)n1或者
P P ( S ) = 2 − 1 N ∑ l o g ( P ( w ) ) PP(S)=2^{-\frac{1}{N}\sum log(P(w))} PP(S)=2N1log(P(w))
这两个数值都是与成句概率成反比,但是这个数值是一个相对值。

神经网络语言模型

之前的文章介绍过了神经语言网络语言模型,他的副产物就是词向量。神经网络语言最后一层过softmax层,所以这个模型没有平滑问题,而且这个模型的所占用的内存较小,相对的缺点就是计算速度较慢一点,统计语言模型就是多次查哈希表的过程。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • SpringMVC 工作流程简述
  • 2024年华数杯数学建模竞赛——赛题浅析
  • FFmpeg实现文件夹多视频合并
  • 使用Python创建多功能文件管理器
  • AcWing食物链
  • Lua 脚本编程基础
  • 搭建nexus上传jar包,并结合jenkins运行项目
  • OpenCV||超细节的基本操作
  • Redis学习笔记——第19章 事务
  • 【算法】递归实现二分查找(优化)以及非递归实现二分查找
  • RMAN-06618不同版本之间RMAN无法连接
  • 『C++实战项目 负载均衡式在线OJ』二、编译模块编写(持续更新)
  • 【前端 22】使用Nginx部署前端项目
  • 手持式气象站:科技赋能精准气象观测
  • 长短期记忆网络LSTM
  • 「前端」从UglifyJSPlugin强制开启css压缩探究webpack插件运行机制
  • angular2 简述
  • ES学习笔记(12)--Symbol
  • gitlab-ci配置详解(一)
  • gulp 教程
  • React组件设计模式(一)
  • REST架构的思考
  • Xmanager 远程桌面 CentOS 7
  • 给github项目添加CI badge
  • 后端_ThinkPHP5
  • 将 Measurements 和 Units 应用到物理学
  • 区块链将重新定义世界
  • 如何设计一个比特币钱包服务
  • 数据库写操作弃用“SELECT ... FOR UPDATE”解决方案
  • 宾利慕尚创始人典藏版国内首秀,2025年前实现全系车型电动化 | 2019上海车展 ...
  • 专访Pony.ai 楼天城:自动驾驶已经走过了“从0到1”,“规模”是行业的分水岭| 自动驾驶这十年 ...
  • ​​​​​​​​​​​​​​汽车网络信息安全分析方法论
  • # 20155222 2016-2017-2 《Java程序设计》第5周学习总结
  • %@ page import=%的用法
  • (11)MSP430F5529 定时器B
  • (2)从源码角度聊聊Jetpack Navigator的工作流程
  • (C++20) consteval立即函数
  • (DenseNet)Densely Connected Convolutional Networks--Gao Huang
  • (Java入门)学生管理系统
  • (k8s中)docker netty OOM问题记录
  • (ZT)出版业改革:该死的死,该生的生
  • (阿里云万网)-域名注册购买实名流程
  • (笔试题)分解质因式
  • (数位dp) 算法竞赛入门到进阶 书本题集
  • (一)80c52学习之旅-起始篇
  • (已解决)vue+element-ui实现个人中心,仿照原神
  • (转)真正的中国天气api接口xml,json(求加精) ...
  • (转载)虚幻引擎3--【UnrealScript教程】章节一:20.location和rotation
  • (轉貼) 資訊相關科系畢業的學生,未來會是什麼樣子?(Misc)
  • (自用)learnOpenGL学习总结-高级OpenGL-抗锯齿
  • .Net 6.0--通用帮助类--FileHelper
  • .net core Redis 使用有序集合实现延迟队列
  • .NET Core Web APi类库如何内嵌运行?
  • .net core使用EPPlus设置Excel的页眉和页脚
  • .net 发送邮件