预测词向量而不是词(自然语言处理)

Posted

技术标签:

【中文标题】预测词向量而不是词(自然语言处理)【英文标题】:Predicting word vectors instead of words (Natural Language Processing) 【发布时间】:2022-01-23 20:09:33 【问题描述】:

我想知道是否有任何尝试使用例如 mean 来预测 词嵌入向量 作为神经网络架构(如 Transformer、Sequence-to-Sequence-Models 或简单 RNN)中的目标平方误差 作为损失函数,而不是使用 softmax 将单词预测为类别。找不到有关该主题的任何文章。有人知道这方面的任何文件,或者如果不知道没有这样做的原因吗?

澄清一下

以 Cho 等人提出的简单编码器-解码器-架构为例。 2014 (https://arxiv.org/abs/1406.1078)。在此类模型中(生成单词序列),softmax 激活函数通常用于输出层以预测目标单词。如果您的词汇表中有 30,000 个单词,则输出层需要 30,000 个神经元。

我现在的问题是:为什么不在输出层预测单词,为什么不将目标单词表示为向量呢?实际上,当使用像 fastTextvec2words 这样的预训练向量表示时,这应该很容易实现。这样的向量空间使用例如 300 个浮点值来描述一个词。可以首先查找向量空间中的每个目标词,然后使用描述该词的浮点数而不是词本身(作为一个类别)作为目标。然后模型将预测向量表示的浮点值。当使用这样的模型来预测一个词(或一个词序列)时,我们会简单地使用预测值来查找向量空间中最接近的词。

这个过程的优势应该是双重的。 首先,它将显着减少输出层中的神经元数量(从 30,000 个减少到 300 个)。 第二,从理论的角度来看,训练这样一个模型会导致对模型更好的潜在“语言理解”,因为向量表示在语义和语法上都很丰富,而单词只是单一的类别.

【问题讨论】:

请澄清您的具体问题或提供更多详细信息以准确突出您的需求。正如目前所写的那样,很难准确地说出你在问什么。 【参考方案1】:

您所描述的本质上是一个连体网络,其中结果是嵌入,而损失是基于示例之间的相似性。

该网络确实使用了稍微复杂一点的损失函数,称为三元组损失,它基于最大化不同示例之间的距离并最小化相似示例之间的距离。

我建议阅读 this link 或其他任何关于 Siamese Networks 主题的文章

【讨论】:

谢谢 - 这其实很有趣。然而,这正朝着不同的方向发展。我的意思是:例如,当使用 word2vec 或 fastText 之类的词向量时,目标词的维度实际上是已知的。那么为什么不使用具有 300 个单位的输出层并预测该词的向量表示,而不是将该词作为一个类别呢? 当然可以。 Word2vec 实际上有点类似于神经网络的结构,并且肯定可以适应以类似的方式起作用。您可以通过(例如)使最后一个线性层具有 200 个神经元来预测向量表示。然而,问题在于找到合适的损失函数,因为我们在您描述的问题中并没有真正的“目标”。相反,必须使用 siamese 网络领域的某些东西(如三元组损失)来计算损失

以上是关于预测词向量而不是词(自然语言处理)的主要内容,如果未能解决你的问题,请参考以下文章

自然语言处理之词向量模型介绍

用深度学习来获取文本语义: 词向量应用于自然语言处理

词向量

预测句子中的缺失词 - 自然语言处理模型 [关闭]

13.深度学习(词嵌入)与自然语言处理

自然语言处理Word2Vec 词向量模型详解 + Python代码实战