热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

LSTM自然语言建模

说到自然语言,我就会想到朴素贝叶斯,贝叶斯核心就是条件概率,而且大多数自然语言处理的思想也就是条件概率。所以我用预测一个句子出现的概率为例,阐述一下自然语言处理的思想。处理思想-概

说到自然语言,我就会想到朴素贝叶斯,贝叶斯核心就是条件概率,而且大多数自然语言处理的思想也就是条件概率。

所以我用预测一个句子出现的概率为例,阐述一下自然语言处理的思想。

 

处理思想-概率

句子,就是单词的序列,句子出现的概率就是这个序列出现的概率

技术分享图片

可以想象上面这个式子计算量有多大。

 

为了减少计算量,常常用一个估计值来代替上面的概率。估计该值常用的方法有

n-gram、决策树、最大熵模型、条件随机出、神经网络等。

 

以最简单的n-gram为例

n-gram模型有个假设:当前单词出现的概率仅与前面n-1个单词有关

于是,m个单词的句子出现的概率可以估计为

技术分享图片

显然n取值越大,理论上这个估计越准确

但是因为计算量的问题,通常n取较小值,如 1,2,3,分别有对应的名字 unigram, bigram, trigram,最常用的是2

技术分享图片

出现次数相比,很显然有个问题,如果没出现呢,比如语料库较小,那么这个单词出现的概率为0,,p(s)=0,

一个单词没出现导致整个句子出现概率为0,显然不合适

这也是自然语言处理中比较普遍的问题,常用的解决方法是拉普拉斯平滑,避免0的出现,比如

技术分享图片

 

此时这个句子的概率就算出来了。

 

评价指标-复杂度

语言模型的好坏常用复杂度(perplexity)来评价。

 

如果一个句子在文档中确实出现了,那么我们的模型算出来的概率越大越好,

概率越大,就需要每个p的概率越大,

每个p越大,就意味着这某些单词出现的情况下,出现这个单词的概率很大,

也就是说,在某些单词出现时,下一个单词的可选择性很小,比如单词 “国”后面的单词很少,最常用的是“家”,此时“家”的概率就很大

 

这个可选择性就是复杂度

其实可以理解为整个词语结构的复杂度,词语结构越简单,复杂度越低。图形表示如下

技术分享图片

显然上面的结构简单。

 

可选择性可以用概率的倒数来表示。即概率越大,可选择性越小,复杂度越低。

技术分享图片

可以两边取log简化运算。取log乘法变加法,也避免了一个为0结果为0的情况。

 

LSTM 语言模型

lstm 使得网络具有记忆功能,也就是记住了之前的词语,也就是在知道之前词语的情况下,训练或者预测下一个单词。这就是rnn处理自然语言的逻辑。

 

训练过程:输入x是单词,y是x的下一个单词,最终得到每个单词下一个单词的概率。

预测过程:取下一个单词中概率最大的单词。

 

图形表示如下

技术分享图片

 

把训练样本 “大海的颜色是蓝色” 输入网络训练,可以得到在 “大海” 出现的情况下,后面是  “的” 的概率0.8,是 “是”的概率0.15,

在“大海的”出现的情况下,后面每个单词出现的概率,依次

 

最终预测时,在“大海的颜色是”出现的情况下,预测结果是“蓝色”的概率是0.7,预测正确。

 


推荐阅读
  • 在使用KVM虚拟化技术通过NAT模式启动虚拟机时,可能会遇到qemu-ifup-nat脚本执行失败的错误。本文将详细介绍如何诊断和解决这一问题。 ... [详细]
  • 使用IntelliJ IDEA高效开发与运行Shell脚本
    本文介绍了如何利用IntelliJ IDEA中的BashSupport插件来增强Shell脚本的开发体验,包括插件的安装、配置以及脚本的运行方法。 ... [详细]
  • ED Tree HDU4812 点分治+逆元
    这道题非常巧妙!!!我们进行点分治的时候,算出当前子节点的所有子树中的节点,到当前节点节点的儿子节点的距离,如下图意思就是当前节点的红色节点,我们要求出红色节点的儿子节点绿色节点, ... [详细]
  • IIS6批量添加主机头,修改IIS数据库
    首先,找到IIS的数据库。默认是在C:\WINDOWS\system32\inetsrv下的MetaBase.xml文件。如果找不到,请右键右键站点-》所有服务-》将配置保存到一个 ... [详细]
  • 本文详细介绍了Python中的生成器表达式、列表推导式、字典推导式及集合推导式等,探讨了它们之间的差异,并提供了丰富的代码示例。 ... [详细]
  • 本文介绍了基于Java的在线办公工作流系统的毕业设计方案,涵盖了MyBatis框架的应用、源代码分析、调试与部署流程、数据库设计以及相关论文撰写指导。 ... [详细]
  • 利用Cookie实现用户登录状态的持久化
    本文探讨了如何使用Cookie技术在Web应用中实现用户登录状态的持久化,包括Cookie的基本概念、优势及主要操作方法,并通过一个简单的Java Web项目示例展示了具体实现过程。 ... [详细]
  • 本文深入分析了在使用JavaScript中的Date.UTC()方法初始化Date对象时,getDay()方法返回值与预期不符的原因,并提供了相应的解决方案。 ... [详细]
  • 本文详细介绍了JavaScript中数组的转换方法、栈方法、队列方法、重排序方法及操作方法,包括toLocaleString()、toString()、valueOf()等基本转换方法,以及push()、pop()、shift()、unshift()等用于模拟栈和队列行为的方法。 ... [详细]
  • 探索OpenWrt中的LuCI框架
    本文深入探讨了OpenWrt系统中轻量级HTTP服务器uhttpd的工作原理及其配置,重点介绍了LuCI界面的实现机制。 ... [详细]
  • LoadRunner中的IP欺骗配置与实践
    为了确保服务器能够有效地区分不同的用户请求,避免多人使用同一IP地址造成的访问限制,可以通过配置IP欺骗来解决这一问题。本文将详细介绍IP欺骗的工作原理及其在LoadRunner中的具体配置步骤。 ... [详细]
  • 本文探讨了Java编程语言中常用的两个比较操作符==和equals方法的区别及其应用场景。通过具体示例分析,帮助开发者更好地理解和使用这两个概念,特别是在处理基本数据类型和引用数据类型的比较时。 ... [详细]
  • 本文详细介绍了PHP中的几种超全局变量,包括$GLOBAL、$_SERVER、$_POST、$_GET等,并探讨了AJAX的工作原理及其优缺点。通过具体示例,帮助读者更好地理解和应用这些技术。 ... [详细]
  • 本文概述了在GNU/Linux系统中,动态库在链接和运行阶段的搜索路径及其指定方法,包括通过编译时参数、环境变量及系统配置文件等方式来控制动态库的查找路径。 ... [详细]
  • 本文详细介绍了如何使用Rufus工具制作一个兼容UEFI启动模式的Windows Server 2008 R2安装U盘,包括必要的软件和步骤。 ... [详细]
author-avatar
尛爱总_305
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有