我注意到,如果我用多个句子来标记全文,有时我会得到一个不同于单独标记每个句子的标记数,并将这些标记加在一起。我已经做了一些调试,并有了这个小的可重复的例子来说明这个问题。
from transformers import AutoTokenizer
tokenizer = AutoTokenizer.from_pretrained('facebook/bart-large-cnn')
print(tokenizer.tokenize("Thames is a river"))
print(tokenizer.tokenize("We are in London. Thames is a river"))我得到以下输出
['Th', 'ames', 'Ġis', 'Ġa', 'Ġriver']
['We', 'Ġare', 'Ġin', 'ĠLondon', '.', 'ĠThames', 'Ġis', 'Ġa', 'Ġriver']我想了解为什么泰晤士河这个词在序列开始的时候被分割成两个记号,而如果不是序列的开头,它只是一个单词。我注意到这种行为非常频繁,假设它不是一个bug,我想了解为什么BART令牌的行为是这样的。
发布于 2022-08-23 13:50:17
这个标记器已经被训练成像标记的一部分一样对待空间(有点像句子),所以一个单词将被不同的编码,不管它是否在句子的开头(没有空格)。您可以通过在实例化此标记程序或在某些文本上调用它时传递add_prefix_space=True来绕过这种行为,但是由于模型没有通过这种方式预先训练,它可能会导致性能下降。
正在尝试
from transformers import AutoTokenizer
tokenizer = AutoTokenizer.from_pretrained('facebook/bart-large-cnn', add_prefix_space=True)
print(tokenizer.tokenize("Thames is a river"))
print(tokenizer.tokenize("We are in London. Thames is a river"))把“正确”的结果交给我。
https://stackoverflow.com/questions/73459649
复制相似问题