2014-03-13 33 views
8

在NLP中,停用詞移除是一個典型的預處理步驟。它通常是基於我們認爲的停止詞應該以經驗方式完成的。可以自動找到停用詞嗎?

但在我看來,我們應該概括停用詞的概念。對於來自不同領域的語料庫,停用詞可能會有所不同。我想知道我們是否可以用數學方法來定義停用詞,比如它的統計特徵。然後,我們可以自動提取特定域的語料庫中的停用詞。

在這方面有沒有類似的想法和進展?任何人都可以點亮一下嗎?

回答

3

停用詞通常比其他語義詞出現得更頻繁...因此,在構建我的應用程序時,我使用了兩者的組合;一個固定的清單和統計方法。我正在使用NLTK,它已經有一些常見的停用詞的列表;所以我首先刪除了出現在這個列表中的單詞,但是當然這並沒有刪除所有的停用單詞......正如你已經提到停用單詞不同於語料庫和語料庫。然後我評估出現在語料庫中的每個單詞的頻率,並刪除頻率高於「特定限制」的單詞。我提到的這個特定限制是我在觀察所有單詞的頻率之後所固定的值...因此,這個限制也取決於語料庫和語料庫......但是一旦您仔細觀察所有單詞列表按照它們的頻率順序排列這些詞...這種統計方法將確保您刪除不出現在常用停用詞列表中的停用詞...之後,爲了優化數據,我還使用了POS標記。並刪除了前兩步後仍然存在的專有名詞。

1

停用詞無處不在。它們將出現在每個(或幾乎每個)文檔中。數學上定義來自不同域的語料庫的停用詞的一種好方法是計算一個詞的inverse document frequency (IDF)

IDF是頻率計算中定義停用詞的更好方法,因爲簡單的頻率計算受到幾次包含多次特殊詞彙的專業文檔的不利影響。此方法已用於自動學習外語中的停用詞(參考文獻Machine Learning with SVM and Other Kernel Methods)。

1

實際上,構建停用詞的常用方法是僅使用最常見的(在文檔中,即通過DF)單詞。建立前100,200,1000字的列表,以及回顧他們。只需瀏覽列表,直到找到一個詞,您認爲該詞應該是而不是是一個停用詞。然後考慮跳過它,或者在這一點上打破這個列表。

在許多數據集中,您將擁有特定於域的停用詞。例如,如果您使用StackOverflow,「java」和「c#」很可能是停用詞(實際上這不會造成太大的損害;特別是如果您仍然使用這些標籤)。其他領域特定的停止詞可以是「代碼」,「實施」,「程序」。

3

我不是專家,但希望我的回答有道理。

從語料庫中統計提取停用詞聽起來有趣!除了使用普通停用詞列表中的常規停用詞(如NLTK中的停用詞)之外,我會考慮計算逆文檔頻率,如其他答案中所述。阻止詞不僅從語料庫到語料庫各不相同,它們也可能因問題而異。例如,在我工作的其中一個問題中,我使用了新聞文章的語料庫,在那裏您發現了大量時間敏感和位置敏感的詞語。這些都是至關重要的信息,統計上刪除諸如「今天」,「這裏」等詞語會對我的結果產生深刻的影響。因爲,新聞報道不只是談論一件特別的事件,而且也談論過去或其他地方發生的類似事件。

我的觀點,簡而言之,就是您需要考慮解決的問題,而不僅僅是語料庫。

感謝, 拉姆亞

1

是的,停的話,可以自動檢測。

詞頻作爲一個整體

的方法之一是看詞頻作爲一個整體。

計算組合文本中所有單詞的頻率。按降序對它們進行排序,並刪除前20%左右。

您也可能希望刪除底部的5%。這些不是停止詞,但是對於很多機器學習來說,它們是不重要的。甚至可能拼寫錯誤。每個「文件」

另一種方法是分析每個詞「的文件。」

在一組文檔中,可以通過查找大量文檔中存在的單詞來檢測停用詞。它們在這個特定集合中對文檔進行分類或聚類是沒有用的。

E.g.對科學論文進行分類的機器學習系統可能會在分析後將「抽象」這個詞標記爲停用詞,即使它可能只對每個文檔存在一次。但幾乎所有的可能性。

對於只能在數量非常有限的文檔中找到的單詞也是如此。它們可能拼寫錯誤或者獨一無二,他們可能再也看不到了。

但是,在這種情況下,學習集中文檔組之間的分佈是均勻的,或者分爲一大組和小組的一組可能會丟失其所有重要詞(這是因爲它們可能存在於太多文檔中或者太少)。

另一種避免訓練集中分佈不均的問題的方法是隻刪除所有或幾乎所有文檔中存在的詞。 (即所有英文文本中都有我們最喜歡的停用詞,如「a」,「it」,「the」,「an」等)。

齊普夫定律

當我學習機器學習和停止字的討論上來,齊普夫定律被提及。然而,今天我不能告訴你如何或爲什麼,但也許這是一個普遍的原則或數學基礎,你想看看...

我GOOGLE「Zipf的法自動停止詞檢測」和一個快速採摘發現我兩個PDF文件可能會感興趣......

相關問題