本文主要是介绍论文阅读:《A Primer on Neural Network Models for Natural Language Processing》(二),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
https://blog.csdn.net/u011239443/article/details/80119245
4 前馈神经网络(略)
5 单词嵌入
神经网络方法的一个主要组成部分是使用嵌入-在低维空间中表示每个特征作为向量。但是向量来自哪里呢?本节将调查常见的方法。
5.1 随机初始化
当有足够的监督训练数据可用时,可以将特征嵌入与其他模型参数相同:将嵌入向量初始化为随机值,并让网络训练过程将其调整为“好”的向量。
在执行随机初始化的过程中,必须注意一些问题。有效Word2VEC实现所使用的方法是将字向量初始化为在:
范围内的均匀采样随机数,其中d是维数。另一种选择是使用沙维尔初始化,并用来自于:
的均匀采样值初始化。
在实践中,人们经常使用随机初始化方法来初始化通常出现的特征的嵌入向量,例如词性标签或单个字母;使用某种形式的监督或无监督的预训练来初始化潜在的稀有特征。如个别单词的特征。预训练的向量可以在网络训练过程中被视为固定的,或者更常见地,像随机初始化的向量一样对待,并且进一步调谐。
5.2 有监督的任务预训练(其实就是迁移学习,略)
5.3 无监督预训练
常见的情况是,我们没有足够数量的注释数据的辅助任务(或者我们想帮助用更好的向量来引导辅助任务训练)。在这种情况下,我们诉诸于“无监督”的方法,这些方法可以通过大量未经注释的文本进行训练。
训练词向量的技术基本上是监督学习的技术,但是我们不是监督我们关心的任务,而是从原始文本中创建实际上无限数量的监督训练实例,希望我们创建的任务能够匹配我们关心的最终任务。
无监督方法背后的关键思想是,人们希望“相似”单词的嵌入向量具有相似的向量。尽管词汇相似性很难定义,并且通常非常依赖于任务,但目前的方法来自分布假设,即如果词语出现在相似的语境中,则词语是相似的。不同的方法都创建监督训练实例,其目标是从其上下文中预测单词,或从单词中预测上下文。
训练词语嵌入大量未注释数据的一个重要好处是它为未出现在有监督训练集中的词提供了向量表示。理想情况下,这些单词的表示与在训练集中出现的相关单词的表示相似,从而使模型能够更好地概括看不见的事件。因此期望通过无监督算法学习的词向量之间的相似性捕获对于执行网络的预期任务有用的相同方面的相似性。
常用的无监督词嵌入算法包括word2vec,GloVe和Collobert和Weston嵌入算法。这些模型受神经网络启发,并基于随机梯度训练。然而,它们与NLP和IR社区演变而来的另一系列算法密切相关,这些算法都是基于矩阵分解的。
可以说,辅助问题的选择(基于什么样的上下文预测什么)会比用于训练它们的学习方法更多地影响结果向量。因此,我们专注于可用的辅助问题的不同选择,并且仅略过培训方法的细节。有几种软件包可用于导出单词向量,包括word2vec和Gensim使用基于word-windows的上下文实现word2vec模型,word2vecf是word2vec的修改版本,允许使用任意上下文,GloVe实现GloVe模型。许多预先训练过的单词向量也可以在网上下载。
虽然超出了本教程的范围,但值得注意的是,无监督训练算法导出的嵌入字在NLP中有广泛的应用,除了用于初始化神经网络模型的词嵌入层之外。
5.4 训练目标
给定单词w及其上下文c,不同的算法会制定不同的辅助任务。在所有情况下,每个单词都被表示为一个d维向量,它被初始化为一个随机值。训练模型以良好地执行辅助任务将产生良好的词嵌入,以将词与上下文相关联,这进而将导致类似词的嵌入向量彼此相似。
语言建模启发式方法,例如GloVe使用的辅助任务,其目标是根据其上下文预测单词。这是在概率设置中提出的,试图模拟条件概率 P(w|c) P ( w | c ) 。
其他方法将问题简化为二元分类。除了观察到的单词上下文对的集合D之外,还从随机单词和上下文配对中创建集合D 。二元分类问题是:给定的(w,c)对是不是来自D?这些方法在设置D 的方式上有所不同,分类器的结构是什么,以及正在优化的目标是什么。 Collobert和Weston采用基于边际的二进制排序方法,对前馈神经网络进行训练,以对不正确的(w,c)对进行评分。 Mikolov等人取而代之的是概率版本,训练一个对数 - 双线性模型来预测概率 P((w,c)∈D|w,c) P ( ( w , c ) ∈ D | w , c ) ,它们来自语料库而不是随机样本。
5.5 语境选择
在大多数情况下,单词的背景被认为是在其周围出现的其他单词,或者在其周围的短窗口中,或者在相同的句子,段落或文档中出现。在某些情况下,文本是由语法分析器自动分析的,并且上下文是从自动分析树引发的语法邻域派生的。有时候,单词和上下文的定义也会改变,以包含单词的一部分,例如前缀或后缀。
神经词嵌入起源于语言建模世界,其中网络被训练以基于先前词的序列来预测下一个词。在那里,文本被用来创建辅助任务,其目的是基于k个先前词的上下文来预测词。虽然语言建模辅助预测问题的训练确实产生了有用的嵌入,但这种方法不必要地受限于语言建模任务的限制,其中只允许查看前面的单词。如果我们不关心语言建模,而只关注所产生的嵌入,我们可以通过忽略这个约束并使上下文成为焦点词的对称窗口来做得更好。
5.5.1 窗口方法
最常见的方法是滑动窗口方法,其中通过查看2k + 1个字的序列来创建辅助任务。 中间词被称为焦点词,每个词的k个词都是上下文。 然后,创建一个任务,其目标是基于所有上下文词语(用CBOW(Mikolov et al。,2013)或矢量连接(Collobert&Weston,2008)代表)来预测焦点词, 或者创建2k个不同的任务,每个任务将焦点词与不同的上下文词配对。 (Mikolov et al。,2013)所推广的2k任务方法被称为skip-gram模型。 显示基于跳跃法的方法对于训练是强健和有效的(Mikolov等,2013; Pennington等,2014),并且经常产生最先进的结果。
窗口大小的影响 滑动窗口的大小对结果向量的相似性有很大的影响。 较大的窗户倾向于产生更多的局部相似性(即“狗”,“树皮”和“皮带”将被组合在一起,以及“走路”,“跑步”和“走路”),而较小的窗户倾向于产生 更多的功能和句法相似性(即“Poodle”,“Pitbull”,“Rottweiler”或“走路”,“跑步”,“接近”)。
变体 窗口方法可能有许多变体。在学习之前,你可能会让词汇变得简单,应用文本归一化,过滤太短或太长的句子,或者去掉大小写(参见,例如,在dos Santos & Gatti, 2014年所描述的预处理步骤)。一个可能是语料库的子样本,跳过一些常见的或太少见的焦点词的窗口的创建任务。窗口大小可能是动态的,每个回合使用不同的窗口大小。可以用不同的方式来衡量窗口的不同位置,更多地关注于试图准确地预测单词上下文对而不是更远的单词。每一个选择都会影响结果向量。其中一些超参数(和其他)在(Levy et al., 2015)被讨论。
5.5.2 句子、段落或文件
使用skip-grams(或CBOW)方法,可以将单词的上下文视为同一句子、段落或文档中出现的所有其他单词。这相当于使用非常大的窗口大小,并且预期会导致捕获局部相似性的单词向量(来自同一主题的单词,即一个期望在同一文档中出现的单词,很可能接收相似的向量)。
5.5.3 句法窗口
有些工作用句法来代替句子中的线性上下文。使用依赖解析器自动解析文本,并将一个单词的上下文看作是在解析树中接近的单词,以及它们之间连接的语法关系。这样的方法产生了高度的功能相似性,将单词组合在一起而不是在句子中扮演相同的角色(例如颜色、学校名称、动作动词)。分组也是一种句法,把有变化的单词组合在一起。
5.5.4 多语言
另一种选择是使用多语言、基于翻译的上下文。例如,给定大量句子对齐的并行文本,您可以运行一个双语对齐模型,如IBM model 1或model 2(即使用GIZA++软件),然后使用生成的对齐方式来派生单词上下文。在这里,单词实例的上下文是与之对齐的外文单词。这样的排列往往会导致得到相似向量的同义词。有些作者使用的是句子对齐级别,而不依赖于单词对齐。一个吸引人的方法是将单一语言的基于窗口的方法与多语言方法混合,创建两种辅助任务。这很可能产生与基于窗口的方法相似的向量,但是减少了基于窗口的方法(例如:热和冷、高和低)倾向于接收相似的向量的不理想的效果。
5.5.5 基于字符和子字的表示
一组有趣的工作尝试从组成它的角色中推导出一个单词的矢量表示。这些方法对于本质上是句法的任务可能特别有用,因为单词内的字符模式与其句法功能密切相关。这些方法还具有产生非常小的模型尺寸的益处(对于字母表中的每个字符,只需要存储一个矢量以及少量的小矩阵),并且能够为每个可能遇到的单词提供嵌入矢量。 dos Santos和Gatti(2014)以及dos Santos和Zadrozny(2014)使用卷积网络(见第9节)对字符进行嵌入建模。 Ling等人(2015b)使用两个RNN(LSTM)编码器的最终状态(第10节)的串联对单词的嵌入进行建模,其中一个从左到右读取字符,另一个从右到左读取字符。两者都为词性标注产生了非常强大的结果。 Ballesteros等人(2015年)的工作表明,(Ling等,2015b)的两个LSTM编码也有利于在形态丰富的语言的依赖分析中表示单词。
从他们角色的表示中获得单词的表示是由未知单词问题引发的。当你遇到一个没有嵌入向量的单词时,你会怎么做?在字符级别上工作在很大程度上减轻了这个问题,因为可能字符的词汇远小于可能字词的词汇。然而,在字符级别上的工作是非常具有挑战性的,因为语言中形式(字符)和函数(语法,语义)之间的关系非常松散。限制自己留在字符层面可能是一个不必要的硬性约束。一些研究人员提出了一个中间立场,其中一个词表示为词本身的矢量与构成它的子词单元的矢量的组合。然后子字嵌入帮助在具有相似形式的不同字之间共享信息,并且当字未被观察时允许回退到子字水平。与此同时,只要有足够的词语观察结果,模型就不会被迫仅依靠字符。 Botha和Blunsom(2014)建议将单词的嵌入矢量模型化为特定于单词的矢量(如果这种矢量可用)与用于构成单词的不同形态成分的矢量的组合(这些成分是使用Morfessor Creutz&Lagus,2007),一种无监督的形态学分割方法)。 Gao等人(Gao et al。,2014)建议,不仅要使用单词形式本身,而且还要为单词中的每个三字母组合使用一个独特的特征(因此是一个独特的嵌入向量)作为核心特征。
这篇关于论文阅读:《A Primer on Neural Network Models for Natural Language Processing》(二)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!