给定一段文本字符串(例如,"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、自定义customencodingEncodingRegistry 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")
   复制代码
 
评论