如果我针对同一个单词(例如,“猴子”)计算word2vec,一次是基于1800年的一个大文本,另一次是基于2000年的一个大文本,那么结果从我的角度来看是无法比拟的。我对吗?为什么会这样呢? 我有以下想法:过去的文字可能具有完全不同的词汇,这就是问题所在。但是,如何才能治愈它(使嵌入具有可比性)?
谢谢。
答案 0 :(得分:1)
在Word2Vec
模型中,任何单词都没有“正确”的位置–在经过一堆推拉操作后,相对于其他单词和训练数据,该位置相当有效增量训练。实际上,每个模型都以低强度 random 位置的单词向量开始,并且训练本身包括设计的随机性(例如,通过随机选择要用作负对比示例的单词)和执行顺序的随机性(由于操作系统的任意CPU调度选择,多个线程以稍微不同的速率进行处理)。
因此,您的“ 1800年句子”和“ 2000年句子”模型将有所不同,因为培训数据是不同的-可能是因为作者的用法有所不同,而且每个语料库都很微小所有现有用法的样本。而且:仅仅连续两次对“来自1800样本”的语料进行训练,将得到不同的模型!就单词相对于同一模型中其他单词的相对距离/位置而言,每个这样的模型都应该与另一个模型差不多。但是单个单词的坐标可能会非常不同,并且是不可比的。
为了使单词“在相同的坐标空间中”,必须采取额外的步骤。单词在同一空间中最直接的方法是在相同的模型中一起训练它们,使它们交替出现在用法示例的对比中,包括其他常见单词。
因此,例如,如果您需要将“ calenture”(热带发烧的旧词,可能不会在您的2000年代语料库中)与“ penicillin”(在20世纪发现)进行比较,那么最好的选择是将两个语料库一起洗牌成一个语料库,并训练一个模型。如果每个单词都出现在两个时代出现的某些单词附近,并且含义相对稳定,那么它们的单词向量可能是可比的。
如果“猴子”只需要一个组合的词向量,此方法也可以满足您的目的。是的,一个单词的含义会随着时间的流逝而变化。但是,即使在任何单个时间点,单词都是多义的:它们具有多种含义。具有许多含义的单词的单词向量趋向于移动到它们的每个备选含义之间的坐标。因此,即使“猴子”的含义出现了漂移,但仍然存在这样的情况,即使用组合时代的语料库可能会给您一个“猴子”的向量,可以合理地代表其在所有时代的平均含义。
如果您特别想对单词随时间的变化建模,那么您可能需要其他方法:
您可能希望构建不同的时代模型,但要根据一些单词可能会变化很小而另一些单词会变化很多的想法来学习它们之间的翻译。 (有几种方法可以使用假定具有相同含义的某些“锚词”来学习单独的Word2Vec
模型之间的转换,然后将相同的转换应用于其他词以将其坐标投影到另一个模型中。) / p>
或者,建立一个组合模型,但是用特定于时代的备用标记替换您希望跟踪其变化含义的单词。 (例如,您可以视情况用'monkey @ 1800'和'monkey @ 2000'代替一定比例的'monkey'出现,以便最终得到三个单词向量猴子”,“猴子@ 1800”,“猴子@ 2000”,以便您比较不同的感官。)
HistWords项目是使用单词向量随时间跟踪含义的一些先前工作: