词汇(单词抑制)一直是自然语言处理中最基本,最重要的任务之一(NLP)。深度学习为该领域带来了革命性的变化。关键概念之一是单词嵌入。这是一种语言表示方式。我们可以理解词汇的语义是矢量。关系很牢固。
本文是吴恩达深度学习课程中词汇表现形式的摘要和思考。同时,我指的是一些书籍和在线数据写作。撰写本文的主要目的是加深您的理解。如果您有任何错误,请在评论区域指出。非常感谢!
一hot代表了表示机器学习中离散特征的一种重要方法。在NLP任务中,我们还可以使用它来表示单词。在神经网络序列模型的博客中,我介绍了使用单速向量代表单词的步骤。在这里,我将简要解释:
例如,我们需要构建一个语言模型来生成句子。假设我们学到了以下句子:
在另一个任务中,我们预测了以下句子:
因为在单热语句中,橙色和苹果一词之间没有联系,因此,即使模型知道橙汁是一种相对常见的匹配,也无法学习苹果汁。,该空间不能正确地填充果汁。
另外,单速矢量通常很高(与词汇的大小一致),并且非常稀疏(仅在一个位置),因此使用单速矢量表示单词将使该单词成为参数模特的变更人,难以训练。
有没有一种方法可以更好地表达单词,它可以捕获单词的含义以及单词之间的含义吗?答案是肯定的,我们可以使用特征方法来表示单词。
例如,以下图(更多实际应用)中有4个属性:性别,是否是王室,年龄以及是否是食物。每个单词都可以与这些四个属性相关。由4维特征向量表示,例如以-1,0.01,03,09表示的人。
目前,您可以清楚地看到苹果和橙色非常相似。上面的示例很容易使算法填充第二句话中的果汁一词。
当我们使用这个高维生素标志时,我们被称为单词嵌入。可以想象,它被称为嵌入的原因,每个单词都嵌入(嵌入)到一个高维空间中。单词嵌入是最重要的思想之一NLP。
应该注意的是,以上功能只是直观的示例。实际上,这些特征不是手工设计的,但是学习了算法(即单词嵌入)。这些学习的特征可能没有很好的解释。但是,无论如何,算法可以迅速区分哪些单词相似。
此外,嵌入式矢量的尺寸通常小于词汇中单词的数量,因此参数数量在一定程度上减少,并且训练的负担减少了。
我们可以使用T-SNE算法来可视化高维单词向量。可以看出,在嵌入单词后,带有类似单词的单词聚集在一起:
我们以命名实体识别(NER)为例。
我们在这里使用BRNN模型,并使用嵌入式矢量来表示单词,因为Brnn.brnn可以判断Sally Johnson是Orange Farmer命名的人。
当我们遇到新输入时,例如:
由于苹果的单词嵌入类似于奥兰治的单词,因此该模型可以轻松地将Robert Lin识别为一个人的名字。
如果我们的输入包含冷词,例如:
榴莲(榴莲)和耕种者是相对罕见的词,我们很可能没有出现在训练集中。使用传统的一式旋转矢量,很难预测罗伯特·林是一个人的名字。如果我们使用嵌入陈述的单词,然后榴莲和橙色将具有类似的向量,耕种者和农民将具有类似的向量。该模型可以根据橙色农民和人类名称之间的关系来推断榴莲耕地与人类名称之间的关系,然后预测Thatrobert Lin是一个名字。
为什么在当前训练集文本中尚未出现的单词中嵌入单词?这是因为:嵌入式向量的训练通常会在大量标签文本上执行,稍后我们将介绍其培训方法。
当训练集的数量很少时,单词嵌入的效果通常很明显,因为它可以极大地丰富输入模型的信息量并提供单词信息。在其他迁移学习情况中相同。如果您从某个任务A迁移到某个任务B,则仅在A中只有大量数据,并且当B中的数据很小时,迁移过程很有用。因此,许多NLP任务词的嵌入效果很明显,这不是针对某些语言模型和机器翻译,因为它们自己的数据量很大。
嵌入词也可以帮助实现类比推理。以先前的数据为例:
用单词的使用,我们可以找到一种有趣的本性:如果我们知道,如果我们与女人通,我们可以使用嵌入投影一词自动获取与Queen相对应的答案。
我们使用男人的单词嵌入式矢量eman减去女性的单词嵌入式矢量ewoman,可以获得:
我们使用King的单词嵌入式矢量eking减去女王的单词嵌入式矢量eqeen,可以获得:
可以发现,两者之间的差异非常接近。这是因为男人和女人之间的主要区别是性别的差异,而国王和王后之间的主要区别与矢量不同。
通过这种性质,我们可以得出与昵称之间关系最一致的单词。您只需要找到w的单词即可最大程度地提高eking -ew和eman -wepom的相似性。
一般而言,我们选择此处的字符串的相似性,即计算两个向量的字符串值,以及两个向量的两个向量u和v的程度:
为了训练单词嵌入式向量,我们可以使用词2VEC模型。Word2Vec是一种简单有效的算法,嵌入了学习单词中。
Word2Vec的核心思想是学习一个神经网络语言模型来训练vector一词。它基于这样的假设:上下文中相似的单词与嵌入式矢量一词相似。例如,存在以下两个句子:
我们知道,苹果和梨的语义非常接近。在上面的示例中,Apple和Pearzi的背景也非常相似,因此我们的模型将经过培训以获得相似的单词和梨。
word2vec使用分布式语义方法来表示单词的含义。本质上,单词的含义是这个单词的上下文。回想起来,当我们在高中时用英语完成空白时,一篇简短的文章挖出了很多空虚,所以让我们根据空缺词的短期上下文选择适当的单词。换句话说,上下文的上下文已经可以确定该单词的含义。如果选择单词是正确的,则意味着我们理解这个空置单词的含义
Word2Vec使用的语言模型分为两类,这意味着有两种学习单词嵌入的方法,它们是:
首先,我们在Word2Vec中介绍了Skip-gram模型。它使用单词作为预测周围上下文的输入。
假设在培训集中判处句子:
在Skip-gram模型中,我们需要做的是提取上下文和目标单词以构建监督学习问题。我们要做的是随机选择一个单词作为上下文,例如选择橙色一词,然后我们要做的是在单词距离(即,窗口,窗口)中选择另一个单词,或者在10个单词之前和之后,我们在此范围内选择目标单词。因此,我们将构建监督和学习问题。它为您提供了一个上下文,要求您预测一个目标词,该单词在此单词或正面和负5个词中随机选择,以构建此监督学习问题的目标。它不是解决此监督学习的问题本身,但是要使用这个学习问题来构建一个好词嵌入模型。
跳过的字面意义是跳出一些人类,也就是说,在上下文窗口中随机选择一个单词作为目标词,而无需考虑它是否连续。
当然,我们还可以使用随机选择目标词的方法。取而代之的是,窗口中的每个单词都被选为目标词,如下图所示,训练了示例输入模型的当前上下文单词组成。该方法的成本也更高。要解决此问题,您可以使用子采样方法来计算每个样本的概率,以确定是否通过此概率删除相应的样本。(实际上,窗口中单词的本质与窗口中单词的本质相同)
然后,我们使用简单的基本神经网络的单个屏蔽层来训练我们想要的单词嵌入式向量。网络的结构如下图所示:
您可以看到以下详细信息:
训练后,我们得到了模型的重量矩阵V和u。激活上述和下方的位置。我们将其称为输入向量,因为一个速率向量中的每个单词都不同,而VX的使用只能指示x。
从隐藏层到输出层的重量矩阵U,我们还可以在输出层位于输出层位置的位置x处使用权重矢量UX。隐藏的层。我们称输出向量,他也可以显示X。
在正常情况下,我们经常将输入向量用作单词X的单词嵌入。
此外,Skip-gram还可以选择多个单词作为当前上下的目标单词。网络结构只需要微调。您仍然可以选择相同的输入向量和输出向量与上下单词的单词嵌入。
CBOW模型,即连续的单袋模型。它的预测方法与Skip-Gram模型相反。单词的上下文被用作预测单词本身的输入。
可以看出,CBOW模型的网络结构和Skip-Gram模型几乎相同。我们只需要在上面的跳过网络结构的网络结构中计算。我们仍然可以使用交叉 - 熵损耗函数作为模型的优化目标,并且拟合模型的参数拟合了梯度下降。。
顺便说一下,CBOW模型的原理与Bert中的面具相似,但是Bert中的面具随机介绍了句子中的某些单词,用剩余的单词预测它们,因此训练词是嵌入的。CBOW模型需要预测句子中的每个单词。
Word2Vec模型中有一个相对较大的缺陷。SoftMax层的计算量太大了,尤其是当词汇表中有很多单词时,我们需要计算SoftMax层的所有单元获得的分数的分数和和谐。实际上,词汇量达到100万或一千万级,这非常慢。
为了应对这个问题,学者提出了一种称为层次软磁性分类器的优化方法。
分类软分类器的基本思想和二进制搜索树相似。它将原始的软件层替换为以下结构:
上面的结构与二进制搜索树非常相似。树上的每个节点都是一个sigmoid divater。我们有10,000个单词,也就是说,输出层具有10,000个单位。根节点的前两个分类器会告诉我们结果是否在前5,000个,然后输入左子树,否则输入右子树。按顺序,我们最终将叶节点定位,即结果是第一个单词。
根据上述方法,我们将线性时间复杂性o(n)降低到几个时间复杂性o(logn),从而加速了输出层的操作。
在实践中,尤其是层次软体动物分类器不使用完美平衡的分类树或对称树,左右分支上具有相同数量的单词(上面的数字1中显示的分类树)。分类的SoftMax分类器将由顶部的通用单词组成。Harvman树通常在数据结构中用于特定实现。
有许多Word2Vec模型的培训样本。如果每个培训样本都更新了所有参数,则训练速度将很慢。为此,学者提出了负面抽样的方法,以减少每个培训中更新的样品数量。
我们将定义新的监督学习问题:给定一个单词对(例如橙色和果汁),预测这两个词是否是上下文目标对,也就是说,原始的SoftMax多类分类将转换为LogMoid多类别(一个与全部)逻辑回归。修理词汇中有10,000个单词,这等同于我们构建10,000个独立的逻辑回归模型。
一个阳性样品将选择多个负面样本,这些样本记录为K。在小数据集下,通常建议使用k服用5-20。如果数据集很大,则K值较小,例如2-5。
我们为10,000个单词构建一个独立的逻辑回归模型(即一个与全部的多类方法),然后在每个培训期间更新正面和负面样本的模型参数。这样,每次迭代都不需要训练SoftMax层的原始10,000个维度的许多参数(300万参数)。相反,我们只需要训练5个逻辑回归模型的参数(1500个参数)。训练的计算大大降低了
如何选择负样本?该算法有一个重要的细节可以选择负样本。一种方法是根据语料库中每个单词的经验概率进行采样,但会导致采样常用单词的频率。请勿完全考虑单词的实际频率。在负面采样中,负样本通常与单词成正比。越频繁的单词越大,被选择的概率就越大。概率公式如下:
F(WI)是语料库中单词的观察频率。通过3/4,有必要考虑单词语料库的频率,但也增加了用于低频单词的选择概率。
我以前曾引入过几种嵌入单词的算法。NLP字段中还有一个用于单词表示形式的全局向量。尽管它不如Word2Vec或Skip-gram那么简单,但它足够简单。
该算法介绍了我们使用xij表示j出现单词上下文的次数。因此,xij表示单词i和j。用窗口的频率来遍历整个训练文本,以获取常见的矩阵X。
如果上下文的含义在10个单词的范围内,您显然可以获得xij = xji,即对称。选择前者的定义。我们定义模型的优化目标(请参阅https://blog.csdn.net/coderticle/details/73864097):::
通过最小化上层公式,可以学习一些向量,可以同时预测两个单词的频率。在公式中的f(xij)中,f(xij)具有两个函数:
另外,由于手套的对称性,θ和e是对称的,或者优化目标的作用是相同的,因此,最终我们通常将它们的平均值用作最终单词矢量,也就是说:
尽管手套算法的优化函数非常简单(仅是次要成本函数),但结果确实有效,您可以学习嵌入的好单词。
尽管Word2Vec和Glove是最常用的单词嵌入模型之一,但它们也有一个严重的缺陷,也就是说,假设每个单词只有一个单词含义。多功能单词通常非常普遍,我们只使用一个单词嵌入来描述它。这是不合理的。例如,我们有一个“负担”一词,存在以下句子:
还有另一句话:
可以看出,在不同的上下文中,相同的单词“负担”具有不同的含义。在上面的示例中,我们将“负担”称为“负担”,以相同类型的不同句子,但它是不同的令牌。
为了解决上述缺陷,学者们提出了语言模型的嵌入,该模型实现了上下文化的嵌入,这是嵌入给token的单词,即使相同的单词是不同的,上下文是不同的,其单词嵌入式向量是不同的,这可以解决多个单词处理的缺乏word2vec。
ELMO模型的训练方法是使用基于RNN的语言模型。更多详细信息是两个-Way LSTM语言模型,并且word2vec Word嵌入式向量被用作训练Elmo单词的模型的输入。
BRNN和LSTM的知识已在我的神经网络序列模型中介绍。该Bi-LSTM语言模型是通过以前的所有单词和背后的所有单词,预测当前位置的正确位置,也就是说,以最大程度地提高条件当前位置正确单词的概率。可以使用SoftMax的横向熵损失函数来解决此优化问题。
应该注意的是,此处使用的BI-LSTM-LM是多层,它是Deep-Bi-LSTM-LM。我们在K时间的每一层中选择LSTM单元的输出,加权加权和加权的总和最终将当前句子的重量(即当前句子k单词的eLMO Word嵌入式向量,维度的维度和LSTM单元的尺寸隐藏层的尺寸倍于一致性乘以(每层LSTM的激活值)的尺寸是向后传输的激活值的剪接,因此是两次)。示意图可以指李·洪吉先生的ppt:
对于任务句子的第一个k单词,其Elmo矢量表达式为:每个句子都是唯一的,重量αTask乘以层的重量从0到L层,这是该层的激活值的总和。
为什么我需要将不同层的输出乘以不同的权重?因为研究人员发现在不同的层中嵌入适合不同的任务。外面,每层ELMO模型都不同,因此它会叠加以改进它们。测试结果表明,上层嵌入更适合语义理解,而下层则可以根据不同的任务设置单词和短语。
以上是常规培训语言模型Word2Vec,Glove和Elmo的基本知识。我在这里大致概括了它们。实际上,最好的预培训模型是Google的Bert模型。我将在下一个博客中介绍其原理。