如何将 One-Hot 编码值计算为 real-valued 向量?

How to calculate a One-Hot Encoding value into a real-valued vector?

在 Word2Vec 中,我了解到 CBOW 和 Skip-gram 都会产生一个 one-hot 编码值来创建一个向量 (cmiiw),我想知道如何计算或表示一个 One-Hot 例如,将值编码为 real-valued 向量(来源:DistrictDataLab's Blog about Distributed Representations) 由此: One-Hot Encoding's example 进入: One-Hot Encoding's example 请帮忙,我一直在努力寻找这些信息。

word2vec 算法本身就是增量学习具有不同维度值的实值向量的算法。

与单热编码相反,这些向量通常称为"dense embeddings"。它们是 "dense",因为与 "sparse" 具有许多维度且大部分为零值的单热编码不同,它们具有更少的维度并且(通常)没有零值。它们是 "embedding",因为它们将 "embed" 一组离散的词放入另一个连续坐标系中。

您需要阅读 original word2vec paper 以获得关于如何制作密集嵌入的完整正式描述。

但要点是密集向量完全随机开始,因此起初算法的内部神经网络对于预测相邻词毫无用处。但是来自文本语料库的每个(上下文)->(目标)单词训练示例都会针对网络进行尝试,并且每次使用与所需预测的差异来对单词向量进行微小的调整,以实现更好的预测和内部网络权重值。

重复多次,最初使用更大的微调(更高的学习率)然后使用更小的微调,密集向量将它们的坐标从它们的初始随机性重新排列为有用的相对排列——一个差不多一样好的考虑到模型本身的限制,尽可能预测训练文本。 (也就是说,任何进一步改进某些示例预测的微调,都会使其他示例恶化 - 所以您不妨考虑完成训练。)

然后,您从模型中读取生成的密集嵌入实值向量,并将它们用于邻近词预测以外的目的。