本文主要对这几周读的几篇关于使用神经网络构建语言模型的论文进行总结。

[1] Bengio Y, Ducharme R, Vincent P, et al. A neural probabilistic language model[J]. Journal of machine learning research, 2003, 3(Feb): 1137-1155.
在[1]中Bengio提出了使用神经网络来训练语言模型方法,该语言模型是一个N-gram模型,即通过输入的n-1个单词,来预测第n个单词的概率分布。

Bengio使用了一个简单的三层神经网络:

输入层:通过一个映射矩阵C(矩阵的规模为|V|*m,其中|V|是词表大小,m是词向量的维度),将前n-1个离散的单词映射成n-1个m维向量,也就是通过查表的方式将单词变成词向量。然后将这n-1个m维向量首尾相接形成一个m(n-1)的向量,该向量就是神经网络的输入向量x。
隐藏层:隐藏层的节点个数为h,为了将输入层输出的m(n-1)维向量x转化为隐藏层(维度为h)的输入,在输入层和隐藏层之间需要一个参数矩阵H(H的规模为h*m(n-1)),同时需要一个偏置d,该变化可以表示为f(x)=Hx + d,这是一个线性变换。隐藏层的输出需要将经过线性变换的向量在做一次非线性变换,在这里选择的函数为tanh(双曲正切),也就是激活函数。那么我们可以知道隐藏层的输出就是tanh(Hx + d)。
输出层:从隐藏层到输出层的传递同样需要一个线性变换和一个非线性变化,即首先通过线性变换将隐藏层的输出向量的维数转化为和输出层的节点数一致(其实此时已经可以将这个这个值作为输出),但是为了将输出表示成概率分布的形式(每个维度上的值之和为1),我们还需要对输出层的输入(也就是隐藏层的输出)进行一个非线性变换,激活函数为softmax,才能达到我们想要的效果。由于我们希望网络的输出可以对第n个单词的分布做出概率预测,所以输出层的维度为|V|,即整个词表的大小,那么从隐藏层到输出层的参数矩阵U的规模就是|V|*h,
i>如果输入层和输出层之间没有直连边,那么输出层的输入就是y=b+Utanh(Hx + d);
ii>如果输入层和输出层之间有直连边,该变换同样需要一个参数矩阵W(W的规模为|V|*m(n-1)),和一个偏置b,那么输出层的输入就是y=b + Wx + Utanh(d + Hx).
最终输出层的输出就是经过softmax函数激活后的概率:

其中,分子就是词w(t)对应的输出,例如单词w(t)在词表的位置是第100个,那么分子就是输出向量的第100维上的值。

该神经网络的参数θ=(b, d, W, U, H, C),而训练模型的方法是和随机梯度下降(SGD)类似的随机梯度上升(SGA)。
训练模型的过程就是调整参数θ是的目标函数最大化的过程,该模型使用的目标函数为:

由于模型输入为(x, y)其中x= w(t-n+1),w(t-n+2),..,w(t-1),y=w(t),我们希望在训练中使得每次输入n-1个单词后,网络输出的概率中对w(t)的概率是最大的,于是得到了该目标函数。
其中T是指将训练样本中的总单词数(在此处训练的时候将训练语料转化为了一个长为T的超长词序列),然后使用一个长度为n的窗口进行滑动,作为模型的输入。

当模型训练好后,我们比较关注的词向量就保存在映射矩阵C中,同时我们也得到了语言模型。
后续打算使用TensorFlow对该神经网络进行实现,以加深理解。

[2] Collobert R, Weston J, Bottou L, et al. Natural language processing (almost) from scratch[J]. Journal of Machine Learning Research, 2011, 12(Aug): 2493-2537.
这篇文章的内容较多,只对其中的模型进行简单的介绍。
在C&W的这篇论文中,他们对自己提出的自然语言处理的框架进行详细的解释,其实也是一个神经网络,和[1]中的网络存在类似之处。
主要有两种方法:
(1) 基于窗口的方法,所谓基于窗口就是说网络的输入是固定长度的。

这个方法和[1]的神经网络极其类似,在输入层同样是通过查表的方式进行单词到向量的转换,将单词转化为可以计算的词向量之后,通过一系列线性变化(层之间的维数转化或者说是特征提取)和非线性变化,将输入转化为输出。只是该网络在隐藏层使用的激活函数和[1]有所不同,使用了HardTanh函数:

