我已经下载了100亿词的Google新闻预训练向量文件。此外,我还用自己的3GB数据训练了另一个预训练向量文件。两个文件都有300个特征维度,并且大小都超过1GB。
我该如何合并这两个巨大的预训练向量?或者如何训练一个新模型并在另一个模型的基础上更新向量?我发现基于C的word2vec不支持批量训练。
我希望从这两个模型中计算词类比。我相信从这两个来源学习到的向量会产生相当好的结果。
回答:
没有直接的方法可以合并独立训练会话的最终结果。
即使是完全相同的数据,由于初始种子或线程调度抖动的轻微随机化,也会导致不同的最终状态,使得向量只能在同一会话内完全可比。
这是因为每个会话都会找到一个有用的向量配置…但有很多同样有用的配置,而不是一个最佳配置。
例如,无论你达到的最终状态如何,都有许多旋转/反射可以在这个训练预测任务上同样有效,或者在其他任务(如解决类比)上表现得同样好。但大多数这些可能的替代方案的坐标不能混合和匹配以进行有用的比较。
用之前训练运行的数据预加载你的模型可能会在用新数据进行更多训练后改善结果,但我不知道对这种可能性的任何严格测试。效果可能取决于你的具体目标、参数选择,以及新旧数据的相似程度,或者它们在最终将使用向量的数据中所代表的程度。
例如,如果Google新闻语料库与你自己的训练数据不同,或者与你将使用词向量来理解的文本不同,那么将其作为起点可能会减慢或偏向你的训练。另一方面,如果你在新数据上训练的时间足够长,最终任何预加载值的影响都可能被稀释到无。 (如果你真的想要一个“混合”的结果,你可能需要同时在新数据上训练,并以一个交错的目标来将向量推向之前数据集的值。)
结合独立会话的结果的方法可能是一个很好的研究项目。也许在word2vec语言翻译项目中使用的方法——学习词汇空间之间的投影——也可以“翻译”不同运行的不同坐标。也许锁定一些向量,或者在“预测新文本”和“保持接近旧向量”这两个双重目标上进行训练,会给出有意义的改进的组合结果。