tokenizers Tokenizer类

tokenizers.Tokenizer(model)

Tokenizer函数构造一个分词器对象。分词方式主要有 word-level、subword-level、char-level三种,其中,subword-level分词方式又有四种不同实现的方法: BPE、Unigram、WordPiece、SentencePiece

参数model表示分词器使用的分词方式,接受一个Model对象,这里主要实现了word-level的分词方式以及subword-level的分词方式。Tokenizer类主要的方法有:

1、from_file(path):从指定文件加载Tokenizer对象。

2、from_pretrained(identifier, revision = ‘main’, auth_token = None):从Hugging Face Hub官网上加载一个已存在的Tokenizer对象。参数identifier就是加载的对象模型。

3、from_str(json):从json格式的字符串来加载Tokenizer对象。

4、from_buffer(buffer):从缓冲区来加载Tokenizer对象。

5、encode(sequence, pair = None, is_pretokenized = False, add_special_tokens = True):对于给定的一个分句进行编码,返回一个Encoding对象。参数pair表示第二个分句。参数is_pretokenized表示是否已经预分词化,如果为True,则输入的sequence和pair都应该为一个列表。

6、encode_batch(input, is_pretokenized = False, add_special_tokens = True):对多个分句进行编码,返回一个Encoding对象。

7、decode(ids, skip_special_tokens = True):表示对一个id序列进行解码,将id映射为字符串。参数skip_special_tokens表示是否跳过特殊的字符串。这些特殊的字符串是由add_special_tokens函数来创建的。

8、decode_batch(sequences, skip_special_tokens = True):表示对多个id序列进行解码。

9、add_tokens(tokens):添加新的分词,这些分词会添加到词汇表中。

10、add_special_tokens(tokens):添加特殊的分词到词汇表中,与add_tokens函数不同的是,这些特殊的分词可以在解码时被忽略。

11、enable_padding(direction = ‘right’, pad_id = 0, pad_type_id = 0, pad_token = ‘[PAD]’, length = None, pad_to_multiple_of = None):设置在进行encode_batch操作时,当各个分句的长度不一样时应用填充。

12、enable_truncation(max_length, stride = 0, strategy = ‘longest_first’, direction = ‘right’ ):设置在进行encode_batch操作时,当各个分句的长度不一样时对分句进行截取。

13、no_padding( ):禁用填充。
14、no_truncation( ):禁用截取。

15、save(path, pretty = True):保存tokenizer模型(一个json文件)到指定路径,参数pretty表示用一行还是多行来表示json文件,默认为多行。

16、train(files, trainer = None):用指定文件列表里面的数据来训练分词器。

17、id_to_token(id):将单个id转换成单个字符。
18、token_to_id(token):将单个字符转换成单个id。

1、tokenizer模型的加载

第一种加载方式
从json文件中加载tokenizer对象
tokenizer0 = tokenizers.Tokenizer.from_file("./tokenizer4/vocab.json")
从hugging face 官网中在线加载tokenzier对象
tokenizer1 = tokenizers.Tokenizer.from_pretrained("distilbert-base-uncased")
根据json文件的内容字符串来加载tokenizer对象
with open("./tokenizer4/vocab.json", "r", encoding="utf8") as file:
    json_dict = json.load(file)
    json_string = json.dumps(json_dict)
tokenizer2 = tokenizers.Tokenizer.from_str(json_string)

第二种加载方式
tokenizer = tokenizers.Tokenizer()
tokenizer.model = models.BPE().from_file(vocab="./tokenizer4/vocab.json", merges="./tokenizer4/merges.txt")

2、tokenizer模型的训练

中文分词方式,除了BPE,还有WordPiece、Unigram两种
tokenizer = tokenizers.Tokenizer(models.BPE())
tokenizer.pre_tokenizer = pre_tokenizers.Whitespace()
tokenizer.decoder = decoders.BPEDecoder()
trainer = trainers.BpeTrainer()
tokenizer.train(["ch_demo_sm.txt"], trainer)

英文分词方式,word-level分词方式
tokenizer = tokenizers.Tokenizer(models.WordLevel())
tokenizer.pre_tokenizer = pre_tokenizers.Whitespace()
trainer = trainers.WordLevelTrainer(special_tokens=["[PAD]"])
tokenizer.train(["en_demo_sm.txt"], trainer)

英文分词方式,subword-level分词方式
这里使用wordpiece分词方法
tokenizer = tokenizers.Tokenizer(models.WordPiece())
tokenizer.pre_tokenizer = pre_tokenizers.Whitespace()
trainer = trainers.WordPieceTrainer(special_tokens=["[PAD]"])
tokenizer.train(["en_demo_sm.txt"], trainer)

3、tokenizer模型的保存

使用tokenizer.save函数保存,会生成一个vocab.json文件
tokenizer.save("./tokenizer4/vocab.json")

使用tokenizer.model.save保存,会生成一个vocab.json和一个merges.txt文件
注意这个vocab.json和上面的vocab.json文件内容不一样。
tokenizer.model.save("./tokenizer4")

4、使用tokenizer模型进行encode和decode操作

编码一个句子
encoding0 = tokenizer.encode("any attempt to leave surprises me.")
编码一个有两个分句的句子
encoding1 = tokenizer.encode("any attempt to leave surprises me.", pair="arrival of John dead surprised me.")
参数is_pretokenized=True时,参数sequence应为一个列表
encoding2 = tokenizer.encode(["any attempt to leave surprises me."],
                             is_pretokenized=True)
编码多个句子
encodings0 = tokenizer.encode_batch(["any attempt to leave surprises me.",
                                    "the arrival of John dead surprised me."])
编码多个有两个分词的句子
encodings1 = tokenizer.encode_batch([("any attempt to leave surprises me.", "John's arrival dead surprised me."),
                                     ("John's attempt to leave surprised me.", "the arrival of John dead surprised me.")])
参数is_pretokenized=True时,参数sequence应为一个列表
encodings2 = tokenizer.encode_batch([["any attempt to leave surprises me."],
                                    ["the arrival of John dead surprised me."]],
                                    is_pretokenized=True)

对一个ids进行解码
decode_string = tokenizer.decode(encoding1.ids, skip_special_tokens=False)
对多个ids进行解码
decode_strings = tokenizer.decode_batch([encodings1[0].ids, encodings1[1].ids])

将单词变成id
token_id = tokenizer.token_to_id("me")
将id变成单词
token = tokenizer.id_to_token(62)

Original: https://blog.csdn.net/weixin_49346755/article/details/125111058
Author: 不负韶华ღ
Title: tokenizers Tokenizer类

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/528383/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球