用于命名实体识别的PyTorch Huggingface BERT-NLP

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

我已经使用BERT的Google的HuggingFace的PyTorch实现了MADE 1.0数据集已有一段时间了。直到上次(11月2日),我一直在使用该库并通过微调模型获得我的命名实体识别任务的F-Score为0.81。但是本周我运行完全相同的编译并运行的代码时,它在执行此语句时抛出错误:

input_ids = pad_sequences([tokenizer.convert_tokens_to_ids(txt) for txt in tokenized_texts], maxlen=MAX_LEN, dtype="long", truncating="post", padding="post")

ValueError:令牌索引序列长度超过此BERT模型的指定最大序列长度(632> 512)。通过BERT运行此序列将导致索引错误

完整代码可在此colab notebook中找到。

为了解决这个错误,我通过获取任何序列的前512个令牌将上述语句修改为下面的语句,并根据BERT的要求进行必要的更改以将[SEP]的索引添加到截断/填充序列的末尾。

input_ids = pad_sequences([tokenizer.convert_tokens_to_ids(txt[:512]) for txt in tokenized_texts], maxlen=MAX_LEN, dtype="long", truncating="post", padding="post")

结果不应该改变,因为我只考虑序列中的前512个令牌,后来截断到75作为我的(MAX_LEN = 75),但我的F-Score下降到0.40而我的精度降到0.27而Recall仍然是相同(0.85)。我无法共享数据集,因为我已经签署了保密条款,但我可以保证BERT所要求的所有预处理都已完成,并且所有扩展的令牌(如Johanson - > Johan ## son)都已标记为X并已替换在BERT Paper所说的预测之后。

有没有其他人遇到类似的问题,或者可以详细说明可能是什么问题或PyTorch(Huggingface)最近在他们最终做了什么改变?

python nlp data-science named-entity-recognition ner
1个回答
0
投票

我找到了解决这个问题的方法。使用pytorch-pretrained-bert == 0.4.0运行相同的代码可以解决问题并且性能恢复正常。 BERT Tokenizer中的模型性能或新更新中的BERTForTokenClassification会影响模型性能。希望HuggingFace尽快解决这个问题。 :)

pytorch-pretrained-bert == 0.4.0,测试F1-得分:0.82

pytorch-pretrained-bert == 0.6.1,测试F1-得分:0.41

谢谢。

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