如何在OpenNLP中训练Tokenizer?

时间:2016-06-15 08:05:24

标签: java nlp tokenize stringtokenizer opennlp

我目前在OpenNLP中使用空白标记生成器,它会在找到空格的任何地方对标记进行标记。 所以,如果我有一句话:

My hobbies are reading books, magazines, Roller skating and playing football.

现在,如果我想从该句中得到爱好,我想要将句子标记化,而不是基于空格而是基于逗号的标记化。

我怎样才能做到这一点?

编辑1:  主要问题是在训练NER模型后,我将其应用于令牌。因此,它不会认识到轮滑'因为在代币中他们会以“滚动”的形式出现。并且'滑冰'并且NER模型现在无法识别这种爱好。

1 个答案:

答案 0 :(得分:1)

我没有具体的答案(我不会想到),但您可能需要考虑一些问题和要点。

令牌器是否需要知道这些是逗号分隔的爱好?如果是这样,你就会遇到更大的问题,那就是标记化。如果没有,您仍然会遇到如何处理以逗号分隔的部分的结尾的问题。顺便说一句,在这种情况下逗号用法是错误的,因为轮滑后应该有一个逗号。我有一种感觉,你实际上需要建立一个名为实体的识别模型"而不是一个标记器,但希望我的评论会让你更进一步(可能无处可去)

例如, 如果你用逗号标记你的句子,你就会得到这些标记:

My hobbies are reading books
magazines
Roller skating and playing football.

不会将轮滑与踢足球分开,也不会知道任意句子中的逗号之间是什么。

所以,简单的答案是OpenNLP并没有真正做到基于上下文的标记化,"你必须以自己的方式推动这种逻辑。

以下是一些想法

  • 使用句子chunker创建标记...这将基于名词短语和动词短语等,这可能是有用的

  • 使用NER模型提取"业余爱好"实体,这将是嘈杂但它会给你一些概率代币

  • 使用正则表达式查找所需内容并根据正则表达式命中创建令牌。

举一个例子,这就是句子推出的句子。

NP: My hobbies
VP: are reading
NP: books
NP: magazines
NP: Roller skating and playing football

并且你可以假设动词短语(VP)是动作方面,而名词短语(NP)是' ...我不知道为什么chunker没有'看到作为一个动词播放,但这是NLP的方式......你总是可以寻找'和'在NP中并且分开,但是你做的任何事我保证你会发现一段文字会使它变得糟透了。

请记住,您在列车时使用的任何标记化方法都必须在分类时使用。

希望这会有所帮助,但我感觉它不会有多大帮助。

UPDATE IN RESPONSE TO THE OP EDIT

NER(NameFinder)将在单个令牌数组中找到多个令牌实体;所以不要担心。从nameFinder.find()方法返回的Span对象是句子标记的头部和尾部。具有多部件名称是很常见的。现在,如果您特别是NER模型没有返回多部分名称,这是一个不同的故事,您可能需要培训更多数据,不要将其归咎于标记化。