n元语法
来源:互联网 发布:任务管理 知乎 编辑:程序博客网 时间:2024/05/07 07:01
语言模型
在统计自然语言处理中语言模型是很重要的一块,常用的语言模型是n元语法模型,当然现在比较流行的还有神经网络语言模型。n元语法模型需要额外的平滑处理,而神经网络语言模型则不必,它自带平滑效果。
n元语法
n元语法(n-gram)是NLP中很重要的统计语言模型,简单来说就是计算某个句子出现的概率,比如“我今天上班迟到了”这句话在整个语言下的概率,一般我们会通过一个大的语料库来进行统计。
用数学语言来描述,假设我们的句子为
其中P(w1)表示第一个词w1出现的概率;P(w2|w1)是第一个词出现的前提下第二个词出现的概率;以此类推。比如s=“我今天上班迟到了”,那么P(s)=P(我)P(今天|我)P(上班|我,今天)P(迟到了|我,今天,上班)。
如果严格按照上述公式计算概率,假设总词汇大小为 N,那么第 t 个词的概率 要考虑
上述的语言模型的参数空间太大而且数据稀疏,导致在实际中基本无法使用。所以我们需要一个假设,某个词出现的概率只与它前面的一个或几个词有关,这个假设就是马尔科夫假设。
- 当 n=1 时,称为一元语法,被记为unigram,此时第 i 个词出现的概率完全独立与之前的情况。
- 当 n=2 时,称为二元语法,被称为一阶马尔科夫链,记为bigram,此时第 i 个词出现的概率与它的前一个词有关。
- 当 n=3 时,称为三元语法,被称为二阶马尔科夫链,记作trigram,此时第 i 个词出现的概率与它的前两个词有关。
有了上面的假设,问题就变简单了,对于二元语法,某个句子出现的概率就可以用下面表示
实际应用中 n 取3比较多,取太大仍然存在自由参数太多问题。另外为了使当 t=1 时上述公式仍然有意义,可以在句子面前加上一个句子起始标记,而结尾也可以添加句子结束标记。
计算条件概率
可以看到 n 元语法涉及到条件概率的计算,
举个例子,语料库的3个句子为“i am chinese”、“you are chinese”、“i am handsome”,那么
平滑处理
为什么需要平滑处理?假如有些句子中存在一些训练语料未包含的词,或者连着的词在训练语料中未出现过。这时候就会让概率变为0,比如,计算
但实际上它的概率不能说是为0,所以此时就需要平滑处理。最简单的平滑处理就是加1法,假设出现的次数比实际多一次,这样就不会存在为0的情况了。
其中T为总词汇数量。
加1法有时效果不好,可以用其他方法处理,包括
* Good-Turing估计法
* Katz平滑法
* Jelinek-Mercer平滑法
* Kneser-Ney平滑法
* 贝叶斯平滑法
* 等等
缺点
n-gram这种处理序列信息的方式依然存在局限性,比如当n大于3时基本就无法处理了,参数空间太大。另外它不能表示词与词之间的关联性。
========广告时间========
公众号的菜单已分为“分布式”、“机器学习”、“深度学习”、“NLP”、“Java深度”、“Java并发核心”、“JDK源码”、“Tomcat内核”等,可能有一款适合你的胃口。
鄙人的新书《Tomcat内核设计剖析》已经在京东销售了,有需要的朋友可以到 https://item.jd.com/12185360.html 购买。感谢各位朋友。
为什么写《Tomcat内核设计剖析》
=========================
欢迎关注:
- n元语法
- n元语法
- 自然语言处理之n元语法模型
- OpenNLP ngram n元语法模型(简介)
- 统计自然语言处理——n元语法(马尔可夫模型)小结
- N元语法模型的数据稀疏问题解决方法之一:Good-Turing平滑
- N元语法模型的数据稀疏问题解决方法之一:Good-Turing平滑
- 统计自然语言处理——n元语法(马尔可夫模型)小结
- N元语法模型的数据稀疏问题解决方法之一:Good-Turing平滑
- 统计自然语言处理——n元语法(马尔可夫模型)小结
- 统计自然语言处理(统计推理:稀疏数据集上的n元语法模型)
- n元买n鸡
- n元买n鸡
- 基本语法元字符
- N元模型
- N元语言模型
- RDF N-元组
- N元语言模型
- Springboot 整合 Dubbo/ZooKeeper 详解 SOA 案例
- Could not initialize class sun.awt.X11GraphicsEnvironment linux中影像缩略图
- 计算1+3+5+...+99+101的值
- spring boot实战(第八篇)上下文的创建
- 策略模式
- n元语法
- 页面数据库特殊字符处理
- maven错误
- 单一职责原则
- [leetcode]#160. Intersection of Two Linked Lists
- Grafana+Prometheus打造全方位立体监控系统
- kettle 数据同时插入删除问题
- spring boot实战(第九篇)Application创建源码分析
- IT忍者神龟之Redis 错误1067:进程意外终止,Redis不能启动,Redis启动不了