深度解读FRAGE: Frequency-Agnostic Word Representation(2018-NIPS)

2023-10-07 14:30

本文主要是介绍深度解读FRAGE: Frequency-Agnostic Word Representation(2018-NIPS),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

FRAGE: Frequency-Agnostic Word Representation

文章目录

    • FRAGE: Frequency-Agnostic Word Representation
      • 写在最前
      • 摘要
      • 1. 介绍(Introduction)
      • 2. 背景(Background)
        • 2.1 词表示 (Word Representation)
        • 2.2 对抗训练(Adversarial Training)
      • 3. 实验研究(Empirical Study)
        • 实验设计(Experimental Design)
        • 观察(Observation)
        • 解释说明(Explanation)
        • 讨论(Discussion)
      • 4. 本文的方法(Our Method)
        • 公式1 (Formula 1)
        • 公式2 (Formula 2)
        • 公式3 (Formula 3)
        • 公式4 (Formula 4)
        • 公式5 (Formula 5)
      • 5. 实验(Experiment)
        • 5.1 设定(Settings)
        • 5.2 结果(Result)
      • 参考(Reference)

Alt

写在最前

agnostic [æg’nɒstɪk] 这个词在词典里查到的意思解释很少,作为名词(n.)是不可知论者,作为形容词(adj.)是不可知论的,那这篇文章的题目翻译过来是"频率不可知的词向量表示"么?显然让人很难理解,很难通过题目来判断文章具体是做了什么方面的研究工作。我们来看agnostic跟在一个名词后组成一个术语一般有什么样的含义:

Technology agnostic is a term that we use in the business that simply means, we are unbiased towards the use of different technology tools to solve different problems. We believe there is no 'one size fits all‘ in the website development industry.

