首页 > 编程语言 >大语言模型中常用的tokenizer算法

大语言模型中常用的tokenizer算法

时间:2025-01-08 12:05:11浏览次数:8  
标签:tokenizer Tokenizer text 模型 tokens 算法 分词

大语言模型中常用的tokenizer算法对于自然语言处理(NLP)任务至关重要。它们将文本分解为更小的单元(token),这些单元可以是单词、子词或字符,进而用于模型训练和推理。以下是几种常用的tokenizer算法及其详细介绍。

常用的Tokenizer算法

1. 基于规则的Tokenizer

1.1 空格分词

空格分词是最简单的tokenization方法之一,通过空格将文本分割成单词。尽管简单,但在处理复杂文本时效果不佳,尤其是在多语言环境中。

text = "Hello, world! This is a test."
tokens = text.split()
print(tokens)
# 输出: ['Hello,', 'world!', 'This', 'is', 'a', 'test.']
​
   

1.2 正则表达式分词

使用正则表达式来定义更复杂的分词规则,可以处理标点符号、特殊字符等。比如:

import re
text = "Hello, world! This is a test."
tokens = re.findall(r'\b\w+\b', text)
print(tokens)
# 输出: ['Hello', 'world', 'This', 'is', 'a', 'test']
​
   

2. 基于统计的Tokenizer

2.1 词汇表分词(WordPiece)

WordPiece是用于BERT模型的tokenizer,通过数据驱动的方法生成词汇表。它将文本分解为最小的子词单元,处理未见过的词汇时表现出色。

from transformers import BertTokenizer
tokenizer = BertTokenizer.from_pretrained('bert-base-uncased')
tokens = tokenizer.tokenize("unaffable")
print(tokens)
# 输出: ['un', '##aff', '##able']
​
   

2.2 Byte-Pair Encoding (BPE)

BPE是一种基于频率统计的分词算法,常用于GPT系列模型。它从字符级别开始,通过合并频率最高的字符对,逐步构建子词单元。

from tokenizers import Tokenizer, models, pre_tokenizers, decoders, trainers
tokenizer = Tokenizer(models.BPE())
tokenizer.pre_tokenizer = pre_tokenizers.ByteLevel()
trainer = trainers.BpeTrainer(special_tokens=["<pad>", "<s>", "</s>", "<unk>", "<mask>"])
tokenizer.train(files=["my_dataset.txt"], trainer=trainer)
tokens = tokenizer.encode("unaffable").tokens
print(tokens)
# 输出: ['un', 'aff', 'able']
​
   

2.3 SentencePiece

SentencePiece是一种无需预先分词的分词算法,广泛应用于多语言模型如T5。它采用BPE或Unigram模型进行子词分解。

import sentencepiece as spm
spm.SentencePieceTrainer.train('--input=my_dataset.txt --model_prefix=m --vocab_size=8000')
sp = spm.SentencePieceProcessor()
sp.load('m.model')
tokens = sp.encode_as_pieces("unaffable")
print(tokens)
# 输出: ['▁un', 'aff', 'able']
​
   

3. 神经网络Tokenizer

3.1 神经网络分词(Neural Tokenizer)

神经网络分词器使用深度学习模型进行分词,能够捕捉更复杂的语言现象。这些模型通常通过端到端的训练过程,直接从数据中学习分词规则。

import tensorflow as tf
import tensorflow_text as tf_text

tokenizer = tf_text.BertTokenizer('vocab.txt', lower_case=True)
tokens = tokenizer.tokenize(["Hello, world! This is a test."])
print(tokens)
# 输出: <tf.RaggedTensor [[[7592, 1010, 2088, 999], [2023, 2003, 1037, 3231, 1012]]]>
​
   

Tokenizer算法分析说明表

算法类型 主要特点 优缺点 适用场景
空格分词 简单、快速 处理复杂文本效果差 简单文本处理
正则表达式分词 灵活、可定制 需要手工定义规则 特殊字符处理
词汇表分词(WordPiece) 数据驱动、处理未见词汇 构建词汇表需要大量数据 BERT模型等
Byte-Pair Encoding (BPE) 频率统计、子词分解 需要训练词汇表 GPT系列模型
SentencePiece 无需预先分词、多语言支持 训练过程复杂 多语言模型(如T5)
神经网络分词 深度学习、复杂语言现象处理 训练资源需求大 高级NLP任务

