如何处理此命名实体分类任务?

时间:2011-11-21 23:16:54

标签: python nlp machine-learning nltk

我在问一个相关问题here,但这个问题更为笼统。我带了一个大型语料库并用他们的命名实体注释了一些单词。就我而言,它们是特定于域的,我称之为:实体,动作,事件。我想将它们用作提取更多命名实体的种子。例如,以下是一句话:

  

当机器人出现技术故障时,物体被抛出但后来被另一个机器人抓住了。

标记为:

  

(机器人)/实体出现(技术故障)/事件时,   (对象)/实体(抛出)/操作,但稍后是(已捕获)/操作   (另一个机器人)/实体

给出这样的例子,无论如何我可以训练分类器来识别新的命名实体吗?例如,给出这样的句子:

  

纳米机器人有一个虫子,所以它撞到了墙上。

应该标记为:

  

(nanobot)/ Entity 有一个(bug)/ Incident ,所以(崩溃)/行动进入 (壁)/实体

当然,我知道100%的准确性是不可能的,但我有兴趣知道任何正式的方法来做到这一点。有什么建议吗?

3 个答案:

答案 0 :(得分:1)

这根本不是命名实体识别,因为没有标记的部分是名称,因此NER系统的功能集对您没有帮助(英语NER系统倾向于非常依赖大写并且更喜欢名词) 。这是一种信息提取/语义解释。我怀疑这在机器学习设置中会非常困难,因为你的注释确实不一致:

  

当(机器人)/实体有(技术故障)/事件时,(对象)/实体被(抛出)/动作但后来(被抓住)/动作被​​另一个机器人。

为什么“另一个机器人”没有注释?

如果你想解决这类问题,你最好从一些正则表达式开始,可能与字符串的POS标记版本匹配。

答案 1 :(得分:0)

我可以想到两种方法。

首先是句子中的模式匹配。像这样的东西(伪代码,虽然它类似于NLTK块解析器语法):

<some_word>+ (<NN|NNS>) <have|has|had> (<NN|NNS>) 
<NN|NNS> (<VB>|was <VB>) (<and|but> (<VB>|was <VB>))* <into|onto|by> (<NN|NNS>)

这两种模式可以(粗略地)捕捉到你的第一句话的两部分。如果你没有太多的句子,这是一个很好的选择。我相信通过精心挑选的模式可以获得高达90%的准确度。缺点是该模型难以扩展/修改。

另一种方法是挖掘句子中单词之间的依赖关系,例如Stanford Dependency Parser。除此之外,它允许挖掘对象,主语和谓词,这看起来与你想要的非常相似:在你的第一句话中,“机器人”是主语,“有”是谓词,“小故障”是对象。

答案 2 :(得分:0)

您可以在http://www.ormfoundation.com/尝试对象角色建模,它会查看一个或多个实体或名称之间的语义(事实)以及它们与其他对象的关系。还有一些工具可以将orm模型转换为xml和其他语言,反之亦然。见http://orm.sourceforge.net/