2011-05-18 53 views
23

我正在使用一些非常大的報紙文章數據庫,我將它們放在MySQL數據庫中,我可以查詢它們。如何自動標記所需的內容,算法和建議

我現在正在尋找方法來幫助我使用一些描述性標籤來標記這些文章。

所有這些產品是從類似如下的URL訪問:

http://web.site/CATEGORY/this-is-the-title-slug 

所以至少我可以使用類別來圖什麼類型的內容,我們正在處理。不過,我也想根據文章文字進行標記。

我最初的做法是這樣:

  1. 獲取所有文章
  2. 獲取所有的話,刪除所有標點符號,通過空間分割,併發生
  3. 算來對其進行分析和過濾常見的非 - 「我」,「這個」,「這些」,「他們的」等描述性詞彙。
  4. 當所有常用詞語被過濾出來時,唯一剩下的就是具有標籤價值的詞語。

但事實證明這是一個相當手動的任務,而不是一個非常漂亮或有用的方法。

這也受到空間分隔的單詞或名稱的問題,例如,如果1.000個文章包含名稱「John Doe」,1.000個文章包含「John Hanson」的名稱,那麼我只會獲得詞「約翰」,而不是他的名字和姓。

+0

相關文章:http://readwrite.com/2011/05/13/tagger – 2015-02-16 00:36:37

回答

16

自動標記文章確實是一個研究問題,當其他人已經完成大部分工作時,您可以花大量時間重新發明輪子。我建議使用現有的自然語言處理工具包之一,如NLTK

要開始,我會建議看看實現一個合適的Tokeniser(比空白分割好得多),然後看看Chunking和Stemming算法。

您可能還想要計算n-grams的頻率,即單詞序列,而不是單個單詞。這將照顧「按空間劃分的單詞」。像NLTK這樣的工具包具有內置的功能。

最後,當您迭代地改進算法時,您可能想要訓練數據庫的一個隨機子集,然後嘗試算法如何標記剩餘的一組文章以查看它的工作情況。

2

您的方法似乎很明智,您可以通過兩種方法改善標記。

  1. 使用已知的關鍵字/短語列表作爲您的標記,並且如果此單詞/短語的實例數大於閾值(可能基於文章長度),請包含標記。
  2. 使用part of speech tagging algorithm可幫助將文章縮減爲一組合理的短語,並使用合理的方法從中提取標籤。一旦你使用這種算法減少了文章,你將能夠找到一些很好的候選詞/短語用於方法1的關鍵字/短語列表中。
8

您應該使用的度量如tf-idf獲得標籤出來:

  1. 計數每個文檔每個詞的頻率。這是期限頻率,tf(t,D)。在文檔D中出現的術語越多,其對於D越重要。
  2. 每項計算該術語出現的文檔數量。這是文檔頻率,df(t)。 df越高,術語就會在您的文檔中區分並且它越不感興趣。
  3. 鴻溝TF由日誌DF的:TFIDF(d)= TF(d)/日誌(DF(d)+ 1)。
  4. 對於每個文檔,根據其tf-idf分數聲明排名前k是該文檔的標籤。

tf-idf的各種實現可用;對於Java和.NET,有Lucene,對於Python來說,有scikits.learn。

如果您想要做得比這更好,請使用language models。這需要一些關於概率論的知識。

6
+0

很有意思,會進一步調查,謝謝! – 2011-05-20 13:28:53

+2

這兩個鏈接斷開 – Houman 2015-05-05 13:27:38

4

如果我正確理解你的問題,你想組物品進入相似度類。例如,您可以將第1條指定爲「體育」,第2條指定爲「政治」等。或者,如果你的課程更加細化,相同的文章可能會分配給「達拉斯小牛隊」和「共和黨總統競賽」。

這屬於「聚類」算法的一般類別。這樣的算法有很多可能的選擇,但這是一個活躍的研究領域(意味着它不是一個解決的問題,因此沒有一個算法可能表現得很好)。

我建議你看看Latent Direchlet Allocation(http://en.wikipedia.org/wiki/Latent_Dirichlet_allocation)或'LDA'。我沒有任何可用的LDA實現的個人經驗,所以我不能推薦一個特定的系統(也許其他人比我可能會推薦一個用戶友好的實現更有見識)。

您可能還會考慮LingPipe中提供的凝聚式集羣實現(請參閱http://alias-i.com/lingpipe/demos/tutorial/cluster/read-me.html),儘管我懷疑LDA實現可能證明更可靠。

一對夫婦的問題,而你正在尋找集羣系統來考慮:

  • 你想允許小數類會員 - 例如考慮討論經濟前景及其對總統競選的潛在影響的文章;該文件是否屬於「經濟」類別,部分屬於「選舉」類別?一些聚類算法允許部分類別分配,有些不需要

  • 您是否想要手動創建一組類別(即列出'經濟','體育',...),還是您更願意學習數據中的一組類?人工類標籤可能需要更多的監督(人工干預),但如果您選擇從數據中學習,「標籤」可能對人類(例如,1級,2級等)沒有意義,甚至對這些課程的內容可能不是非常有益的。也就是說,學習算法會找到它認爲相似的相似性和聚類文檔,但是最終的聚類可能與您對「好」類應包含的想法不一致。

+0

沒有太多的聚類,我沒有任何預定義的關鍵字,這個想法是讓我們在決定哪些單詞不在黑名單之後讓它學習。我會看看LDA,謝謝! – 2011-05-20 13:30:46

2

如果內容是圖像或視頻,請查看以下博客文章:

http://scottge.net/2015/06/30/automatic-image-and-video-tagging/

基本上有自動提取圖像和視頻的關鍵字兩種方法。

  1. 多實例學習(MIL)
  2. 深層神經網絡(DNN),迴歸神經網絡(RNN),以及變型

在上述博客文章中,我列出了最新研究報告以說明解決方案。其中一些甚至包括演示網站和源代碼。

如果內容是一個大的文本文檔,請查看本博客文章:

最關鍵短語提取的API在市場 http://scottge.net/2015/06/13/best-key-phrase-extraction-apis-in-the-market/

謝謝,斯科特