首页 > 其他分享 >N-gram模型如何工作?

N-gram模型如何工作?

时间:2024-01-15 20:34:37浏览次数:44  
标签:COUNT ... bigram prepare 模型 dark 如何 leap gram

我们知道语言模型(Language Model, LM)实际上是对一种token序列的概率分布。例如对一个句子\(S = w_1, ... , w_t\),我们要估计这一个句子的概率,计算过程如下:

\[ P(S) = P(w_1, ..., w_t) \\ =P(w_1, ..., w_{t-1}) * P(w_t|w_1, ..., w_{t-1}) \\ =P(w_1, ..., w_{t-2}) * P(w_{t-1}|w_1, ..., w{t-2}) * P(w_t|w_1, ..., w_{t-1}) \\ =P(w_1, w_2) * P(w_3|w_1, w_2) * ...* P(w_{t-1}|w_1, ..., w{t-2}) * P(w_t|w_1, ..., w_{t-1}) \\ =P(w_1) * P(w_2|w_1) * P(w_3|w_1, w_2) ...* P(w_{t-1}|w_1, ..., w{t-2}) * P(w_t|w_1, ..., w_{t-1}) \]

N-gram模型建立在此基础之上[1][2],本文主要参考清华大学孙茂松老师的课程讲义,讨论N-gram如何工作。

N-gram模型。在一个n-gram模型中,关于\(x_{i}\)的预测只依赖于最后的 \(n-1\) 个字符 \(x_{i−(n−1):i−1}\) ,而不是整个历史。

\[p(x_i \mid x_{1:i-1}) = p(x_i \mid x_{i-(n-1):i-1}). \]

具体来说,unigram, bigram和trigram如下:

unigram---The 0 order Markov Model---$ P(w_i) $

bigram---The first order Markov Model---$ P(w_i | w_{i-1}) $

trigram---The second order Markov Model---$ P(w_i | w_{i-1}, w_{i-2}) $

例如bigram,实际上是一个一阶马尔可夫模型。

举个语音识别中的例子来说,我们要估计两句话的概率:"prepare for leap in the dark","prepare for lip in the dark",使用BNS语料库,其中包含100,106,008个单词。
我们得到每个单词/词组在语料库中的出现次数如下:
COUNT(prepare)=3023
COUNT(for)=899331
COUNT(leap)=1045
COUNT(in)=1970532
COUNT(the)=2165569
COUNT(dark)=13489
COUNT(lip)=1592

COUNT(prepare for)=528
COUNT(for leap)=1
COUNT(leap in)=100
COUNT(in the)=535036
COUNT(the dark)=3668
COUNT(for lip)=2
COUNT(lip in)=25

单词计算得到的probabilities如下:
P(prepare)= 0.000030
P(for)=0.0090
P(leap)=0.00001
P(in)=0.020
P(the)=0.022
P(dark)=0.00013
P(lip)=0.000016

词组计算得到的probabilities如下:
P(prepare for)= 0.0000053
P(for leap)=0.00000001
P(leap in)=0.000001
P(in the)= 0.0053
P(the dark)=0.000037
P(for lip)= 0.00000002
P(lip in)= 0.00000025

词组出现的频率普遍比单词出现的频率要小很多,符合直觉。

bigram在计算概率时,当前词考虑前一个词出现的概率,因此,我们首先使用bigram模型对"prepare后接for"这一组词的概率做计算:

\[P(for|prepare) = \frac{P(prepare, for)}{P(prepare)} = \frac{Count(prepare, for)/N}{Count(prepare)/N} = \frac{Count(prepare, for)}{Count(prepare)} = \frac{528}{3023} = 0.17 \]

如此,bigram计算得到句子中的一系列条件概率如下:
P(for|prepare)=0.17
P(leap|for)=0.0000011
P(in|leap)=0.096
P(the|in)=0.27
P(dark|the)=0.0017
P(lip|for)=0.0000022
P(in|lip)=0.016

最后,分别用unigram和bigram计算句子的概率如下:
S1= “prepare for leap in the dark”
S2= “prepare for lip in the dark”

unigram:

\[P(S1) = P(prepare) * P(for) * P(leap) * P(in) * P(the) * P(dark) \\ = 0.000030*0.0090*0.00001*0.02*0.022*0.00013 \\ = 1.54*e-19 \]

\[P(S2) = P(prepare) * P(for) * P(lip) * P(in) * P(the) * P(dark) \\ = 0.000030*0.0090*0.000016*0.02*0.022*0.00013 \\ = 2.46*e-19 \]

bigram:

\[P(S1) = P(prepare) * P(for | prepare) * P(leap | for) * P(in | leap) * P(the | in) * P(dark | the) \\ = 0.000030* 0.17*0.0000011*0.096*0.27*0.0017 \\ = 2.47*e-16 \]

\[P(S2) = P(prepare) * P(for | prepare) * P(lip | for) * P(in | lip) * P(the | in) * P(dark | the) \\ = 0.000030* 0.17*0.0000022*0.016*0.27*0.0017 \\ = 8.24*e-17 \]

