识别文章中的实体

时间:2015-10-21 06:34:10

标签: python machine-learning nlp nltk named-entity-recognition

我正在使用Python处理与数据科学相关的任务。我需要做的是 - 我已经提取了一些新闻文章,现在我想有选择地只选择那些属于特定人的新闻文章,并确定文章中提到的人是否是我感兴趣的同一个人。

假设一个人可以通过他的名字或描述该人的某些属性来识别,例如,名字为“X”的人是政治人物。当发表关于该人的文章时,我们只知道通过阅读文章的背景知道它指的是那个人。 “上下文”是指文章中是否包含任何(或以下组合):

  • 那个人的名字
  • 他的政党名称
  • 文章
  • 中提到的与他密切相关的其他人的姓名
  • 描述该人的其他属性

因为名字很常见,所以我想确定给定文章只谈论该人“X”的概率(概率)是多少,而不是任何其他与“X”同名的人。

2 个答案:

答案 0 :(得分:3)

好吧,这是我最好的拍摄。

初步假设

首先,我们假设您的文章已经包含人物提及,这些提及要么 a)提及您正在寻找的特定人物,要么 b)提到其他人的名字相同。

我认为消除每个提及的歧义(正如你在实体链接中所做的那样)是过度的,因为你还假设文章是关于这个人的。所以我们会说任何至少包含一个人的文章都是关于这个人的文章。

常规解决方案:文字分类

您必须开发一种分类算法,从文章中提取特征并将这些特征提供给您通过监督学习获得的模型。模型将输出两个答案中的一个,例如True或False。这需要训练集。出于评估目的(知道您的解决方案有效),您还需要一个测试集。

所以第一步是每次使用两个标签中的一个标记这些训练和测试集(“真”和“假”或其他)。您必须通过自己检查文章来手动分配这些标记。

使用哪些功能

@eldams提到使用上下文线索。在我的(尝试a)解决方案中,文章是上下文,所以基本上你必须问自己什么可能会泄露文章是关于特别是这个人。此时,您可以自己选择功能,也可以让更复杂的模型在更一般的功能类别中查找特定功能。

两个例子,假设我们正在寻找关于新当选的加拿大总理贾斯汀·特鲁多的文章,而不是其他任何名为贾斯汀·特鲁多的人。

A)自己选择功能

通过一些研究,你会发现Justin Trudeau是加拿大自由党的领导者,所以一些好的功能就是检查文章是否包含这些字符串:

  

加拿大自由党,PartiLibéralduCanada,LPC,PLC,Liberals,   Libéraux,JeanChrétien,Paul Martin等

由于特鲁多是政治家,所以寻找这些可能是一个好主意:

  政治,政治家,法律,改革,议会,公地等等

您可能希望收集有关其个人生活,亲密合作者,妻子和孩子的名字等信息,并添加这些信息。

B)让学习算法完成工作

你的另一个选择是使用训练集中的每个n-gram训练一个n-gram模型(例如使用所有unigrams和bigrams)。这导致更复杂的模型,而不是更强大,以及更重的训练和使用。

软件资源

无论您选择做什么,如果您需要训练分类器,您应该使用scikit-learn。它的SVM分类器将是最受欢迎的选择。 Naive Bayes是更经典的文档分类方法。

答案 1 :(得分:2)

此任务通常称为实体链接。如果您正在处理热门实体,例如那些在维基百科上有文章的人,那么你可以看看解决这个问题的DBpedia SpotlightBabelNet

如果您想要实现自己的链接器,那么您可能需要查看related articles。在大多数情况下,命名实体链接器检测提及(您的案例中的人名),然后需要消歧步骤,该步骤计算可用引用的概率(和NIL作为提及可能没有参考资料),对于文本中的任何具体提及,以及使用上下文线索(例如句子,段落或包含提及的整篇文章)。