01-Representation Learning and NLP

1 Representation Learning and NLP

摘要:自然语言是一种典型的非结构化信息。传统的自然语言处理(NLP)严重依赖于特征工程,这需要仔细的设计和相当多的专业知识。表示学习旨在学习原始数据的表示,作为进一步分类或预测的有用信息。本章简要介绍了表示学习,包括其动机和基本思想,并回顾了它在机器学习和自然语言学习方面的历史和最新进展。

Machine Learning = Representation + Objective + Optimization.

也就是说,为了构建一个有效的机器学习系统,我们首先将原始数据上的有用信息转换为内部表示,如特征向量。然后,通过设计适当的目标函数,我们可以利用优化算法来找到系统的最优参数设置。

Distributed Representation

编者注:这篇文章是基于 District Data Labs 的 NLP研究实验室进行的研究的系列文章的一部分。

这篇文章是关于分布式表示的,这个概念不仅是理解机器学习中的数据处理的基础,也是理解大脑中信息处理和存储的基础。数据的分布式表示是许多最先进的深度学习技术的事实上的方法,特别是在自然语言处理领域,这将是本博客文章的重点。

如果您像我一样,您可能会对机器学习出版物的技术术语和内容感到不知所措;您阅读的每一篇论文或文章似乎都需要理解许多基本概念(“先决条件”)。分布式表示就是这些概念之一,这篇博文的主要目的是希望将这个先决条件从您的清单中删除,并朝着更强大的机器学习控制迈出一步。

我们将从一个思想实验开始:假设我的大脑有 3 个神经元,或者 3 个信息处理单元。我的妻子告诉我,有时当她和我说话时,她感觉我的大脑几乎处于关闭状态,所以也许这个形象比我们想象的更贴切。我们还可以想象一下,我的大脑是一块完全空白的石板;换句话说,我的大脑中还没有学习/存储任何知识。我的妻子也相信我的大脑,但我们离题了。现在假设我凝视窗外,看到一辆红色小车驶过。“红色小车”这个概念对我来说是全新的,所以我的大脑决定将它的一个单位分配给这个概念的表示。这意味着,从现在开始,我可以通过从这个神经元中检索“小红车”的概念来回忆它。让我们用有点“数学”的术语来写这个,

概念表示
小红车[1]
不是一辆红色小车[ 0 ]

在此示例中,1 表示神经元“放电”,0 表示神经元未“放电”。作为一个侧面推论,我们可以想象一个空白的 [ ] 向量代表我的大脑一无所知。

现在,我仍然盯着窗外,看到第二辆车驶过,这次是一辆大型蓝色SUV。以类似的方式,我的大脑将这个新概念分配给第二个处理单元,我们最终得到以下更新的知识表示:

概念表示
小红车[ 1 0 ]
大型蓝色SUV[ 0 1 ]

我们现在有两个处理单元(神经元),每个处理单元要么打开要么关闭(发射或不发射)。请注意,理论上可以有 [ 0 0 ],代表“不是小型红色汽车也不是大型蓝色 SUV”的概念,但不可能有 [ 1 1 ],因为那么小型红色红色也将是大型蓝色SUV和汽车广告会突然变得很混乱。

继续盯着车窗前行驶(这是缓慢的一天),又一辆汽车驶过,那是一辆大型红色SUV。总共三个概念,三个可用处理单元:完美。我们最终得到以下知识表示:

概念表示
小红车[ 1 0 0 ]
大型蓝色SUV[ 0 1 0 ]
大型红色SUV[ 0 0 1 ]

通过这种类型的表示,一件事立即变得显而易见:3个处理单元只能让我存储3条信息。如果我一直盯着窗外,看到一辆红色大车驶过,我就没有空间接受这个新概念。我要么必须丢弃它,要么更换现有的。

这种表示的第二个不太引人注目的结果是每个处理单元只能对一个概念做出贡献。换句话说,单元 1 只为一辆红色小车“点火”,并且不参与代表任何其他东西。这种表示信息的方式称为局部表示。这是一种简单且易于理解的数据表示方式,从某种意义上说,你可以指着我大脑中的某个位置并说“那个神经元是存储这个概念的地方。” 类似地,如果使用局部方法来表示机器中的数据或状态,那么它将在识别数据(只需找到打开的一个硬件单元)和更改数据(关闭一个单元、关闭一个单元)方面提供一些优势。单位开)。

独热编码 (OHE)

如果您在 NLP 背景下使用过机器学习,那么您有可能遇到过一种称为 One-Hot 编码的本地主义表示形式。例如:您有一个包含 n 个单词的词汇表,并且使用一个 n 位长的向量来表示每个单词,其中除了一位设置为 1 之外的所有位都为零。不同的单词会被“分配”不同的位。例如,让我们考虑一下安迪·威尔的《火星救援》中的这句话:

