2016-01-28 24 views
3

將tf.idf轉換應用於spark中的新文檔的最佳方法是什麼?我有一個設置,在該設置中我離線訓練模型,然後加載它並將其應用於新文件。基本上,如果無法訪問模型IDF分佈,計算IDF沒有多大意義。新文檔的Spark IDF

到目前爲止,我認爲唯一的解決方案是保存訓練集的TF RDD,並將新的doc添加到它,然後calcualte IDF RDD並從IDF RDD中提取新文件。問題在於我必須將整個TF矢量保存在內存中(我猜它也可能與IDF RDD一起下載)。

這看起來像是一個人已經有的問題,所以尋求建議,以瞭解最好的方法。

乾杯,

伊利亞·

回答

3

你不需要RDDS可言。 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方法對其進行序列化。

+0

我在想這些。謝謝。所以IDFModel存儲了訓練集的所有idf frequncies,對。 – ilijaluve

+0

它的確如此。 IDF只是詞彙表中每個標記的單個數字。你甚至可以使用'idf.idf' – zero323

+0

太棒了!非常感謝! – ilijaluve

相關問題