针对无监督学习NLP任务,梳理非结构化文本背后的方法和经验

针对无监督学习NLP任务,梳理非结构化文本背后的方法和经验_第1张图片

图片出处:Unsplash

原文:Unsupervised NLP : Methods and Intuitions behind working with unstructured texts[1]

作者:Divish Dayal(全栈 ML 工程师)

译者:青苹果

本文将介绍自然语言处理中无监督技术及其应用领域的入门内容,包括词向量背后的直觉如何走向更大范围的使用和进步,并逐渐发展为对语言模型细节的核心讨论、在行业中的活跃应用以及针对不同用例的可能应用。

自然语言处理 (NLP, Natural Language Processing) 和自然语言理解 (NLU, Natural Language Understanding) 两大领域方兴未艾,十分前沿,无监督学习更是在其中占据重要地位。这是因为它同时满足了两个条件 —— 不仅无处不在,而且相当复杂。

在这个行业中,经常会出现这样的情况:遇到一个业务问题,然后展开头脑风暴,设想各种可能的解决方案。

甚至有时候,你会想出创新的数据集和标签来解决你的问题。但通常情况下,标签并不存在,接下来,你要么与 Mturk 打交道 (一个众包数据注释平台),要么只能在没有任何标签的情况下解决问题,即使用无监督技术。

本文会试图把在无监督学习 NLP 任务领域多年的经验和知识分解成简单的 “零部件”,希望你能更多地、更好地了解这个领域,深入探索和研究 —— 甚至可以在解决和处理自然语言处理问题时,产生一种更好、更结构化的直觉思维。

从词向量和语言模型这两个最基本、最普遍的子领域开始,本文在讨论基本概念和基础理论的同时,还将介绍有关最佳实践、实际应用和工业应用以及相关库的优缺点的一点个人经验。

词向量

你或许会问,为何要把词表示成向量?

将单词表示为 50-300 个浮点值的向量数组是 NLP 中最大的飞跃之一,也是最容易理解的一种。在现在普遍流行的词向量出现之前,词汇表中的词是使用传统的独热编码(One-Hot 编码)进行向量化,如下所示。该图中给出了 “I love NLP” 这句话中所包含的 3 个单词的独热向量。目前,这种方法仍广泛应用于 ML 算法中,如,TF-IDF;而且在数字电路中应用的也很普遍。

针对无监督学习NLP任务,梳理非结构化文本背后的方法和经验_第2张图片

图片源自作者:此处的单词 “love” 的独热编码表示为向量 [0,1,0]

过去十年中,诸如 word2vec [1] 和 Glove [2] 等词向量的出现,极大得推动着 NLP 领域的发展。可以说,伴随着深度学习的兴起,词向量在越来越多的文本任务中得到广泛的应用,几乎可以很好地完成所有 “分内” 的任务。

那么,词向量是如何训练的?

word2vec 词向量模型有两种训练模式 —Skip-gram (Continuous Skip-gram Model) 和 CBOW (Continuous Bag-of-Words Model),如下图所示。这两种模型的基本原则大致是相同的 —— 两者都是用于将文本进行向量表示的实现方法,而单词的信息就依赖于所处的上下文语义信息中。

例如,“Man” 和 “Woman” 可以在非常相似的上下文中使用,比如下面两句话间的对比,“Man can do something” 和 “Woman can do something”,除了主语不同,上下文的结构完全一致。在数百万计的句子和标记中,结合这些上下文信息,统计归纳出 “Man” 和 “Woman” 在用法上是相关的,而 “Man” 和 “he/him” 以及 “Woman” 和 “she/her” 也具有相关性。因此,在大型数据集上,基于这些词在不同的句子,不同的语境中使用而形成的关联,词向量开始变得更有意义。

其中,CBOW 模型是用上下文预测中心词,而 Skip-gram 模型则用于预测当前中心词的周围单词。例如,在句子 “climate change is affecting nature adversely.” 中,CBOW 模型将试图根据上下文来预测这个词的影响,也就是句子中围绕中心词的其他单词。下图给出了两种方法的演示。

