2013-04-03 63 views
2

我試過在這裏和那裏搜索它,但找不到任何好的解決方案,所以儘管問了nlp專家。我正在開發一個文本相似性查找應用程序,爲此我需要匹配成千上萬的文檔(每個約1000字)。對於nlp部分,我最好的選擇是NLTK(看到它的功能和Python的算法友好性。但是現在當詞性標註本身需要很長時間時,我相信nltk可能不是最合適的。傷害我,因此任何解決方案都適用於我 請注意,我已經開始從mysql遷移到hbase,以便在如此大量的數據上工作更多的自由度,但仍存在問題,如何執行algos。是一種選擇,但這也是機器學習,不是專門用於nlp的(可能對語音識別有好處)還有什麼其他可用的選擇,主要是我需要高性能的nlp(從高性能機器學習中退出) (我對Mahout傾向了一點,看到未來的用法)如何提高NLTK的性能?備擇方案?

它是關於縮放nltk。

+2

NLTK很慢;它對原型設計最有用。考慮[Gensim](http://radimrehurek.com/gensim/),這是更具可擴展性。 –

回答

1

您可以使用Mahout來查找哪些文檔與其他文檔最相關。

這是一個快速教程(link),它將教會你一些概念,但最好在Mahout in Action書的第8章中解釋它們。

基本上,你需要先在Hadoop的代表數據SequenceFile格式,您可以使用seqdirectory命令,但是這有可能成爲太慢,因爲它會希望每個文檔作爲它自己的文件(所以如果你有「成千上萬的文檔」I/O將受到影響。)This post與它談論如何從CSV文件創建SequenceFile有關,其中每行都是文檔。雖然,如果我沒有弄錯,Mahout的主幹可能有一些功能。您可能想要在Mahout用戶郵件列表中詢問。

然後,在您的文檔以Hadoop SequenceFile格式表示後,您需要應用seq2sparse命令。可用命令行選項的完整列表位於本書的第8章,但您可以戳出該命令的幫助提示符,並且它會給出一個命令列表。您需要的命令之一是-a,它是您要使用的(lucene?)文本分析器的類名,這裏是您去除停用詞,詞幹擾,刪除標點符號等的地方......默認分析器是org.apache.lucene.analysis.standard.StandardAnalyzer

然後用rowid命令將您的數據表示爲矩陣。

之後,您使用rowsimilarity命令獲取最相似的文檔。

希望這會有所幫助。

+0

謝謝@Julian。我肯定會嘗試。我想知道我們是否可以使用專用nlp庫(如Opennlp/nltk等)的nlp功能以及mahout的可伸縮性?就像將來我需要分析句子中的所有pos標籤一樣,那麼我可能需要使用nltk,但如果數據集很大,mahout是明顯的選擇。這是混亂。 – akshayb

+0

我不知道那些圖書館。但是請注意,如果你需要速度,你可能想看看[minhashing](http://en.wikipedia.org/wiki/MinHash) –

+0

謝謝,看着它。一個重要的事情,那就是可以解決各地人們的問題 - 我已經開發了一種在nltk中進行聚類的算法。我找回了各種pos標籤和其他漂亮的東西。現在來了可擴展性。我們如何使用nltk實現可伸縮性?是Mahout嗎?或者是其他東西?這是真正的問題。 – akshayb