hemingkx/CLUENER2020

ValueError: cannot copy sequence with size 37 to array axis with dimension 36

tianke0711 opened this issue · 11 comments

你好 我换成BIEOS数据标签后,test数据没有标签。我每个字添加一个临时标签都是O,
然后允许模型,出现了以下错误,请指教!

File "/NER/CLUENER2020/BERT-LSTM-CRF/train.py", line 83, in evaluate
    for idx, batch_samples in enumerate(dev_loader):
  File "/opt/conda/lib/python3.6/site-packages/torch/utils/data/dataloader.py", line 560, in __next__
    batch = self.collate_fn([self.dataset[i] for i in indices])
  File "NER/CLUENER2020/BERT-LSTM-CRF/data_loader.py", line 97, in collate_fn
    batch_labels[j][:cur_tags_len] = labels[j]

你好 我换成BIEOS数据标签后,test数据没有标签。我每个字添加一个临时标签都是O,
然后允许模型,出现了以下错误,请指教!

File "/NER/CLUENER2020/BERT-LSTM-CRF/train.py", line 83, in evaluate
    for idx, batch_samples in enumerate(dev_loader):
  File "/opt/conda/lib/python3.6/site-packages/torch/utils/data/dataloader.py", line 560, in __next__
    batch = self.collate_fn([self.dataset[i] for i in indices])
  File "NER/CLUENER2020/BERT-LSTM-CRF/data_loader.py", line 97, in collate_fn
    batch_labels[j][:cur_tags_len] = labels[j]

我也出现了同样的问题,例如36是batch里的第一个数据,当后面的数据比36长时就会报错,不知道如何解决,如有思路可发邮件至76834136@qq.com

@whyalwaysonline 还没解决,暂时放弃啦

不好意思,这两天比较忙,下周我看一下这个问题~

@hemingkx 谢谢 麻烦啦

不好意思,这两天比较忙,下周我看一下这个问题~

sentences.append((self.tokenizer.convert_tokens_to_ids(words), token_start_idxs))
给大家一个参考,问题应该出在这句话中的self.tokenizer.convert_tokens_to_ids(words),我测试了一下,不会报错的句子该元素的size应该是大于token_start_idxs,而对于报错的句子这个值就小了,导致之后size的不匹配。

发现问题所在了,当数据中包含英文单词时比如“Air Jordan”,在token的时候就会把空格略去,导致size不匹配

发现问题所在了,当数据中包含英文单词时比如“Air Jordan”,在token的时候就会把空格略去,导致size不匹配

请问那应该如何解决呢?

发现问题所在了,当数据中包含英文单词时比如“Air Jordan”,在token的时候就会把空格略去,导致size不匹配

请问那应该如何解决呢?

解决了,把数据中的空格去掉即可

@whyalwaysonline> 发现问题所在了,当数据中包含英文单词时比如“Air Jordan”,在token的时候就会把空格略去,导致size不匹配
请问 去掉空格了还是有这个问题怎么办

@whyalwaysonline> 发现问题所在了,当数据中包含英文单词时比如“Air Jordan”,在token的时候就会把空格略去,导致size不匹配 请问 去掉空格了还是有这个问题怎么办

最简单的方法是将空格替换成下划线“_”。仅去掉空格而不去掉相应的标签,会导致对应错误。我的训练数据也是混合了中英文的,解决办法就是将空格替换成下划线,模型最终效果非常好。