在Spark中放置经过训练的Word2Vec模型



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

我将 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

我不确定"矢量.txt"之后的"元数据"从何而来。 我正在使用Spark,Scala和Scala IDE进行Eclipse。

我做错了什么? 有没有其他方法可以在Spark中加载预先训练的模型?将不胜感激任何提示。

你到底是如何得到矢量.txt的?如果你阅读JavaDoc for Word2VecModel.save,你可能会看到:

这样可以节省: - 人类可读 (JSON( 模型元数据到路径/元数据/- 拼花格式化数据到路径/数据/
可以使用 Loader.load 加载模型。

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

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

最新更新