深度学习与自然语言处理(7)_斯坦福cs224d 语言模型,RNN,LSTM与GRU

翻译:@胡杨(superhy199148@hotmail.com) && @胥可(feitongxiaoke@gmail.com)
校对调整:寒小阳 && 龙心尘
时间:2016年7月
出处:
http://blog.csdn.net/han_xiaoyang/article/details/51932536
http://blog.csdn.net/longxinchen_ml/article/details/51940065

说明:本文为斯坦福大学CS224d课程的中文版内容笔记,已得到斯坦福大学课程@Richard Socher教授的授权翻译与发表

1.语言模型

语言模型用于对特定序列的一系列词汇的出现概率进行计算。一个长度为m的词汇序列{w1,,wm}的联合概率被表示为P(w1,,wm)。由于在得到具体的词汇之前我们会先知道词汇的数量,词汇wi的属性变化会根据其在输入文档中的位置而定,而联合概率P(w1,,wm)的计算通常只考虑包含n个前缀词的词窗口而非考虑全部的前缀词:

P(w1,,wm)=i=1i=mP(wi|w1,,wi1)i=1i=mP(wi|wi(n1),,wi1)(1)

公式1在语音识别和机器翻译系统中对判定一组词序列是否为相应输入序列的正确生成结果有着极为重要的作用。在一个给定的机器翻译系统中,针对各个短语或句子的翻译任务,软件通常被要求生成一组替代词序列(例如:“我已经”;“我曾有”;“我有”;“被我已经”;“被我占有”)以及它们的得分以判定它们是否能组成最优的翻译序列。

在机器翻译任务中,模型通过计量和比较各个替换输出词序列之间的得分优劣,从它们中为输入短语寻找最佳的答案词序列。为了完成这项工作,模型需要经常在词排序和词选择两个任务模型之间切换。而上面提到的目标将通过为所有的候选词序列设置概率计算函数而达成,这个函数将比较这些候选词序列各自的得分。获得最高得分的候选词序列就是机器翻译任务的输出。例如:相比例句“小的这只猫真是”,机器会给例句“这只猫真小”更高的评分,相比“放学后步行去房子”“放学后步行回家”会得到更高的得分。为了计算这些概率,将比较统计n元语言模型和词频模型的效果。比如,如果选择2元语言模型,语义2元组的词频通过统计当前词和其前面一个词,这就需要与1元语法模型的词频计算方法区分开来。公式2和3分别展示了2元语义模型和3元语义模型在处理这种关系时的做法。

p(w2|w1)=count(w1,w2)count(w1)(2)

p(w3|w1,w2)=count(w1,w2,w3)count(w1,w2)(3)

公式3中表现出来的关系集中于基于上下文中固定窗口内容(例如:n个前缀词范围)对后续词的预测。在某些情况下,仅仅抽取n个前缀词作为窗口范围可能不足以很好地捕捉上下文信息。例如,当一篇文章在后段着重描写西班牙与法国的历史,而在前文中,当你读到“这两个国家走向了战争”这句话时,仅有此句的前文显然不能够让我们识别出这两个国家的命名实体。Bengio等人提出了第一个大规模的深度学习自然语言处理框架,此框架能够通过学习得到词汇的分布化表征捕捉上面提到的这种上下文关系;图1展示了这种神经网络的框架。在这个模型中,输入词向量在隐层和输出层均得到使用。公式4展示了引入标准tanh()函数的softmax()分类函数中的各个参数,这个函数起到线性分类器的作用,W(3)x+b(3),这一组短式代表全体前缀词的输入词向量。

y^=softmax(W(2)tanh(W(1)x+b(1))+W(3)x+b(3))(4)

然而,在所有传统的语言模型中,由于包含n长窗口的语言记忆信息规模会随着系统的运行呈指数式的增长,所以面对较大型的词窗口,如果不将记忆信息单独抽离处理,上面的任务几乎是不可能完成的。


图1

2.递归神经网络(RNN)

