huggingface-transformers - 在使用 HuggingFace 的 RobertaTokenizer 之前,我是否需要先对文本进行预标记?(不同的理解)
问题描述
在 Huggingface 中使用 Roberta 标记器时,我感到很困惑。
>>> tokenizer = RobertaTokenizer.from_pretrained('roberta-base')
>>> x = tokenizer.tokenize("The tiger is ___ (big) than the dog.")
['The', 'Ġtiger', 'Ġis', 'Ġ___', 'Ġ(', 'big', ')', 'Ġthan', 'Ġthe', 'Ġdog', '.']
>>> x = tokenizer.tokenize("The tiger is ___ ( big ) than the dog.")
['The', 'Ġtiger', 'Ġis', 'Ġ___', 'Ġ(', 'Ġbig', 'Ġ)', 'Ġthan', 'Ġthe', 'Ġdog', '.']
>>> x = tokenizer.encode("The tiger is ___ (big) than the dog.")
[0, 20, 23921, 16, 2165, 36, 8527, 43, 87, 5, 2335, 4, 2]
>>> x = tokenizer.encode("The tiger is ___ ( big ) than the dog.")
[0, 20, 23921, 16, 2165, 36, 380, 4839, 87, 5, 2335, 4, 2]
>>>
问题:(big)
并且( big )
有不同的标记化结果,这也会导致不同的标记 id。我应该使用哪一个?这是否意味着我应该先对输入进行预标记以进行输入( big )
并进行 RobertaTokenization?还是真的不重要?
其次,似乎BertTokenizer
没有这样的困惑:
>>> tokenizer = BertTokenizer.from_pretrained('bert-base-uncased')
>>> x = tokenizer.tokenize("The tiger is ___ (big) than the dog.")
['the', 'tiger', 'is', '_', '_', '_', '(', 'big', ')', 'than', 'the', 'dog', '.']
>>> x = tokenizer.tokenize("The tiger is ___ ( big ) than the dog.")
['the', 'tiger', 'is', '_', '_', '_', '(', 'big', ')', 'than', 'the', 'dog', '.']
>>>
BertTokenizer
使用单词片给我同样的结果。
有什么想法可以帮助我更好地理解 RobertaTokenizer,我知道它正在使用字节对编码?
解决方案
推荐阅读
- c# - 如何在视图中使用模型数据?
- c# - Json.NET 反序列化属性而不反序列化其上方的父对象
- r - 如何在 R 上创建费率
- mobile - 需要在桌面和移动设备中打开 .ics 日历文件
- selenium - bot 检测绕过服务器上的 selenium
- python-3.x - 如何连续计数大于或等于0.5的值5或大于5行python
- html - 使用表格对齐视频并适合 div 大小
- android - 我的活动在 onResume() 之前调用 onCreate()
- python - Class() 返回错误,说不带参数
- python - 为什么语法“main.py < input.txt”不起作用