“管道胶带适用于任何地方。胶带是有魔力的,应该受到崇拜。”

上面的句子由 12 个单词组成,其中 10 个是唯一的(“duct”和“tape”重复)。请注意,出于本教程的目的,我们目前忽略字母大小写。因此,我们的词汇由 10 个单词组成:“duct”、“tape”、“works”、“anywhere”、“is”、“magic”、“and”、“should”、“be”、“worshiped”。我们可以使用 10 位向量来表示这些单词中的任何一个,只需让第 1 位表示单词“duct”,第二位表示单词“tape”,依此类推。如下所示:

“duct”      -->     [ 1 0 0 0 0 0 0 0 0 0 ]

“tape”      -->     [ 0 1 0 0 0 0 0 0 0 0 ]

…

“magic”     -->     [ 0 0 0 0 0 1 0 0 0 0 ]

…

“worshiped” -->     [ 0 0 0 0 0 0 0 0 0 1 ]

One-Hot 编码在自然语言处理中非常常见,因为它涉及一种简单的本地化表示,并具有所需的所有优点。然而,OHE 有其局限性:

  • 典型的词汇表包含多达 100,000 个单词,因此这些向量通常很长。如果我们想要表示 10 个单词的序列,我们已经在查看超过 1,000,000 个单位的输入向量!(提示邪恶博士)
  • 为了能够表示 n 个可能的单词,我需要 n 位。或者反过来,一个长度为n的向量最多可以用来表示n个单词。
  • 最后,对于机器学习来说至关重要的是,所有单词彼此之间都同样相似(不同)。理想情况下,在谈论语义时,我们希望用彼此有些接近的向量来表示单词“dog”和“fox”,至少与表示“lazy”这样的单词的向量不同。对于 One-Hot 编码,我们实际上无法做到这一点。

下面是 Python 中执行 One-Hot 编码的示例函数。该函数的输入是词汇表和我们想要进行 One-Hot 编码的单词。该函数返回一个 OHE 向量。

def one_hot_encode_my_word(my_word, the_vocabulary):
    one_hot_encoded_vector = []
    for word in the_vocabulary:
        if word == my_word:
            one_hot_encoded_vector.append(1)
        else:
            one_hot_encoded_vector.append(0)

v = ["duct", "tape", "works", "anywhere", "is", "magic", "and", "should", "be", "worshiped"]

one_hot_encode_my_word("tape", v)

分布式表示:

让我们回到最初的小型红色汽车和大型蓝色 SUV 的思想实验。让我们再添加一些更多的概念——这里的假设是,我睡着了,我的大脑长出了更多的神经元,然后我醒来并观看了一些 YouTube 视频,所以我的知识图现在如下所示:

概念表示
小红车[ 1 0 0 0 0 0 0 0 ]
大型蓝色SUV[ 0 1 0 0 0 0 0 0 ]
大型红色SUV[ 0 0 1 0 0 0 0 0 ]
青苹果[ 0 0 0 1 0 0 0 0 ]
大黄蜂[ 0 0 0 0 1 0 0 0 ]
高层建筑[ 0 0 0 0 0 1 0 0 ]
小鱼[ 0 0 0 0 0 0 1 0 ]
香蕉[ 0 0 0 0 0 0 0 1 ]

在这里,我们面临着我们在 One-Hot Encoding 讨论中提到的相同问题:高计算成本、高维度,并且概念同样相似。例如,要从任何概念转到另一个概念,您需要走相同的距离:一维为 -1,第二维为 +1。就这种表述而言,一辆大型蓝色 SUV 与一辆大型红色 SUV 的相似度就如同香蕉一样。不完全细致入微。但我们可以做得更好。

自 20 世纪 80 年代中期以来(参见 Rumelhart、McClelland 和 Hinton - 1986),联结主义(读作“反地方主义”)群体一直提倡所谓的“分布式表示”,它比地方主义方法具有一些优势,并帮助我们克服其局限性。“分布式表示”这个名称主要是因为任何单个概念的表示都分布在许多(如果不是全部)处理单元上。在许多情况下,向量中的单位值是连续值,而不仅仅是 1 和 0。

让我们将这种表示形式应用到我的大脑知识上,看看是否能让我变得更聪明(我的妻子已经绝望了,所以现在全靠你了,没有压力):

小红车[ 0.555 0.761 0.243 0.812 ]
大型蓝色SUV[ 0.773 0.309 0.289 0.835 ]
大型红色SUV[ 0.766 0.780 0.294 0.834 ]
青苹果[ 0.153 0.022 0.654 0.513 ]
大黄蜂[ 0.045 0.219 0.488 0.647 ]
概念表示
高层建筑[ 0.955 0.085 0.900 0.773 ]
小鱼[ 0.118 0.192 0.432 0.618 ]
香蕉[ 0.184 0.232 0.671 0.589 ]

