Closed canghaiyunfan closed 10 months ago
感觉是标点或英文的问题,可以把JoinntDataset的_process_tagger中的label_comb变量debug看一下,因为Tokenizer主要针对中文,英文的对齐可能会有问题,也可能会直接被当作UNK。
打印了一下对应的label_comb 变量,具体值如下,我对这套规则还不太熟系,麻烦作者看下哪里有问题,从代码看的话是insert和modify 出现在同一位置,这种情况是不允许的吗还是其他原因。
'tagger': ['K', 'K', 'K', 'K', 'K', 'MI', 'K', 'K', 'K', 'K', 'K', 'K'] 'mask_label': {5: [100, 146]} 'ins_label': [-1, -1, -1, -1, -1, 1, -1, -1, -1, -1, -1, -1] 'mod_label': [-1, -1, -1, -1, -1, 1, -1, -1, -1, -1, -1, -1]
打印了一下对应的label_comb 变量,具体值如下,我对这套规则还不太熟系,麻烦作者看下哪里有问题,从代码看的话是insert和modify 出现在同一位置,这种情况是不允许的吗还是其他原因。
'tagger': ['K', 'K', 'K', 'K', 'K', 'MI', 'K', 'K', 'K', 'K', 'K', 'K'] 'mask_label': {5: [100, 146]} 'ins_label': [-1, -1, -1, -1, -1, 1, -1, -1, -1, -1, -1, -1] 'mod_label': [-1, -1, -1, -1, -1, 1, -1, -1, -1, -1, -1, -1]
可以再看一下token = self.tokenizer.tokenize(TextWash.punc_wash(sentences[idx]))
的debug结果吗
对应结果: ['请', '在', '听', '到', 'bi', '声', '后', '留', '言', '。']
因为你没有给Label,感觉是Label给的不对,应该是类似
[{\"Modify\":[{\"pos\":4,\"tag\":\"MOD_1+INS_2\",\"label\":\“di”\"}]}]
这样的,你的标注应该是Insert
和Modify
对同一个位置做操作了,可以检查一下Label
label 是通过你提供的convert_seq2seq_to_operation.py 脚本生成的,结果如下
{'Insert': [{'pos': 5, 'tag': 'INS_1', 'label': '”'}], 'Modify': [{'pos': 4, 'tag': 'MOD_1+INS_1', 'label': '“d'}]}
原始样本如下: {'original_text': '请在听到bi声后留言。', 'correct_text': '请在听到“di”声后留言。'}
看起来问题出在对齐上,我们的程序对英文支持确实不够好。在utils/convertor.py
的_convert_tagger_lm
中,我们会做一下简单对齐,你如果看返回的post_ops可能就是插入和修改都在5号位置上做了,遇到这种情况可能只能手工调整Label了
了解,感谢作者!我发现不光英语,在包含韩语,日语以及表情包的数据上也无法处理。
是这样的,主要也是Token和字符不太一样,对齐的规则比较复杂,我们简化处理了(因为对中文来说基本上一个字就是一个Token,可能未来工作可以再做一些更细致的处理)
{'original_text': '请在听到bi声后留言。', 'correct_text': '请在听到“di”声后留言。'}
这个样本在处理时会引发 Error combinition in https://github.com/xlxwalex/FCGEC/blob/447be64dec538a6457fd301a10905f02e7b6f217/model/STG-correction/utils/data_utils.py#L18C1-L19C1
insert_label = [-1, -1, -1, -1, -1, 1, -1, -1, -1, -1, -1, -1] modify_label = [-1, -1, -1, -1, -1, 1, -1, -1, -1, -1, -1, -1]