如何解决用于长、异构短语的 NER 标记器的替代方案?
我正在寻找有关以下问题的想法/想法:
我正在处理食品成分数据,例如:牛奶、糖、鸡蛋、面粉,可能含有坚果
我希望能够从这样的文本中识别和提取诸如可能包含坚果之类的短语,以分别对其进行预处理
这类短语在长度和内容方面可能会发生很大变化。我想过使用 NER 标记器,但我不知道它们是否能正确完成这项工作,因为它们主要用于识别单个单词实体...
关于使用什么作为短语实体识别系统的任何想法?另外你会使用哪个包?干杯
解决方法
恕我直言 NER(或一般的基于模型的实体提取)对于这个特定问题来说是一个糟糕的方法选择,因为它需要大量的手动注释才能正确完成。相反,我建议使用 Word2Vec (https://radimrehurek.com/gensim/models/word2vec.html) 和短语 (https://radimrehurek.com/gensim/models/phrases.html)。
这个想法是有一个包含短语及其相似性的无监督模型,然后可以使用一些种子词来查询以列出所有可能的成分(例如,“cat”产生类似的词,如“dog”或“rat”)。下一步是创建包含成分词和短语的词典,或者尝试使用每个词/短语对之间的余弦相似度对模型的词汇表进行聚类。
现在,如果您想更进一步,您可以随时将您创建的词典/集群与训练 W2V 模型的语料库进行匹配,然后使用这些匹配来训练自定义实体识别模型,因为您现在已经有了带注释的示例。>
,我认为这是一个 Multiword-Expression 问题。
您可以尝试几种方法来解决此问题:
- 构建命名实体识别模型 (NER)
- 使用正则表达式搜索一组固定的已知短语
- 使用 POS 标签对令牌进行分块
- 查找令牌的搭配
让我们来看看这些
构建命名实体识别模型 (NER)
Named Entity Recognition 将标记的已知范围标记为实体类型 对于每个输入标记,您必须将其标记为已知命名实体的一部分。
Eddy N PERSON
Bonte N PERSON
is V O
woordvoerder N O
van Prep O
diezelfde Pron O
Hogeschool N ORG
. Punc O
这很昂贵,并且需要大量时间进行标记。 这可能不是您的任务的好选择。
使用正则表达式搜索
这不是一个坏主意,使用一些已知的短语,您可以轻松地搜索输入文本,并使用最少的词边界进行上下文搜索。
import re
re.findall(r"\bmay contain nuts\b",text)
这需要您事先了解要搜索的所有短语,这可能是不可能的。
使用 POS 标签分块令牌
这可能是一个很好的中间步骤,但可能会产生很多 false positives。
你可以在知道你期望的 POS 标签序列的情况下做到这一点
may MD
contain VB
nuts NNS
然后您可以将 chunking 与已知标签序列 (MD,VB,NNS
) 一起使用。
问题是您可能不知道这一点,并且必须捕获许多用例。它还会捕获许多您不想捕获的序列(误报)
查找token的搭配
这可能是最好的方法,因为您似乎正在语料库中寻找高度常见的单词(标记)序列。
您可以使用:
两者都做同样的事情,他们寻找在语料库中出现的统计上常见的标记序列。
然后可用于从新文本中提取相同的搭配短语。
,看起来您的成分列表很容易分成一个列表。在这种情况下,您实际上并不需要序列标记器;我不会将此问题视为短语提取或 NER。我要做的是对列表中的不同项目训练分类器,将它们标记为“食物”或“非食物”。您应该能够从规则开始,并使用任何真正的东西训练一个基本的分类器。
在训练模型之前,一个更简单的步骤是通过 PoS 标记器(比如 spaCy)运行每个列表项,如果有动词,您可以猜测它不是食物。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。