我们有什么在这里?

  • 连续值而不是离散的 1 和 0。
  • 每个处理单元都有助于任何和所有概念。
  • 这些表示是密集的(相对于稀疏的局部表示)。
  • 概念不再局限于一个单元(因此称为“分布式”)。
  • 我们能够仅用 4 个处理单元来表示大量概念(而不是被 n 个单元限制为 n 个概念)。
  • 我们可以在不添加新单元的情况下学习新概念。我们所需要的只是一个新的价值观配置。
  • 最重要的是,我们能够更好地表示相似性:大型红色 SUV [ 0.773 0.309 0.289 0.835 ] 和大型蓝色 SUV [ 0.766 0.780 0.294 0.834 ] 彼此之间的相似度比它们与小鱼 [ 0.118 0.192 0.432 0.618 ] 之间的相似度要高得多。

上面的最后一点至关重要,对于学习我们以前从未见过的新概念具有奇妙的意义。如果我看到一些我不认识的新对象,比如说一条河鳟鱼,它具有以下表示形式 [ 0.144 0.187 0.439 0.606 ],我可以快速找到它与哪个现有概念的向量最相似(小鱼向量) )并且我可以猜测它一定是一个像鱼一样的物体,没有任何关于它的附加信息!

此外——这就是为什么这种类型的表示如此强大——我们能够概括。我不需要向量中的所有单位都具有值,我可以仅通过部分表示来“猜测”它们可能属于什么概念类别。例如,[ 0.158 0.030 – – ] 与青苹果具有相似的特征。它可能是一个绿色的梨子,或者一个黄色的柠檬,但它不太可能是一座高层建筑。

词嵌入

我们将 One-Hot 编码视为一种本地主义表示类型,现在让我们看看词嵌入,它是 NLP 深度学习中使用的分布式表示的一个示例。

词嵌入的想法是获取文本语料库,并找出单词的分布式向量表示,这些单词之间保留一定程度的语义相似性。当这种情况发生时,“duct”和“tape”这两个词彼此“更接近”,而不是“magic”(我们无法使用 One-Hot Encoding 做到这一点)。这可以应用于任何语料库,无论是小说集,还是某个科学学科内的文档,或者许多其他应用程序。从这里开始,这些词嵌入可以用作其他模型(例如 SVM 或递归神经网络)的输入。该输入通常采用向量矩阵的形式,就像我们在上一节中看到的那样。

在本系列的以下文章中,我们将探索词嵌入模型的一种流行实现:word2vec。基于最近的一篇论文(参见 Mikolov '13),word2vec 将单热编码向量转换为嵌入向量,并在此过程中取得了出色的结果。它设法生成向量,使我们能够执行诸如 W(“King”) - W(“Man”) + W(“Woman”) = W(“Queen”) 之类的事情!它是如何做到的?请务必关注我们的下一篇文章!

1.5 Learning Approaches to Representation Learning for nlp

人们已经开发了各种有效有效的方法来学习NLP的语义表示。这里我们列出了一些典型的方法。

统计特征:如前所述,NLP在早期阶段的语义表示往往来自于统计数据,而不是来自于优化过程。例如,在n-gram或词袋模型中,表示中的元素通常是在大规模语料库中计算的相应条目出现的频率或次数。

手工特征:在某些自然语言处理任务中,句法和语义特征对解决问题是有用的。例如,单词和实体的类型、语义角色和解析树等。这些语言特征可以与任务一起提供,也可以通过特定的自然语言处理系统进行提取。在广泛使用分布式表示之前的很长一段时间里,研究人员投入大量精力来设计有用的特性,并将它们组合作为自然语言处理模型的输入。

监督学习:分布式表示产生于监督学习下的神经网络的优化过程。在神经网络的隐藏层中,神经元的不同激活模式代表着不同的实体或属性。有了训练目标(通常是目标任务的损失函数)和监督信号(通常是目标任务训练实例的金标准标签),网络可以通过优化(如梯度下降)来学习更好的参数。经过适当的训练,隐藏状态将成为信息丰富和广义的,作为自然语言的良好语义表示。

自我监督学习:在某些情况下,我们只是想为某些元素得到良好的表示,这样这些表示就可以转移到其他任务中。例如,在大多数神经NLP模型中,句子中的单词首先被映射到它们相应的单词嵌入中(可能来自word2vec或GloVe),然后再发送到网络中。然而,并没有由人类注释的“标签”来学习单词嵌入。为了获得神经网络所需的训练目标,我们需要从现有数据中从本质上生成“标签”。这被称为自监督学习(一种无监督学习的一种方式)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值