我最近开始研究斯坦福NLP(使用C#端口(。 我计划使用 NER 来识别商店位置名称和产品名称 - 为此,我需要训练标记器,我正在这样做。
但是,某些位置(例如"国王十字"(只有在两个令牌在一起时才应真正被视为位置。 即我不希望"国王"在句子中单独使用时被标记为位置。
所以我的问题实际上是:是否有一种定义的方式来建议我处理其中有空格的位置/名称(在我的训练文件和代码中(?
感谢您的任何帮助。
您的两个选项是训练统计标记算法并希望它执行正确的操作,或者使用regexner
注释器并为其提供已知命名实体的列表。 例如,在已知命名实体的列表中,您可以包含Kings Cross
条目,并且只有在看到完整的短语Kings Cross
时才起作用。
有关regexner
的更多文档,请参阅此处:
https://nlp.stanford.edu/software/regexner.html
在NER中处理此问题的标准方法是使用IOB标签或某些变体。使用 IOB 的标签可能如下所示:
I O
went O
to O
Kings B-PLACE
Cross I-PLACE
其中O
的意思是"没有标签",B-XXX
的意思是"XXX的开始",I-XXX
的意思是"在XXX中"。
标记系统将学习多字令牌,从B
开始,有时继续使用I
标记;这只是另一个标记转换。要从您刚刚演练的标记器输出中收集多字令牌,请为任何B
创建一个条目,并将I
附加到其中。