2015-10-21 28 views
2

我正在使用Python處理數據科學相關任務。我需要做的是 - 我已經提取了一些新聞文章,現在我想有選擇地選擇屬於特定人的新聞文章,並確定文章中提到的人是否是我感興趣的同一個人。識別文章中的實體

假設一個人可以通過他的名字或描述該人的特定屬性來識別,例如,名字爲「X」的人是一個政治人物。當發表關於該人的文章時,我們'知道'它只是通過閱讀文章的上下文來提及那個人。通過「語境」我的意思是,如果文章包含任何(以下或組合):

  • 那人的名字
  • 他的政黨在提到與他密切相關的其他人的
  • 名稱的名稱描述這個人的文章
  • 其他屬性

因爲名字很常見,我要確定什麼是概率(多少概率)指定的文章談到那個人僅限於「X」而不是與「X」具有相同名稱的任何其他人。

+1

你看過這個:http://www.nltk.org/book/ch07.html#named-entity-recognition – reynoldsnlp

+0

@bebop,這並不能解決我的問題,因爲我不是要識別所有的文本提及已命名的實體。我想確定在給定的文章中提到的人「X」是我所尋找的同一個人的概率。 –

+0

我可以想出一個涉及監督式學習的解決方案,即在「這就是那個人」和「這不是那個人」之間的分類。你有多少篇關於這個人的名字?他們都是關於那個人的,還是一些關於其他同名的人的文章? – HugoMailhot

回答

2

此任務通常被稱爲實體鏈接。如果您正在研究流行實體,例如那些在維基百科中有文章的人,那麼你可以看看DBpedia SpotlightBabelNet這個問題。

如果你想實現自己的鏈接器,比你可能看看related articles。在大多數情況下,命名實體鏈接器會檢測到提及(您的案例中的人名),然後需要消歧步驟計算可用引用的概率(並且NIL可能沒有可用的引用)文本中的任何具體提及,以及使用上下文線索(例如句子,段落或包含該提及的整個文章的詞語)。

+0

感謝您提出問題! – HugoMailhot

+0

不客氣:) – eldams

3

好吧,這是我最好的拍攝。

最初設想

首先,我們假設你有一個已經包含的人提到了文章,而這些提到要麼a)您正在尋找或B中的特定人的提到)提及其他人分享相同的名字。

我認爲消除每個提及(正如你在實體鏈接中所做的那樣)是矯枉過正的,因爲你還假定這些文章或者是關於這個人或者不是。所以我們會說任何包含至少一個人的文章都是關於這個人的文章。

通用的解決方案:文本分類

你必須開發出從文章中提取特徵和飼料的功能,您通過監督學習獲得的模型的分類算法。該模型將輸出兩個答案中的一個,例如True或False。這需要一套訓練集。爲了評估目的(瞭解您的解決方案的工作原理),您還需要測試集。

因此,第一步是使用兩個標籤中的一個標籤(「True」和「False」或其他)來標記這些訓練和測試集。您必須手動分配這些標籤,方法是自行檢查文章。

哪些功能使用

@eldams提及使用上下文線索。在我的(嘗試)解決方案中,文章就是上下文,所以基本上你必須問自己,可能會泄露文章是關於特定人的。此時,您可以自己選擇要素,也可以讓更復雜的模型在更一般的要素類別中查找特定要素。

兩個例子,假設我們正在尋找關於新當選的加拿大總理賈斯汀特魯多的文章,而不是其他任何人也被命名爲賈斯汀特魯多的文章。

A)選擇功能自己

有了一點研究,你會學到賈斯汀特魯導致加拿大的自由黨,讓一些很好的功能是檢查文章是否包含這些字符串:

自由加拿大自由黨黨杜加拿大,LPC,PLC,自由黨, Libéraux,讓·克雷蒂安,保羅·馬丁等黨

由於特魯多是政治家,尋找這些可能是一個好主意:

政治,政治家,法律改革,國會下議院,等

您可能希望收集有關信息他的私人生活,親密的合作者,妻子和孩子的名字等等,並且增加這些。

B)讓學習算法做的工作

你的其他選擇是利用一切正克也有訓練集來訓練n元模型(例如使用所有對unigram和雙字母組) 。這導致了一個更復雜的模型,它可以更加健壯,而且更重要的是訓練和使用。

軟件資源

無論你選擇做什麼,如果你需要訓練一個分類,你應該使用scikit-learn。它的SVM分類器將是最流行的選擇。 Naive Bayes是更經典的文件分類方法。

+0

不錯的解決方案!確實,scikit-learn是一個非常方便的軟件,無可否認會實現機器學習部分。關於功能,通常,方法將提及的內容(句子,段落,文章)與描述參考的文本(例如維基百科文章)進行比較。 – eldams

+0

@HugoMailhot,我認爲你已經擊中了頭部。國際海事組織(IMO)將上述方法(A)和(B)結合起來構建特徵應該能夠提供更準確的結果,即與n-gram混合的一組手寫詞(通過研究維基百科上的該實體)。我必須嘗試看看哪些方法最好,但總的來說,它似乎指向了正確的方向。你有什麼特別的理由推薦通過NLTK學習scikit嗎? –

+0

另外,我想獲得一個分數,所以我相信我在分類器中獲得的「準確度」數字,例如'nltk.classify.util.accuracy'可以給我一個準確性分數?謝謝! –