给定一段文本字符串(例如,"tiktoken is great!"
)和一种编码方式(例如,"cl100k_base"
),分词器可以将文本字符串切分成一系列的 token(例如,["t", "ik", "token", " is", " great", "!"]
)。
将文本字符串切分成 token 非常有用,因为 GPT 模型看到的文本就是以 token 的形式呈现的。知道一段文本字符串中有多少个 token 可以告诉你(a)这个字符串是否对于文本模型来说太长了而无法处理,以及(b)一个 OpenAI API 调用的费用是多少(因为使用量是按照 token 计价的)。
编码方式
编码方式规定了如何将文本转换成 token。不同的模型使用不同的编码方式。
tiktoken
支持 OpenAI 模型使用的三种编码方式:
如何进行通常的分词操作
在英语中,token 的长度通常在一个字符到一个单词之间变化(例如,"t"
或 " great"
),尽管在某些语言中,token 可以比一个字符短或比一个单词长。空格通常与单词的开头一起分组(例如," is"
而不是 "is "
或 " "
+"is"
)。你可以快速在 OpenAI分词器 检查一段字符串如何被分词。
下面是一个用 java 实现分词的代码:
1、引入 jar 包依赖
<dependency>
<groupId>com.knuddels</groupId>
<artifactId>jtokkit</artifactId>
<version>0.6.1</version>
</dependency>
复制代码
2、分词功能
EncodingRegistry registry = Encodings.newDefaultEncodingRegistry();
Encoding enc = registry.getEncoding(EncodingType.CL100K_BASE);
List<Integer> encoded = enc.encode("This is a sample sentence.");
// encoded = [2028, 374, 264, 6205, 11914, 13]
String decoded = enc.decode(encoded);
Encoding secondEnc = registry.getEncodingForModel(ModelType.TEXT_EMBEDDING_ADA_002);
复制代码
3、自定义编码(没用到)
1、自定义customencoding
EncodingRegistry registry = Encodings.newDefaultEncodingRegistry();
Encoding customEncoding = new CustomEncoding();
registry.registerEncoding(customEncoding);
2、传参方式
EncodingRegistry registry = Encodings.newDefaultEncodingRegistry();
GptBytePairEncodingParams params = new GptBytePairEncodingParams(
"custom-name",
Pattern.compile("some custom pattern"),
encodingMap,
specialTokenEncodingMap
);
registry.registerGptBytePairEncoding(params);
使用方式registry.getEncoding("custom-name")
复制代码
评论