用于新文档的 Spark IDF

Spark IDF for new documents

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

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

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

干杯,

伊利亚

您根本不需要 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)

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