【问题标题】:Data preprocessing for Named Entity Recognition?命名实体识别的数据预处理?
【发布时间】:2020-09-24 06:29:21
【问题描述】:

我正在对简历数据集进行命名实体识别,我们有日期、电话、电子邮件等实体,

我正在研究如何预处理这些实体。我目前正在像这样在每个标点符号后添加一个空格,

DAVID B-Name
John I-Name
, O
IT O

Washington B-Address
, I-Address
DC I-Address
( B-Phone
107 I-Phone
) I-Phone
155
- I-Phone
4838 I-Phone
david B-Email
. I-Email
John I-Email
@ I-Email
gmail I-Email
. I-Email
com I-Email

但我开始质疑在推理过程中如何处理此类文本的过程。我假设即使在推断时我们也必须使用在每个标点符号后添加空格的相同过程来预处理文本,不是吗?

但它不会那么可读吧?

例如,在推理时,我必须提供像 test @ example . com? 这样不可读的输入文本,不是吗?它只能预测这种格式的实体。

【问题讨论】:

    标签: deep-learning nlp named-entity-recognition


    【解决方案1】:

    您要处理的问题称为tokenization。为了处理您提出的格式问题,框架通常会以保留原始文本的方式从底层文本中提取标记,例如跟踪每个标记的字符开始和结束。

    例如,Python 中的SpaCy 返回一个存储所有这些信息的对象:

    import spacy
    from pprint import pprint
    
    nlp = spacy.load("en_core_web_sm")
    doc = nlp("DAVID John, IT\nWashington, DC (107) 155-4838 david.John@gmail.com")
    pprint([(token.text, token.idx, token.idx + len(token.text)) for token in doc])
    

    输出:

    [('DAVID', 0, 5),
     ('John', 6, 10),
     (',', 10, 11),
     ('IT', 12, 14),
     ('\n', 14, 15),
     ('Washington', 15, 25),
     (',', 25, 26),
     ('DC', 27, 29),
     ('(', 30, 31),
     ('107', 31, 34),
     (')', 34, 35),
     ('155', 36, 39),
     ('-', 39, 40),
     ('4838', 40, 44),
     ('david.John@gmail.com', 45, 65)]
    

    您可以为自己做同样的事情(例如,在添加空格时保留一个计数器)或使用现有的标记器(例如 SpaCy、CoreNLP、tensorflow 等)

    【讨论】:

    • 我想使用flairNLP 来训练ner 模型,但它不支持spacy 注释模式。它需要 IOB 注释。如何将其转换为类似于我在上面的问题中输入的内容
    • @user_12 看起来你可以加入文本(所以上面加上text = " ".join((token.text for token in doc)))或者flairNLP有一个你可以使用的内置分类器(sentence = Sentence('The grass is green.', use_tokenizer=True)github.com/flairNLP/flair/blob/master/resources/docs/…
    猜你喜欢
    • 1970-01-01
    • 2014-03-17
    • 2013-02-09
    • 2011-07-31
    • 2018-03-08
    • 2020-07-02
    • 2021-05-06
    • 1970-01-01
    • 2017-05-18
    相关资源
    最近更新 更多