Closed another1s closed 3 years ago
您好, 麻烦请您参考https://github.com/ShannonAI/dice_loss_for_NLP/blob/master/datasets/mrc_ner_dataset.py 中处理tokenizer处理之后entity start/end position的代码。 并且依据您提供的例子,测试样本如下: http://github.com/xiaoya-li/mrc-for-flat-nested-ner/blob/master/tests/illegal_entity_boundary.py
结果输出为:
非常感谢!
您好, 麻烦请您参考https://github.com/ShannonAI/dice_loss_for_NLP/blob/master/datasets/mrc_ner_dataset.py 中处理tokenizer处理之后entity start/end position的代码。 并且依据您提供的例子,测试样本如下: http://github.com/xiaoya-li/mrc-for-flat-nested-ner/blob/master/tests/illegal_entity_boundary.py
结果输出为:
非常感谢!
测试了可用,多谢回复!
hi,这个代码迁移过去好像少个label_mask没定义 label_mask = [ (0 if token_idx <= first_sep_token or token_idx == end_sep_token else 1) for token_idx in range(len(non_pad_tokens)) ]
您好!
我这边使用提供的脚本试图对msra实验进行复现。发现一个问题。在训练数据中几条带有公司股票名称的时候,会造成entity start和end在encode之后丢失的情况,导致训练报错
比如下面这条,如果我数据集没下错的话? “1 美 亚 股 份 3 2 . 6 6 2 民 族 集 团 2 2 . 3 8 3 鲁 石 化 a 1 9 . 1 1 4 四 川 湖 山 1 7 . 0 9 5 太 原 刚 玉 1 0 . 5 8 1 咸 阳 偏 转 1 6 . 1 1 2 深 华 发 a 1 5 . 6 6 3 渝 开 发 a 1 5 . 5 2 4 深 发 展 a 1 3 . 8 9 5 深 纺 织 a 1 3 . 2 2 1 太 极 实 业 2 3 . 2 2 2 友 好 集 团 2 2 . 1 4 3 双 虎 涂 料 2 0 . 2 0 4 新 潮 实 业 1 5 . 5 8 5 信 联 股 份 1 2 . 5 7 1 氯 碱 化 工 2 1 . 1 7 2 百 隆 股 份 1 5 . 6 4 3 贵 华 旅 业 1 5 . 1 5 4 南 洋 实 业 1 4 . 5 0 5 福 建 福 联 1 3 . 8 0"
这条数据中在预处理时获得的entity 鲁石化a所对应的(start,end)应该为(21, 25),但用vocab.txt初始化的bertTokenizer在encode的时候,会把非中文字符先归并再encode,体现在encode以后的offset上就是只有”鲁石化a”只会对应(21,24)而后面那个a19被归并到一起去,变成(24,26)了
这样的结果就造成在encode以后,run_mrc_dataset.py里面目前的写法根本无法正常处理拼接了query和special token以后的index 偏移,因为entity丢失了一部分。总而言之就是,一旦entity中出现了多个非中文字符,非中文字符的对应的offset就会丢失
我这里的解法是,先根据原始(start,end)单独把context里的entities encode,再把剩余部分encode,最后再拼接。不知道贵司有没有什么好的办法?我反正是无法通过原版的脚本复现实验