1:嵌入向量中的每个元素(或一组元素)都有一定的意义,但对于人类来说大多是未知的。根据您使用的算法,词嵌入向量可能具有不同的含义,但通常很有用。例如,Glove、相似的词 'frog'、'toad' 在向量空间中彼此靠近。King - man 产生类似于 Queen 的向量。
将词汇转化为索引。例如,您有一个词汇表:[dog, cat, mouse, feed, play, with] 然后是句子: Dog play with cat => 0, 4, 5, 1 同时,您有如下嵌入矩阵
[0.1, 0.1, 0] # 评论:这是狗
[0.2, 0.5, 0.1] # 这是猫
[...]
[...]
[...]
[...]
其中第一行是狗的嵌入向量,第二行是猫,依此类推然后,您使用索引 (0, 4, 5, 1) 查找后将变为矩阵 [[0.1, 0.1, 0][... ][...][0.2, 0.5, 0.1]]
- 一个或两个
- 您可以随机初始化嵌入向量并使用梯度下降对其进行训练
- 您可以采用预训练的词向量并将其保持固定(即:只读,无变化)。您可以在模型中训练您的词向量并在另一个模型中使用它。您可以在线下载预训练的词向量。示例 Common Crawl(840B 令牌,2.2M 词汇,大小写,300d 向量,2.03 GB 下载):glove.840B.300d.zip on Glove
- 您可以使用预训练的词向量进行初始化,并通过梯度下降使用您的模型进行训练
更新:
One-hot 向量不包含任何信息。您可以认为 one-hot 向量是该向量在词汇表中的索引。例如,Dog => [1, 0, 0, 0, 0, 0] 和 cat => [0, 1, 0, 0, 0, 0]。one-hot 与 index 之间有一些不同:
如果你输入一个索引列表:[0,4,5,1] 到你的多层感知器,它不能学习任何东西(我试过......)。但是如果你输入一个单热向量的矩阵 [[. ..1][1...][...][...]],它学到了一些东西。但它在 RAM 和 CPU 方面的成本很高。
One-hot 会消耗大量内存来存储零。因此,如果您没有嵌入矩阵,我建议随机初始化嵌入矩阵。将数据集存储为索引,并使用索引查找嵌入向量
“这意味着查找表只是词汇表中每个单词的嵌入向量矩阵(已经通过 word2vec 或...单独训练过)。在神经网络过程中,我们可以使用嵌入层,也可以只需在查找表中针对特定的 one-hot 向量引用特定嵌入向量的嵌入向量。”
使用“索引”在查找表中查找。把狗变成0,把猫变成1。一热向量和索引包含相同的信息,但是一热需要更多的内存来存储。此外,许多深度学习框架接受索引作为嵌入层的输入(其中,输出是表示该索引中单词的向量。)
“。我们如何得到这个嵌入向量......”
=> 阅读论文。这是关于Word2vec和Glove的论文。向您的讲师询问更多详细信息,他们愿意为您提供帮助。