了解希腊字符的字节对编码标记化

问题描述 投票:0回答:1

我正在尝试使用希腊文本训练一个新的标记生成器,以便稍后使用

将新标记添加到 Llama 3.1 标记生成器中
tokenizer.add_tokens(list(new_tokens)).

但是,在希腊语和西班牙语文本上训练字节对编码分词器时,结果如下所示:

\['Translate', 'Ġfrom', 'ĠGreek', 'Ġto', 'ĠSpanish', ':', 'ĠÎĿα', 'ĠÎŃÏĥι', 'Ġογί', 'ĠγÎŃÏģοÏħ'\]

在分词器中扩展标记词汇时,这些编码的标记似乎是按字面传递的,而不是作为希腊字符的编码,并且分词器无法识别它们来编码句子。然而,当使用相同的方法并且新的标记被硬编码时,例如在

extender_tokenizer.add_tokens(['Αυτό', 'είναι'])

它确实有效。

我认为这是一个编码问题或者与 BPE 内部工作有关。 为什么希腊字符是这样显示的?与编码、BPE 或两者都有关吗?如何获取可以添加到标记生成器的希腊字符标记列表?

参考代码:

from tokenizers import Tokenizer, models, trainers, pre_tokenizers

tokenizer = Tokenizer(models.BPE())
tokenizer.pre_tokenizer = pre_tokenizers.ByteLevel()
trainer = trainers.BpeTrainer(vocab_size = 2000, min_frequency = 3, show_progress = True)
tokenizer.train_from_iterator(training_corpus, trainer = trainer)
encoding nlp tokenize byte-pair-encoding
1个回答
0
投票

正如 Joop Eggen 指出的,使用

tokenizers.UnicodeScripts
而不是
ByteLevel
解决了这个问题。

© www.soinside.com 2019 - 2024. All rights reserved.