MOSS
MOSS copied to clipboard
关于tokenizer对特殊字符的处理
你好,感谢你们的出色工作。
我在使用模型的 tokenizer
时遇到了一些问题。当我使用 tokenizer
对包含连续的空格和特殊字符(如 \n
, \t
等)进行 encode
操作时,我发现 tokenizer
会忽略周围有多个空格的特殊字符,或者会将这些特殊字符转为多个空格,这使得再次进行 decode
操作后,文本中这些特殊字符会丢失。测试的代码如下:
tokenizer = AutoTokenizer.from_pretrained("fnlp/moss-moon-003-sft", trust_remote_code=True)
text = "a \n b\n \nc \n "
# input_ids: [64, 106058, 106058, 65, 106057, 66, 220, 56599]
input_ids = tokenizer.encode(text, add_special_tokens=False)
# 输出: "a b c \n "
print(tokenizer.decode(input_ids))
我按照这样测试其他模型的 tokenizer
时均未发现这个现象,其他模型的 tokenizer
对文本经过 encode
和 decode
后均会还原为和原来一致的文本。
这个问题是我对 MOSS 进行微调后发现的,我发现微调后的 MOSS 模型在生成代码时,当遇到代码中有换行加缩进的时候,微调模型从来不会生成换行,而原本的 MOSS 在这种情况下是会生成换行的。在我检查了 tokenizer
后发现了这一问题,请问应该如何解决呢?
你好,同样遇到了这个问题,请问有什么解决方法吗?
改了下tokenizer文件解决了。。。 moss_tokenizer.zip