为之前打开的问题打开一个新问题-- #1517
在这里,我们可以看到Mistral为return_offsets_mapping
所期望的行为是给出与tokens对应的字符索引:
(Pdb) from transformers import AutoTokenizer
(Pdb) tok_mistral = AutoTokenizer.from_pretrained("mistralai/Mistral-7B-Instruct-v0.1")
(Pdb) tok_mistral(["Sample input"], return_offsets_mapping=True)
{'input_ids': [[1, 27797, 2787]], 'attention_mask': [[1, 1, 1]], 'offset_mapping': [[(0, 0), (0, 6), (6, 12)]]}
(Pdb) tok_mistral.convert_ids_to_tokens([1, 27797, 2787])
['<s>', '▁Sample', '▁input']
(Pdb) "Sample input"[0:6]
'Sample'
(Pdb) "Sample input"[6:12]
' input'
但是对于Llama-3来说,它们并不正确
(Pdb) tok_llama3 = AutoTokenizer.from_pretrained("meta-llama/Meta-Llama-3-8B-Instruct")
Special tokens have been added in the vocabulary, make sure the associated word embeddings are fine-tuned or trained.
(Pdb) tok_llama3(["Sample input"], return_offsets_mapping=True)
{'input_ids': [[128000, 18031, 1988]], 'attention_mask': [[1, 1, 1]], 'offset_mapping': [[(0, 0), (0, 0), (6, 6)]]}
我们还可以看到Llama-2和GPT-2的工作方式与Mistral相同,因此Llama-3绝对是执行出乎意料的行为的那个
(Pdb) tok_llama2 = AutoTokenizer.from_pretrained("NousResearch/Llama-2-7b-hf")
(Pdb) tok_llama2(["Sample input"], return_offsets_mapping=True)
{'input_ids': [[1, 21029, 1881]], 'attention_mask': [[1, 1, 1]], 'offset_mapping': [[(0, 0), (0, 6), (6, 12)]]}
(Pdb) tok_gpt2 = AutoTokenizer.from_pretrained("openai-community/gpt2")
(Pdb) tok_gpt2(["Sample input"], return_offsets_mapping=True)
{'input_ids': [[36674, 5128]], 'attention_mask': [[1, 1]], 'offset_mapping': [[(0, 6), (6, 12)]]}
6条答案
按热度按时间g6baxovj1#
在
tokenizers
中,是否有可能修复这个问题?7dl7o3gd2#
是的,你是对的,我会深入了解一下为什么我们会有这个!
rkttyhzu3#
太棒了,谢谢你!
jhiyze9q4#
@ArthurZucker 有没有临时的解决办法?
qfe3c7zg5#
抱歉,暂时还没有!我正在修复一堆东西,也许会是#1568?
6tr1vspr6#
Cerebras已经实现了一个 Package 器,用于修正有问题的方法。您可以在这里使用 Package 类:https://github.com/Cerebras/modelzoo/blob/main/src/cerebras/modelzoo/data_preparation/data_preprocessing/custom_tokenizer_example/CustomLlama3Tokenizer.py