主要目的是加快训练。
C%W通过该框架构建语言模型时,和[1]还有一点不同,那就是在输出层没有|V|那么多节点,只有一个节点,得到一个数值,用该数值就输入进行打分。
在对模型进行优化时,使用的目标函数为:

θ是神经网络的参数,x是网络的输入(固定长度的单词序列),x(w)表示用w替换原来词序列最中间那个词后的序列,可以简单理解为变成了一句不正常的话,f就是网络的输出,也就是对输入的打分。作为一个初学者,感觉这样的构建目标函数的想法真是很有意思。
对网络进行优化之后,就能得到我们想要的词向量。

(2) 基于句子的方法,所谓基于句子,就是说网络的输入不再是一个固定长度的单词序列,它的长度是可以变化的。

在这种情况下就需要在原有框架中间加入一个新的层来解决输入长度不一致的问题,C&W加入了一个卷积层。
网络的第一层还是通过查表的方法将单词转化为此词向量,作为输入;
然后通过一个卷积层,在该层通过一个固定大小为t的窗口,每次对输入句子中连续的t个单词进行一次卷积,也就是一次线性变化。窗口从句子开头一直滑动到句子末尾。
假设进行了6次卷积,那么可以理解为在下一层中就每个节点上会接收到6个值,然后通常的做法是将这6个值取平均或者取最大值,在这里CW选择了取最大值。
这之后网络的结构就和窗口方法基本一致了。
网络的输出可以根据具体问题进行具体的设计,没有细看。

感觉在这篇文章中,目标函数的设计很有意思。

[3] Huang E H, Socher R, Manning C D, et al. Improving word representations via global context and multiple word prototypes[C]//Proceedings of the 50th Annual Meeting of the Association for Computational Linguistics: Long Papers-Volume 1. Association for Computational Linguistics, 2012: 873-882.
Huang的工作主要是在[2]的基础之上的做的改进。他在[2]工作的基础上,加入了他所认为的全局上下文信息。
Huang提出的语言模型框架如图:

在local context这侧,Huang使用的方法基本上和[2]中基于窗口的方法一样,就是在目标函数设计时将替换的词的位置从最中间改成了末尾;

在global context这侧,Huang将词序列s所在文档的每个单词的idf值的加权平均值作为全局上下文信息,和输入词序列s的最后一个单词拼接在一起作为该侧网络的输入,网络结构和[2]还是类似;

将两侧得到的输出相加就得到了模型的输出。
Huang的目标函数设计如下:

网络的输入是(s, d),s是词序列,d为词序列s出现的文档。sw的意思和[2]中一致,只是替换位置发生了变化(在末尾)。

Huang还就一词多义问题提出了自己的设计,有兴趣可以直接去阅读文献。

