在 Spark 中加载经过训练的 Word2Vec 模型

Loadiing a trained Word2Vec model in Spark

我正在尝试将 google 的预训练向量 'GoogleNews-vectors-negative300.bin.gz' Google-word2vec 加载到 spark 中。

我将 bin 文件转换为 txt 并创建了一个较小的块用于测试,我称之为 'vectors.txt'。我尝试按以下方式加载它:

      val sparkSession = SparkSession.builder
  .master("local[*]")
  .appName("Word2VecExample")
  .getOrCreate()

  val model2= Word2VecModel.load(sparkSession.sparkContext, "src/main/resources/vectors.txt")

  val synonyms = model2.findSynonyms("the", 5)

  for((synonym, cosineSimilarity) <- synonyms) {
    println(s"$synonym $cosineSimilarity")
  }

令我惊讶的是,我遇到了以下错误:

Exception in thread "main" org.apache.hadoop.mapred.InvalidInputException: Input path does not exist: file:/home/elievex/Repository/ARCANA/src/main/resources/vectors.txt/metadata

我不确定 'vectors.txt' 之后的 'metadata' 是从哪里来的。 我正在为 Eclipse 使用 Spark、Scala 和 Scala IDE。

我做错了什么?有没有其他方法可以在 spark 中加载预训练模型?非常感谢任何提示。

你是怎么得到vector.txt的?如果您阅读 Word2VecModel.save 的 JavaDoc,您可能会看到:

This saves: - human-readable (JSON) model metadata to path/metadata/ - Parquet formatted data to path/data/
The model may be loaded using Loader.load.

所以您需要的是 Parquet 格式的模型,这是 Spark ML 模型的标准格式。

不幸的是,从 Google 的本机格式加载尚未实现(请参阅 SPARK-9484)。