使Word2Vec远离笨重的单词嵌入。虽然通常用于嵌入单词,但在某些情况下也可以泛化为任意对象,Word2Vec允许我们将一组对象中的每个对象表示为密集的实数向量,从而保持不同对象之间的关系。
注:Reddit是个社交新闻站点
机器学习,自然语言处理(NLP)和AI中的一个普遍问题是计算机以一种可以处理的方式来表示对象。而且由于计算机能够理解数字(我们有一种用于比较,组合和操作的通用语言),所以这通常意味着以某种方式分配对象数字。考虑采取一些抽象但对人类直观的东西,例如一本书的文字,并为该书中的每个单词分配一个唯一的编号。然后可以通过分配给它的编号列表或矢量来表示该书。这是将书作为向量嵌入的过程:越来越多技术文献介绍关于将对象作为向量嵌入。
尽管许多文献着重于将单词表示为向量,这可以帮助解决NLP问题,但是许多逻辑可以转移到嵌入任意对象集上。本文使用嵌入技术来了解Reddit等在线论坛。本文旨在作为分解UofT正在进行的研究的起点。
首先,我们来看看将某些东西作为向量嵌入意味着什么以及良好的嵌入意味着什么。然后,我们将采用一种常见的嵌入技术Word2Vec,并了解如何将其建模为向量。在了解了Word2Vec为何如此有用之后,我们可以开始概括其原理,并展示其在映射Reddit的不同社区中的效用。
虽然嵌入技术可变得复杂-在其核心,以嵌入仅仅是代表了事物的实数的向量。这很有用,因为在谈论实数向量时很流行。也就是说,它们易于添加,减去,比较和操作。因此,嵌入一组对象只是用唯一的实数向量表示这些对象。因此,并非所有的嵌入技术都涉及复杂的神经网络,通常简单的嵌入对于给定的问题而言足够强大。但是,我们将重点关注更细致入微的技术。
"哑嵌入"是将所有不同的唯一对象作为其自己的单位基础向量进行一次one-hot编码。
为什么这可能不够强大?即使我们拥有操纵这些向量的工具,也可能无法返回直观的结果。这是因为当对象被one-hoe编码时,无论如何嵌入都不会被绑定到现实世界。具体来说,对象的表示之间没有逻辑关系可以反映它们的实际关系;每个向量都与其他向量相等。
在理想情况下,您可能希望将代表"红色" ([red] = <1 0 0>)的向量和代表"黄色" ([yellow] = <0 1 0>)的向量一起返回代表"橙色"的向量([橙色]-> <1 1 0>)。one-hot编码仅允许您通过一个条目的向量说出一个条目是什么,而不能告诉你向量之间的关系。
话虽如此,独热编码通常是一个很好的起点。
为了了解我们如何以与现实世界紧密联系的方式嵌入对象,我们将研究一种更细微的技术,称为Word2Vec。虽然通常用于嵌入单词,但在某些情况下也可以泛化为任意对象。Word2Vec允许我们将一组对象中的每个对象表示为密集的实数向量,从而保持不同对象之间的关系。
为了获得Word2Vec的工作原理的直观信息,我们将研究其最常见的用例:将单词嵌入为向量。因此,熟悉Word2Vec的人员可以跳过下一部分。从那里,我们将看到Word2Vec如何概括为嵌入其他对象。为此,我们将嵌入Reddit的10,000个最活跃的社区。最后,我们将展示这种嵌入如何与我们对这些社区所代表的理解相一致。
Word2Vec背后的基本直觉是,如果两个单词以相似的方式使用,则它们是相似的。例如,如果将句子中的"good"一词替换为"great"一词,这仍然很有意义。
语言学家约翰·鲁珀特·费斯(John Rupert Firth)很好地概括了这个概念,他在1957年说:"您将知道根据一个词的上下文来了解一个词。" 尽管Word2Vec的实现方式多种多样,但本文将重点介绍与Firth的思想非常吻合的Skip-gram模型。
"您将知道一个单词,通过它的上下文。" — JR Firth
Skip-gram模型(应用于单词时)会遍历文本语料库中的每个单词,并尝试预测单词两侧的n个单词。该ñ目标周围的词的话是它的背景。在下面的图片中,我们看到"讨厌"一词的上下文是凶猛的,狗的,尖锐的和被咬的。
我们首先对每个单词进行一次one-hot编码,然后使用浅层神经网络预测与目标单词相关的所有上下文向量。这样,在相似上下文中使用的单词将具有相似的输出向量。通过获取隐藏层的输出,在将输出转换为one-hot编码矢量的级联之前,我们可以将该单词表示为实数的密集矢量。
通过此训练过程,Word2Vec保留了语言的语义和句法转换。例如,从表示单词'King'的向量(由[King]表示)到[Queen]的转换与从[Man]到[woman]的转换大致相同。因此,我们把比喻男人对女人,国王对王后表示为:[Man] - [Woman] = [King] - [Queen]。而且,如果我们还不知道Queen是怎么类推的,则可以使用等式[Queen] = [King]-[Man] + [Woman ]来解决。
从Word2Vec的流行可以看出,将Skip-gram模型应用于单词时,已经进行了很好的探索,但是它的效用并不仅限于语言类比。为此,我们将展示Word2Vec如何推广到存在逻辑目标上下文关系的情况。
正如"通过上下文了解一个单词"一样,同样的逻辑也适用于Reddit及其各种在线社区,称为subreddits。在这种情况下,不那么精巧的类比是,我们可以通过其保留的评论者来知道一个subreddit。对于Skip-gram模型,每个子目录代表一个"单词",而子目录的评论者充当"上下文"。因此,与Word2Vec一样,具有相似注释者的子reddit也将具有相似的输出向量。
虽然输出向量嵌入到高维向量空间(通常为150多个维度)中,因此无法可视化,但是可以返回3维近似值。下面是对所有10,000个子reddit的近似估算图。在此图中,我们突出了面向嘻哈的subreddit / r / hiphopheads,它是100个最接近的向量。如我们所见,余弦相似度最接近的子项也以嘻哈为主题。
使用Word2Vec,生成的嵌入可以保留单词之间的关系。这允许简单的矢量加法和减法来回答类比问题。例如,要回答类比,柏林对德国,就像渥太华对x,我们计算[x] = [德国]-[柏林] + [渥太华 ],然后选择最接近[x]的向量,即[加拿大]。此属性也适用于我们的subreddit嵌入。当将类比/ r / boston对/ r /芝加哥,就像/ r / bostonceltics对x时,与[/ r / bostonceltics]-[/ r / boston] + [/ r / chicago]最接近的向量是subreddit致力于芝加哥公牛队。
在大约1,500个类似问题的测试集中(城市对运动队,大学对大学城,州对州府),我们的嵌入达到了81%的准确性。
Word2Vec背后的核心直觉及其概括是,您可以由上下文化来代表单词,subreddits,Twitter用户等。在类似上下文中使用的词可能相似;具有相似评论者的subreddit和具有相似关注者的Twitter用户也是如此。但是,如果没有足够的数据,则嵌入不可能在实体可以相似或不同的不同维度上进行。Reddit上的任何用户都可能会对各种子Reddit进行评论,但并非所有子Subdit都是相关的。但是,从宏观的角度来看,经过数百万条评论,微妙的关系开始出现。
首先,从采用准系统方法进行嵌入的方法开始,然后看更多细微的嵌入方法可以如何改善NLP问题-本文介绍了将嵌入技术应用于子对象(如subreddits)时如何能够得出有趣的结果。