我正在构建一个生成文本模型,最后一层的输出是生成词的词嵌入(向量)。我的任务是将这个向量转换回实际的单词。
有没有一个很好的算法来做这个反转?我正在考虑使用全连接/密集层,但随后它与原始(前向)嵌入层分离。理想情况下,我认为最好以某种方式使用嵌入层的参数进行反演。
我正在构建一个生成文本模型,最后一层的输出是生成词的词嵌入(向量)。我的任务是将这个向量转换回实际的单词。
有没有一个很好的算法来做这个反转?我正在考虑使用全连接/密集层,但随后它与原始(前向)嵌入层分离。理想情况下,我认为最好以某种方式使用嵌入层的参数进行反演。
没有一种“正确”的方法可以将词向量转回单词。问题是单词本身在嵌入空间中形成了一组离散的点,因此模型的输出不太可能完全等于任何单词的位置。
通常,如果您的模型发出向量然后通过找到一个词来将其解释为一个词带嵌入这样很小,即是“接近”的嵌入. 选择距离函数取决于您,尽管通常使用余弦相似度。根据应用程序,您还可以考虑显示顶部-与您的词向量相似的词,这可以提供更多的多样性。
我确实喜欢在架构末端使用解码器网络的想法。这使您可以在 one-hot 编码的单词上进行训练。然后你的输出将是你词汇表中单词的概率分布。然后,您可以从概率分布中随机抽取。在某些方面,您得到的更多是可能单词的“涂抹”。更可能的词将有更高的机会被选中。
这当然会给你一个概率响应词。假设您没有修复种子,该算法的第二次运行将导致输出略有不同。
如果您查看 seq2seq 模型和转换器,通常这样做的方式是使用 softmax 层输出 one-hot 编码向量。基本上,输出将是一个向量,其长度是词汇表的大小。