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

时间:2019-08-12 21:53:40

标签: nlp word2vec glove

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

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

1 个答案:

答案 0 :(得分:1)

仅使用预先训练的bector来启动模型会消除一些随机性,但是在新语料库上的每个训练时期都如此:

  • 通过负采样(如果使用默认模式),频繁单词下采样(如果使用word2vec中sample参数的默认值)以及不同线程之间的相互作用仍然会带来随机性 li>
  • 您的新语料库的每个纪元都会将当前单词的词向量拉到该语料库的新的更好的位置 ,但保持原词不变。响应于所有单词的整体语料效应,许多时期内的净运动可以使单词任意移动到其起点之外。

因此,这样做不一定能以可靠(或理论上可辩驳)的方式实现您的目标,尽管这样做可能会起作用-至少比从纯粹的随机初始化开始更好-特别是如果您的语料库很小并且您进行几次训练。 (这通常是一个坏主意–您想要大量多样的训练数据和足够的通行证,以供额外的通行证使用,以使增量差异很小。但是在这种情况下,如果您做这些“错误”的事情,结果可能看起来“更好”,而您不希望这样做您对“太多”更改原始坐标空间的训练。我不会依靠这种方法。)

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

  • 将语料库组合为一个训练语料库,将其混合在一起,但是对于需要比较的单词,请用语料库专用标记替换它们。例如,将'sugar'替换为'sugar_c1''sugar_c2' –使得周围的绝大多数单词成为相同的标记(从而学习整个语料库中的单个向量)。然后,“相同单词”的两个变体标记将基于它们仍然共享许多相同标记的不同上下文学习不同的向量。

  • 使用一些您知道(或有把握地猜想)的“锚定”单词在两种情况下确实意味着相同,或者应该意味着相同,训练了两种模型,但学习了根据这些指导词在两个空间之间进行转换。然后,当您将该转换应用于其他词(不是用来学习该转换)时,它们将落在彼此空间的对比位置中,也许实现了您所需的比较。这是一种用于语言到语言翻译的技术,Python gensim库中包含helper classexample notebook

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

相关问题