BERT 中 NER 的正确格式数据应该是什么样的?

How should properly formatted data for NER in BERT look like?

我正在使用 Huggingface 的 transformers 库并想使用 BERT 执行 NER。我试图找到一个明确的示例,说明如何使用 BERT 为 NER 正确格式化数据。从这篇论文和我发现的评论中,我并不完全清楚。

假设我们有以下句子和标签:

sent = "John Johanson lives in Ramat Gan."
labels = ['B-PER', 'I-PER', 'O', 'O', 'B-LOC', 'I-LOC']

我们输入到模型中的数据会是这样的吗:

sent = ['[CLS]', 'john', 'johan',  '##son', 'lives',  'in', 'ramat', 'gan', '.', '[SEP]']
labels = ['O', 'B-PER', 'I-PER', 'I-PER', 'O', 'O', 'B-LOC', 'I-LOC', 'O', 'O']
attention_mask = [0, 1, 1, 1, 1, 1, 1, 1, 1, 0]
sentence_id = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]

?

谢谢!

更新2021-08-27:教程link指向旧版教程,我不再完全推荐它,因为它没有使用Huggingface的便利库datasets

实际上有a great tutorial for the NER example on the huggingface documentation page. Specifically, it also goes into detail how the provided script做预处理。具体来说,外部贡献者的 preprocess.py 脚本有一个 link,它基本上将数据从 CoNLL 2003 格式转换为 huggingface 库所需的任何格式。我发现这是断言我的格式正确的最简单方法,除非您有一些您可能想要合并的特定更改,否则这可以让您快速入门,而无需担心实施细节。

linked 示例脚本还提供了有关如何将各个输入输入模型本身的足够详细信息,但通常来说,您的上述输入模式是正确的。