“ 每件事都掩盖了宇宙的一部分。 它具有对称性,优雅性和美感 -捕捉世界的任何真正的艺术家首先要掌握的特质。 这种模式可以捕捉到季节的变化,沙子如何沿着斜坡流动,杂酚丛丛的缠结分支,叶子的模式。
我们正试图在我们的生活和社会中复制这种模式,因此,我们热爱节奏,歌曲,舞蹈和各种使我们快乐并安慰我们的形式。 但是,人们也可以看出寻求绝对完美的潜伏危险,因为显而易见,完美模式是不变的。 而且,接近完美,万物都会死亡” -Dune (1965)
我相信嵌入概念是机器学习中最杰出的想法之一。 如果您曾经使用过Siri,Google Assistant,Alexa,Google Translate甚至是智能手机键盘来预测下一个单词,那么您已经在使用基于附件的自然语言处理模型。 在过去的几十年中,该概念已在神经模型中得到了巨大的发展(最近的发展包括在高级模型(例如
BERT和GPT2)中的上下文化词嵌入)。
Word2vec是2013年开发的一种有效的投资创建方法。 除了使用单词,他的一些概念甚至在商业,非语言任务中也可以有效地开发推荐机制并为数据赋予意义。
Airbnb ,
阿里巴巴 ,
Spotify和
Anghami等公司已在其推荐引擎中使用了此技术。
在本文中,我们将研究使用word2vec生成附件的概念和机制。 让我们从一个示例开始,以熟悉如何以矢量形式表示对象。 您知道五个数字(向量)列表可以说明您的个性吗?
个性化:你是什么?
“我给你沙漠变色龙; 他与沙子融为一体的能力将告诉您所有您需要了解的有关生态学根源以及保护您个性的原因。” - 沙丘之子
从0到100的等级,您是否有内向型或外向型的人格(其中0是最内向的类型,100是最外向的类型)? 您是否通过过性格测试:例如MBTI,还是更好
的五巨头 ? 系统会向您提供问题列表,然后在多个轴上进行评估,包括内向/外向。
五大测试结果示例。 他确实讲了很多关于个性的文章,并且能够预测学术 , 个人和职业的成功 。 例如,您可以在这里进行检查。假设我在评估内向性/外向性方面得分100分38分。 可以表示如下:
或范围为-1到+1:
仅凭此评估我们如何识别一个人? 不完全是 人类是复杂的生物。 因此,我们增加了一个维度:测试的另一个特征。
您可以将这两个维度想象为图形上的一个点,或者甚至更好地想象为从原点到此点的向量。 有很多很棒的矢量工具很快就会派上用场。我没有显示我们在图表上显示的哪些人格特质,这样您就不会迷恋特定的特质,但会立即了解一个人的整体性格的向量表现形式。
现在我们可以说这个向量部分反映了我的个性。 当比较不同的人时,这是一个有用的描述。 假设我被一辆红色大巴撞到了,您需要用一个类似的人代替我。 下图中的两个人中哪个更像我?
使用向量时,通常通过
Otiai系数 (几何系数)计算相似度:
1号 人物更像我。 一个方向上的向量(长度也很重要)给出较大的Otiai系数同样,两个维度不足以评估人员。 几十年来心理学的发展导致了对五个基本人格特征(还有许多其他人格特征)的测试的产生。 因此,让我们使用所有五个维度:
这五个尺寸的问题在于,将不再可能在2D中绘制整齐的箭头。 这是机器学习中的一个常见问题,您通常必须在多维空间中工作。 几何系数可以用于任何数量的测量是很好的:
几何系数适用于任何数量的测量。 在五个维度上,结果要准确得多。在本章的最后,我想重复两个主要思想:
- 人(和其他对象)可以表示为数字矢量(这对汽车非常有用!)。
- 我们可以轻松地计算出向量的相似程度。
词嵌入
“言语的礼物就是欺骗和幻想的礼物。” - 沙丘之子
基于这种理解,我们将继续学习通过训练获得的单词的矢量表示形式(它们也称为附件),并研究它们的有趣特性。
这是单词“ king”(GloVe矢量,在Wikipedia上受训)的附件:
[ 0.50451 , 0.68607 , -0.59517 , -0.022801, 0.60046 , -0.13498 , -0.08813 , 0.47377 , -0.61798 , -0.31012 , -0.076666, 1.493 , -0.034189, -0.98173 , 0.68229 , 0.81722 , -0.51874 , -0.31503 , -0.55809 , 0.66421 , 0.1961 , -0.13495 , -0.11476 , -0.30344 , 0.41177 , -2.223 , -1.0756 , -1.0783 , -0.34354 , 0.33505 , 1.9927 , -0.04234 , -0.64319 , 0.71125 , 0.49159 , 0.16754 , 0.34344 , -0.25663 , -0.8523 , 0.1661 , 0.40102 , 1.1685 , -1.0137 , -0.21585 , -0.15155 , 0.78321 , -0.91241 , -1.6106 , -0.64426 , -0.51042 ]
我们看到一个由50个数字组成的列表,但是很难说些什么。 让我们可视化它们以与其他向量进行比较。 将数字放在一行中:
通过其值对单元格着色(红色代表接近2,白色代表接近0,蓝色代表接近-2):
现在忘记数字,仅通过颜色我们将“国王”与其他词进行对比:
您看到“男人”和“女人”彼此之间的距离比与“国王”之间的距离更近吗? 它说了些什么。 向量表示捕获了这些单词的很多信息/含义/关联。
这是另一个示例列表(比较具有相似颜色的列):
有几件事要注意:
- 在所有的单词中都有一个红色的列。 也就是说,这些单词在这个特定维度上是相似的(并且我们不知道其中编码的是什么)。
- 您可以看到“女人”和“女孩”非常相似。 “男人”和“男孩”也是一样。
- “男孩”和“女孩”在某些方面也相似,但不同于“女人”和“男人”。 难道这是一个编码模糊的青年观念? 大概吧
- 除了硬道理之外,其他所有东西都是人们的想法。 我添加了一个对象(水)以显示类别之间的差异。 例如,您可以看到蓝色的列如何下降并停在水矢量的前面。
- 在清晰的尺寸中,“国王”和“女王”彼此相似,而彼此不同。 也许在这里编码了模糊的版税概念?
类比
言语承受着我们希望的任何负担。 所需要做的只是达成一项关于传统的协议,据此我们可以建立概念。” - 沙丘皇帝
类比的概念是表明投资具有令人难以置信的特性的著名例子。 我们可以添加和减去单词向量,得到有趣的结果。 最著名的例子是“国王-男人+女人”:
使用python中的Gensim库,我们可以添加和减去单词向量,并且该库将找到最接近结果向量的单词。 该图显示了最相似的单词的列表,每个单词的几何相似度系数我们像以前一样可视化此类比:
通过计算“国王–男人+女人”得出的向量并不完全等于“女王”,但这是数据集中40万个单词附件的最接近结果在考虑单词的附件之后,让我们学习学习是如何发生的。 但是在继续学习word2vec之前,您需要看一下词嵌入的概念祖先:一种神经语言模型。
语言模型
“先知不受制于过去,现在或未来的幻想。 语言形式的固定性决定了这种线性差异。 先知握住了锁舌的钥匙。 对于他们来说,物理图像仅保留为物理图像,仅此而已。
他们的宇宙不具有机械宇宙的性质。 观察者假设事件是线性的。 因果? 这是完全不同的事情。 先知说了几句话。 您会看到应该根据事物的逻辑发生的事件。 但是先知立即释放出无限奇迹般的力量。 宇宙正在发生精神上的转变。” - 沙丘皇帝
NLP(自然语言处理)的一个示例是智能手机键盘上下一个单词的预测功能。 数十亿人每天使用数百次。
对于
语言模型来说,预测下一个单词是一项适当的任务。 她可以列出一个单词列表(例如两个单词),并尝试预测以下内容。
在上面的屏幕截图中,模型使用了这两个绿色的单词(您应为),并返回了一个选项列表(最有可能的单词
not
):
我们可以将模型想象成一个黑匣子:
但实际上,该模型会产生多个单词。 它可以得出几乎所有已知单词的概率估计(模型的“词典”从几千个单词到一百万个单词不等)。 然后,键盘应用程序会找到得分最高的单词并将其显示给用户。
神经语言模型给出所有已知单词的概率。 我们用百分比表示概率,但是在所得向量中40%将表示为0.4训练后,第一个神经模型(
Bengio 2003 )分三个阶段计算了预后:
在讨论投资时,对我们来说第一步是最相关的。 训练的结果是,创建了一个矩阵,其中包含词典中所有单词的附件。 为了获得结果,我们只需查找输入单词的嵌入并运行预测:
现在,让我们看一下学习过程,找出如何创建这种投资矩阵。
语言模型训练
“无法通过结束过程来理解该过程。 理解必须与流程一起前进,与流程融为一体,与流程融为一体”- 沙丘
语言模型相对于大多数其他机器学习模型具有巨大的优势:可以在我们拥有的大量文本上对其进行训练。 考虑一下我们拥有的所有书籍,文章,维基百科资料和其他形式的文本数据。 与需要人工和专门收集的数据的其他机器学习模型进行比较。
“您必须在他的陪伴下学习这个词”-J. R. Furs
单词的附件是根据周围的单词计算的,周围的单词通常出现在附近。 机制如下:
- 我们获得了大量文本数据(例如,所有Wikipedia文章)
- 设置一个在整个文本中滑动的窗口(例如,三个单词)。
- 滑动窗口会生成用于训练模型的模式。
当该窗口滑过文本时,我们(实际上)会生成一个数据集,然后将其用于训练模型。 为了理解,让我们看看滑动窗口如何处理此短语:
“愿您不要制造具有人类思维相似性的机器” -Dune
当我们开始时,窗口位于句子的前三个单词上:
我们将前两个单词用作符号,将第三个单词用作标签:
我们在数据集中生成了第一个样本,以后可用于教授语言模型然后,我们将窗口移至下一个位置并创建第二个示例:
很快,我们将积累一个更大的数据集:
实际上,通常在移动滑动窗口的过程中直接训练模型。 但从逻辑上讲,“数据集生成”阶段与训练阶段是分开的。 除了神经网络方法外,N-gram方法还经常用于较早的语言模型教学(请参见
“语音和语言处理”一书的第三章)。 要查看在实际产品中从N-gram转换为神经模型
时的区别 ,这是我最喜欢的Android键盘开发人员
Swiftkey博客上的2015年一篇文章 ,介绍了其神经语言模型并将其与以前的N-gram模型进行比较。 我喜欢这个示例,因为它显示了如何用营销语言描述投资的算法特性。
我们双向看
“自相矛盾的迹象表明,我们应该尝试考虑其背后的原因。 如果矛盾使您担忧,则意味着您正在为绝对而奋斗。 相对主义者仅仅把悖论看作是一个有趣的,也许有趣的,有时甚至是令人恐惧的思想,但却是一个很有启发性的思想。” 沙丘皇帝
基于以上内容,填补空白:
作为上下文,有五个先前的词(以及较早的对“公共汽车”的引用)。 我相信你们中的大多数人都已经猜到应该有一辆“公共汽车”。 但是,如果我在空格后再给您一个词,这会改变您的答案吗?
这完全改变了情况:现在丢失的单词很可能是“红色”。 显然,单词在空格之前和之后都具有信息价值。 事实证明,双向(左右)会计可以使您计算出更好的投资。 让我们看看如何在这种情况下配置模型训练。
跳过克
“当一个绝对明确的选择未知时,理智将有机会在舞台上处理有限的数据,在那里错误不仅可能而且也是必要的。” -Capitul沙丘
除了目标之前的两个单词外,您还可以考虑目标后面的两个单词。
然后用于模型训练的数据集将如下所示:
这称为CBOW(单词连续袋)体系结构,并且
在word2vec [pdf]
文档之一中进行了描述。 还有另一种体系结构,它也显示出出色的结果,但是安排略有不同:它试图用当前单词来猜测相邻的单词。 滑动窗口如下所示:
在绿色插槽中是输入词,每个粉红色字段表示一个可能的出口粉色矩形具有不同的阴影,因为此滑动窗口实际上在我们的训练数据集中创建了四个单独的模式:
此方法称为
跳过语法体系结构。 您可以按如下方式可视化滑动窗口:
以下四个样本已添加到训练数据集中:
然后我们将窗口移到以下位置:
生成另外四个示例:
不久我们将有更多示例:
学习评论
“ Muad'Dib是个学习速度很快的人,因为他首先被教过如何学习。 但是,第一课就是对他可以学习的信念的吸收,这就是一切的基础。 令人惊讶的是,有多少人不相信自己可以学习和学习,还有更多的人认为学习非常困难。” - 沙丘
现在我们有了跳跃语法集,我们将其用于训练预测相邻单词的语言的基本神经模型。
让我们从数据集中的第一个样本开始。 我们将符号发送给未训练的模型,并带有预测下一个单词的请求。
该模型经过三个步骤,并显示一个预测矢量(字典中每个单词的概率)。 由于模型尚未训练,因此在此阶段其预测可能不正确。 但这没什么。 我们知道她预测哪个词-这是我们当前用于训练模型的行中的结果单元格:
“目标向量”是其中目标词的概率为1,所有其他词的概率为0的向量模型有多错误? 从目标中减去预测向量并获得误差向量:
现在可以使用该误差向量来更新模型,因此下次在相同的输入数据上更有可能给出准确的结果。
培训的第一阶段到此结束。 我们继续对数据集中的下一个样本进行相同的操作,然后对下一个样本进行同样的操作,直到检查所有样本。 这是学习的第一个时代的终结。 我们将所有内容一遍又一遍地重复,因此,我们得到了训练有素的模型:您可以从中提取投资矩阵并将其用于任何应用程序中。
尽管我们学到了很多东西,但是要完全了解word2vec是如何真正学习的,缺少了一些关键思想。
负选择
“试图了解Muad'Dib而不了解他的致命敌人Harkonnenov就像是试图了解真相而不了解虚假是什么一样。 这是在不了解黑暗的情况下了解光明的尝试。 这是不可能的。” - 沙丘
回忆一下神经模型如何计算预测的三个步骤:
从计算的角度来看,第三步非常昂贵,尤其是如果您对数据集中的每个样本都这样做(数千万次)。 有必要以某种方式提高生产率。
一种方法是将目标分为两个阶段:
- 创建高质量的单词附件(不预测下一个单词)。
- 使用这些高质量的投资来教授语言模型(用于预测)。
本文将重点关注第一步。 为了提高工作效率,您可以远离预测相邻词...
...,然后切换到采用输入和输出单词并计算它们接近的概率(从0到1)的模型。
这种简单的转换将神经网络替换为逻辑回归模型-因此,计算变得更加简单和快捷。
这需要改进数据集的结构:标签现在是值为0或1的新列。在我们的表中,到处都是单位,因为我们在那里添加了邻居。
这样的模型以令人难以置信的速度计算:数分钟即可完成数百万个样本。 但是您需要关闭一个漏洞。 如果我们所有的示例都是肯定的(目标:1),则可以形成一个棘手的模型,该模型始终返回1,表明100%的准确性,但它不会学到任何东西,并且会产生垃圾投资。
要解决此问题,您需要在数据集中输入
否定模式 -绝对不是邻居的单词。 对于他们来说,模型必须返回0。现在,模型将不得不努力工作,但是计算仍然可以高速进行。
对于数据集中的每个样本,添加标记为0的否定示例但是要引入什么作为输出词呢? 任意选择单词:
这个想法是在
噪声比较法[pdf]的影响下诞生的。 我们将实际信号(相邻单词的正例)与噪声(不是邻居的随机选择单词)进行匹配。 这在性能和统计性能之间提供了极好的折衷。
跳过克负样本(SGNS)
我们研究了word2vec的两个核心概念:它们一起被称为“带有负采样的跳过语法”。
学习word2vec
“一台机器无法预见对一个活着的人来说很重要的所有问题。 离散空间和连续连续体之间存在很大差异。 我们生活在一个空间中,而机器存在于另一个空间中。” - 沙丘皇帝
在研究了跳过语法和否定采样的基本思想之后,我们可以进一步仔细研究word2vec的学习过程。
首先,我们预处理训练模型的文本。 定义字典的大小(我们将其称为
vocab_size
),例如,以10,000个附件为单位,并定义字典中单词的参数。
在训练开始时,我们创建两个矩阵:
Embedding
和
Context
。 每个单词的附件都存储在字典的这些矩阵中(因此
vocab_size
是其参数之一)。 第二个参数是附件的尺寸(通常
embedding_size
设置为300,但之前我们看了一个尺寸为50的示例)。
首先,我们用随机值初始化这些矩阵。 然后我们开始学习过程。 在每个阶段,我们都采取一个积极的例子,并与之相关的消极的例子。 这是我们的第一组:
现在,我们有四个单词:输入单词
not
和输出/上下文单词
thou
(实际邻居),
aaron
和
taco
(否定示例)。 我们开始在“
Embedding
(对于输入单词)和“
Context
(对于上下文单词)矩阵中搜索其附件,尽管这两个矩阵都包含字典中所有单词的附件。
然后,我们计算输入附件与每个上下文附件的标量积。 在每种情况下,都会获得一个数字,该数字指示输入数据和上下文附件的相似性。
现在,我们需要一种将这些估计变为某种可能性的方法:所有这些估计都必须是0到1之间的正数。这对于
S形 logistic方程是一项出色的任务。
乙状结肠计算的结果可以视为这些样本的模型输出。 如您所见,在乙状结肠之前和之后,
taco
的得分最高,而
aaron
的得分最低。
当未经训练的模型进行预测并具有真实的目标标记以进行比较时,让我们计算模型预测中有多少错误。 为此,只需从目标标签中减去S型分数即可。
error
= target
sigmoid_scores
这是术语“机器学习”的“学习”阶段的起点。 现在,我们可以使用此误差估计来调整
not
,
thou
,
aaron
和
taco
投资,以便下次结果更接近目标估计。
这样就完成了培训的一个阶段。 我们改善了一些单词的附件(
not
,
thou
,
aaron
和
taco
)。 现在,我们进入下一个阶段(下一个正样本和与之相关的负样本)并重复该过程。
随着我们多次遍历整个数据集,附件的数量不断增加。 然后,您可以停止该过程,将
Context
矩阵放在一旁,并将训练有素的
Embeddings
矩阵用于下一个任务。
窗口大小和负样本数
在学习word2vec的过程中,两个关键的超参数是窗口大小和否定样本数。
不同的窗口大小适合不同的任务。
值得注意的是 ,较小的窗口大小(2-15)会生成具有相似索引的
可互换附件(请注意,在查看周围的单词时,反义词通常是可互换的:例如,在相似的上下文中经常提及“好”和“坏”)。 较大的窗口大小(15–50甚至更大)会生成具有相似索引的
相关附件。 在实践中,您通常必须为任务中有用的语义相似性提供
注释 。 在Gensim中,默认窗口大小为5(除了输入单词本身,还包括左右两个单词)。
— . 5−20. , 2−5 , . Gensim — 5 .
结论
« , , » — -
, word2vec. , , «skip-gram » (SGNS), .