用于新文档的 Spark IDF

ili*_*uve 5 machine-learning apache-spark apache-spark-mllib

将 tf.idf 转换应用于 spark 中的新文档的最佳方法是什么?我有一个设置,可以在其中离线训练模型,然后加载它并将其应用于新文件。基本上,如果无法访问模型 IDF 分布,则计算 IDF 没有多大意义。

到目前为止,我想到的唯一解决方案是保存训练集的 TF RDD 并将新文档附加到其中,然后计算 IDF RDD 并从 IDF RDD 中提取新文件。这样做的问题是我必须将整个 TF 向量保存在内存中(我想它也可能与 IDF RDD 相关)。

这看起来像是某人已经遇到的问题,因此请寻求建议并了解最佳方法。

干杯,

伊利亚

zer*_*323 4

你根本不需要 RDD。TF 不依赖于您拥有的数据(如果您使用固定大小表示而不进行哈希处理,则还依赖于词汇表),而 IDF 只是一个可以表示为向量且仅依赖于词汇表的模型。

因此,您唯一需要保留的就是IDFModel. 假设您使用的转换看起来或多或少像这样:

val hashingTF = new HashingTF()
val tf: RDD[Vector] = hashingTF.transform(rdd) 

val idf = new IDF().fit(tf)
val tfidf: RDD[Vector] = idf.transform(tf)
Run Code Online (Sandbox Code Playgroud)

唯一对新数据的进一步操作有用的是idf变量。虽然它没有save方法,但它是本地可序列化对象,因此您可以使用标准 Java 方法来序列化它。