逆词嵌入:向量到词

机器算法验证 词嵌入
2022-03-25 17:11:26

我正在构建一个生成文本模型,最后一层的输出是生成词的词嵌入(向量)。我的任务是将这个向量转换回实际的单词。

有没有一个很好的算法来做这个反转?我正在考虑使用全连接/密集层,但随后它与原始(前向)嵌入层分离。理想情况下,我认为最好以某种方式使用嵌入层的参数进行反演。

4个回答

没有一种“正确”的方法可以将词向量转回单词。问题是单词本身在嵌入空间中形成了一组离散的点,因此模型的输出不太可能完全等于任何单词的位置。

通常,如果您的模型发出向量v然后通过找到一个词来将其解释为一个词w带嵌入vw这样d(v,vw)很小,即v是“接近”的嵌入w. 选择距离函数d取决于您,尽管通常使用余弦相似度。根据应用程序,您还可以考虑显示顶部-k与您的词向量相似的词,这可以提供更多的多样性。

你熟悉自动编码器吗?它们是根据两个网络定义的:编码器解码器,它们通常是对称的。一般假设是,要从潜在表示中解码数据,您可能需要类似的架构,就像编码它所需要的那样。虽然在许多情况下重用来自编码器的权重是可能的并且看起来很合理,但定义分隔解码器网络是更流行的解决方案,因为它更简单。

嵌入是浮点数,要将它们转换为单词,您需要一个将数字映射到单词的函数。有很多方法可以实现这一点,例如使用循环神经网络逐字节创建单词,或者n-克由n-gram,或者预测单词的one-hot编码(通常单词数量很大,所以需要近似解),可以考虑预测单词前后出现的单词和使用等。有没有单一的最佳方法,因为这是特定于问题的。

我确实喜欢在架构末端使用解码器网络的想法。这使您可以在 one-hot 编码的单词上进行训练。然后你的输出将是你词汇表中单词的概率分布。然后,您可以从概率分布中随机抽取。在某些方面,您得到的更多是可能单词的“涂抹”。更可能的词将有更高的机会被选中。

这当然会给你一个概率响应词。假设您没有修复种子,该算法的第二次运行将导致输出略有不同。

如果您查看 seq2seq 模型和转换器,通常这样做的方式是使用 softmax 层输出 one-hot 编码向量。基本上,输出将是一个向量,其长度是词汇表的大小。