Nlp 如何对数据进行注释和训练,以便提取以数字为主的数据

Nlp 如何对数据进行注释和训练,以便提取以数字为主的数据,nlp,stanford-nlp,spacy,information-extraction,ner,Nlp,Stanford Nlp,Spacy,Information Extraction,Ner,我试图从非结构化文本中提取信息。比如说 该首席执行官最近寻求为正在开发的卡车增加功能的建议,他透露了一些计划中的功能,如400至500英里范围的选装件、双电机全轮驱动动力传动系统和动态悬架、“300000磅牵引能力”等。当被问及发布日期时,首席执行官给出了2021年第二季度的估计时间 理想的输出应该是 [minRange = 400, maxRange = 500, allWheelDrive = TRUE, susepnsionType = 'Dynamic', releaseDate = 2

我试图从非结构化文本中提取信息。比如说

该首席执行官最近寻求为正在开发的卡车增加功能的建议,他透露了一些计划中的功能,如400至500英里范围的选装件、双电机全轮驱动动力传动系统和动态悬架、“300000磅牵引能力”等。当被问及发布日期时,首席执行官给出了2021年第二季度的估计时间

理想的输出应该是

[minRange = 400, maxRange = 500, allWheelDrive = TRUE, susepnsionType = 'Dynamic', releaseDate = 2021-04-01 00:00]
因为我想要提取的数据并不总是以行为良好的对进行结构化(例如,上面的releaseDate提取需要对整个句子进行语义处理),所以regex和一些规则可能是不够的。我相信我需要注释我的数据集,然后使用NLP和学习工具,如spaCy、NLTK或Stanford NLP,从未来的示例中提取属性-值对

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

  • 该车辆的牵引能力为300000 lbs
  • 车辆的牵引能力为300000 lbs,关系为:“具有牵引能力”

  • 如果您继续使用spaCy,我将避免尝试识别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': []}]}]}]}]
    
    导入空间 >>>text=“我们的牵引能力为5000磅” >>>nlp=spacy.load('en\u core\u web\u lg') >>>doc=nlp(文本) 文件打印树() :1:弃用警告:Doc.merge的位置参数已弃用。相反,使用关键字参数,例如tag=、lemma=或ent_type=。 [{'word':'have','lemma':'have','NE':'',{'word':'of',…'modifiers':[{'word':'5000 lbs','lemma':'5000 lbs','NE':'QUANTITY','POS_fine':'NNS','POS_rough':'名词','arc':'pobj','modifiers':[]}] 您可以对
    ner
    管道进行培训,以获取新标签,如
    产品
    ,不过我强烈建议您仔细阅读这个问题,这样,当您磨练新标签时,模型将“忘记”旧标签。当我们培训ner将
    公司
    识别为一个标签时,我个人在一位同事身上遇到过这种情况


    我可能会做的不是训练NER识别每个功能,而是训练它将
    功能
    识别为一个实体,然后将诸如“全轮驱动”或“越野悬架”之类的内容提供给它,这样你就可以从一段文本中聚合所有
    功能
    ,而不是针对每个功能进行训练。当然,这取决于你想要从NLP中得到什么。我建议的唯一原因是,我会想象车辆上可能的选项数量会不断增加(例如,您是否会将雷达巡航作为理想输出中的一项功能?),而拥有“一应俱全”功能将使一切变得更加简单。同样,这取决于你的最终目标,这是一个有意义的起点,谢谢。一旦我整理好了,然后我需要建立关系,将数量(在大多数情况下)与特征关联起来。你找到好方法了吗?