针对无监督学习NLP任务,梳理非结构化文本背后的方法和经验_第3张图片

为训练单词向量建模变量。图片出处:Efficient Estimation of Word Representations in Vector Space [1]

当你在包含网络文章等内容的大型数据集上训练这样一个超过数十亿标记的模型时,你得到的是词汇表中每个单词的非常有效的表示,而且均以向量的形式进行呈现。这些向量长度可能是 300 维,即每个单词由 300 个实数表示。如下图所示,给出了解释这些向量最著名的例子。

针对无监督学习NLP任务,梳理非结构化文本背后的方法和经验_第4张图片

图像源自作者:二维空间可视化解释词向量的示例。

基于上图,假设下列向量方程成立:

图片

通俗一点解释,也就是说,像上述公式中出现的成对单词,向量投射出相似的关系。

针对无监督学习NLP任务,梳理非结构化文本背后的方法和经验_第5张图片

字词向量体现了各国与首都之间的关系。图片出处:papers.nips.cc/paper/5021-distributed-representations-of-words-and-phrases-and-their-compositionality.pdf

在真实的应用程序中,词向量可以展现其非常有趣的特性。正因为有了词向量,机器就能够以更像人类的方式理解和处理文本。一般来说,对文字和文本的理解也延伸到了其他多样化的媒体形式,诸如演讲、图像和视频之类的,但前提条件是这些形式需要先转换为文本,然后再进行进一步处理。稍后将对此进行更多地介绍。

在 word2vec 中,我们并没有直接利用构词学中的信息:不管是在 Skip-gram 还是 CBOW 模型中,面对形态不同的单词,如,“dog” 和 “dogs”,用不同的向量进行表示,因此,模型并未直接表达这两个向量之间的关系。鉴于此,在 2017 年发表的一篇论文 [3] 中,fastText 提出了名为子词嵌入(sub-word embeddings)的方法来构造向量,显然,词向量的表示质量有了显著的提高。

在语料库中的很多单词,都存在较多公共的字符,即内部形态相似,比如,“book” 和 “books”,如果使用传统的 word2vec,两者间共性的信息会由于转换不同的 id 而丢失,因此,为了克服问题,选择使用字符级的 n-grams 表示一个单词。以 “where” 单词为例,将其分解为子单词或 n-grams 表示,试图将构词信息引入 word2vec 中的 CBOW 模型,此处,n 的取值为 3,则具体的表示形式为:

图片

然后将这些子词向量组合以构建词向量。这种方式有助于更好地学习语言中单词之间的联系。可以想象为,我们用一种更细粒度的方式去探索更深层次的知识。这有助于学习现象,甚至从语言引理的角度上,从词汇内部出发。例如,“cat” 和 “cats” 之间的区别就像 “dog” 和 “dogs” 这样的词对一样。以此类推,“boy” 和 “boyfriend” 与 “girl” 和 “girlfriend” 也有相同的关系。这种方法还有助于为词库外(OOV, out of vocabulary)单词的创建提供更有意义的表示,这些单词是模型在训练集中还未曾见过的。

词向量可有效的用于快速计算,尤其是在计算资源有限的情况下。在各种语料库 (新闻、网络、社交媒体,如 Twitter 和 Reddit 等等) 中找到预训练的词向量很容易。你可能想在最接近应用程序数据集的数据集上训练的词向量。比如,在 twitter 数据集上训练的词向量会与在新闻类文章上训练的词向量有所不同。

词向量可以用来构造单词或句子的向量,以辅助其用于相似度计算或聚类任务。即使是为数据集绘制词云这样的简单任务,也称得上是分析数据集的强大方法。然而,词向量的真正魅力还是得通过语言建模进行诠释。

针对无监督学习NLP任务,梳理非结构化文本背后的方法和经验_第6张图片

图片源自作者:这篇文章生成的词云

语言模型

首先,何为语言模型?

对于无监督的 nlp 任务而言,语言建模堪称机器学习(ML, machine learning)工程师装备库中的主要工具。关于其定义,维基百科给出了如下解释:

统计语言模型就是单词序列上的概率分布。

