【人工智能之大模型】说说你了解的大型语言模型中的有哪些分词技术?

【人工智能之大模型】说说你了解的大型语言模型中的有哪些分词技术?



欢迎宝子们点赞、关注、收藏!欢迎宝子们批评指正!
祝所有的硕博生都能遇到好的导师!好的审稿人!好的同门!顺利毕业!

大多数高校硕博生毕业要求需要参加学术会议,发表EI或者SCI检索的学术论文会议论文。详细信息可关注VX “学术会议小灵通”或参考学术信息专栏:https://blog.csdn.net/gaoxiaoxiao1209/article/details/146181864


前言

在大型语言模型(LLM)的发展过程中,分词技术(Tokenization)是至关重要的一环。分词技术将连续的文本序列拆分为模型可处理的基本单元(tokens),直接影响模型的性能和效率。

常见的分词方法:

词级别分词(Word-level Tokenization):

  • 将文本直接按照空格或标点符号拆分为单词。这种方法简单直观,但对于词汇丰富的语言,词表会非常庞大,且无法处理未登录词。
示例:
text = "今天天气真好"
tokens = text.split()
print(tokens)
# 输出:['今天天气真好']

字符级别分词(Character-level Tokenization):

  • 将文本中的每个字符视为一个token。这种方法避免了未登录词问题,但序列长度会大幅增加,增加模型的计算成本。
示例:
text = "今天天气真好"
tokens = list(text)
print(tokens)
# 输出:['今', '天', '天', '气', '真', '好']

子词级别分词(Subword-level Tokenization):

  • 将文本拆分为常见的子词单元,兼顾词级别和字符级别分词的优点,既能处理未登录词,又能控制词表规模。常用的子词分词算法包括:
字节对编码(Byte-Pair Encoding, BPE):
  • 基于统计方法,迭代地合并频率最高的字符或子词对,构建子词词典。
示例:
from tokenizers import Tokenizer
from tokenizers.models import BPE
from tokenizers.trainers import BpeTrainer
from tokenizers.pre_tokenizers import Whitespace

# 初始化分词器
tokenizer = Tokenizer(BPE())
tokenizer.pre_tokenizer = Whitespace()

# 训练分词器
trainer = BpeTrainer(special_tokens=["<unk>", "<pad>", "<bos>", "<eos>"])
tokenizer.train(["path/to/your/corpus.txt"], trainer)

# 对文本进行分词
output = tokenizer.encode("今天天气真好")
print(output.tokens)
# 输出示例:['今', '天', '天', '气', '真', '好']

Unigram语言模型(Unigram Language Model):
  • 基于统计方法,计算每个子词的概率,选择概率最高的子词组合。
示例:
from tokenizers import Tokenizer
from tokenizers.models import Unigram
from tokenizers.trainers import UnigramTrainer
from tokenizers.pre_tokenizers import Whitespace

# 初始化分词器
tokenizer = Tokenizer(Unigram())
tokenizer.pre_tokenizer = Whitespace()

# 训练分词器
trainer = UnigramTrainer(special_tokens=["<unk>", "<pad>", "<bos>", "<eos>"])
tokenizer.train(["path/to/your/corpus.txt"], trainer)

# 对文本进行分词
output = tokenizer.encode("今天天气真好")
print(output.tokens)
# 输出示例:['今天', '天气', '真好']

SentencePiece:
  • 由谷歌提出的一种分词工具,能够自动学习子词单元,支持多种语言的分词需求。
示例:
import sentencepiece as spm

# 训练SentencePiece模型
spm.SentencePieceTrainer.train(input='path/to/your/corpus.txt', model_prefix='m', vocab_size=8000)

# 加载模型
sp = spm.SentencePieceProcessor(model_file='m.model')

# 对文本进行分词
tokens = sp.encode("今天天气真好", out_type=str)
print(tokens)
# 输出示例:['▁今天', '天气', '真好']

选择合适的分词技术对于大型语言模型的性能和效果至关重要。子词级别的分词方法,如BPE和Unigram语言模型,能够在词汇覆盖率和词表规模之间取得平衡,已被广泛应用于当前的大型语言模型中。


欢迎宝子们点赞、关注、收藏!欢迎宝子们批评指正!
祝所有的硕博生都能遇到好的导师!好的审稿人!好的同门!顺利毕业!

大多数高校硕博生毕业要求需要参加学术会议,发表EI或者SCI检索的学术论文会议论文。详细信息可关注VX “学术会议小灵通”或参考学术信息专栏:https://blog.csdn.net/gaoxiaoxiao1209/article/details/146181864

Logo

脑启社区是一个专注类脑智能领域的开发者社区。欢迎加入社区,共建类脑智能生态。社区为开发者提供了丰富的开源类脑工具软件、类脑算法模型及数据集、类脑知识库、类脑技术培训课程以及类脑应用案例等资源。

更多推荐