百面深度学习 | 第九期:语言的特征表示

“百面深度学习”系列连载 第九期

语言的特征表示

引言

自然语言处理在人工智能领域有着重要的地位,在 1950 年提出的图灵测试中,自然语言处理能力就是让机器能表现出与人类无法区分的智能的重要组成部分。

自然语言处理问题不仅是学术界研究的热点,在工业界也有许多成果。如谷歌文本搜索引擎,苹果的 Siri 和微软小冰等等产品都受益于自然语言处理问题的研究成果。

自然语言处理可以分为核心任务和应用两部分,核心任务代表在自然语言各个应用方向上需要解决的共同问题,包括语言模型,语言形态学,语法分析以及语义分析等等,而应用部分则更关注与解决自然语言处理的具体任务,如机器翻译,信息检索,问答系统,对话系统等等。深度学习领域近年来的高速发展给自然语言处理问题的解决带来了很多启发,但是深度学习算法需要大量的 “像石油一样贵重” 的标记训练数据,为算法的应用带来了很多挑战。近期一些研究提出使用迁移学习的方法来缓解缺少带有标记的训练数据的问题,2018 年提出的 BERT(Bidirectional Encoder Representations from Transformers)模型就是这种思想在解决自然语言处理的核心任务中的一个有效应用。BERT 的出现刷新了当时自然语言处理各个领域任务上的最优成绩,也引起了广泛的讨论。

问题

语言模型的任务形式是什么?语言模型如何帮助提升其他自然语言处理任务的效果?

分析与解答

百面深度学习 | 第九期:语言的特征表示

百面深度学习 | 第九期:语言的特征表示

语言模型是自然语言处理中的核心任务,它一方面可以评估语言生成概率,直接用于生成符合人类认知的语言;另一方面由于语言模型的训练不依赖任何额外的监督信息,因此适合用来学习语句的通用语义表示。目前非常普及的做法就是利用语言模型在大规模的开放语料库上预训练神经网络,然后在此基础上针对特定任务来对模型进行微调。近两年里具有代表性的模型 ELMo [6] , GPT [7] 和 BERT [8] 都利用了这种思路。图 Fig. 1 更直观地展示各个模型的结构,其中黄色的输入层为词或句的嵌入表示,蓝色的中间层为核心的网络结构,绿色的输出层对应预测的词或分类标签。下面对三个模型分别进行介绍。

百面深度学习 | 第九期:语言的特征表示

Figure 1: 经典的预训练语言模型

百面深度学习 | 第九期:语言的特征表示

GPT 则基于 Transformer 单向编码器结构,将单向语言模型作为预训练阶段的目标函数。预训练学习到的网络结构和参数将作为具体任务模型对应的初始值,然后针对分类,序列标注,句子关系判断等不同任务对网络结构进行改造,同时将语言模型作为辅助任务对模型参数进行微调。GPT 将语言模型作为辅助任务的方式也是一种很好地利用语言模型的思路,不仅可以提升模型的泛化能力,同时也能加快模型的收敛。

BERT 是谷歌于 2018 年底提出的语言特征表示模型,横扫 11 项自然语言处理任务比赛记录,一时间掀起广泛讨论,但在模型架构上其实和前两者是一脉相承的。BERT 相对于之前工作的改进点主要可以归纳为以下两个方面:

第一,实现真正的双向多层语言模型对词级别语义进行深度建模。BERT 作者认为 ELMo 分开学习上文和下文,GPT 则只利用上文信息,二者都没有很好地对句子的上下文信息同时进行建模。但如果直接在语言模型任务中用完整的句子作为输入,由于自注意力机制的特性,对每个词进行预测的时候实际已经泄露了当前词的信息。因此,在 Transformer 双向编码器结构的基础上,BERT 在预训练阶段引入 Masked 语言模型的任务,即每轮训练中选择语料中 15% 的词,随机替换成 [MASK] 标记或其他随机词或保持原样,并对这些词进行预测。

