Word2Vec向量大小与扫描的单词总数之间的关系?

Rah*_*hul 4 machine-learning word2vec apache-spark-mllib

如果唯一字的总数大于10亿,则在word2vec算法中设置的矢量大小的最佳数目是多少?

我正在为word2vec使用Apache Spark Mllib 1.6.0。

示例代码:-

public class Main {       
      public static void main(String[] args) throws IOException {

        SparkConf conf = new SparkConf().setAppName("JavaWord2VecExample");
        conf.setMaster("local[*]");
        JavaSparkContext jsc = new JavaSparkContext(conf);
        SQLContext sqlContext = new SQLContext(jsc);

        // $example on$
        // Input data: Each row is a bag of words from a sentence or document.
        JavaRDD<Row> jrdd = jsc.parallelize(Arrays.asList(
          RowFactory.create(Arrays.asList("Hi I heard about Spark".split(" "))),
          RowFactory.create(Arrays.asList("Hi I heard about Java".split(" "))),
          RowFactory.create(Arrays.asList("I wish Java could use case classes".split(" "))),
          RowFactory.create(Arrays.asList("Logistic regression models are neat".split(" ")))
        ));
        StructType schema = new StructType(new StructField[]{
          new StructField("text", new ArrayType(DataTypes.StringType, true), false, Metadata.empty())
        });
        DataFrame documentDF = sqlContext.createDataFrame(jrdd, schema);

        // Learn a mapping from words to Vectors.
        Word2Vec word2Vec = new Word2Vec()
          .setInputCol("text")
          .setOutputCol("result")
          .setVectorSize(3) // What is the optimum value to set here
          .setMinCount(0);
        Word2VecModel model = word2Vec.fit(documentDF);
        DataFrame result = model.transform(documentDF);
        result.show(false);
        for (Row r : result.select("result").take(3)) {
         System.out.println(r);
        }
        // $example off$
      }
}
Run Code Online (Sandbox Code Playgroud)

goj*_*omo 5

没有答案:这取决于您的数据集和目标。

基于某些原始论文中偏爱的值,字向量的维数大小的常用值为300-400。

但是,最好的方法是创建某种特定于项目的定量质量得分-单词向量在您想要的应用程序中表现良好吗?–然后size像其他任何元参数一样进行优化。

另外,如果您确实拥有10亿个唯一的单词标记(即10亿个单词的词汇量),则在典型的系统环境中很难训练这些向量。(10亿个单词标记是Google发布的300万个向量数据集的333倍。)

10亿个300维字向量将需要(10亿* 300浮点数* 4字节/浮点=)1.2TB的可寻址内存(本质上是RAM)仅用于在训练期间存储原始向量。(神经网络在训练期间将需要另外1.2TB的输出权重,以及其他支持结构。)

与此相关的是,出现次数很少的单词不能从那少数的上下文中获得高质量的单词向量,但是仍然倾向于干扰附近单词的训练-因此,最小数量的单词0永远不是一个好主意,而丢掉更多的单词,频度词往往会加快训练速度,降低内存需求,并提高剩余词的质量。


Trn*_*nKh 4

根据研究,矢量表示的质量随着矢量大小的增加而提高,直到达到 300 维。300 维之后,向量的质量开始下降。您可以在此处找到不同向量和词汇大小的分析(参见表 2,其中 SG 指的是 Skip Gram 模型,它是 Word2Vec 背后的模型)。

您对向量大小的选择还取决于您的计算能力,即使 300 可能为您提供最可靠的向量,但如果您的机器计算向量的速度太慢,您可能需要减小大小。