赞
踩
Tokenizers是大语言模型(Large Language Models,LLMs)中用于将文本分割成基本单元(tokens)的工具。这些工具不仅影响模型的输入表示,还直接影响模型的性能和效率。以下是对Tokenizers的详细解释:
Tokenizers的主要作用是将自然语言文本转换为模型可以处理的数字形式。具体来说,Tokenizers执行以下任务:
根据分割策略的不同,Tokenizers可以分为以下几种类型:
最简单的Tokenizers类型,直接按空格分割文本。这种方法简单快速,但无法处理复合词和未登录词。
- from transformers import AutoTokenizer
-
- tokenizer = AutoTokenizer.from_pretrained("bert-base-uncased")
- tokens = tokenizer.tokenize("I love natural language processing.")
- print(tokens)
- # 输出: ['i', 'love', 'natural', 'language', 'processing', '.']
使用预定义的规则分割文本,如去除标点符号、处理大小写等。这种方法比基于空格的Tokenizers更灵活,但仍然有限。
- from nltk.tokenize import RegexpTokenizer
-
- tokenizer = RegexpTokenizer(r'\w+')
- tokens = tokenizer.tokenize("I love natural language processing.")
- print(tokens)
- # 输出: ['I', 'love', 'natural', 'language', 'processing']
子词Tokenizers将文本分割成子词单元,如字节对编码(BPE)、WordPiece和Unigram Language Model。这些方法可以有效处理未登录词,提高模型的泛化能力。
通过统计频率合并频繁出现的字节对,逐步构建子词单元。
- from transformers import AutoTokenizer
-
- tokenizer = AutoTokenizer.from_pretrained("gpt2")
- tokens = tokenizer.tokenize("I love natural language processing.")
- print(tokens)
- # 输出: ['I', 'Ġlove', 'Ġnatural', 'Ġlanguage', 'Ġprocessing', '.']
类似于BPE,但选择合并操作时考虑对语言模型的增益。BERT模型使用WordPiece Tokenizer。
- from transformers import AutoTokenizer
-
- tokenizer = AutoTokenizer.from_pretrained("bert-base-uncased")
- tokens = tokenizer.tokenize("I love natural language processing.")
- print(tokens)
- # 输出: ['i', 'love', 'natural', 'language', 'processing', '.']
基于语言模型的方法,通过优化token集来最大化似然。
- from transformers import AutoTokenizer
-
- tokenizer = AutoTokenizer.from_pretrained("xlnet-base-cased")
- tokens = tokenizer.tokenize("I love natural language processing.")
- print(tokens)
- # 输出: ['▁I', '▁love', '▁natural', '▁language', '▁processing', '.']
许多大预言模型使用专门的Tokenizers库,如Hugging Face的Transformers库。这个库提供了多种Tokenizers的实现,支持不同的分割策略和模型。
- from transformers import AutoTokenizer
-
- # 加载预训练的BERT Tokenizer
- tokenizer = AutoTokenizer.from_pretrained("bert-base-uncased")
-
- # 分割文本
- tokens = tokenizer.tokenize("I love natural language processing.")
- print(tokens)
- # 输出: ['i', 'love', 'natural', 'language', 'processing', '.']
-
- # 编码tokens
- encoded_input = tokenizer.encode("I love natural language processing.")
- print(encoded_input)
- # 输出: [101, 1045, 2293, 2784, 3693, 10118, 1012, 102]
Tokenizers的选择和实现对模型的性能有显著影响:
假设我们有一个简单的句子:“I love natural language processing.”
使用不同的Tokenizers,这个句子可能会被分割为:
Tokenizers是大预言模型处理和生成文本的基础。通过将文本分割为有意义的单元,模型可以学习语言的结构和语义,从而实现复杂的语言理解和生成任务。选择合适的Tokenizers方法和策略对于提高模型的性能和效率至关重要。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。