第二,显式地对句子关系建模以更好地表征句级别的语义。语言模型任务以任意词序列作为输入,没有显式地考虑句子之间的关系。为了更好地表征句级别的特征,BERT 模型对输入层的嵌入表示做了两点改进,一是引入了句子向量(如图中 EA 和 EB 所示)同时作为输入,二是引入了 [SEP] 标记表示句子的结尾和 [CLS] 标记表示句子关系,并分别学习对应的向量。然后在预训练阶段通过 [CLS] 标记对应的隐藏层表示来预测句子 B 是否为句子 A 的下一句(如图中 [IsNext] 标签所示),从而完成对模型参数的学习和更新。

在面对具体任务时,BERT 同样保留预训练得到的模型结构,然后通过参数微调来优化不同任务对应的目标,比如在进行句子关系判断等任务时直接利用 [CLS] 标记对应的嵌入表示进行分类。相较 GPT,BERT 在利用预训练的语言模型做下游 NLP 任务时,对模型结构的改动更小,泛化性能更强。

三个模型的基本思想相似,在模型细节上则有一些差别,简单归纳如下:

百面深度学习 | 第九期:语言的特征表示

[1] DEERWESTER S, DUMAIS S T, FURNAS G W, 等. Indexing by latent semantic analysis[J]. Journal of the American society for information science, Wiley Online Library, 1990, 41(6): 391–407.

[2] PENNINGTON J, SOCHER R, MANNING C. Glove: Global vectors for word representation[C]//Proceedings of the 2014 conference on empirical methods in natural language processing (EMNLP). 2014: 1532–1543.

[3] MIKOLOV T, SUTSKEVER I, CHEN K, 等. Distributed representations of words and phrases and their compositionality[C]//Advances in neural information processing systems. 2013: 3111–3119.

[4] JOULIN A, GRAVE E, BOJANOWSKI P, 等. Bag of Tricks for Efficient Text Classification[C]//Proceedings of the 15th Conference of the European Chapter of the Association for Computational Linguistics: Volume 2, Short Papers. Association for Computational Linguistics, 2017: 427–431.

[5] BENGIO Y, DUCHARME R, VINCENT P, 等. A neural probabilistic language model[J]. Journal of machine learning research, 2003, 3(Feb): 1137–1155.

[6] PETERS M E, NEUMANN M, IYYER M, 等. Deep contextualized word representations[J]. arXiv preprint arXiv:1802.05365, 2018.

[7] RADFORD A, NARASIMHAN K, SALIMANS T, 等. Improving language understanding by generative pre-training[J]. URL https://s3-us-west-2. amazonaws. com/openai-assets/research-covers/languageunsupervised/language understanding paper. pdf, 2018.

[8] DEVLIN J, CHANG M-W, LEE K, 等. Bert: Pre-training of deep bidirectional transformers for language understanding[J]. arXiv preprint arXiv:1810.04805, 2018.

下期预告

【物品相似度模型

引言

基于物品相似度的协同过滤算法最早提出于 Amazon 在 2001 年发表于 WWW 的论文 Item-based collaborative filtering recommendation algorithms 中。在其后很长的一段时间内,基于物品相似度的协同过滤推荐算法一直是工业界应用最广泛的算法之一;即使在深度学习广泛应用于推荐系统的今天,基于物品相似度的算法仍然具有计算快速、原理简单、可解释性强等其他算法难以比拟的优势。根据用户反馈数据计算两个物品间相似度的最简单方法是计算两个物品间的皮尔逊相关系数(Pearson Corelation)。从优化的角度来看,这一方法并没有显式地优化任何目标函数,一般不将其视为一种机器学习算法,因而我们也有理由相信,使用基于深度学习的算法计算两个物品的相似度,可以取得比上述方法更准确的结果。

问题

如何使用深度学习的方法设计一个根据用户行为数据计算物品相似度的模型?

我跟丁老师一起review一份代码,我跟丁老师说“Naming matters,你能看明白这些代码吗?”丁老师说他可以看明白。我说,“这些名字和逻辑完全对应不上,你怎么看懂的?”丁老师说,“我建议你还是多学一些数学,数学公式里很多量都是用人名命名的,一点意义都没有,所以我一点也不care他们的名字。”

丁老师二三事

说明:“丁老师二三事”是取材于Hulu日常的虚构创作,如有雷同,您别当真~

关注Hulu公众号

你就是最爱学习的仔~

百面深度学习 | 第九期:语言的特征表示