我们可以发现,

  1. unigram估计下\(P(S1) > P(S2)\),而在bigram估计下\(P(S1) < P(S2)\),说明bigram模型比unigram模型更为有效;
  2. \(P(bigram(S1))/P(unigram(S1))=1604\)
    \(P(bigram(S2))/P(unigram(S2))=340\)
    bigram对句子估计得也更为精准。

Ref:
[1] https://stanford-cs324.github.io/winter2022/
[2] https://github.com/datawhalechina/so-large-lm

标签:COUNT,...,bigram,prepare,模型,dark,如何,leap,gram
From: https://www.cnblogs.com/buhuizhuzhou/p/17966201

相关文章

  • D5-LMDeploy 大模型量化部署
    〇、完成结果使用LMDeploy以本地对话部署InternLM-Chat-7B模型,生成300字的小故事:以API服务中的一种方式部署InternLM-Chat-7B模型,生成300字的小故事:以网页Gradio部署InternLM-Chat-7B模型,生成300字的小故事:前、知识笔记安装、部署、量化一、环境配置可以使用 vgpu-s......
  • 时光机启动:Spring中如何巧妙实现定时任务?
    嗨,亲爱的小伙伴们!小米在这里又来和大家分享一些技术干货啦!今天我们要探讨的话题是关于Spring框架中如何实现定时任务。对于我们这些热爱技术的小伙伴来说,定时任务可是一个非常有趣而且实用的话题哦!引子首先,让我们简单了解一下什么是定时任务。在软件开发中,定时任务就是按照一定的时......
  • js文件过大如何提速
    直接上干货,太大就让他变小,据不可靠统计gzip压缩可以让js体积减少5倍+,na那么理论优化速度为5倍+,前端压缩完js为gzip格式配合nginx设置解析gzip让浏览器解析gzip就大功告成了。上两篇干活内容,具体操作请看以下链接:https://zhuanlan.zhihu.com/p/530959154https://blog.csdn.net/y......
  • Picturesocial | 开发实践:如何在15分钟内将应用容器化
    在常见的软件架构体系中,容器无疑是一个技术热点。有些开发者在工作中熟练使用容器技术,有些可能刚刚开始容器之旅。面对容器使用经验不同的各类开发者,我们希望通过这个系列文章,由浅入深地介绍如何使用容器技术来构建,运维我们的软件应用程序。贯穿整个系列,我们将持续构建一个名为......
  • 如何做好一个信息系统项目经理,一个项目经理的个人体会和经验总结(一)
    作为一个信息系统项目经理,最要紧的就是要明白什么是因地制宜、因势利导,只有最合适的,没有什么叫对的,什么叫错的;最忌讳的就是完美主义倾向,凡事都要寻找标准答案和最优答案,既耽误了项目进度,也迷茫了自己。以下是本人一些做信息系统项目的个人体会和经验总结,写出来供大家指点,在讨论过......
  • 解密Prompt系列23.大模型幻觉分类&归因&检测&缓解方案脑图全梳理
    上一章我们主要聊聊RAG场景下的幻觉检测和解决方案,这一章我们单独针对大模型的幻觉问题,从幻觉类型,幻觉来源,幻觉检测,幻觉缓解这四个方向进行整理。这里就不细说任意一种方法了,因为说不完根本说不完,索性用脑图概览式地看下整个大模型幻觉领域。主要参考以下两篇论文ASurveyonHa......
  • gimp 如何 替换背景, 使用模糊工具。
    网上的截图:        这个模糊工具可以自由的选择选中的大小。  ......
  • 电子产品出口欧盟如何办理CE认证
    欧盟CE认证办理流程:申请(1.填写申请表2.提供资料并寄样);报价(根据您提供的资料会有工程师来拟定相应的标准,测试时间及相应费用);付款(申请人确认报价后,签订立案申请表及服务协议并支付款项);测试(实验室根据相关的欧盟检测标准对所申请产品进行全套测试);测试通过,报告完成;项......
  • 区域入侵检测/视频智能识别AI边缘计算智能分析网关V4如何通过ssh进行服务器远程运维
    智能分析网关V4是一款高性能、低功耗的AI边缘计算硬件设备,它采用了BM1684芯片,集成高性能8核ARMA53,主频高达2.3GHz,并且INT8峰值算力高达17.6Tops,FB32高精度算力达到2.2T,每个摄像头可同时配置3种算法,设备能同时对16路视频流进行处理和分析,能应用在工地、工厂、车间、社区、校园、消......
  • 如何设计一个高并发系统?
    所谓高并发系统,是指能同时处理大量并发请求,并及时响应,从而保证系统的高性能和高可用那么我们在设计一个高并发系统时,应该考虑哪些方面呢?1.搭建集群如果你只部署一个应用,只部署一台服务器,那抗住的流量请求是非常有限的。并且,单体的应用,有单点的风险,如果它挂了,那服务就不可用了......