使用CRF为NER标记实体的更好方法是什么

时间:2018-07-23 08:21:04

标签: python nlp rasa-nlu crf ner

我目前正在开发自定义的命名实体识别器,以便识别4种类型的实体:汽车,设备,日期,问题。

为此,我将sklearn-crfsuite中的rasa_nlu与NER_crf一起使用。但是,在标记数百个句子之前,我问了自己两个问题,但没有找到答案:

  1. 例如,“在1月31日,AA-075-ZP的车轮摩擦增大了”。 标记“ 1月31日”更好吗?或“ 1月31日”。作为日期?与“轮子”或“轮子”作为设备的问题相同。

我看了CRF如何工作。据我了解,单词w被分类为实体e1的可能性取决于该单词在其他文档中已经被标记为e1的事实,还取决于它跟随单词w2标记为e2的事实,而且我们经常在标记为e2的单词之后看到标记为e1的单词。

然后,问题是:更喜欢实体标记序列还是实体标记内容? 说日期在“开”之后还是由“开”组成以便检测该日期是否更有趣?

  1. 我的样品经常是对问题的描述,例如:“ 1月31日,AA-075-ZP的车轮摩擦增大。这是由...和....引起的。 “不再对汽车产生影响,已更换了四种橡胶” 将“橡胶”标记为一种设备是否很有趣,考虑到它是在较长描述的末尾出现的,而且我大部分时间只想获取文本中的第一个实体?增加橡胶的出现次数(从而使橡胶有更多机会被标记为设备),但同时也要重视“大量单词之后出现的设备”的模式?

提前谢谢

1 个答案:

答案 0 :(得分:1)

您似乎对NER的工作方式感到困惑。您正在尝试训练模型,以便可以编写如下功能的函数:

sentence = "On Jan 31st. I went to Neptune, and then on Feb 3rd I went to Pluto."
get_dates(sentence) # => ['Jan 31st', 'Feb 3rd']
get_places(sentence) # => ['Neptune', 'Pluto']

要训练模型,请在函数输出中标记想要的单词。因此,请勿在单词周围标记上下文。如果功能正常,您可以将标签视为函数输出的示例。

  

标记“ 1月31日”是否更好?或“ 1月31日”。作为约会?

您不希望“打开”,因此请勿对其进行标记。 “开”不是日期的一部分。

  

更喜欢实体标记序列还是实体标记内容?

您标记内容,以便模型可以学习序列。查看通用NER模型的训练数据。

  

考虑到它是长描述的结尾,并且我大多数时候只想获取文本中的第一个实体,将“橡胶”标记为设备是否有趣?

这取决于您的应用程序。如果您对程序进行了培训,并要求提供设备清单,那么“橡胶”应该列入清单吗?如果是这样,则应该对其进行标记。

相关问题