Technology agnostic (技术不可知论)是我们在业务中使用的一个术语,简单地说,我们对使用不同的技术工具来解决不同的问题没有偏见(unbiased)。我们认为网站开发行业没有“一刀切”的模式。( 'one size fits all‘ :adj. 通用的;一体适用的; )因此,“agnostic”在这里更多是"unbiased(adj. 无偏倚的)"意思。

本文将Frequency-Agnostic作为标题,作者也是从一开始就想传达“针对高频词和低频词在传统词嵌入模型中的表现,我们也不应该采用‘一体适用’的方式训练它们,而我们又不能分别训练它们,我们只有把它们身上‘高频/低频词’这个标签给拿掉了,再来看训练效果”。

摘要

连续词向量表示(也称为 词嵌入)在很多基于神经网络的模型中被用于自然语言处理任务中作为基本构建块(basic building block)。尽管人们普遍认为具有相似语义的词在嵌入空间中应该彼此接近,但我们发现在几个(NLP)任务中学习到的词嵌入是有偏倚的(biased),高频词和低频词的向量表示在嵌入空间的不同子区域。即使高频词和低频词语义相似,它们在词嵌入空间中却彼此远离。这使得学习到的词嵌入无效,特别是对于低频词来说,结果限制了这些神经网络模型的性能表现。

在本文中,我们开发了FRequency-Agnostic word Embedding(FRAGE),这是一种利用对抗性训练(adversarial training)学习单词表示的简洁而有效的方法。我们对四个自然语言处理任务的十个数据集进行了全面的研究,包括单词相似度(word similarity),语言建模(language modeling),机器翻译(machine translation)和文本分类(text classification)。结果表明,使用FRAGE,我们在所有任务中都获得了比基线(baseline)更高的性能。

1. 介绍(Introduction)

词嵌入技术,通常分为两种,对词的离散向量表示和连续向量表示,已经成为了很多被用于自然语言处理任务的基于神经网络模型中的基本构建块。和经典的one-hot表示方法不同之处在于,这种方式所学习到的词向量包含有语义信息可以用于衡量词之间的语义相似度并且可以迁移到其他的学习任务(one-hot 表示的词向量之间两两正交,没有词相似度的概念)。

在NLP任务的深度学习方法中,词嵌入作为神经网络的输入,通常与神经网络参数一起训练。作为神经网络的输入,词嵌入携带词的所有信息,将会进一步被神经网络处理,并且词嵌入的质量非常重要,对最终学习任务的表现有着很高的影响。不幸的是,我们发现由很多深度学习方法所训练出来的词嵌入远非完美。如图1(a)和图1(b)所示,在由word2vec所训练出来的词嵌入空间中,词"Peking"的最近邻包含"quickest",“multicellular"和"epigentic” 而这些词都不是语义上相似,而真正语义上相关联的词如"Beijing"和"China"彼此相距很远。类似现象也被发现在由翻译任务训练的词嵌入表示上。

Alt

图1(部分):由WMT14翻译任务用Transformer训练出来的词嵌入和谷歌新闻(Google News)数据集用word2vec训练出来的词向量案例学习显示在(a)和(b)中。红点表示低频词汇,蓝点表示高频词汇。在(a)和(b)中,我们将这些词的语义上的邻居用粗体字标明了出来。

经过仔细研究,通过仔细研究,我们发现了一个更普遍的问题,它起源于文本语料库中的低频词。没有任何混淆,我们也将高频词(high-frequency words)称为流行词(popular words),并将低频词(low-frequency words)称为罕见词(rare words)。众所周知,词的频率分布大致遵循一种被称为齐普夫定律(Zipf’s law)的简单数学形式。随着文本语料库的大小增长,低频词(rare words)的频率远小于高频词,与此同时,低频词的数量会远大于高频词。有趣的是,所学习到的对低频词和高频词的词向量表示也完全不同。(1)在词嵌入空间,高频词通常有语义相关的邻居,而低频词通常没有。此外,超过85%的低频词哪怕有最近邻也还是低频词。(2)词嵌入技术(原生地)将词的频率信息编码进去,如图1(a)和1(b)所示,低频词和高频词的嵌入(also 词向量表示)实际上位于嵌入空间的不同子空间。

我们认为,对高频词和低频词进行向量表示的不同行为是有问题的。首先,这种嵌入会影响对词的语义理解。我们观察到超过一半的低频词是名词或高频词的变体。这些低频词应该和高频词有相似的意思或者同属于(共享)相同的主题。其次,大量低频词的邻居是语义无关的低频词。在某种程度上,这些词向量表示更多地将频率信息编码进来而不是语义信息,这一点从语义理解的角度上看不是很好。因此,它将限制使用这种词嵌入的NLP下游任务的性能。例如,在文本分类中,当用其低频/高频词的替代词来替换掉句子中原有的一个高频/低频词时,不能很好地保证句子的标签不会改变。

为了解决这个问题,本文提出一种对抗训练的方法去学习FRequency-AGnostic word Embedding (FRAGE,频率不可知的词嵌入). 对于给定的NLP任务,除了通过要优化特定任务的参数以及词嵌入来最小化特定任务的损失以外,我们引入了另一种判别器(discriminator),将词嵌入作为输入并对其是否是高频/低频词进行分类。判别器优化其参数去最大化它的分类准确率,与此同时,词嵌入也针对低任务依赖性损失进行优化以至于最后能够欺骗(fooling)判别器去将高频/低频词错误分类。当整个训练过程收敛并且系统达到平衡时,判别器不能很好地区分高频词与低频词。这样做的结果是,低频词能够与高频词处于词嵌入空间的同一区域并与其混合。这时FRAGE将能够更好地捕捉到语义信息并帮助特定任务获得更好的表现。

我们对四种类型的NLP任务进行了实验,包括三个词相似性任务,两个语言建模任务,三个情感分类任务,以及两个机器翻译任务来测试我们的方法。在所有任务中,FRAGE都优于基线。特别是,在语言建模和机器翻译方面,我们在PTB,WT2和WMT14英语-德语数据集上获得了比目前最先进(state-of-the-art)结果更好的性能。

2. 背景(Background)

2.1 词表示 (Word Representation)

单词是自然语言的基础单位,分布式单词表示(即单词嵌入)是NLP任务中许多模型的基本单元,包括语言建模和机器翻译。已经证明,从一项任务中学到的词向量表示可以转移到其他任务并且也能实现很好的性能表现。

当词嵌入技术在NLP基于神经网络的模型中扮演着越来越重要的作用并取得巨大成功时,一个技术上的挑战就是对低频词的嵌入很难训练,由于其出现频率低。R.Sennrich等人在“Neural machine translation of rare words with subword units“(2015)一文中提出一种新的方法将每个词进一步划分(split)为子词(sub-word)单元,这种方法通常广泛用于神经机器翻译中。然而,低频子词单元仍然很难去训练;M.Ott等人在“Analyzing uncertainty in neural machine translation“(2018)一文中提供了一个综合性研究,研究显示低频(子)词在神经机器翻译中通常被低估了:在推断(inference)步骤中,模型更倾向于选择高频词而不是它们的低频替代词。

2.2 对抗训练(Adversarial Training)

我们解决上述问题的基本思想是对抗性训练,使两个或两个以上的模型通过追求竞争目标一起学习。对抗性训练的代表性例子是用于图像生成的生成性对抗网络(GAN,Generative Adversarial Networks),其中判别器(discriminator)和生成器(generator)彼此竞争:生成器旨在生成类似于原始图像(natural images)的图像,而判别器旨在从原始图像中鉴别出后来生成的图像(generate images)。最近(2016,2017发表的文章表明),对抗训练已经被成功应用到NLP任务中。有些研究引入了一个额外的鉴别器来区分非并行双语数据中从不同语言学到的语义。 Alex Lamb等人(2016)开发了一个鉴别器来分类句子是由人创造还是由模型生成,其研究结果发表为“Professor forcing: A new algorithm for training recurrent networks“一文。

我们提出的方法是在对抗训练框架下解决,但又不完全是传统的生成器-判别器方法(generator-discriminator approach),因为我们的方案中没有生成器。对于NLP任务及其神经网络模型(包括词嵌入),我们引入了一个判别器来区分高频词和低频词的词向量表示;而神经网络模型旨在愚弄(fool)判别器的同时最小化特定任务的损失。

我们的工作也与对抗域适应性(adversarial domain adaptation)弱相关,试图减轻在训练和测试中进行域转换的负面影响。而本文工作和对抗域适应之间的区别在于:我们的目标不是为了造成训练和测试之间的不匹配,我们旨在提升词嵌入的有效性,从而提升端到端NLP任务的性能。

3. 实验研究(Empirical Study)

在本节中,我们基于使用word2vec从Google新闻语料库训练的模型研究高频词和低频词的嵌入,并使用Transformer从WMT14英语 - 德语翻译任务进行训练。实现细节可以FRAGE_in_Github中找到。

实验设计(Experimental Design)

在这两个任务中,我们简单地将词汇中频率排名前20%的常用单词设置为高频词(popular words),并将其余单词表示为低频词(rare words)。(粗略地说,在WMT14数据集中如果一个词的的相对频率低于 1 0 − 6 10^{-6} 106,以及在谷歌新闻数据集如果一个词的的相对频率低于 1 0 − 7 10^{-7} 107,我们将其设置为低频词。我们也尝试了设置成其他阈值,如10%或25%,发现观察结果相似。

我们研究在词向量表示中所展现出来的两个词之间的语义关系是否合理。为了达到这个目的,我们随机抽取了一些高频/低频词并检查了从不同任务中训练得到的嵌入。对于每个采样得到的单词,我们根据其与其他单词之间的词向量表示的余弦相似度确定其最近邻居。我们还手动选择与其语义相似的单词。为简单起见,对于每个单词,我们将从词嵌入中预测得到的最近单词称为模型预测的最近邻(model-predicted neighbors),并将我们选择的单词称为语义邻居(semantic neighbors)。

观察(Observation)

为了对词嵌入可视化,我们通过SVD(Singular Value Decomposition,奇异值分解)对词向量进行降维,并且将两个案例绘制成图形如图1所示。更多实验案例以及其他没有降维处理的研究可以在第5节中找到。

Alt

我们发现从不同任务中训练得到的词向量共享一些共同的模式。对于这两项任务而言,超过90%的模型预测的低频词的邻居还是低频词。对于每一个低频词而言,模型预测的邻居词通常与其并没有语义相关性,而我们选出来的语义邻居在词嵌入空间中和该词的距离非常远。与此相反,模型预测的高频词的邻居是非常合理的。

由于低频词和高频词的模式不同,我们进一步核查整个嵌入矩阵来进行一个大体上理解。我们也对用SV处理过的词嵌入进行可视化,通过将两个方向保持为两个最大的特征值(eigenvalues),并将它们绘制在图1©和1(d)中。从图中可以看出,这种嵌入方式实际上将词的频率信息在一定程度上编码进了词的向量表示:在这种线性投影之后,低频词和高频词位于不同的区域,因此它们在原始嵌入空间中占据了的不同区域。这种奇怪现象也在其他由C-BOW和GloVe所训练出的词向量中有所体现,在Jiaqi Mu的“All-but-the-top: Simple and effective postprocessing for word representations.“一文中也被提及到。

解释说明(Explanation)

从上面的实验研究中,我们可以看到低频词和高频词所占据的词嵌入空间是不同的,这里我们直观地解释一个可能的原因。我们简单地将word2vec作为一个例子,它是通过随机梯度下降进行训练的。在训练过程中,对高频词的采样率很高,因此高频词的词嵌入更新频繁。而对于一个低频词来说,采样率很低并且它的词嵌入很少更新。根据我们的研究发现,平均而言,在训练过程中,高频词的词嵌入的移动距离是低频词的两倍长。由于所有词向量表示通常都是在原点周围以较小的方差(variance)初始化,我们在最终模型中观察到,低频词的词嵌入仍然在原点附近,而高频词已经移动到距离初始位置很远的地方。

讨论(Discussion)

我们有充分的证据表明当前这种现象是存在问题的。首先,我们使用 自然语言工具包_Natural Language ToolKit中的POS 词性标注,研究发现在两个任务中,超过半数以上的低频词是名词,如公司名,城市名。它们可能与高频实体(popular entities)共享相似的主题,如一些大公司和大城市;大约10%的低频词包含有连字符(即通常用于连接高频词的符号),以及超过30%的低频词是高频词的不同变体形式(PoSs)。这些低频词与高频词应该有着混合或者相似的语义。这些事实表明,低频词和高频词应该位于词嵌入空间的同一区域,但这与我们观察到的不同。其次,正如我们从案例中看到的,对于低频词,模型预测的邻居通常不是语义相关的词而是频率相关的词(同为低频词)。这表明,对于低频词,词嵌入技术更多地将频率信息编码进词的向量表示而不是语义信息。这种方式训练出来的词向量表示被用于如文本分类,语言建模,语言理解和翻译的语义理解任务中表现是不好的。

【拓展】POS tagger

即Part-Of-Speech Tagger,主要用于标注词在文本中的成分。通常需要先对词作Tokenize(标记字符串,which means distinguish meaningful word units from punctuation in the text)处理,然后再作POS tagging(to tag these units according to their Part of Speech, such as Noun, Verb, Adjective),接下来对单词做lemmatizing(对词进行不同形式归类,to group related forms under a single heading, as would be done in a dictionary)。

其中PoS tagger 使用方法如下:

import nltk
text=nltk.word_tokenize(“TEXT”)
nltk.pos_tag(text)

通常会对词进行如下标注:

Alt

4. 本文的方法(Our Method)

在这一部分,我们展现了我们用于提升词的向量表示的方法。由于我们有一个很强的先验认知,很多低频词应该与高频词在词的嵌入空间中共享同一区域,因此我们算法的基本思想是在一个对抗性框架中训练词嵌入:我们引入了一个判别器将词嵌入分为两类:高频词和低频词。我们希望通过训练学习到的词向量不仅可以最大限度地减少具体任务的训练损失(minimize the task-specific training loss),同时也可以愚弄判别器。通过这种方式,词的频率信息就从词嵌入中被移除掉了,因此我们将我们的研究称作 频率不可知的词嵌入(frequency-agnostic word embedding ,FRAGE)

我们首先对之后会出现的符号进行一些标注,然后介绍我们的算法。我们开发了三种符号:词嵌入,具体任务的参数/损失,以及判别器参数/损失,整体框架如图2所示。

Alt

图2 所提出的学习框架包含一个具体任务的预测器(predictor)以及一个判别器(discriminator),判别器的功能是用于区分低频词和高频词。两个模块都使用词嵌入作为输入。

θ e m b ∈ R d × ∣ V ∣ \theta^{ emb}\in R^{d \times |V|} θembRd×V表示为要被学习到的词嵌入矩阵。其中 d d d是嵌入向量的维度, ∣ V ∣ |V| V是词汇表大小(vocabulary size)。用 V p o p V_{pop} Vpop表示高频词(popular words)的集合,而 V r a r e = V ∖ V p o p V_{rare}=V \setminus V_{pop} Vrare=VVpop ( ∖ \setminus 符号表明对集合做差集运算 )为低频词的词向量表示。接下来,嵌入矩阵 θ e m b \theta^{ emb} θemb可以分为两部分: θ p o p e m b \theta^{emb}_{pop} θpopemb为高频词的词嵌入矩阵, θ r a r e e m b \theta^{emb}_{rare} θrareemb为低频词的词嵌入矩阵。令 θ w e m b \theta^{emb}_{w} θwemb表示词 w w w的词嵌入。令 θ m o d e l \theta^{model} θmodel表示除了词嵌入以外所有的具体任务的参数。举例来说,对语言建模, θ m o d e l \theta^{model} θmodel是RNN或LSTM的参数;对神经机器翻译而言, θ m o d e l \theta^{model} θmodel是所有编码器(encoder),注意力模块(attention module)和解码器(decoder)的参数。

公式1 (Formula 1)

L T ( S ; θ m o d e l , θ e m b ) L_{T}(S;\theta^{model},\theta^{emb}) LT(S;θmodel,θemb)表示数据集 S S S上所有具体任务的损失。以语言建模为例,损失 L T ( S ; θ m o d e l , θ e m b ) L_{T}(S;\theta^{model},\theta^{emb}) LT(S;θmodel,θemb) 由数据的负对数似然定义:

L T ( S ; θ m o d e l , θ e m b ) = − 1 ∣ S ∣ ∑ y ∈ S l o g P ( y ; θ m o d e l , θ e m b ) L_{T}(S;\theta^{model},\theta^{emb})=-\frac{1}{|S|}\displaystyle\sum_{y\in S}log P(y;\theta^{model},\theta^{emb}) LT(S;θmodel,θemb)=S1ySlogP(y;θmodel,θemb)

其中, y y y是一个句子。

【解析】

文章在这里举了一个语言建模的例子来说明词嵌入模型的损失函数是怎么设计的以及前面交代的符号表示在这里都有什么作用。具体分析如下:

在语言建模(language modeling)中,模型的基本构建块(basic building block)不再是单个单词,而是一个个句子。 y y y是一个句子, θ m o d e l \theta^{model} θmodel表示模型的所有参数, θ e m b \theta^{ emb} θemb表示句子的嵌入矩阵,因此 P ( y ; θ m o d e l , θ e m b ) P(y;\theta^{model},\theta^{emb}) P(y;θmodel,θemb)表示一个句子出现的概率,模型需要不断地进行随机梯度下降(SGD)来调整句子的向量表示 θ e m b \theta^{ emb} θemb,调整参数以最大化目标函数——对该句子的预测概率,从而最小化损失函数。

【问题】为什么最大化预测概率,就可以最小化损失函数呢?即负对数似然在该式中怎样体现?

这里我们还是回到词嵌入本身,拿word2vec中的skip-gram模型来分析:

对每一个单词 t=1,2,…,T(文本词汇表大小),我们需要预测该单词窗体“半径(radius)”为m的上下文单词。

  • 目标函数:对于给定的当前中心词,最大化它的每一个上下文单词的预测概率。

J ′ ( θ ) = ∏ t = 1 T ∏ − m ≤ j ≤ m T p ( w t + j ∣ w t ; θ ) J'(\theta)=\displaystyle \prod^{T}_{t=1}\displaystyle \prod^{T}_{-m\leq{j}\leq{m}}p(w_{t+j}|w_{t};\theta) J(θ)=t=1TmjmTp(wt+jwt;θ)

θ \theta θ 表示所有我们将要优化的变量(where θ \theta θ represents all variables we will optimize)。

​ 在训练过程中我们需要做的是调整模型的参数,使得对中心词的上下文单词预测的概率尽可能高。

  • 要最大化目标函数,需要对其概率分布取负对数,得到损失函数——对数似然的相反数。

J ( θ ) = − 1 T ∑ t = 1 T ∑ m ≤ j ≤ m l o g   p ( w t + j ∣ w t ) J(\theta)=-{\frac{1}{T}}\displaystyle \sum^{T}_{t=1}\displaystyle \sum_{m\leq{j}\leq{m}}log\, p(w_{t+j}|w_{t}) J(θ)=T1t=1Tmjmlogp(wt+jwt)

​ 该式即负对数似然估计(negative log likelihood)

​ 对数函数如下图红线所示:

Alt

而公式中我们的对数函数的变量部分是一个概率值( 0 ≤ q ≤ 1 0\leq q \leq1 0q1),因此为红线中( x &lt; 1 x&lt;1 x<1)的部分轨迹,我们对其取负号,得到负对数似然函数如下图所示:

Alt

我们希望得到的概率越大越好,因此概率越接近于1,则函数整体值越接近于0,即使得损失函数取到最小值。取对数加负号以后前面还要乘以一个 1 T \displaystyle\frac{1}{T} T1,这里 T T T代表语料库词汇表中单词总数,我们对每一个单词的负对数进行累加求和之后需要除以 T T T,才能得到损失函数的平均值。

公式2 (Formula 2)

f θ D f_{\theta^{D}} fθD表示一个参数为 θ D \theta^{D} θD的判别器,它的作用是当我们将一个词嵌入作为输入时,判别器能够输出一个0到1之间的置信度(confidence score),用于表明该词有多大可能性是一个低频词。令 L D ( V ; θ D , θ e m b ) L_{D}(V;\theta^{D},\theta^{emb}) LD(V;θD,θemb) 表示判别器的损失:

Alt
【存在的疑问】为什么表示判别器的损失时与前面词嵌入模型中损失函数的表示形式不一致?比如说:在这里区分了高频/低频词,以及取对数求和取平均值之后,前面没有加负号?

上述公式为判别器的损失函数的数学形式化表示,判别器的作用是对于一个输入进行分类,判断它是高频词还是低频词。因此,判别器的损失是当它分类错误的时候,我们对其累加求和取平均。分类错误就包含有两种情况:(1)本来是高频词,判别器将其误分类为低频词;(2)本来是低频词,判别器将其误分类为高频词。分别对应上述公式前后两项,具体分析如下:

f θ D ( θ w e m b ) f_{\theta^{D}}(\theta_{w}^{emb}) fθD(θwemb) 表示对于输入的词向量,判别器将其判定为低频词的可能性;

而公式的第一项 1 ∣ V p o p ∣ ∑ w ∈ V p o p l o g f θ D ( θ w e m b ) \displaystyle\frac{1}{|V_{pop}|}\displaystyle\sum_{w \in V_{pop}}log f_{\theta^D}(\theta_{w}^{emb}) Vpop1wVpoplogfθD(θwemb) 表示一个词 w w w原本是高频词,但判别器将其分类为低频词;

同理,公式的第二项表明一个词原本是低频词,但判别器将其误分类为高频词的概率。

两项相加表示判别器在分类时的误差,如果判别器每次判断都准确,那么整体损失就很小;如果判别器总是误分类,整体损失就很大。与传统GAN不同,这里我们希望尽可能最小化判别器的损失,因此也不需要在前面加负号。

公式3 (Formula 3)

遵循对抗性训练的原则,我们制定了一个极小极大(minimax)的目标来训练具体任务模型( θ m o d e l &MediumSpace; a n d &MediumSpace;&ThinSpace; θ e m b \theta^{model} \:and\:\,\theta^{emb} θmodelandθemb) 以及判别器( θ D \theta^D θD) 如下:

min ⁡ θ m o d e l , θ e m b max ⁡ θ D L T ( S ; θ m o d e l , θ e m b ) − λ L D ( V ; θ D , θ e m b ) \displaystyle\min_{\theta^{model},\theta^{emb}}\displaystyle\max_{\theta^D}L_T(S;\theta^{model},\theta^{emb})-\lambda L_{D}(V;\theta^D,\theta^{emb}) θmodel,θembminθDmaxLT(S;θmodel,θemb)λLD(V;θD,θemb)

其中, λ \lambda λ是用于权衡两项损失的系数(where λ is a coefficient to trade off the two loss terms)。

公式4 (Formula 4)

我们可以看到,当模型参数 θ m o d e l \theta^{model} θmodel和嵌入矩阵 θ e m b \theta^{emb} θemb 都固定的情况下,对判别器 θ D \theta^D θD的优化变成了:

max ⁡ θ D − λ L D ( V ; θ D , θ e m b ) \displaystyle\max_{\theta^D}-\lambda L_D(V;\theta^D,\theta^{emb}) θDmaxλLD(V;θD,θemb)

此时需要优化对高频/低频词的分类误差(classification error)。

公式5 (Formula 5)

当判别器 θ D \theta^D θD固定时,对模型参数 θ m o d e l \theta^{model} θmodel和嵌入矩阵 θ e m b \theta^{emb} θemb 的优化变为了:

min ⁡ θ m o d e l , θ e m b L T ( S ; θ m o d e l , θ e m b ) − λ L D ( V ; θ D , θ e m b ) \displaystyle\min_{\theta^{model},\theta^{emb}}L_T(S;\theta^{model},\theta^{emb})-\lambda L_{D}(V;\theta^D,\theta^{emb}) θmodel,θembminLT(S;θmodel,θemb)λLD(V;θD,θemb)
也就是,为了优化任务表现并且愚弄判别器,我们通过随机梯度下降或它的变体来迭代训练 θ m o d e l , θ e m b \theta^{model},\theta^{emb} θmodel,θemb以及 θ D \theta^{D} θD 。整体训练过程展示在算法1中。
Alt

【算法解读】

输入:数据集 S S S ,词汇表 V V V为高频词 V p o p V_{pop} Vpop和低频词 V r a r e V_{rare} Vrare的并集,模型的所有参数 θ m o d e l \theta^{model} θmodel,词嵌入矩阵 θ e m b \theta^{emb} θemb以及判别器的参数 θ D \theta^{D} θD

循环{

​ 在数据集 S S S中进行一个小批量取样得到 S ^ \hat{S} S^

​ 在词汇表 V V V中进行一个小批量取样得到 V ^ \hat{V} V^,其中 V ^ = V p o p ^ ∩ V r a r e ^ \hat{V}=\hat{V_{pop}}\cap\hat{V_{rare}} V^=Vpop^Vrare^

​ 根据公式(5)和数据集 S ^ \hat{S} S^ ,通过梯度下降更新 θ m o d e l , θ e m b \theta^{model},\theta^{emb} θmodel,θemb

​ 根据公式(4)和词汇表 V ^ \hat{V} V^,通过梯度上升更新 θ D \theta^{D} θD

}直至模型收敛

输出: 模型的所有参数 θ m o d e l \theta^{model} θmodel,词嵌入矩阵 θ e m b \theta^{emb} θemb以及判别器的参数 θ D \theta^{D} θD

【拓展】Stochastic vs Mini-batch training

In the simplest term, Stochastic training is performing training on one randomly selected example at a time, while mini-batch training is training on a part of the overall examples.

5. 实验(Experiment)

我们在很多任务上测试我们的方法,包括单词相似度,语言建模,机器翻译和文本分类。对于每项任务,我们选择当前最先进的架构以及最先进的训练方法作为我们的基线。

为了公平比较,对于每一个任务,我们的方法与基线共享相同的模型体系结构。唯一的区别是我们使用原始特定任务的损失函数以及如公式(3)所示一个附加的对抗性损失。数据集描述和超参数配置在本文中将会给出。

5.1 设定(Settings)

我们对以下任务进行实验。

词相似度(Word Similarity) 通过计算单词相似度来衡量训练得到的词嵌入的性能:它根据斯皮尔曼等级相关(Spearman’s rank correlation) 来评估对于一个给定的单词,它在词嵌入空间中最相邻的词是否与实际情况一致。我们用Skip-gram模型作为我们的基准模型,并用Enwik9语料库来训练词嵌入。我们在RG65, WS, 和RW这三个数据集上测试基准模型和我们的模型方法。其中RW数据集是用于评估低频词的数据集。按照惯例(Skip-gram,GloVe等),我们在计算词之间的相似性时使用余弦距离(cosine distance)。

语言建模(Language Modeling) 是自然语言处理的基本任务。其目标是在有先前词(previous words)的条件下预测下一个词,并且该任务通过困惑度(perplexity)来衡量。我们在两个被广泛使用的数据集PTB(Penn Treebank)和WT2(WikiText-2)上进行了实验。我们选择两个最近发表的研究工作作为我们的基线:AWD-LSTM模型和AWD-LSTM-MoS模型。

机器翻译(Machine Translation) 是深度学习和自然语言处理中的热门任务。我们选择两个数据集:WMT14英语 - 德语和IWSLT14德语 - 英语数据集,根据BLEU得分(Bilingual Evaluation Understudy,双语互译质量辅助工具)进行评估。我们用Transformer作为我们的基准测试模型。Transformer是2017年A.Vaswani等人在NIPS上发表的一篇文章"Attention Is All You Need"中的架构。其在编码和解码步骤中都用到了自注意网络(Self-Attetion Network),该模型在很多机器翻译任务中都实现了最佳性能。例如WMT14英语 - 德语和IWSLT14德语 - 英语数据集。

文本分类(Text Classification) 是传统的机器学习任务,并通过准确性进行评估。根据2015年Siwei Lai等人在AAAI上发表的“Recurrent Convolutional Neural Networks for Text Classification”,我们实现了一个基于卷机神经网络的循环模型(Recurrent CNN-based mode),并将其在AG‘s 新闻语料库(AGs),IMDB电影评论数据集(IMDB)以及20新闻组(20 NG)数据集。RCNN同时包含循环层和卷积层用于捕获文本中的关键成分,该模型被广泛用于文本分类任务中。
在所有任务中,我们只是将词汇中频率排名前20%的单词设置为高频词,并将其余单词表示为低频词,这与我们的实验研究(Section3 empirical study)相同。对除了skip-gram模型之外的所有任务进行训练,我们使用完全批量梯度下降来更新判别器。对于skip-gram模型的训练,由于词汇量太大,因此使用批量大小为3000的小批量随机梯度下降来更新鉴别器。对于语言建模和机器翻译任务,我们使用逻辑回归作为判别器。对于其他任务,我们发现使用伴随有一个隐藏层的浅层神经网络更有效,我们将隐藏层中的节点数设置为嵌入大小的1.5倍。在所有任务中,我们将超参数λ设置为0.1。

5.2 结果(Result)

在本小节中,我们提供了所有任务的实验结果。为简单起见,我们在表中使用“with FRAGE”作为本文提出的方法。

词相似度(Word Similarity) 表1中列出了三个单词相似性任务的结果。从表中可以看出,我们的方法在所有数据集上始终优于基线。特别是,我们在低频词(Rare Words)数据集RW上的表现优于基线约5.4点。这个结果表明我们的方法改进了单词的表示,特别是罕见的单词。

Alt

表1 在上个词相似度任务数据集上的结果

语言建模(Language Modeling) 在PTB和WT2数据集上进行语言建模的结果如表2所示。我们用基线模型中已经用过的几个检查点(checkpoints)来测试我们的模型和基线:没有微调without finetune,有微调with finetune,有后处理with post-process(连续缓存指针continuous cache pointer和动态评估dynamic evaluation)。在所有这些设置中,我们的方法优于两个基线。在PTB数据集上,我们的方法在不同检查点的测试集中将AWD-LSTM和AWD-LSTM-MoS基线提高了0.8 / 1.2 / 1.0和0.76 / 1.13 / 1.15点。在包含更多稀有词的WT2数据集上,我们的方法实现了更大的提升。我们分别在测试困惑度方面将AWD-LSTM和AWD-LSTM-MoS的结果改善了2.3 / 2.4 / 2.7和1.15 / 1.72 / 1.54点。

Alt

表2 在Penn Treebank和WikiText2上验证测试困惑度。困惑度越小,结果越好。“Paras”表示模型参数的数量。

机器翻译(Machine Translation) 在WMT14英语 - 德语和IWSLT14德语 - 英语任务的神经机器翻译结果如表3所示。我们在WMT14 英语-德语任务中进行BLEU得分评估,在transformer_basetransformer_big 设置方面分别超出基线1.06/0.71点。从对抗训练中学到的模型也优于IWSLT14德语 - 英语任务中的原始模型0.85点。这些结果表明,改进的词嵌入可以在更复杂的任务和更大的数据集中获得更好的结果。

Alt

表3 在WMT2014英语-德语和IWSLT德语-英语任务上进行BLEU评分

**文本分类(Text Classification) ** 结果列于表4.我们的方法在三个不同的数据集上优于基线方法1.26%/ 0.66%/ 0.44%。

Alt

表4 在AG‘s 新闻语料库(AGs),IMDB电影评论数据集(IMDB)以及20新闻组(20 NG)数据集上进行文本分类的准确度

总而言之,我们的实验在四种任务一共10个数据集上验证了我们方法的有效性。我们在表5和图3中提供了使用或者不使用我们方法的案例研究和定性分析。通过对这些案例进行比较,我们发现,用我们的方法,词相似度得到了很大提升,并且高频/低频词更好地混合在了一起。

Alt

图3 该图展现了,在不同的任务中,在我们的模型中对高频/低频词的嵌入是相互混合在一起的,效果更好

Alt
表5 对原始模型和我们的方法进行案例研究。低频词已经用"*"标注。对于每一个词,我们将它模型预测的邻居列出。此外,我们还基于余弦相似展现出了它们的语义邻居的排名位置。我们可以看到,对于原始模型,语义邻居的排名位置非常低。

【表格解读】

该表上半部分标注了"Orig.“为在原始模型(Original Models)上词嵌入表征能力的展现。对词"citizens(公民,pl.)”,模型预测的邻居是"clinicians ∗ ^* (临床医生,pl.)",“astronomers ∗ ^* (天文学家,pl.)”,“westliche(=Western)”,“adults(成人,pl.)”.而低频词"citizenship ∗ ^* " ,模型预测的邻居是"bliss ∗ ^* ", “pakistanis ∗ ^* ”, “dismiss ∗ ^* ”, "reinforces ∗ ^* ", 低频词的邻居几乎还是低频词,而且大多数都没有语义相关性。并且从排名上也可以看出,明明意思相似的词,且相互之间作为其某种形式上的变体,结果排名相隔很远;

而在本文提出的模型FRAGE中,可以看到模型预测的邻居一方面与给定单词具有语义上的相似性,另一方面低频词的邻居中出现了很多高频词,从这一点可以看出低频词和高频词在嵌入空间中不再分布在不同子空间区域。该方法引入discriminator判别器消去词的频率信息之后打破了高频/低频词在嵌入空间中相互隔离的壁垒,因此训练效果很好。

参考(Reference)

1.原文

2.Github项目

3.Technology Agnostic
What is agnostic

4.负对数似然

5.Stochastic vs Mini-batch training

6.BLEU

7.RCNN

这篇关于深度解读FRAGE: Frequency-Agnostic Word Representation(2018-NIPS)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/158385

相关文章

使用Python实现在Word中添加或删除超链接

《使用Python实现在Word中添加或删除超链接》在Word文档中,超链接是一种将文本或图像连接到其他文档、网页或同一文档中不同部分的功能,本文将为大家介绍一下Python如何实现在Word中添加或... 在Word文档中,超链接是一种将文本或图像连接到其他文档、网页或同一文档中不同部分的功能。通过添加超

MySQL中时区参数time_zone解读

《MySQL中时区参数time_zone解读》MySQL时区参数time_zone用于控制系统函数和字段的DEFAULTCURRENT_TIMESTAMP属性,修改时区可能会影响timestamp类型... 目录前言1.时区参数影响2.如何设置3.字段类型选择总结前言mysql 时区参数 time_zon

python实现pdf转word和excel的示例代码

《python实现pdf转word和excel的示例代码》本文主要介绍了python实现pdf转word和excel的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价... 目录一、引言二、python编程1,PDF转Word2,PDF转Excel三、前端页面效果展示总结一

五大特性引领创新! 深度操作系统 deepin 25 Preview预览版发布

《五大特性引领创新!深度操作系统deepin25Preview预览版发布》今日,深度操作系统正式推出deepin25Preview版本,该版本集成了五大核心特性:磐石系统、全新DDE、Tr... 深度操作系统今日发布了 deepin 25 Preview,新版本囊括五大特性:磐石系统、全新 DDE、Tree

MySQL中的锁和MVCC机制解读

《MySQL中的锁和MVCC机制解读》MySQL事务、锁和MVCC机制是确保数据库操作原子性、一致性和隔离性的关键,事务必须遵循ACID原则,锁的类型包括表级锁、行级锁和意向锁,MVCC通过非锁定读和... 目录mysql的锁和MVCC机制事务的概念与ACID特性锁的类型及其工作机制锁的粒度与性能影响多版本

基于Java实现模板填充Word

《基于Java实现模板填充Word》这篇文章主要为大家详细介绍了如何用Java实现按产品经理提供的Word模板填充数据,并以word或pdf形式导出,有需要的小伙伴可以参考一下... Java实现按模板填充wor编程d本文讲解的需求是:我们需要把数据库中的某些数据按照 产品经理提供的 word模板,把数据

Redis过期键删除策略解读

《Redis过期键删除策略解读》Redis通过惰性删除策略和定期删除策略来管理过期键,惰性删除策略在键被访问时检查是否过期并删除,节省CPU开销但可能导致过期键滞留,定期删除策略定期扫描并删除过期键,... 目录1.Redis使用两种不同的策略来删除过期键,分别是惰性删除策略和定期删除策略1.1惰性删除策略

Redis与缓存解读

《Redis与缓存解读》文章介绍了Redis作为缓存层的优势和缺点,并分析了六种缓存更新策略,包括超时剔除、先删缓存再更新数据库、旁路缓存、先更新数据库再删缓存、先更新数据库再更新缓存、读写穿透和异步... 目录缓存缓存优缺点缓存更新策略超时剔除先删缓存再更新数据库旁路缓存(先更新数据库,再删缓存)先更新数

Node.js 中 http 模块的深度剖析与实战应用小结

《Node.js中http模块的深度剖析与实战应用小结》本文详细介绍了Node.js中的http模块,从创建HTTP服务器、处理请求与响应,到获取请求参数,每个环节都通过代码示例进行解析,旨在帮... 目录Node.js 中 http 模块的深度剖析与实战应用一、引言二、创建 HTTP 服务器:基石搭建(一

C#反射编程之GetConstructor()方法解读

《C#反射编程之GetConstructor()方法解读》C#中Type类的GetConstructor()方法用于获取指定类型的构造函数,该方法有多个重载版本,可以根据不同的参数获取不同特性的构造函... 目录C# GetConstructor()方法有4个重载以GetConstructor(Type[]