当前位置: 首页 > 科技观察

除了自然语言处理之外,您还可以使用词嵌入(Word2Vec)_0

时间:2023-03-22 15:26:30 科技观察

使用机器学习方法解决问题时,拥有正确的数据非常关键。不幸的是,原始数据通常是“脏”的和非结构化的。自然语言处理(NLP)的从业者对此深有体会,因为他们处理的数据是文本。由于大多数机器学习算法不接受原始字符串作为输入,因此在将数据输入学习算法之前使用词嵌入来转换数据。但这不仅存在于文本数据的上下文中,它还可以以分类特征的形式存在于其他标准的非自然语言处理任务中。事实上,我们中的许多人都在为这种分类特征过程而苦恼,那么词嵌入方法在这种场景中的作用是什么?这篇文章的目的是展示我们如何使用词嵌入方法Word2Vec(2013年,Mikolov等人),将具有大量模态的分类特征转换为较小的易于使用的数字特征集.这些特征不仅易于使用,而且成功地学习了几种模态之间的关系,这类似于经典词嵌入处理语言的方式。Word2Vec看到它的同伴并知道它的意思。(Firth,J.R.1957.11)上面描述了Word2Vec的目标:它试图通过分析它的邻居(也称为上下文)来确定一个词的含义。该方法有两种不同风格的模型:CBOW模型和Skip-Gram模型。给定一个语料库,模型循环遍历每个句子的单词,要么根据当前单词预测它的邻居(上下文),要么根据当前上下文预测当前单词,前者描述的方法称为“Skip-Gram”,后者被称为“连续的词袋,连续的词袋(CBOW)”。每个上下文中的单词数限制由称为“窗口大小,WindowSize”的参数确定。因此,如果选择Skip-Gram方法,Word2Vec使用浅层神经网络,即只有一个隐藏层的神经网络来学习wordembeddings。网络首先随机初始化它的权重,然后使用单词来预测它的上下文,并在训练过程中迭代调整这些权重以最小化它所犯的错误。预计经过一个比较成功的训练过程后,可以通过网络权重矩阵与词的one-hot向量相乘得到每个词的词向量。注意:除了允许文本数据的数字表示之外,由此产生的嵌入还可以学习单词之间有趣的关系,这些关系可用于回答以下问题:国王之于王后之于父亲……什么?如果想了解更多Word2Vec的细节,可以看看斯坦福大学的课程(https://www.youtube.com/watch?v=ERibwqs9p38),或者TensorFlow的相关教程(https://www.tensorflow.org/tutorials/word2vec)。应用我们在Kwyk平台(https://www.kwyk.fr/)上提供在线数学练习。老师给学生布置作业,每次练习完成时都会存储一些数据。然后,我们使用收集到的数据来评估每个学生的水平,并为他们提供量身定制的评论以帮助他们进步。对于解决的每个练习作业,我们存储了一系列标识符以帮助我们区分以下信息:这是什么练习?学生回答的是谁?它属于哪个章节?....除此之外,我们还保存一个分数,0或1,具体取决于学生是否成功解决了问题。然后,为了评估学生的分数,我们必须预测这个分数并从我们的分类器中获得学生的成功概率。如您所见,我们的许多功能都是可分类的。通常,当模态数量足够少时,您可以简单地将n模态分类特征转换为n-1维虚拟变量并用于训练。但是当模态有数万个级别时——就像我们的一些应用程序中的情况一样——依赖虚拟变量是低效且不切实际的。为了解决这个问题,我们通过一个小技巧使用Word2Vec将分类特征转换为数量相对较少的可用连续特征。为了说明这个想法,让我们以“exercise_id”为例:exercise_id是一个分类特征,它告诉我们解决了哪个练习问题。为了能够使用Word2Vec,我们提供了一个语料库,它是一个句子序列,将被输入到我们的算法中。然而,原始特征只是一个ID列表,它本身并不是一个语料库:它的顺序是完全随机的,相似的ID不携带其邻居的信息。我们的技术涉及将教师布置的作业视为“句子”,即一系列exercise_ids。结果就是所有的ID自然会和level、chapter等标签一起收集起来,然后Word2Vec就可以直接在这些句子上开始学习练习的embedding(exerciseembedding,对应Wordembedding)。事实上,正是由于这些人工句子,我们才能够使用Word2Vec获得漂亮的结果:正如我们所见,生成的嵌入是结构化的。事实上,3D投影的练习云呈螺旋状,较高级别的练习紧跟在较低级别的练习之后。这也意味着嵌入成功地学会了区分不同级别的练习项目,并将具有相似级别的练习项目重新组合在一起。但这还不是全部,在使用非线性降维技术后,我们可以将整个嵌入降为具有相同特征的实值变量。换句话说,我们得到一个关于习题复杂度的特征,最小的是6年级(6th),随着习题越来越复杂,这个变量越来越大,直到12年级达到这个最大值多变的。更重要的是,就像Mikolov对英语单词所做的那样,嵌入也学习了练习之间的关系:上图显示了我们的嵌入能够学习的关系的一些示例。因此,当我们问“加法练习等于减法练习,就像加时练习等于……?”时,嵌入给出了以下答案:“时间减法练习”。具体来说,这意味着如果我们提出以下问题:Embedding[subtract(Numbers)Substract(Numbers)]--embedding[Add(Numbers),Add(Numbers)],并将其添加到学生练习的嵌入中,其中学生被要求添加时间(例如,小时、分钟等),最接近的嵌入将是涉及时间减法的练习。结论总之,词嵌入可用于将文本数据转换为机器学习算法可以直接使用的实值向量。虽然词嵌入主要用于机器翻译等自然语言处理应用,但我们给出的Kwyk中使用的具体例子表明,这些技术对于分类特征处理也很有用。然而,为了使用诸如Word2Vec之类的技术,您必须构建一个语料库——即一组句子,标签已经安排好,因此它们的上下文已经隐式创建。在上面的示例中,我们使用网站上给出的作业来创建练习“句子”并学习练习嵌入。结果,我们能够获得新的数值特征,这些特征成功地学习了比分配给它们的原始标签集更有用的练习之间的关系。感谢我们的Kwyk开发人员之一ChristopheGabar,他提出了在分类特征上使用word2vec的想法。原文链接:https://medium.com/towards-data-science/a-non-nlp-application-of-word2vec-c637e35d3668