语言模型

语言模型

一、什么是语言模型

  假设,对于一个观测值:“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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 教你用Python Jupyter Notebook 制作代码分享 PPT

    教你用Python Jupyter Notebook 制作代码分享 PPT

    2021年11月22日
    65
  • Navicat 导入sql文件时 执行失败 报错问题[通俗易懂]

    Navicat 导入sql文件时 执行失败 报错问题[通俗易懂]在Navicat导出的 或者别的sql文件,在使用Navicat导入时候 出现异常失败报错问题。搜索了很多资料查看,发现是没有解决掉的。最后无意间想起使用 MySql 直接使用命令导入尝试,发现可行的简单粗暴,直接打开你的MySql 登录以后 选择 要导入的数据库use 数据库名称;source 文件的绝对路径;完事 ,坐等~…

    2022年8月19日
    32
  • G6流程图绘制

    G6流程图绘制为了能在线编辑流程 支持流程节点编辑等功能 支持人员等选择功能 支持流程图数据保存 利用阿里 G6 进行设计开发 整体效果图如下 支持放大缩小 节点移动 添加节点及边等 同时支持节点及边删除操作 流程图数据保存等工作 支持节点编辑 包括人员选择 图形选择 宽高编辑 背景色 边框色等信息编辑 支持边的编辑 边描述等 各种交互功能就不赘述了 页面代码如下 DOCTYPE YPE html head head html

    2025年7月25日
    2
  • painless数字类型转换_笔记四十五: Ingest Pipeline 与 Painless Script

    需求:修复与增强写入的数据Tags字段中,逗号分割的文本应该是数组,而不是一个字符串需求:后期需要对Tags进行Aggregation统计IngestNodeElasticsearch5.0后,引入的一种新的节点类型。默认配置下,每个节点都是IngestNode具有预处理数据的能力,可拦截Index或者BulckAPI的请求对数据进行转换,并重新返回给Index和…

    2022年4月8日
    60
  • XGBoost+LightGBM+LSTM:一次机器学习比赛中的高分模型方案

    XGBoost+LightGBM+LSTM:一次机器学习比赛中的高分模型方案目录1 数据探索与数据预处理 21.1赛题回顾 21.2数据探索性分析与异常值处理 21.3相关性分析 52 特征工程 82.1光伏发电领域特征 82.2高阶环境特征 112.3特征选择 113 模型构建与调试 113.1预测模型整体结构 113.2基于LightGBM与XGBoost的模型构建与调试 123.3基于LSTM的模型构建与调试 133.4…

    2022年5月1日
    86
  • Java 程序员必须掌握的 4 大开源框架!

    Java 程序员必须掌握的 4 大开源框架!对于开发来说,我们在工作中普遍都会用到各个开源框架,比如最基础的Spring,使开发网络编程变得特别简单的Netty框架,还有成为目前微服务框架首选的SpringCloud等。在多个框架之上,我们仅需使用几行代码,即可实现业务需要的复杂功能,大大减少了工作量。也正因如此,不少人只会用框架,看不懂源码,不了解其底层机制与实现原理,成了一名只会搬运源码库的开发。说白了,就是真正牛逼的技术不属于你。可了解框架中的很多知识和代码,对解决开发中的类似问题是极其有帮助的。因为它们是经过时..

    2022年7月8日
    35

发表回复

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

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