标签:tokenizer,Tokenizer,text,模型,tokens,算法,分词
From: https://www.cnblogs.com/skonw/p/18659407

相关文章

  • AI与药学:用药咨询场景的检索增强AI大模型
    今天我们一起来解读下文献《ToolCalling:EnhancingMedicationConsultationviaRetrieval-AugmentedLargeLanguageModels》(欢迎关注公众号“赛文AI药学”获取更多药学与AI的内容)核心思想: 这篇论文针对大语言模型(LLMs)在医疗领域,特别是用药咨询场景中,由于缺乏领域知识和......
  • 数据结构与算法学习笔记----扩展欧几里得算法
    数据结构与算法学习笔记----扩展欧几里得算法@@author:明月清了个风@@firstpublishtime:2025.1.8ps⭐️涉及裴蜀定理和欧几里得算法(辗转相除法)讲解,扩展欧几里得算法的推导及其应用——线性同余方程的求解Acwing877.扩展欧几里得算法[原题链接](877.扩展欧几......
  • 大模型应用实践(一):AI助力Code Review安全漏洞发现
    隐藏在代码中的安全漏洞如同一条通往业务核心数据资产的隐秘通道,极易被黑客盯上和利用。及时识别和修复代码漏洞对防止黑客入侵和数据泄露至关重要。借助混元大模型,腾讯云AI代码助手与代码安全团队合作,推出代码评审(CodeReview,下文简称CR)之安全漏洞检出能力,可极大提升公司核心数......
  • 中阳智能化量化交易模型:从理念到实践
    一、背景与发展趋势随着全球金融市场的数字化转型,传统交易方式面临着前所未有的挑战。市场波动频率加快,数据量呈现指数级增长,单纯依赖人工经验的交易方式难以适应复杂的市场需求。在此背景下,量化交易以其数据驱动、模型化和高效率的特点,逐渐成为主流投资方式之一。中阳智能化......
  • 大语言模型提示技巧(七)-扩展
    扩展是将较短的文本,例如一组提示或主题列表,输入到大型语言模型中,让模型生成更长的文本。我们可以利用这个特性让大语言模型生成基于某个主题的电子邮件或小论文。通过这种方式使用大语言模型,可以为工作与生活提供诸多便利,而即便不能获得满意的结果,大型语言模型也将是一名优秀的头......
  • 大语言模型提示技巧(七)-扩展
    扩展是将较短的文本,例如一组提示或主题列表,输入到大型语言模型中,让模型生成更长的文本。我们可以利用这个特性让大语言模型生成基于某个主题的电子邮件或小论文。通过这种方式使用大语言模型,可以为工作与生活提供诸多便利,而即便不能获得满意的结果,大型语言模型也将是一名优秀的......
  • 启航数据结构算法之绮旅,漫步C++智慧之道——LeetCode题海探幽:轮转数组之多元策略演绎
    人无完人,持之以恒,方能见真我!!!共同进步!!文章目录复杂度练习之轮转数组方法1方法2方法3总结复杂度练习之轮转数组题目链接:轮转数组为什么我们把这道题作为复杂度的练习题呢?是因为我们以后做题都会涉及到复杂度的计算,我们要保证我们写的程序不会超出题目的时间......
  • Matlab Steger算法提取条纹中心线(亚像素位置)
    文章目录一、简介二、实现代码三、实现效果参考文献一、简介Steger算法是一种常用的图像边缘检测算法,可以用于提取图像中的中心线或边缘信息。它的理论假设是:条纹的亮度是按照高斯分布呈现的,即中心亮两侧渐暗。其计算过程如下所述:1、首先,我们需要计算......
  • 10.18软件设计——工厂方法模式之加密算法
    软件设计——工厂方法模式之加密算法1、类图   2、源代码 2.1结构目录   2.2所需jar包 这里分享几个下载jar包的网址: http://www.mvnrepository.com/ http://mvnrepository.com/ http://findjar.com http://sourceforge.net/ 注:将......
  • C语言数据结构与算法(二叉树)
    1.二叉树的概念及结构1.1概念一棵二叉树是结点的一个有限集合,该集合:1.或者为空2.由一个根节点加上两棵别称为左子树和右子树的二叉树组成特性:1.二叉树不存在度大于2的结点2.二叉树的子树有左右之分,次序不能颠倒,因此二叉树是有序树1.2特殊的二叉树满二叉树:每......