所以,用更简单的话来说 —— 语言模型用于捕捉和预测句子或文档中单词之间的关系。语言模型从根本上预测了句子中下一个单词的条件概率分布,给出的是:

针对无监督学习NLP任务,梳理非结构化文本背后的方法和经验_第7张图片

用这个方法,句子出现的概率是:

针对无监督学习NLP任务,梳理非结构化文本背后的方法和经验_第8张图片

长话短说,语言模型就是学习数据集中的单词关联,以便用来预测句子中的下一个单词,或句子的有效性 —— 根据训练数据集上学习到的分布,判断句子出现的可能性大小。所以,相比于一些怪诞的问候,如,“Hi, goodnight!”,模型更可能告诉你 “Hi, how are you doing?” 这样的更日常,可能性更大的表达。

针对无监督学习NLP任务,梳理非结构化文本背后的方法和经验_第9张图片

图片源自作者:语言模型在手机键盘应用程序上的应用

如上图所示,这是语言模型最明显的用法之一:在我们打字时,键盘应用程序会提示下一个单词。这也是自动校正的工作原理。让我们通过下图更详细地了解这个过程。

针对无监督学习NLP任务,梳理非结构化文本背后的方法和经验_第10张图片

图片源自作者:语言模型的工作图解

语言模型本质上是基于时间序列的网络,用句子中的单词或上下文转换后的词向量作为输入。最后,可以得到词汇表中所有单词的概率值,以了解在给定上下文的情况下,特定的单词适合成为文本中下一个单词的可能性。实际上,词汇量很大 (约 300k 或者更多),这些输出概率仅对 10 个单词以内有效,至于其余概率值很小的单词 (如 0.00001),可以忽略不计。

从架构上看,语言模型包含两个主要模块 —— 编码器和解码器。

顾名思义,编码器用于使用时间序列神经网络模型对输入 (词向量) 进行编码。

时间序列的概念,可以通俗理解为,模型考虑了句子中单词的位置顺序,即 word_2 是在 word_1 之后的。而解码器则刚好与编码器相反,编码器的输出作为解码器的输入,然后输出端每次 “吐” 出一个单词 —— 循环到最后的时候,组成为一个句子的输出。这是一些深层的架构资料,如果你要自己编写代码的话,可能会有帮助。除此之外,多了解一些术语也是增长知识的一个很好的方法。

针对无监督学习NLP任务,梳理非结构化文本背后的方法和经验_第11张图片

图片源自作者:语言模型的典型结构

现在,我们来讨论一个基本 “开箱即用” 的语言模型。在无监督的环境中,语言模型的应用方式非常广泛,如下所示,我们看一下几个最受欢迎的:

l 将句子向量化。这是一种比平均单词向量更好的向量化句子的方法。

l 监督环境(存在标注)下的句子 / 文件分类任务。从操作上来说 —— 使用预先训练好的无监督语言模型来进一步训练 (微调) 一个有监督的分类任务。在没有任何标签的情况下,你可以执行聚类来分割数据以便于进行分析。

l 生成任务。句子生成是一个新兴的热门领域,诸如最近新闻头条的 GPT-3 之类的。生成任务的应用可以涉及很多的方向,比如,广告,游戏,新闻或文档摘要,对话模型,聊天机器人,键盘 / 谷歌智能提示,问答等等。如果你有合适的数据集,就像《权力的游戏》中做的那样,任何类型的生成皆有可能。一些高级应用程序在多媒体设置中也使用语言模型,如图像字幕、各种语音转文本格式和文本转语音任务 (例如 Alexa)、手写识别等等。

l 用于跨语言的机器翻译已经取得了长足的进展。像谷歌翻译这样的应用程序使用语言模型将语音转换为文本,然后再翻译为其他语言。

l 大型数据集上的信息检索任务,例如实体解析、基于方面的情感分析、文档标记等。一些超级强大的应用程序还会结合知识库使用语言模型。

