如何为以数字为主的数据提取注释和训练数据 [英] How to annotate and train data for predominantly numeric data extraction

查看:19
本文介绍了如何为以数字为主的数据提取注释和训练数据的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试从非结构化文本中提取信息。例如

这位首席执行官最近征求了对正在开发的卡车增加功能的建议,他透露了一些计划中的功能,比如400至500英里的续航里程选项、带有动态悬架的双电机四轮驱动动力总成、300,000磅的牵引能力等。当被问及发布日期时,首席执行官给出了2021年第二季度的估计时间。

理想的输出应该类似于

[minRange = 400, maxRange = 500, allWheelDrive = TRUE, susepnsionType = 'Dynamic', releaseDate = 2021-04-01 00:00]

因为我要提取的数据并不总是以行为良好的对的形式组织起来的(例如,上面的RelaseDate提取需要对整个句子进行语义处理),正则表达式和一些规则可能不够用。我认为我需要注释我的数据集,然后使用NLP和学习工具(如Spacy、NLTK或Stanford NLP)从未来的示例中提取属性-值对。

我正在尝试使用在线资源/教程,但它们似乎都只专注于命名实体识别或提取与基于字符串的实体的关系(例如,LOC:paris,Rel:is Capital of,LOC:France)。我需要提取的大部分(不是全部)数据都是属性-数值对。我如何使用NLP工具来实现这一点?在大多数情况下,我只是不确定这些数字是否应该被视为实体,如果是,它们是应该被注释为名为"Value"的实体,还是应该被赋予一个具有关联属性的实体名称。例如,这两个选项中哪一个是更好的注释方式?:

  1. 该<;product>Vehicle<;product>的拖曳能力为<;Towing_CAP>30万磅<;Towing_CAP>
  2. 该<;product>车辆<;product>的拖曳能力为<;Value>30万磅<;Value>,关系:"有拖曳能力"

推荐答案

如果您继续使用空格,我将避免尝试识别NER中的数字,因为它们在解析器的依赖关系树中已经被识别为QUANTITY

>>> import spacy
>>> text = "We have a towing capacity of 5,000 lbs"
>>> nlp = spacy.load('en_core_web_lg')
>>> doc = nlp(text)
doc.print_tree()
<stdin>:1: DeprecationWarning: Positional arguments to Doc.merge are deprecated. Instead, use the keyword arguments, for example tag=, lemma= or ent_type=.
[{'word': 'have', 'lemma': 'have', 'NE': '', ...{'word': 'of', ... 'modifiers': [{'word': '5,000 lbs', 'lemma': '5,000 lbs', 'NE': 'QUANTITY', 'POS_fine': 'NNS', 'POS_coarse': 'NOUN', 'arc': 'pobj', 'modifiers': []}]}]}]}]
您可以训练ner管道来学习PRODUCT这样的新标签,但我强烈建议您阅读catastrophic forgetting问题,即模型将在您钻研新标签时"忘记"旧标签。我曾与一位同事在培训NER识别COMPANY为标签时遇到过这种情况。

我可能会做的不是训练NER识别每个特征,我可能会训练它将FEATURE识别为一个实体,然后向它提供"全轮驱动"或"越野悬挂"之类的东西,这样您就可以从一段文本中聚合所有的FEATURE,而不是针对每个文本进行训练。当然,这取决于你想从NLP得到什么的最终结果。我提出这个建议的唯一原因是,我认为车辆上的可能选项的数量会越来越多(例如,你会在理想的输出中包括雷达巡航功能吗?)而拥有一个包罗万象的东西会让事情变得更容易一些。同样,这取决于您在此处的最终目标

这篇关于如何为以数字为主的数据提取注释和训练数据的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