几篇神经网络训练语言模型文章的阅读相关推荐

  1. 使用循环神经网络训练语言模型(从简单起手、歌词生成器,爬虫+GRU循环网络)

    使用循环神经网络训练语言模型(从简单起手.song_words生成器,爬虫+GRU循环网络) 第一部分:song_words获取(本次主要是训练语言模型,度娘random搜的公开的song_words ...

  2. 【Pytorch神经网络理论篇】 19 循环神经网络训练语言模型:语言模型概述+NLP多项式概述

    1 语言模型 循环神经网络模型可以对序列片段进行学习,找到样本间的顺序特征.这个特性非常适合运用在语言处理方向. 1.1 语言模型简介 语言模型包括文法语言模型和统计语言模型,一般指统计语言模型. 1 ...

  3. 【赠书】如何掌握好自然语言处理中的预训练语言模型?你需要读这本书

    ‍‍ 预训练语言模型属于人工智能领域中自然语言处理领域的一个细分,是自然语言处理领域的重要突破,得到了越来越广泛的关注,相关研究者和从业人员在实际应用的过程中,亟需一本理论翔实.代码细节充分的参考书. ...

  4. 重磅新作!预训练语言模型入门必读好书 | 送书福利

    邵浩,刘一烽 编著 电子工业出版社-博文视点 2021-05-01 ISBN: 9787121409998 定价: 109.00 元 新书推荐 ????今日福利 |关于本书| 预训练语言模型属于人工智 ...

  5. 【Language model】使用RNN LSTM训练语言模型 写出45°角仰望星空的文章

    开篇 这篇文章主要是实战内容,不涉及一些原理介绍,原理介绍为大家提供一些比较好的链接: 1. Understanding LSTM Networks : RNN与LSTM最为著名的文章,贴图和内容都恰 ...

  6. java文章上一篇下一篇_每个人都必须阅读的10篇Java文章

    java文章上一篇下一篇 一个月前,我们发布了每个人都必须阅读的10篇SQL文章列表. 我们相信jOOQ博客上的文章列表将为我们的读者带来非凡的价值. jOOQ博客是一个专注于Java和SQL的博客, ...

  7. 从 200 多篇顶会论文看预训练语言模型研究进展

    © 作者|王晓磊 机构|中国人民大学高瓴人工智能学院博士一年级 导师|赵鑫教授 研究方向 | 对话系统和预训练模型 近年来,以 BERT 和 GPT 系列为代表的大规模预训练语言模型(Pre-trai ...

  8. 机器翻译:引入注意力机制的Encoder-Decoder深度神经网络训练实战中英文互译(完结篇)

    文章目录 前言 一.数据的预处理 二.模型配置 三.模型训练 总结 前言 注意力机制是一种在深度学习中广泛使用的技术,它可以有效地处理输入序列和输出序列之间的对应关系.其中,Encoder-Decod ...

  9. 清华研究登Nature子刊:面向大规模预训练语言模型的参数高效微调

    ©作者 | 机器之心编辑部 来源 | 机器之心 近年来,清华大学计算机系孙茂松团队深入探索语言大模型参数高效微调方法的机理与特性,与校内其他相关团队合作完成的研究成果"面向大规模预训练语言模 ...

最新文章

  1. 分针网——Javascript不同浏览器差异及兼容方法
  2. 给Event handler传递动态参数
  3. php文章编辑页面,zblogphp在文章页面中增加直达后台编辑该文章内容功能
  4. Map转xml格式字符串
  5. 44)PHP,多个数据库查询(我没试)
  6. 2018汇总数据结构算法篇
  7. linux内核关掉模块,强制关闭你的系统的内核模块 | Linux 中国
  8. vue 过滤器 filters
  9. 梯度下降法、牛顿法和拟牛顿法——机器学习面试
  10. “好师父”如何破解大学生就业难题
  11. Hadoop之mapReduce有几种排序及排序发生的阶段
  12. 深度现场教学安徽省安庆市青年干部培训参观杭州梦想小镇实例
  13. 重心法求中心matlab,两个中转站选址问题(重心法,metlab,spss)程序.ppt
  14. 计算机编程画图步骤,计算机CAD绘图基础教程
  15. 铜仁学院官网计算机二级报名,贵州铜仁学院2015年9月全国计算机等级考试报名通知...
  16. 在MySQL中实现交叉表查询2(动态交叉表)
  17. Debian+Apache2+MySQL5+PHP5+GD
  18. (转)美国最大的独立理财顾问公司 爱德华琼斯专注的成功
  19. 【Python机器学习预测分析算法实战五】最小角回归LARS
  20. 加多芬科技讲解目前趋势“不带钱包出门”已成趋势 无现金支付你准备好了吗?

热门文章

  1. Python中print换行问题
  2. ffmpeg开源工具的使用_使用开源工具玩龙与地下城
  3. html1 初入html
  4. linux客户端交互,客户端交互性
  5. 免费下载国际学术论文SCI期刊文献软件,SCI-HUB EVA
  6. 数量周期 复杂现象背后的推动力,可能是极其简单的原理。科学的目标之一就是发现纷 繁复杂的自然现象背后的简单法则。爱因斯坦的相对论是这方面的典范例证。
  7. tsp问题的c语言编码,原创:TSP有关问题解决方案-禁忌搜索算法C实现
  8. delphi 企业微信消息机器人_消息通知支持企业微信、钉钉机器人,MeterSphere v1.4.0发布...
  9. SpringBoot用MultipartFile.transferTo传递相对路径的问题
  10. android Criteria