我想在不同的语料库上训练两个word2vec / GLoVe模型,然后比较单个单词的向量。我知道这样做是没有意义的,因为不同的模型从不同的随机状态开始,但是如果我们使用预训练的词向量作为起点会怎样。我们是否可以假设这两个模型将通过合并各自的领域特定知识而继续在预训练向量的基础上构建,而不会进入完全不同的状态?
试图找到一些讨论该问题的研究论文,但找不到。
答案 0 :(得分:1)
仅使用预先训练的bector来启动模型会消除一些随机性,但是在新语料库上的每个训练时期都如此:
sample
参数的默认值)以及不同线程之间的相互作用仍然会带来随机性 li>
因此,这样做不一定能以可靠(或理论上可辩驳)的方式实现您的目标,尽管这样做可能会起作用-至少比从纯粹的随机初始化开始更好-特别是如果您的语料库很小并且您进行几次训练。 (这通常是一个坏主意–您想要大量多样的训练数据和足够的通行证,以供额外的通行证使用,以使增量差异很小。但是在这种情况下,如果您做这些“错误”的事情,结果可能看起来“更好”,而您不希望这样做您对“太多”更改原始坐标空间的训练。我不会依靠这种方法。)
特别是如果您需要比较的单词只是总词汇量的一小部分,那么您可以考虑以下几点:
将语料库组合为一个训练语料库,将其混合在一起,但是对于需要比较的单词,请用语料库专用标记替换它们。例如,将'sugar'
替换为'sugar_c1'
和'sugar_c2'
–使得周围的绝大多数单词成为相同的标记(从而学习整个语料库中的单个向量)。然后,“相同单词”的两个变体标记将基于它们仍然共享许多相同标记的不同上下文学习不同的向量。
使用一些您知道(或有把握地猜想)的“锚定”单词在两种情况下确实意味着相同,或者应该意味着相同,训练了两种模型,但学习了根据这些指导词在两个空间之间进行转换。然后,当您将该转换应用于其他词(不是用来学习该转换)时,它们将落在彼此空间的对比位置中,也许实现了您所需的比较。这是一种用于语言到语言翻译的技术,Python gensim
库中包含helper class和example notebook。
还有其他更好的方法,这只是两个快速的想法,可以在不对现有库进行太多更改的情况下起作用。像“ HistWords”这样的项目,它使用词向量训练来尝试跟踪词义随时间的变化,也可能对可用的技术有一些想法。