命名实体识别的数据预处理?

问题描述 投票:0回答:1

我正在研究一个关于简历数据集的命名实体识别,我们有一些实体,如日期,电话,电子邮件等。

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

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个回答
2
投票

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

比如说 SpaCy 在Python中返回一个存储所有这些信息的对象。

import spacy
from pprint import pprint

nlp = spacy.load("en_core_web_sm")
doc = nlp("DAVID John, IT\nWashington, DC (107) 155-4838 [email protected]")
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),
 ('[email protected]', 45, 65)]

你可以自己做同样的事情 (例如在添加空格时保持一个计数器),或者使用现有的 tokenizer (例如 SpaCy、CoreNLP、tensorflow 等) 。

© www.soinside.com 2019 - 2024. All rights reserved.