以实际例子设置Word2Vec的参数

问题描述

我有一个包含大约 280 万条文本的数据库(更准确地说是推文,所以它们是短文本)。我将干净的推文(删除主题标签标签、停用词...)放在名为 sentences标记列表中(因此它包含每个推文的标记列表)。

经过这些步骤,如果我写

model = Word2Vec(sentences,min_count=1)

我获得了大约 400,000 个单词的词汇。

这只是一个尝试,我需要一些帮助来设置参数 (size,window,min_count,workers,sg) Word2Vec 以最合适和一致的方式。

考虑一下我的目标是使用

model.most_similar(terms)(其中 terms 是单词列表)

标记列表 sentences 中查找与 terms 中包含的词最相似的词。

terms 中的词属于同一主题,我想看看文本中是否还有其他词可能与该主题有关。

解决方法

一般来说,通常的做法是:

  • 从默认值开始,让事情最初在基线水平上工作,也许只是在更快地处理数据子集上。
  • 根据您的目的,制定一种客观的方法来确定一个模型是否优于另一个模型。这可能开始于对一些代表性探针的结果进行一系列临时手动比较 - 但应该成为一个可以自动对每个变体模型进行评分的过程,根据到一些定性的、可重复的过程。
  • 要么一一修改参数,要么对许多排列进行大规模搜索,以找出哪个模型最适合您的评分。

另外:word2vec 结果的质量几乎总是通过丢弃最稀有的词来提高,例如那些只出现一次的词。 (出于充分的理由,min_count 的默认值是 5。)

该算法无法从只出现一次或几次的单词中生成好的词向量。它需要多个不同的用法示例。但是,考虑到语料库中单词用法的典型 Zipfian 分布,有很多这样的罕见单词。丢弃它们可以加速训练,缩小模型,并从其他单词的训练中消除本质上的“噪音”——让那些剩余的词向量变得更好。 (如果你真的需要这些词的向量 - 收集更多数据。)