BERT-BiLSTM-CRF-NER-pytorch icon indicating copy to clipboard operation
BERT-BiLSTM-CRF-NER-pytorch copied to clipboard

使用英文数据集(Conll2003)时,tokenizer的问题

Open Daniel19960601 opened this issue 4 years ago • 6 comments

您好,感谢对我再“出现wordPiece应该怎么办?”这一问题下的提问了。 是我描述不到位,我遇到的问题是: 数据集使用的Conll2003,Bert模型使用的是bert-base-cased。运行时出现如下错误:

File "D:\python-workspace\BERT-BiLSTM-CRF-NER-pytorch-master\utils.py", line 162, in convert_examples_to_features assert len(ori_tokens) == len(ntokens), f"{len(ori_tokens)}, {len(ntokens)}, {ori_tokens}, {ntokens}" AssertionError: 3, 8, ['[CLS]', '-DOCSTART-', '[SEP]'], ['[CLS]', '-', 'do', '##cs', '##tar', '##t', '-', '[SEP]']

可见,是tokenizer将单词切分了,导致assert len(ori_tokens) == len(ntokens)不能通过,请问如何解决?感谢您。

Daniel19960601 avatar Feb 25 '21 02:02 Daniel19960601

后面有空补充一下这块的处理吧,之前没有考虑到英文数据集wordpiece的问题。

hertz-pj avatar Mar 04 '21 06:03 hertz-pj

后面有空补充一下这块的处理吧,之前没有考虑到英文数据集wordpiece的问题。

您好,能否提供一下英文数据集wordpiece处理的思路,想自己试一试,感谢!

Daniel19960601 avatar Mar 28 '21 07:03 Daniel19960601

@Daniel19960601 把这行去掉, 然后对齐标签就行

zingxy avatar Oct 01 '21 01:10 zingxy

針對這個問題可以參考這一篇 https://github.com/wzhouad/NLL-IE 裡面的prepro.py 具體來說會先把-DOCSTART-過濾掉,這代表一句話的開頭,然後每個docs第一句使用truecase轉成正確英文大小寫 每一句都會使用Wordpiece進行切割,注意一個詞如果切割後變成三個subword,只有第一個會對應到label,後面的label都會對應到-1(不進行回饋)

brennenhuang avatar Jun 20 '22 01:06 brennenhuang

@brennenhuang -1感觉不行啊,eval反推标签的时候,-1没有key。

reBiocoder avatar Aug 11 '22 03:08 reBiocoder

@reBiocoder 舉例來說要eval時 I live in Taipei 經過tokenizer I live in Tai ##pei 轉換ID 20 30 10 21 23 預測 None None None PLACE X 也就是##pei的預測值不理會,進行輸出

brennenhuang avatar Aug 22 '22 02:08 brennenhuang