2015-10-20 31 views
1

這可能是一個相當基本的NLP問題,但我手邊有以下任務:我有一組文本文檔,需要根據(英文)術語詞典進行評分,這些詞彙可能是1-,2-,3-等N -word long。 N以一些「合理」數字爲界,但詞典中n = 1, ..., N不同值的分佈可能相當一致。例如,這個詞典可以包含某種類型的設備列表,我想查看給定的文檔是否可能與這些設備中的任何一個有關。所以如果它有一個或多個詞典條目出現,我想要得到高(er)的文檔。應用NLP:如何根據多詞術語詞典對文檔進行評分?

什麼是標準的NLP技術在計算可能出現在詞典中的各種形式的單詞時進行評分?輸入文檔和詞典都需要進行哪種預處理才能進行評分?預處理和評分有什麼樣的開源工具?

+0

您可能想要搜索術語「詞彙化」 - 將單詞的幾種形式組合在一個標題下(引理或根)。如果你掃描[machine-learning](http://stackoverflow.com/questions/tagged/machine-learning)標籤,你會發現很多工具參考:MLlib,SciKit Learn,SCLearn等。一個相當新的一個是開源的是可信分析平臺(我在軟件團隊中)。 – Prune

回答

2

我在近一年前研究了LSI和主題建模,所以我所說的應該只是一個指針,給你一個關於在哪裏看的總體思路。

有很多不同的方法可以實現不同程度的成功。這是information retrieval領域中的一個難題。您可以搜索topic modeling以瞭解不同的選項和最先進的技術。

如果單詞可能以不同的形式出現,那麼您肯定需要一些預處理和規範化。如何NLTK和詞幹之一:

>>> from nltk.stem.lancaster import LancasterStemmer 
>>> st = LancasterStemmer() 
>>> st.stem('applied') 
'apply' 
>>> st.stem('applies') 
'apply' 

你有術語的詞彙,我要打電話方面也是一堆文件。我將探索一種非常基本的技術,根據術語對文檔進行排名。你可以閱讀更多更復雜的方法,但是如果你不是在尋找過於複雜和嚴格的東西,我認爲這可能就足夠了。

這被稱爲矢量空間IR模型。術語和文檔都轉換爲k維空間中的向量。爲此,我們必須構建一個逐個文檔的矩陣。這是在其中的數字表示在文件的術語的頻率的樣品基質:

enter image description here

到目前爲止,我們有使用3×4矩陣,其中每個文件可通過3維陣列(每列)來表達。但隨着術語數量的增加,這些陣列變得太大而且越來越稀疏。此外,還有許多詞彙,如Iand,這些詞彙在大多數文檔中都沒有添加太多語義內容。所以你可能想忽略這些類型的單詞。對於龐大和稀疏的問題,您可以使用稱爲SVD的數學技術,該技術可縮小矩陣,同時保留其包含的大部分信息。

此外,我們在上面的圖表中使用的數字是原始計數。另一種技術是使用布爾值:1表示存在,0表示文檔中沒有術語的零。但是,這些假設單詞具有相同的語義權重。實際上,稀有詞比常見詞有更多體重。因此,編輯初始矩陣的一種好方法是使用排名函數如tf-id爲每個詞指定相對權重。如果現在我們已經將SVD應用到了我們的加權逐個文檔矩陣,我們可以構造k維查詢矢量,它們只是一個權重項的數組。如果我們的查詢包含同一個術語的多個實例,則會使用頻率和術語權重的乘積。

我們需要做的事情有些簡單。我們通過分析它們的cosine similarities將查詢向量與文檔向量進行比較,這將成爲文檔相對於查詢排序的基礎。