BertTokenizer在处理中英文混合序列中遇到的问题

直接上代码:

from transformers import BertTokenizer

path = '../PTM/bert-base-zh'

tokenizer = BertTokenizer.from_pretrained(path)

text_1 = '①Goodpasture综合征'
text_2 = '1Goodpasture综合征'
text_3 = '@Goodpasture综合征'
text_4 = 'Goodpasture综合征'

print(tokenizer.tokenize(text_1))
print(tokenizer.tokenize(text_2))
print(tokenizer.tokenize(text_3))
print(tokenizer.tokenize(text_4))

'''
['①', '##go', '##od', '##pa', '##st', '##ure', '综', '合', '征']
['1g', '##ood', '##pa', '##st', '##ure', '综', '合', '征']
['@', 'good', '##pa', '##st', '##ure', '综', '合', '征']
['good', '##pa', '##st', '##ure', '综', '合', '征']
'''

如果在中英文混合的字符序列中,英文前面出现了特殊字符,或者数字,berttokenizer会把特殊字符和英文字符看成一个整体切分,导致切分错误。

可以解决的办法是将特殊字符或者数字替换为berttokenizer容易识别的字符,比如’@’, ‘#’, '$'等。

应用场景:
在中文电子病历中,text_1和text_2的场景是很容易出现的,所以在文本输入模型之前,最好先对这样的情况进行预处理。

猜你喜欢

转载自blog.csdn.net/mch2869253130/article/details/121401991