上述举例的都是当前语言模型的主流应用。可以使用语言模型对顺序使用或生成的数据进行建模。借助 AI 生成音乐就是这样一种应用程序。令人难以置信的是,现在有很多的应用程序,而且分分钟都在不断的扩展。随着学术界和业界的大量研究,建模能力正在迅速地提升。在每一次主要的 AI 会议上,我们都可以听到相关任务的技术水平都在进一步提高,以至于现在很难跟踪整个领域的动态。建议是,你现在首要做的是专注于一个或几个上述提到的子领域。

少样本学习和零样本学习

最后再介绍人工智能领域中一个有趣且新生的概念 —— 少样本学习(few-shot learning)。

它意味着一个经过训练的模型可以通过融合先验知识,以较少的、带有监督信息的样本来学习新的任务。

可以说,这是人工智能领域的一大进步,因为从传统角度上,即使是简单的任务,你也需要大量的数据来学习。在语言模型的环境中,像 BERT 和 GPT-x 模型这样的预训练模型需要训练数十亿个标记 (>100GB 的原始文本数据),甚至在特定任务上微调这些模型也需要 1M 以上的数据点。相比之下,少样本学习可以使用仅仅几个点来学习新任务。

这个概念通过零样本学习(Zero-Shot Learning)进一步提升到了一个全新的水平,在零样本学习中,只将关于类的元数据级别的信息作为输入,而不是数据点。这是一个仍处于早期阶段的新的活跃的研究领域。一旦获得了业内可接受的精度指标,这会是一个非常有前途的领域。

针对无监督学习NLP任务,梳理非结构化文本背后的方法和经验_第12张图片

图片源自作者:根据参数大小绘制各种语言模型

另一方面,模型的准确性和有用性与数据集和模型参数大小直接相关。

这张图展示了 2017-2020 年主要的语言模型。参数的大小每年都在增加一个数量级 ——BERT-Large (2018)[5] 有 355M 个参数,GPT-2 (2019 年初)[6] 有 1.5B 个参数,T5 (2019 年末)[7] 进一步扩展到 11B,最后 GPT-3 (2020 年中)[4] 达到了惊人的 175B 个参数。

例如,大热的 GPT-3 就需要 700GB 的 GPU 内存来训练,远远超过普通消费者所拥有的 10-16GB 内存的 GPU,在 cloud Tesla V100 这样的 GPU 上进行并行训练的成本超过 460 万美元。作为 “一介凡人” 的我们只能使用这些庞大的预训练模型的较小版本来完成我们 “无关紧要” 的任务。

当然,这并非一定是坏事,相反地,这是人工智能发展的必然结果,但考虑到这一基本技术的未来,这更是我们需要深思熟虑的事情。

Refrences:
[1] Mikolov, Tomas, et al. Efficient estimation of word representations in vector space.
[2] Pennington, J., Socher, R., & Manning, C. D. (2014, October). Glove: Global vectors for word representation. In Proceedings of the 2014 conference on empirical methods in natural language processing (EMNLP) (pp. 1532–1543).
[3] Bojanowski, P., Grave, E., Joulin, A., & Mikolov, T. (2017). Enriching word vectors with subword information. Transactions of the Association for Computational Linguistics, 5, 135–146.
[4] Brown, T. B., Mann, B., Ryder, N., Subbiah, M., Kaplan, J., Dhariwal, P., … & Agarwal, S. (2020). Language models are few-shot learners. arXiv preprint arXiv:2005.14165.
[5]Devlin, J., Chang, M.W., Lee, K. and Toutanova, K., 2018. Bert: Pre-training of deep bidirectional transformers for language understanding. arXiv preprint arXiv:1810.04805.
[6] Radford, A., Wu, J., Child, R., Luan, D., Amodei, D. and Sutskever, I., 2019. Language models are unsupervised multitask learners. OpenAI blog, 1(8), p.9.
[7] Raffel, C., Shazeer, N., Roberts, A., Lee, K., Narang, S., Matena, M., Zhou, Y., Li, W. and Liu, P.J., 2019. Exploring the limits of transfer learning with a unified text-to-text transformer. arXiv preprint arXiv:1910.10683.

你可能感兴趣的:(针对无监督学习NLP任务,梳理非结构化文本背后的方法和经验)