word2vec,使用文档正文或关键字作为训练语料

word2vec, using document body or keywords as training corpus

我想使用每个文档的关键字和类别的无序列表来训练 word2vec 模型。因此,我的词汇量很小,大约 2.5k 个标记。

如果在训练步骤中使用文档中的实际句子,性能会有所提高吗?

来自示例:

doc_keywords = ['beach', 'holiday', 'warm']
doc_body = 'Going on a beach holiday it can be very warm'

如果使用完整文档有好处,有人能解释一下为什么会这样吗?

由于模型预测文档中的下一个词,如果 very 不在我的词汇表中,那么将 very -> warm 学习为两个经常一起出现的词有什么好处。

我的笔记可以概括为以下几点:

  • 首先,我认为传递关键字列表对 gensim.models.Word2Vec 模型没有任何帮助。正如您所说,使用 word2vec 的原因是为了以某种方式获得周围单词的感觉;它如何使用随机的关键字列表来完成这项工作?

  • 其次,词汇应该是文档中的相同词。所以,你的词汇量应该有very

  • 您使用的数据越多,模型就越有用。所以,2500 个代币不够大。例如,word2vec 的第一个版本是 Google 于 2014/2015 年发布的 Skipgram model。 Google使用的词汇量约为692,000个。

  • 可以使用两个版本的word2vec:"Skipgram"和"Continuous Bag of Words (CBOW)"。两者都取决于周围的词。您可以查看我的回答 以了解有关它们如何工作的更多信息。

您的数据集似乎很小——可能太小而无法获得良好的 word2vec 向量。但是,一个小的数据集至少意味着它不应该花太多时间以多种不同的方式进行尝试。

所以,最好的答案(也是唯一一个真正考虑到您的数据和项目目标中可能存在的独特性的答案):在训练时,您是否获得了更好的最终词向量,以满足您的项目特定需求只是关键字,还是更长的文档?

使用全文的两个潜在优势来源:

  • 那些不太有趣的词可能仍然有助于梳理完整向量 space 中含义的微妙之处。例如,'warm''hot' 之间的对比可能会在这些词被迫预测以不同比例与每个词共同出现的其他相关词时变得更加清晰。 (但是,word2vec 向量的这种品质需要大量细微变化的真实用法示例——因此在小型数据集中可能无法实现这种好处。)

  • 使用真实文本保留了原始的邻近影响——彼此靠近的词影响更大。仅关键字方法可能会扰乱那些原始的近似值,具体取决于您如何将原始全文转换为简化的关键字。 (特别是,您肯定 而不是 想要始终以某种数据库排序顺序报告关键字——因为这往往会在碰巧彼此相邻排序的关键字之间产生虚假影响, 而不是在自然语言中彼此相邻出现。)

另一方面,包含更多单词会使模型更大,训练速度更慢,这可能会限制您可以进行的训练或实验的数量 运行。而且,保留非常罕见的词——没有足够多的不同用法示例来获得好的词向量本身——往往会像 'noise' 一样稀释其他词向量的质量。 (这就是为什么删除稀有词,min_count 类似于其默认值 5 – 或者在更大的语料库中更大 – 几乎总是一个好主意。)

因此,没有确定的答案会更好:不同的因素和其他 data/parameter/goals 选择会导致不同的方式。你会想以多种方式尝试它。