0

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

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

4

1 回答 1

1

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

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

因此,这样做不一定以可靠(或理论上可辩护)的方式实现您的目标,尽管它可能有点工作 - 至少比从纯粹随机初始化开始更好 - 特别是如果您的语料库很小并且您很少进行培训时代。(这通常是一个坏主意——你想要大量不同的训练数据和足够的通过次数来增加额外的通过次数,以产生很小的增量差异。但是在这种情况下,做这些“错误”的事情可能会让你的结果看起来“更好”,在这种情况下,你不想要你的训练改变了原来的坐标空间“太多”。我不会依赖这种方法。)

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

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

  • 使用您知道(或自信地推测)的一些“锚定集”单词在两种上下文中的含义相同,或者应该具有相同的含义,训练两个模型,但根据这些引导词学习两个空间之间的转换。然后,当您将该转换应用于其他未用于学习转换的单词时,它们将落在彼此空间中的对比位置,可能会实现您需要的比较。这是一种用于语言到语言翻译的技术, Python库中包含一个帮助程序类示例笔记本。gensim

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

于 2019-08-13T16:57:31.320 回答