写点什么

openAi 基于 java jtokkit 实现分词

作者:王彦涛
  • 2023-11-18
    北京
  • 本文字数:978 字

    阅读完需:约 3 分钟

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


用户头像

王彦涛

关注

还未添加个人签名 2019-12-06 加入

还未添加个人简介

评论

发布
暂无评论
openAi基于java jtokkit实现分词_jtokkit_王彦涛_InfoQ写作社区