transformers库的tokenizer在默认情况下,decode中有个参数clean_up_tokenization_spaces会设置成True,即如果一个token是空格加句号,那么decode出来空格就没了,这可能会导致先encode再decode的结果和输入不一致,因此最好将这个参数设置成False。
另外GPT2Tokenizer在decode的时候,还有一个隐藏参数是spaces_between_special_tokens,默认是True,会导致额外加的token两侧产生意外的空格,GPT2TokenizerFast则不会有这个问题(用AutoTokenizer.from_pretrained得到的是GPT2TokenizerFast,用GPT2Tokenizer.from_pretrained得到的是GPT2Tokenizer)
在确认这个的过程中,还发现一个比较好用的库,python自带的inspect库,可以动态检查源代码,例如inspect.getsource(a.func),inspect.getsourcefile(a.func)等,在面对这种多继承的情况下尤其好用