在即将过去的 2018 年中,自然语言处理有很多令人激动的想法与工具。从概念观点到实战训练,它们为 NLP 注入了新鲜的活力。
前一段时间,Sebastian Ruder 介绍了他心中 10 个最有影响力的想法,并且每一个都提供了具体论文与核心思想。正如 Ruder 所说,他的清单必然是主观的,主要涵盖了迁移学习和泛化相关的想法。其中有的想法在过去一年非常受关注,大家围绕这些完美的观点展开了很多研究工作与实践。而有的想法并不是当前趋势,不过它们有可能在未来变得流行。因此,机器之心在 Ruder 介绍的基础上,重点关注今年的前沿趋势,并推荐一些真正好用的 NLP 新工具。
在本文中,我们会重点关注 2018 年里的神经机器翻译与预训练模型,这两个概念真的非常 Excited!而后对于实战装备,数百种中文预训练词嵌入向量、BERT 预训练模型和建模框架 PyText 等工具真的令人忍不住想做一个新颖的 NLP 应用。
1. 神经机器翻译
在 2018 年,神经机器翻译似乎有了很大的改变,以前用 RNN 加上注意力机制打造的 Seq2Seq 模型好像都替换为了 Tramsformer。大家都在使用更大型的 Transformer,更高效的 Transformer 组件。例如阿里会根据最近的一些新研究对标准 Transformer 模型进行一些修正。这些修正首先体现在将 Transformer 中的 Multi-Head Attention 替换为多个自注意力分支,其次他们采用了一种编码相对位置的表征以扩展自注意力机制,并令模型能更好地理解序列元素间的相对距离。
有道翻译也采用了 Transformer,他们同样会采取一些修正,包括对单语数据的利用,模型结构的调整,训练方法的改进等。例如在单语数据的利用上,他们尝试了回译和对偶学习等策略,在模型结构上采用了相对位置表征等。所以总的而言,尽管 Transformer 在解码速度和位置编码等方面有一些缺点,但它仍然是当前效果最好的神经机器翻译基本架构。
在 Ruder 的介绍中,它非常关注两种无监督机器翻译模型,它们都被接受为 ICLR 2018 论文。如果无监督机器翻译模型是能行得通的,那么这个想法本身就很惊人,尽管无监督翻译的效果很可能远比有监督差。在 EMNLP 2018 中,有一篇论文在无监督翻译上更进一步提出了很多改进,并获得极大的提升。Ruder 笔记中提到了以下这篇论文:
论文:Phrase-Based & Neural Unsupervised Machine Translation
这篇论文很好地提炼出了无监督 MT 的三个关键点:优良的参数初始化、语言建模和通过回译建模反向任务。这三种方法在其它无监督场景中也有使用,例如建模反向任务会迫使模型达到循环一致性,这种一致性已经应用到了很多任务,可能读者最熟悉的就是 CycleGAN。该论文还对两种语料较少的语言做了大量的实验与评估,即英语-乌尔都语和英语-罗马尼亚语。
无监督 MT 的三个主要原则:A)两种单语数据集、B)参数初始化、C)语言建模、D)回译。
这篇论文获得了 EMNLP 2018 的最佳长论文奖,它在遵循上面三个主要原则的情况下简化了结构和损失函数。得到的模型优于以前的方法,并且更易于训练和调整。
2. 预训练模型
2018 年,使用预训练的语言模型可能是 NLP 领域最显著的趋势,它可以利用从无监督文本中学习到的「语言知识」,并迁移到各种 NLP 任务中。这些预训练模型有很多,包括 ELMo、ULMFiT、OpenAI Transformer 和 BERT,其中又以 BERT 最具代表性,它在 11 项 NLP 任务中都获得当时最佳的性能。不过目前有 9 项任务都被微软的新模型超过。
机器之心曾解读过 BERT 的的核心过程,它会先从数据集抽取两个句子,其中第二句是第一句的下一句的概率是 50%,这样就能学习句子之间的关系。其次随机去除两个句子中的一些词,并要求模型预测这些词是什么,这样就能学习句子内部的关系。最后再将经过处理的句子传入大型 Transformer 模型,并通过两个损失函数同时学习上面两个目标就能完成训练。
如上所示为不同预训练模型的架构,BERT 可以视为结合了 OpenAI GPT 和 ELMo 优势的新模型。其中 ELMo 使用两条独立训练的 LSTM 获取双向信息,而 OpenAI GPT 使用新型的 Transformer 和经典语言模型只能获取单向信息。BERT 的主要目标是在 OpenAI GPT 的基础上对预训练任务做一些改进,以同时利用 Transformer 深度模型与双向信息的优势。
这种「双向」的来源在于 BERT 与传统语言模型不同,它不是在给定所有前面词的条件下预测最可能的当前词,而是随机遮掩一些词,并利用所有没被遮掩的词进行预测。
更详细的论文解读可以查看:谷歌终于开源 BERT 代码:3 亿参数量,机器之心全面解读
此外,值得注意的是,最近微软发布了一种新的综合性模型,它在 GLUE 的 11 项基准 NLP 任务中的 9 项超过了 BERT,且评分也超过了 BERT。除了准确率外,微软的新模型只有 1.1 亿的参数量,远比 BERT-Large 模型的 3.35 亿参数量少,和 BERT-Base 的参数量一样多。
在「Microsoft D365 AI & MSR AI」模型的描述页中,新模型采用的是一种多任务联合学习。因此所有任务都共享相同的结构,并通过多任务训练方法联合学习。目前新模型的信息还非常少,如果经过多任务预训练,它也能像 BERT 那样用于更广泛的 NLP 任务,那么这样的高效模型无疑会有很大的优势。
Sebastian Ruder 非常欣赏 ELMo 的创新性想法,它同样也是今年的论文(NAACL 2018):
论文:Deep contextualized word representations (NAACL-HLT 2018)
这篇论文提出了广受好评的 ELMo,除了令人印象深刻的实验结果外,最吸引人的就是论文的分析部分,它剔除了各种因素的影响,并对表征所捕获的信息进行了分析。在下图左中语义消歧(WSD)执行得很好,它们都表明语言模型提供的语义消歧和词性标注(POS)表现都接近当前最优水平。
第一层和第二层双向语言模型的语义消歧(左)和词性标注(右)与基线模型对比的结果。
3. 常识推理数据集
将常识融入模型是 NLP 最重要的研究方向之一。然而,创建好的数据集并非易事,即使是流行的数据集也存在很大的偏好问题。今年已经出现了一些试图教机器学习常识的数据集,如华盛顿大学的 Event2Mind 和 SWAG。但 SWAG 很快就被 BERT 打败了。有代表性的研究成果包括:
论文:From Recognition to Cognition: Visual Commonsense Reasoning
这是首个包含每个答案的基本原理(解释)的可视化 QA 数据集。而且,回答问题需要复杂的推理。创作者竭尽全力解决可能出现的偏好,确保每个答案作为正确答案的先验概率为 25%(每个答案在整个数据集中出现 4 次,其中 3 次作为错误答案,1 次作为正确答案);这需要利用可以计算相关性和相似性的模型来解决约束优化问题。
给定一幅图像、一系列地点和一个问题,模型必须回答该问题,并提供合理的推理解释答案为什么是正确的(Zellers et al., 2018)
4. 元学习
元学习是目前机器学习领域一个令人振奋的研究趋势,它解决的是学习如何学习的问题(参考《入门 | 从零开始,了解元学习》)。元学习在少样本学习、强化学习和机器人学方面有很多应用,其中最突出的应用是与模型无关的元学习(model-agnostic meta-learning,MAML),但在 NLP 中的成功应用却非常少。元学习在训练样本有限时非常有用。有代表性的研究成果包括:
论文 1:Meta-Learning for Low-Resource Neural Machine Translation
作者利用 MAML 来学习一个好的用于翻译的初始化,将每个语言对看成一个独立的元任务。资源较少的语言或许是元学习在 NLP 领域最有应用价值的场景。将多语言迁移学习(如多语言 BERT)、无监督学习和元学习相结合是一个有前景的研究方向。
迁移学习、多原因迁移学习和元学习之间的差异。实线:初始化的学习。虚线:微调路径。
论文 2:Meta-Learning a Dynamical Language Model
作者提出,用于优化神经网络模型的元学习器的行为和循环神经网络类似,它会提取一系列模型训练过程中的参数和梯度作为输入序列,并根据这个输入序列计算得到一个输出序列(更新后的模型参数序列)。他们在论文中详细描述了该相似性,并研究了将元学习器用于神经网络语言模型中,以实现中期记忆:经过学习,元学习器能够在标准 RNN(如 LSTM)的权重中,编码中期记忆(除了短期记忆在 LSTM 隐藏状态中的传统编码方式以外)。
他们的元学习语言模型由 3 层记忆层级组成,自下而上分别是:标准 LSTM、用于更新 LSTM 权重以存储中期记忆的元学习器,以及一个长期静态记忆。他们发现,元学习语言模型可以通过训练来编码最近输入的记忆,就像一篇维基百科文章的开始部分对预测文章的结尾部分非常有帮助一样。
5. 鲁棒无监督方法
今年,我们观察到,跨语言嵌入方法在语言相似性低时会失效。这是迁移学习中的常见现象,源语言和目标语言设置(例如,域适应中的域、持续学习和多任务学习中的任务)之间存在差异,导致模型退化或失效。因此,使模型对这些变化更加鲁棒非常重要。有代表性的研究成果包括:
论文:A robust self-learning method for fully unsupervised cross-lingual mappings of word embeddings
这篇论文根据其理解构建了一个更好的初始化,而没有使用元学习作为初始化。特别地,他们将两种语言中拥有相似词分布的单词配对。这是从分析中利用领域知识和 insight 以使模型更加鲁棒的绝佳范例。
三个单词的相似性分布:与不相关的单词(「two」和「cane」(狗))相比,等效翻译(「two」和「due」)有更加相似的词分布。(Artexte et al. 2018 http://www.aclweb.org/anthology/P18-1073)
6. 理解表征
今年,人们在更好地理解表征方面做了很多工作。特别地,《Fine-grained Analysis of Sentence Embeddings Using Auxiliary Prediction Tasks》这篇论文提出了「诊断分类器」(度量学习到的表征是否能预测特定属性的任务),之后在其它研究中变得常见,如《What you can cram into a single vector: Probing sentence embeddings for linguistic properties》。有代表性的研究成果包括:
论文:Dissecting Contextual Word Embeddings: Architecture and Representation
这篇论文在更好理解预训练语言模型表征方面做出了很大贡献。他们广泛地研究了精心设计的无监督和有监督任务上学习到的单词和跨度表征。结果发现:预训练表征会在较低层学习到与低级形态和句法任务相关的任务,在较高层学习到更大范围的语义。对我而言,该研究表明了预训练语言模型确实能捕捉文本的相似属性,正如计算机视觉模型在 ImageNet 上预训练后,能捕捉图像之间的相似属性。
BiLSTM 和 Transformer 的预训练表征的每一层的性能,从左到右依次是:POS 标记、选区解析和无监督共指解析 (Peters et al. 2018 http://aclweb.org/anthology/D18-1179)。
7. 辅助任务
在很多设置中,我们都看到人们越来越多使用带有仔细选择的辅助任务的多任务学习方法。其中最重要的一个案例是 BERT。其使用了下一句预测来实现优越性能(近期被用在 Skip-thoughts 以及 Quick-thoughts 等)。有代表性的研究成果包括:
论文 1:Syntactic Scaffolds for Semantic Structures
这篇论文通过为每个跨度预测对应的句法成分类型,以此提出了一种预训练跨度表征的辅助任务。尽管在概念上很简单,该辅助任务可以在跨度级预测任务中取得极大提升,例如语义角色标注和共指解析等。该论文表明,通过目标任务在所需级别学习的专用表征有极大的用处。
论文 2:pair2vec: Compositional Word-Pair Embeddings for Cross-Sentence Inference
依据相似的思路,这篇论文通过最大化词对以及语境的逐点互信息预训练词对表征。相比更加通用的表征(例如语言建模),这鼓励模型学习更有意义的词对表征。这些预训练表征在诸如 SQuAD、和 MultiNLI 等需要跨句推理的任务中很有效。我们可以期待看到更多可捕捉适用于特定下游任务的预训练模型,并且和更加通用的任务互补(例如语言建模)。
OntoNotes 的句法、命题语料库和共指标注。命题语料库 SRL 参数和共指在句法成分之上标注。几乎每个参数都与句法成分有关 (Swayamdipta et al., 2018 http://aclweb.org/anthology/D18-1412)
8. 半监督学习结合迁移学习
最近,迁移学习取得最新进展,我们不应该忘记使用目标任务特定数据更明确的方式。其实,预训练表征与多种形式的半监督学习是互补的。已经有研究者探索半监督学习的一个特定类别——自标注方法。有代表性的研究包括:
论文:Semi-Supervised Sequence Modeling with Cross-View Training
这篇论文表明,一个概念上非常简单的想法——即确保对不同输入视图的预测与主模型的预测一致——可以在一系列不同的任务中获得收益。这一想法与 word dropout 类似,但允许利用未标注数据来加强模型的鲁棒性。与 mean teacher 等其他 self-ensembling 模型相比,它是专门为特定 NLP 任务设计的。
辅助预测模块看到的输入:辅助 1:They traveled to __________________. 辅助 2:They traveled to Washington _______. 辅助 3: _____________ Washington by plane. 辅助 4: ________________________ by plane
9. 利用大型文本的问答和推理
在一系列新的问答(QA)数据集的帮助下,问答系统取得了很多进展。除对话问答和多步骤推理之外,问答系统最具挑战性的一个方面是合成叙述和含有大量信息的本文。有代表性的研究包括:
论文:The NarrativeQA Reading Comprehension Challenge
本文作者根据对整个电影剧本和书籍的问答提出了一个颇具挑战性的 QA 数据集。虽然目前的方法仍无法完成这项任务,但模型可以选择使用摘要(而不是整本书)作为上下文,选择答案(而不是生成答案),以及使用 IR 模型的输出。这些变体提高了任务的可行性,使得模型可以逐渐扩展到完整的语境。
QA 数据集对比。
10. 归纳偏向
CNN 中的卷积、正则化、dropout 以及其他机制等归纳偏向都是神经网络模型做为正则化项的核心部分,也使得模型采样更为高效。然而,提出一种普遍可用的归纳偏向并把它融入到模型中非常具有挑战性。有代表性的研究成果包括:
论文 1:sequence classification with human attention (CoNLL 2018)
该论文提出使用来自人类眼球追踪语料库的人类注意力来正则化 RNN 中的注意。如今许多 Transformers 这样的现有模型都在使用 attention,找到更高效训练的合适方式是很重要的方向。也很高兴看到人类语言学习能帮助我们改进计算模型。
论文 2:Linguistically-Informed Self-Attention for Semantic Role Labeling (EMNLP 2018)
该论文有很多喜人的地方:在句法与语义任务上同时训练一个 Transformer;训练时加入高质量解析的能力以及领域外评估。通过训练一个注意力 head 来关注每个 token 的 syntactic parents,这篇论文也正则化了 Transformer 的多 head 注意力,使其对句法更为敏感。我们未来可能会看到更多 Transformer 注意 head 示例,做为专注输入特定方面的辅助词预测器。
过去十年的 PropBank 语义角色标记。在领域外数据上,Linguistically-Informed Self-Attention (LISA) 方法与其他方法的对比。
不论是采用 Mask 的语言模型还是通过回译的无监督机器翻译,这 10 个想法都非常优美。但是在实际应用中,我们更希望直接使用已有的工具构建高效应用,只有这样,这些想法才能转化为真正有意思的东西。
11. 上百种预训练中文词向量
做自然语言处理,词嵌入基本是绕不开的步骤,各种任务都需要归结到词层面才能继续计算。因此对于国内自然语言处理的研究者而言,中文词向量语料库是需求很大的资源。为此,北京师范大学等机构的研究者开源了「中文词向量语料库」,该库包含经过数十种用各领域语料(百度百科、维基百科、人民日报 1947-2017、知乎、微博、文学、金融、古汉语等)训练的词向量,涵盖各领域,且包含多种训练设置。
中文词向量项目地址:https://github.com/Embedding/Chinese-Word-Vectors
该项目提供使用不同表征(稀疏和密集)、上下文特征(单词、n-gram、字符等)以及语料库训练的中文词向量(嵌入)。我们可以轻松获得具有不同属性的预训练向量,并将它们用于各类下游任务。
12. BERT 开源实现
尽管如前所述 BERT 的效果惊人,但预训练所需要的计算力同样惊人,一般的开发者基本就不要想着能复现了。BERT 的作者在 Reddit 上也表示预训练的计算量非常大,Jacob 说:「OpenAI 的 Transformer 有 12 层、768 个隐藏单元,他们使用 8 块 P100 在 8 亿词量的数据集上训练 40 个 Epoch 需要一个月,而 BERT-Large 模型有 24 层、2014 个隐藏单元,它们在有 33 亿词量的数据集上需要训练 40 个 Epoch,因此在 8 块 P100 上可能需要 1 年?16 Cloud TPU 已经是非常大的计算力了。」
但是,谷歌团队开源了 BERT 的预训练模型,我们可以将它们用于不同的 NLP 任务。这节省了我们大量计算力,同时还能提升已有模型的效果,因此做 NLP 任务前,你可以先用预训练的 BERT 试试水?
BERT 实现地址:https://github.com/google-research/bert
其实目前已经有很多开发者将 BERT 预训练模型应用到它们自己的项目中,包括抽取句向量、句子相似性判断或情感分析等,下面两篇文章简单介绍了如何将 BERT 预训练模型迁移到你的项目中:
13. Facebook 开源 NLP 建模框架 PyText,从论文到产品部署只需数天
为了降低人们创建、部署自然语言处理系统的难度,Facebook 开源了一个建模框架——PyText,它模糊了实验与大规模部署之间的界限。PyTex 是 Facebook 正在使用的主要自然语言处理(NLP)建模框架,每天为 Facebook 及其应用程序系列的用户提供超过 10 亿次 AI 任务处理。这一框架基于 PyTorch,可以 1)简化工作流程,加快实验进度;2)提供一大批预构建的模型架构和用于文本处理和词汇管理的工具,以促进大规模部署;3)提供利用 PyTorch 生态系统的能力,包括由 NLP 社区中的研究人员、工程师预构建的模型和工具。利用该框架,Facebook 在几天内就实现了 NLP 模型从理念到完整实施的整个过程,还部署了依赖多任务学习的复杂模型。
Yann LeCun 对此介绍道,「PyText 是一个工业级的开源 NLP 工具包,可用于在 PyTorch 中开发 NLP 模型,并通过 ONNX 部署。其预训练模型包括文本分类、序列标注等。」
项目地址:https://github.com/facebookresearch/pytext