用于长、异构短语的 NER 标记器的替代方案?

如何解决用于长、异构短语的 NER 标记器的替代方案?

我正在寻找有关以下问题的想法/想法:

我正在处理食品成分数据,例如:牛奶、糖、鸡蛋、面粉,可能含有坚果

我希望能够从这样的文本中识别和提取诸如可能包含坚果之类的短语,以分别对其进行预处理

这类短语在长度和内容方面可能会发生很大变化。我想过使用 NER 标记器,但我不知道它们是否能正确完成这项工作,因为它们主要用于识别单个单词实体...

关于使用什么作为短语实体识别系统的任何想法?另外你会使用哪个包?干杯

解决方法

恕我直言 NER(或一般的基于模型的实体提取)对于这个特定问题来说是一个糟糕的方法选择,因为它需要大量的手动注释才能正确完成。相反,我建议使用 Word2Vec (https://radimrehurek.com/gensim/models/word2vec.html) 和短语 (https://radimrehurek.com/gensim/models/phrases.html)。

这个想法是有一个包含短语及其相似性的无监督模型,然后可以使用一些种子词来查询以列出所有可能的成分(例如,“cat”产生类似的词,如“dog”或“rat”)。下一步是创建包含成分词和短语的词典,或者尝试使用每个词/短语对之间的余弦相似度对模型的词汇表进行聚类。

现在,如果您想更进一步,您可以随时将您创建的词典/集群与训练 W2V 模型的语料库进行匹配,然后使用这些匹配来训练自定义实体识别模型,因为您现在已经有了带注释的示例。>

,

我认为这是一个 Multiword-Expression 问题。

您可以尝试几种方法来解决此问题:

  1. 构建命名实体识别模型 (NER)
  2. 使用正则表达式搜索一组固定的已知短语
  3. 使用 POS 标签对令牌进行分块
  4. 查找令牌的搭配

让我们来看看这些

构建命名实体识别模型 (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 举报,一经查实,本站将立刻删除。

相关推荐


依赖报错 idea导入项目后依赖报错,解决方案:https://blog.csdn.net/weixin_42420249/article/details/81191861 依赖版本报错:更换其他版本 无法下载依赖可参考:https://blog.csdn.net/weixin_42628809/a
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下 2021-12-03 13:33:33.927 ERROR 7228 [ main] o.s.b.d.LoggingFailureAnalysisReporter : *************************** APPL
错误1:gradle项目控制台输出为乱码 # 解决方案:https://blog.csdn.net/weixin_43501566/article/details/112482302 # 在gradle-wrapper.properties 添加以下内容 org.gradle.jvmargs=-Df
错误还原:在查询的过程中,传入的workType为0时,该条件不起作用 <select id="xxx"> SELECT di.id, di.name, di.work_type, di.updated... <where> <if test=&qu
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct redisServer’没有名为‘server_cpulist’的成员 redisSetCpuAffinity(server.server_cpulist); ^ server.c: 在函数‘hasActiveC
解决方案1 1、改项目中.idea/workspace.xml配置文件,增加dynamic.classpath参数 2、搜索PropertiesComponent,添加如下 <property name="dynamic.classpath" value="tru
删除根组件app.vue中的默认代码后报错:Module Error (from ./node_modules/eslint-loader/index.js): 解决方案:关闭ESlint代码检测,在项目根目录创建vue.config.js,在文件中添加 module.exports = { lin
查看spark默认的python版本 [root@master day27]# pyspark /home/software/spark-2.3.4-bin-hadoop2.7/conf/spark-env.sh: line 2: /usr/local/hadoop/bin/hadoop: No s
使用本地python环境可以成功执行 import pandas as pd import matplotlib.pyplot as plt # 设置字体 plt.rcParams['font.sans-serif'] = ['SimHei'] # 能正确显示负号 p
错误1:Request method ‘DELETE‘ not supported 错误还原:controller层有一个接口,访问该接口时报错:Request method ‘DELETE‘ not supported 错误原因:没有接收到前端传入的参数,修改为如下 参考 错误2:cannot r
错误1:启动docker镜像时报错:Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen 解决方法:重启docker -> systemctl r
错误1:private field ‘xxx‘ is never assigned 按Altʾnter快捷键,选择第2项 参考:https://blog.csdn.net/shi_hong_fei_hei/article/details/88814070 错误2:启动时报错,不能找到主启动类 #
报错如下,通过源不能下载,最后警告pip需升级版本 Requirement already satisfied: pip in c:\users\ychen\appdata\local\programs\python\python310\lib\site-packages (22.0.4) Coll
错误1:maven打包报错 错误还原:使用maven打包项目时报错如下 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources)
错误1:服务调用时报错 服务消费者模块assess通过openFeign调用服务提供者模块hires 如下为服务提供者模块hires的控制层接口 @RestController @RequestMapping("/hires") public class FeignControl
错误1:运行项目后报如下错误 解决方案 报错2:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project sb 解决方案:在pom.
参考 错误原因 过滤器或拦截器在生效时,redisTemplate还没有注入 解决方案:在注入容器时就生效 @Component //项目运行时就注入Spring容器 public class RedisBean { @Resource private RedisTemplate<String
使用vite构建项目报错 C:\Users\ychen\work>npm init @vitejs/app @vitejs/create-app is deprecated, use npm init vite instead C:\Users\ychen\AppData\Local\npm-