首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >BART Tokenizer标记同一个单词的方式不同吗?

BART Tokenizer标记同一个单词的方式不同吗?
EN

Stack Overflow用户
提问于 2022-08-23 13:28:24
回答 1查看 111关注 0票数 0

我注意到,如果我用多个句子来标记全文,有时我会得到一个不同于单独标记每个句子的标记数,并将这些标记加在一起。我已经做了一些调试,并有了这个小的可重复的例子来说明这个问题。

代码语言:javascript
复制
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"))

我得到以下输出

代码语言:javascript
复制
['Th', 'ames', 'Ġis', 'Ġa', 'Ġriver']
['We', 'Ġare', 'Ġin', 'ĠLondon', '.', 'ĠThames', 'Ġis', 'Ġa', 'Ġriver']

我想了解为什么泰晤士河这个词在序列开始的时候被分割成两个记号,而如果不是序列的开头,它只是一个单词。我注意到这种行为非常频繁,假设它不是一个bug,我想了解为什么BART令牌的行为是这样的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-08-23 13:50:17

根据https://github.com/huggingface/transformers/blob/main/src/transformers/models/bart/tokenization_bart.py

这个标记器已经被训练成像标记的一部分一样对待空间(有点像句子),所以一个单词将被不同的编码,不管它是否在句子的开头(没有空格)。您可以通过在实例化此标记程序或在某些文本上调用它时传递add_prefix_space=True来绕过这种行为,但是由于模型没有通过这种方式预先训练,它可能会导致性能下降。

正在尝试

代码语言:javascript
复制
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"))

把“正确”的结果交给我。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73459649

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档