语言模型

语言模型

一、什么是语言模型

  假设,对于一个观测值:“yuyanmoxing”,可能是由“语言模型”、“寓言模型”、“语言魔性”  … 等得到的,但是要想得到究竟是哪一个,通常需要计算它们的概率,譬如:P(“语言模型”|”yuyanmoxing”) > P(“寓言模型”|”yuyanmoxing”) > … ,(P(I|O)),则可以确定为“语言模型”。如何对这个概率进行计算呢?从数学的角度来看:

<span>语言模型</span>

<span>语言模型</span>

  如果我们直接用第一种方法,即为判别式模型,如果用第二种方法,即为生成式模型。当采用生成式模型的话,需要计算这个语句序列出现的概率即为P(I)的概率,如何计算P(I)的概率呢?

   计算一个文本序列w = { w1 ,w2  …  wn}的概率,需要知道他们之间的关系,我们对这个关系的建模即为语言模型。

 二、统计语言模型

  1.1 统计语言模型

  要计算一个语言序列的概率,关键是看这些词的排序的关系,我们可以利用马尔科夫假设,即当前词只与当前n-1个词有关。譬如,对于序列种一个词wi,我们需要知道w1w2 … wi-1出现时,wi发生的概率。然后根据联合概率公式即可得到句子的概率。假设句子为S,p(S)=p(w1,w2,w3,w4,w5,…,wn) =p(w1)p(w2|w1)p(w3|w1,w2)…p(wn|w1,w2,…,wn-1)。

  在实际操作中,如果文本较长,则p(wn|w1,w2,…,wn-1)的计算是很困难的,假设P个词,则需要计算的概率有Pn个,作比较得到最大的。因此,推出了n-gram模型。 当n取1、2、3时,n-gram模型分别称为unigram、bigram和trigram语言模型。模型的参数估计也称为模型的训练,一般采用最大似然估计(Maximum Likelihood Estimation,MLE)的方法对模型的参数进行估计:

<span>语言模型</span>

  C(X)表示X在训练语料中出现的次数。如给定句子:

  如给定句子集“<s> I am Sam </s>

                    <s> Sam I am </s>

                    <s> I do not like green eggs and ham </s>”

<span>语言模型</span>

 

  1.2 bigram与HMM

  HMM就是bigram语言模型,可以利用HMM的学习问题、概率计算问题、预测问题来解决相关的问题。当然也可以通过上面利用MLE进行估计等进行计算。参考:https://www.cnblogs.com/pinking/p/8531405.html

 

 三、神将网络语言模型

   n-gram模型将词看作符号,不能很好的计算词与词之间的内在联系,泛化能力较差,后得到神将网络模型(Neural n-gram),通过对样本进行训练获得计算概率的模型,而不是通过统计的方法求概率,如图:

<span>语言模型</span>

  神经网络模型的架构如图,输入为n-1个词的one-hot向量,包含一个隐层,神经网络的输出为softmax后每个词出现的概率,然后根据真实语料库种真实的下一个词的one-hot向量通过最小化交叉熵训练模型。

   neural n-gram模型可以捕获词之间的关系,但是利用的词有限,只能利用前n-1个词,无法捕获长期依赖,模型效果与n的选择有关。

 四、循环神经网络语言模型

  RNN模型可以捕获更长时间的信息,对于语料库的单词进行one-hot编码,增加句子开始/结束标志,其主要过程为:

<span>语言模型</span>

  如上神经网络的输出w4即为,P(w4|w1,w2,w3),若要得到一个序列的概率,将上面输出进行连乘即可。

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/119441.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 公司拿到了量化交易模型, 交易员和策略师就可滚蛋了?[通俗易懂]

    公司拿到了量化交易模型, 交易员和策略师就可滚蛋了?[通俗易懂]作者:天启大烁哥源自:天启量投(ID:QDLG001)在知乎上看到了一个很有趣的问题。在这个问题下面,提问者留了一些自己的看法:有种感觉,资本一直试图用电脑代替人,把人的工作用电脑替代,这样资本就可以拿走人的技术,拿走技术的费用是低廉的,这么做貌似很划算。炒了两年期货了,琢磨用程序来替代自己,但是发现很困难,我是搞电脑的没有技术障碍,算法不难,难就难在我自己的不确定…

    2022年6月26日
  • 进程调度时间片轮转例题_进程调度算法java

    进程调度时间片轮转例题_进程调度算法java一、实验目的(1)加深对进程的理解(2)理解进程控制块的结构(3)理解进程运行的并发性(4)掌握时间片轮转法进程调度算法二、实验原理(1)建立进程控制块(2)设计两个链队列,分别表示就绪队列和完成队列(3)用户输入进程标识符,进程到达时间,进程所需的时间,申请空间存放进程,PCB信息。(

    2022年10月28日
  • EagleEye论文+代码

    EagleEye论文+代码EagleEye论文+代码论文代码论文代码论文原作者的代码GitHub链接为EagleEye。下载数据集下载ILSVRC2012数据集。需要先注册账号并登陆。也可以直接用ImageNet数据集代替。如果觉得从官网下载的速度太慢,可以使用迅雷链接或百度云链接,网上都有很多。在这里,我推荐使用一个Linux多线程命令行下载工具aria2,可以达到稳定在5MB/s。安装python包问题一exportGIT_PYTHON_REFRESH=quiet这好像是一个和git有关的问题。解决

    2022年8月16日
  • lnk2001 lnk1120_lnk1120

    lnk2001 lnk1120_lnk1120LNK2001..转自百度百科学习VC++时经常会遇到链接错误LNK2001,该错误非常讨厌,因为对于编程者来说,最好改的错误莫过于编译错误,而一般说来发生连接错误时,编译都已通过。产生连接错误的原因非常多,尤其LNK2001错误,常常使人不明其所以然。如果不深入地学习和理解VC++,要想改正连接错误LNK2001非常困难。  初学者在学习VC++的过程中,遇到的LNK20

    2022年10月5日
  • kafka 查看topic offset_kafka重置offset

    kafka 查看topic offset_kafka重置offset版本信息Kafka0.8.2,JDK1.7问题现象最近我们在生产环境执行删除无用的kafkatopic的操作时,因为错误的按照8.2版本之前的删除方式操作8.2.2版本的kafka,导致删除过程异常,删除后出现consumer正在消费的其他正常topic的partition的offset值偏移的情况,导致大量消息重复消费,并且产生连锁反应,给我们的系统稳定性产生明显影响。如下日志所示,正常情况…

    2022年10月10日
  • mipiLCD屏幕参数_mipi接口液晶屏

    mipiLCD屏幕参数_mipi接口液晶屏主屏通过lt8911exb将mipi信号转换成EDP信号输出,调试从大的方向上看,主要是两方面,一个是bootloader阶段的的显示,一个是kernel阶段的现实,lt8911exb的初始化主要在bootloader阶段调试简介:本次调试lt8911exb的I2C接到SDM450的I2C3接口bootloader阶段由于lt8911exb使用的是I2C接口,所以在bootloader阶段需要实现该I2C接口的初始化工作,然后去初始化lt8911exb。然后再按照通用的方式去配置屏.

    2022年10月19日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号