6

我需要问几个关于词嵌入的问题......可能是基本的。

  1. 当我们将单词的 one-hot 向量(例如 king )[0 0 0 1 0]转换为嵌入向量E = [0.2, 0.4, 0.2, 0.2]时……结果词向量中的每个索引是否有任何重要性?例如E[1],这是 0.2.... 具体E[1]定义的内容(尽管我知道它基本上是向另一个空间的转换).... 或词向量共同定义上下文但不是单独定义...
  2. 与原始的 one-hot 向量相比,词向量的维度(减少或增加)如何重要?
  3. 我们如何根据嵌入层定义查找表?
  4. 查找表是一种随机生成的表,还是已经针对数据中的数据实例进行了单独训练,我们稍后会在神经网络操作中使用它?5- 有什么方法可以在隐藏层可视化嵌入向量(就像我们在基于图像的神经网络处理中所做的那样)?

提前致谢

4

1 回答 1

7

1:嵌入向量中的每个元素(或一组元素)都有一定的意义,但对于人类来说大多是未知的。根据您使用的算法,词嵌入向量可能具有不同的含义,但通常很有用。例如,Glove、相似的词 'frog'、'toad' 在向量空间中彼此靠近。King - man 产生类似于 Queen 的向量。

  1. 将词汇转化为索引。例如,您有一个词汇表:[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]]

  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。一热向量和索引包含相同的信息,但是一热需要更多的内存来存储。此外,许多深度学习框架接受索引作为嵌入层的输入(其中,输出是表示该索引中单词的向量。)

“。我们如何得到这个嵌入向量......”

=> 阅读论文。这是关于Word2vecGlove的论文。向您的讲师询问更多详细信息,他们愿意为您提供帮助。

于 2017-07-03T15:24:22.327 回答