我们可以使用迁移学习比较来自不同模型的词向量吗?

Can we compare word vectors from different models using transfer learning?

我想在不同的语料库上训练两个 word2vec/GLoVe 模型,然后比较单个词的向量。我知道这样做没有意义,因为不同的模型从不同的随机状态开始,但是如果我们使用预训练的词向量作为起点会怎样。我们是否可以假设这两个模型将通过结合各自的领域特定知识继续建立在预训练向量的基础上,而不是进入完全不同的状态?

试图找到一些讨论这个问题的研究论文,但找不到。

简单地用预训练的 bectors 开始你的模型会消除一些随机性,但是在你的新语料库上的每个训练时期:

  • 负采样(如果使用默认模式)、频繁词下采样(如果使用 word2vec 中 sample 参数的默认值)以及不同线程的相互作用仍然会引入随机性
  • 使用新语料库的每个时期都会将当前单词的单词向量拉到新的、更好的位置对于那个语料库,但保持原始单词不变。许多时期的净运动可以将单词从它们开始的地方任意移动,以响应对所有单词的整体语料库效应。

因此,这样做不一定能以可靠的(或理论上可辩护的)方式实现您的目标,尽管它可能有点效果——至少比从纯随机初始化开始更好——尤其是当你的语料库很小的时候而且你几乎没有训练 epochs。 (这通常是个坏主意——你需要大量不同的训练数据和足够多的传递来进行额外的传递以产生很小的增量差异。但是在这种情况下,做这些事情 "wrong" 可以使你的结果看起来 "better"不希望你的训练改变原始坐标-space "too much"。我不会依赖这种方法。)

特别是如果您需要比较的词只占总词汇量的一小部分,您可以考虑以下几点:

  • 将语料库合并成一个训练语料库,打乱,但对于那些你需要比较的词,用语料库特定的标记替换它们。例如,将 'sugar' 替换为 'sugar_c1''sugar_c2' —— 将周围的绝大多数单词保留为相同的标记(从而在整个语料库中学习单个向量)。然后,"same word" 的两个变体标记将根据它们仍然共享许多相同标记的不同上下文学习不同的向量。

  • 使用一些 "anchor set" 你知道(或自信地推测)的词要么在两种情况下意思相同,要么 应该 意思同样,训练两个模型,但根据这些引导词学习两个 space 之间的转换。然后,当您将该转换应用于未用于学习转换的其他单词时,它们将落在彼此的 spaces 中的对比位置,maybe实现您需要的比较。这是一种用于语言到语言翻译的技术,Python gensim 库中包含一个 helper class and example notebook

可能还有其他更好的方法,这只是两个可能在不对现有库进行太大更改的情况下起作用的快速想法。像“HistWords”这样的项目,它使用词向量训练来尝试跟踪词义随时间的演变变化,也可能对可用技术有想法。