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

N-gram 详解

文章目录

  • 一、什么是N-gram?
  • 二、N-gram的种类
  • 三、优缺点
  • PS:补充


一、什么是N-gram?

在自然语言处理中,n-gram是一种重要的文本表示方法。n-gram是指给定文本中连续的n个项目,这些项目可以是声音、单词、字符或者像素等。n-gram模型常常用于语言模型,以预测接下来的一个项目(比如一个单词)。


二、N-gram的种类

根据项目个数的不同,n-gram模型可以被分为不同的种类:

  • n = 1 n=1 n=1时,称为unigram。比如对于句子 “I love dogs”,unigram就是 “I”, “love”, “dogs”
    P ( w i ) = C ( w i ) M P(w_i)=\frac{C(w_i)}{M} P(wi)=MC(wi)

    M M M: 语料库中的单词总数

    e.g.: C ( b a r k s ) M \frac{C(barks)}{M} MC(barks)

  • n = 2 n=2 n=2时,称为bigram。对于同样的句子,bigram就是 “I love”, “love dogs”
    P ( w i ∣ w i − 1 ) = C ( w i − 1 , w i ) C ( w i − 1... ) P(w_i|w_{i-1})=\frac{C(w_{i-1},w_{i})}{C(w_{i-1 ...})} P(wiwi1)=C(wi1...)C(wi1,wi)

    C ( w i − 1 . . . ) C(w_{i-1}...) C(wi1...): 是指以 w i − 1 w_{i-1} wi1 作为第一个词的所有二元词组的总数。在计算二元词组的概率时,我们需要考虑的是 w i − 1 w_{i-1} wi1 作为第一个词出现的次数,而不仅仅是 w i − 1 w_{i-1} wi1这个词在整个语料库中出现的次数。

  • n = 3 n=3 n=3时,称为trigram。如 “I love dogs” 的trigram为 “I love dogs”。

  • 以此类推,你可以得到更高的n-gram模型。
    P ( w i ∣ w i − n + 1 , . . . , w i − 1 ) = C ( w i − n + 1 , . . . , w i ) C ( w i − n + 1 , . . . , w i − 1 ) P(w_i|w_{i-n+1},...,w_{i-1})=\frac{C(w_{i-n+1},...,w_i)}{C(w_{i-n+1},...,w_{i-1})} P(wiwin+1,...,wi1)=C(win+1,...,wi1)C(win+1,...,wi)


三、优缺点

优点

它考虑了词与词之间的顺序信息,从而能更好地捕捉到语义信息。

缺点

模型的数据稀疏性问题(随着n的增大,会出现许多从未在训练数据中出现过的n-gram),以及它无法捕捉到更长距离的依赖关系(超过n的范围)。

因此,在实际应用中,n-gram模型通常会与其他模型如词袋模型(Bag of Words)、TF-IDF等结合使用,以获得更好的效果。


PS:补充

处理 未见过的n-gram(unseen n-grams)时的一些平滑技术。

Laplacian (Add-one) 平滑:

  1. Unigram
    对于单个词的概率计算,使用加一平滑的方法公式为:
    P a d d 1 ( w i ) = C ( w i ) + 1 M + ∣ V ∣ P_{add1}(w_i)=\frac{C(w_i)+1}{M+|V|} Padd1(wi)=M+VC(wi)+1

    这里, C ( w i ) C(w_i) C(wi)表示词 w i w_i wi在语料库中出现的次数, M M M是语料库中所有词的总数, ∣ V ∣ |V| V是词汇表的大小,也就是不同词的总数。加一平滑通过在每个词的计数中加1来避免某些词的概率为零的情况。

  2. Bigram
    对于两个连续词的概率计算,使用加一平滑的方法公式为:

    P a d d 1 ( w i ∣ w i − 1 ) = C ( w i − 1 , w i ) + 1 C ( w i − 1 ) + ∣ V ∣ P_{add1}(w_i|w_{i-1})=\frac{C(w_{i-1},w_i)+1}{C(w_{i-1})+|V|} Padd1(wiwi1)=C(wi1)+VC(wi1,wi)+1

    这里, C ( w i − 1 , w i ) C(w_{i-1}, w_i) C(wi1,wi)表示词对 ( w i − 1 , w i ) (w_{i-1}, w_i) (wi1,wi)在语料库中出现的次数, C ( w i − 1 ) C(w_{i-1}) C(wi1)表示词 w i − 1 w_{i-1} wi1出现的总次数。通过在词对的计数中加1,避免了某些词对组合的概率为零。

其他平滑方法:

  • Absolute discounting(绝对折扣法):通过从每个非零计数中减去一个常数来重新分配概率质量。

  • Kneser-Ney:一种更复杂的平滑方法,特别适用于处理低频n-gram,考虑了n-gram的出现背景。

这些平滑技术的目的是确保模型能够合理地处理未见过的n-gram,从而提高语言模型在新数据上的表现。


如果觉得这篇文章有用,就给个👍和收藏⭐️吧!也欢迎在评论区分享你的看法!



http://www.mrgr.cn/news/58024.html

相关文章:

  • Aatrox-Bert-VITS2部署指南
  • Shell脚本:模块引用
  • 微信小程序上传图片添加水印
  • 最新Java零基础知识(持续更新中......)
  • SAP依靠 “增压 “Joule加速ERP迁移
  • 提高采购效率:掌握采购订单跟踪管理的关键工具
  • 【1024程序员节】:希望再无BUG
  • html小游戏-飞机大战
  • C++之模板进阶
  • 洞察前沿趋势!2024深圳国际金融科技大赛——西丽湖金融科技大学生挑战赛技术公开课指南
  • DOTween动画插件超详解(保姆级巨细)
  • Java项目-基于springboot框架的人职匹配推荐系统项目实战(附源码+文档)
  • QImage和QPixmap
  • 大数据Azkaban(二):Azkaban简单介绍
  • Redis缓存技术 基础第三篇(Redis实现短信验证)
  • 1.CentOS安装
  • NSSCTF(PWN)16
  • 6SV辐射传输模型编译和加入自定义传感器参数
  • 【模型部署】python中socket编程入门知识-系列1
  • 【Linux学习】(4)Linux权限
  • MyBatis-Plus(三):使用自定义目录下的xml时踩坑记录
  • CMake中的List关键词:详细指南
  • 数据结构与算法——Java实现 46. 从前序与中序遍历序列构造二叉树
  • 【多线程和高并发】多线程和高并发提纲
  • Gradle核心概念总结
  • 论软件著作权