总而言之,我需要在一段时间内运行多个word2vec。例如,我每月要运行word2vec。为了减少计算工作量,我只想对上个月累积的数据运行word2vec。我的问题源于以下事实:要进行进一步处理,我需要使用前几个月运行的模型中的嵌入内容。
通过阅读其他文章,我知道,如果各个word2vec模型在不同的样本上运行,而每个样本都不是总体语料库的代表性样本,那么就不可能获得可比的词嵌入。我有一个类似的问题,我要分析随时间变化的网络数据(有效地做为graph2vec,但要分析节点行为)。
但是我一直想知道,使用PCA能否实现如下可比的嵌入:
仅当每个模型的嵌入的PCA转换确保生成的嵌入测量出“相同的东西”时,这才起作用。例如,每个PCA的第一个主要组成部分应捕获相同类型的信息,等等。这就是我不确定的问题。
答案 0 :(得分:0)
我认为您不能指望像这样分开运行的主要成分。
有了一组相关单词的“锚集”,您可以学习从一个word2vec空间到另一个空间的有用转换,以将仅彼此已知的单词进行投影。这是在语言翻译中最常用的方法,但也可以用于句点到句段的转换,其中您愿意说“这些词应被视为100%等价”的一组常用词将成为锚点。有关使用translation_matrix.ipynb
实用工具类的示例,请参见gensim docs/notebooks
目录或viewable online here中捆绑的TranslationMatrix
演示笔记本。
对于最强大的模型,您可能希望偶尔使用所有时期的 all 数据重新训练模型。只有以交错方式共同训练的单词才会出现在完全可比的位置。 (仅通过对子集进行训练来进行的任何``作弊''/优化都会倾向于将出现在该子集中的单词拉到仅对该子集最佳的位置,并远离那些仅在整个单词范围内出现的单词语料库。比较一下“ catatrophic forgetting”的概念。
在不确定是否可以正常工作的情况下,我可能会尝试以下混合方法:
以尽可能多的数据作为初始大训练,从尽可能强大的模型和尽可能多的词汇开始
如果不可能每个时期都进行全数据再训练,则创建一个包含(a)所有新数据的语料库; (b)对旧数据的一些随机样本-可以管理的尽可能大。在这种语料库上训练模型-但要使用“大模型”中尽可能多的可共享向量/权重对模型进行预初始化,以便大多数共享/常用词以有用且兼容的对齐方式开始
< / li>经过一段时间的培训后,选择“新单词”(在此期间出现第一个),以及任何“高影响力的单词”(在此期间为单词的整体出现做出很大贡献的时间) )中的所有其他词作为锚点,然后将“新模型”词转换回“大模型空间”。现在,它们应该与所有旧单词都具有可比性。 (而且,在两个模型中都出现了非锚词的情况,但是向后投影到某个不同的地方,可能是用法/意义漂移的有趣指示。)
(此随时间增长/适应字向量的问题与“微调”更多通用/公共字向量以匹配其他语料库的尝试有些相似,因此搜索有关“字向量精细”的已发表著作-调整”可能会提出更多相关的想法。)