不同于传统的机器翻译模型仅仅考虑有限的前缀词汇信息作为语义模型的条件项,递归神经网络(RNN)有能力将语料集中的全部前序词汇纳入模型的考虑范围。
图2展示了RNN模型的架构,其中各个垂直矩形框代表每轮迭代的隐层,t.每个这样的隐层都拥有若干神经元,每个神经元都对输入向量执行线性矩阵操作而通过非线性操作输出结果(例如,tanh()函数)。在每一轮迭代中,前一步迭代的输出随着文档中下一条词汇的词向量而变化,xt,是隐层的输入且隐层将产生预测输出值y^和提供给下一层隐层的输出特征向量ht(见公式5和公式6)。单独每个神经元的输入和输出情况如图3所示。



图2

ht=σ(W(hh)ht1+W(hx)x[t])(5)

y^t=softmax(W(S)ht)(6)

网络中各个参数的设置细节及含义如下:
  • x1,,xt1,xt,xt+1,,xT:表示拥有T数量词汇的语料中各个词汇对应的词向量。
  • ht=σ(W(hh)ht1+W(hx)xt):每一轮迭代t中用于计算隐层输出特征的传递边
    xtRd:在时刻t的输入词向量。
    WhxRDh×d:利用输入词向量xt作为条件计算得到的权重矩阵
    WhhRDh×Dh:利用前一轮迭代的输出作为条件计算得到的权重矩阵
    ht1RDh:在前一轮迭代t1中非线性函数的输出结果。并且h0RDh为当迭代轮次为t=0时的初始化隐层输出向量。
    σ():为非线性分类函数(这里使用sigmoid分类函数)
  • y^t=softmax(W(S)ht):每一轮迭代t针对全部词汇的输出概率分布。基本上,y^t就是当前迭代时,给定文档全部前序文本权值以及观测词向量x(t)后预测得到的后续词。在这里,W(S)R|V|×Dhy^R|V|中的变量|V|代表全体语料的词典规模。

在递归神经网络中,损失函数通常被设定为之前提到的交叉熵错误率。公式7展示了在迭代t中此函数在整个词库上的求和。

J(t)(θ)=j=1|V|yt,j×log(y^t,j)(7)

在规模为T的语料集上,交叉熵错误率计算如下:

本页内容版权归属为原作者,如有侵犯您的权益,请通知我们删除。

三分钟部署Laxcus大数据系统 - 2016-07-20 17:07:47

Laxcus是Laxcus大数据实验室历时五年,全体系自主设计研发的国内首套大数据管理系统。能够支撑百万台级计算机节点,提供EB量级存储和计算能力,兼容SQL和关系数据库。 最新的2.x版本已经全面覆盖和集成当前大数据主流技术和功能 ,并投入到国内多个超算项目中使用。Laxcus同时也保持着使用和部署的极简性,所有对计算机略有认识的人都可以很容易掌握它。下面演示在一台Linux计算机上部署Laxcus demo系统的过程。根据我们的测试,这个部署过程大约需要三分钟,或者您熟悉Linux系统 ,也许不需要这

Devstack多节点部署实验 - 2016-07-20 14:07:52

本文为博主翻译文章,转载请注明出处Bob Hou: http://blog.csdn.net/minxihou 这是个在多物理服务器上部署openstack例子: 1 先决条件Linux网络 1.1 最小化安装系统 你需要一个刚安装好的Linux系统。你可以直接下载最小化的Ubuntu版本,devstack会下载安装所有额外的依赖关系。同样也支持网络安装Fedora,Centos/RHEL.安装几个包用于引导程序配置。 apt -get install -y git sudo || yum install
0 说明 0.1 备注 建立文件夹(sparkdir、hadoop、java、scala、spark) 每台机器均有/usr/sparkdir /hadoop /hadoop - 2.7 .2 /java /jdk1 .8 .0 _91 /scala /scala - 2.11 .8 /spark /spark - 1.6 .1 -bin -without -hadoop . tgz 0.2 用户组、用户管理 资源:http://www.cnblogs.com/vincedotnet/p/ 4017574
Ubuntu16.04安装Hadoop2.6+Spark1.6,并安装python开发工具Jupyter notebook,通过pyspark测试一个实例,調通整个Spark+hadoop伪分布式开发环境。 主要内容:配置root用户,配置Hadoop,Spark环境变量,Hadoop伪分布式安装并测试实例,spark安装并通过Jupter notebook进行开发实例,配置Jupter notebook兼容Python2和python3双内核共存开发。 默认已经正确安装了JDK,并设置了JAVA_HOM
摘要 MLlib(机器学习)分两种——监督学习,无监督学习。首先监督学习,类似普贝叶斯这样的分类算法。要求必须事先明确知道各个类别的信息,并且断言所有待分类项都有一个类别与之对应。显而眼见的是,这种需求另监督学习有很大的局限性,尤其在海量数据处理时。要预先处理数据以满足算法需求得耗费大量资源与时间。此时,可以使用聚类算法这样的无监督学习,相比于分类,聚类不依赖预定义的类和类标号的训练实例。本文将聚类算法拆分开来。深刻理解其思想。 相关知识 相异度计算——聚类,见名之意,便是将数据聚集起来,但是并非是将所有

Kubernetes1.3新特性 - 2016-07-20 14:07:33

本次分析的kubernetes版本号:v1.3.0。 scheduler模块 新增了kube-api-content-type参数,表示scheduler模块发送给api-server的请求类型,默认值是“application/vnd.kubernetes.protobuf”。 新增了hard-pod-affinity-symmetric-weight参数,表示POD调度规则亲和力的权重,取值范围从0到100。 新增了failure-domains参数,这是一个字符串参数,表示POD调度时亲和力参数。在
kafka学习之路(二)——提高 消息发送流程 因为Kafka 内在就是 分布式的 ,一个Kafka 集群通常包括多个代理。 为了均衡负载,将话题分成多个分区 , 每个代理存储一或多个分区 。 多个生产者和消费者能够同时生产和获取消息 。     过程: 1.Producer根据指定的partition方法(round-robin、hash等),将消息发布到指定topic的partition里面 2.kafka集群接收到Producer发过来的消息后,将其持久化到硬盘,并保留消息指定时长(可配置),而不关
(上图 2016微软全球合作伙伴大会吸引了144个国家的云解决方案商参会 ) ​2016年7月14日,历时三天的微软全球合作伙伴大会WPC 2016在加拿大多伦多落下帷幕,来自全球144个国家的16,000名软件开发商(ISV)、系统集成商(SI)、增值分销商(VAR)以及新一代云服务商(CSP)等汇聚一堂,他们也是全球最活跃、最顶尖的云计算生态代表。 在本次合作伙伴大会上,微软发布了合作伙伴“红宝书”——《当代微软合作伙伴系列:解决方案商如何在云世纪成功》。这本与IDC合作的书,历时4年完成,每年耗资上

Hadoop使用学习笔记(1) - 2016-07-19 18:07:38

Hadoop使用学习笔记 1.Hadoop安装与基本概念 Hadoop发行版本地址 1.1环境配置需求 本文是用的Hadoop版本是最新的2.7.2发行版。 本文分两个机器环境,分别是研发环境和测试环境: 本地环境配置(配置较好,用于压测): 操作系统: LSB Version: :base-4.0-amd64:base-4.0-noarch:core-4.0-amd64:core-4.0-noarch:graphics-4.0-amd64:graphics-4.0-noarch:printing-4.0
本文主要描述了朴素贝叶斯分类方法,包括模型导出和学习描述。实例部分总结了《machine learning in action》一书中展示的一个该方法用于句子感情色彩分类的程序。 1 方法概述 学习(参数估计) 实现:朴素贝叶斯下的文本分类 模型概述 朴素贝叶斯方法,是指 朴素:特征条件独立 贝叶斯:基于贝叶斯定理 根据贝叶斯定理,对一个分类问题,给定样本特征x,样本属于类别y的概率是 p ( y | x ) = p ( x | y ) p ( y ) p ( x ) 。 。 。 。 。 。 ( 1 )