gioni06 / gpt3-tokenizer
用于 GPT-3 的字节对编码(BPE)的 PHP 包。
v1.2.0
2023-04-16 12:49 UTC
Requires
- php: ^8.0.2
- ext-mbstring: *
Requires (Dev)
- phpunit/phpunit: ^9.5.8
README
这是一个 GPT-3 令牌化器的 PHP 版本。它基于原始 Python 实现和Nodejs 实现。
GPT-2 和 GPT-3 使用一种称为字节对编码的技术将文本转换为整数序列,这些整数序列随后用作模型的输入。在与 OpenAI API 交互时,您可能需要在将其发送到 API 之前计算给定文本中的令牌数量。
如果您想了解更多信息,请阅读 Hugging Face 的令牌化器摘要。
tl;dr 🤖
有一个定制 GPT 用于 ChatGPT,可以帮助您在软件中使用此包。
支持 ⭐️
如果您觉得我的工作有用,我将非常高兴如果您能通过给这个项目加星⭐️来支持我。这只需几秒钟,对我来说意义重大。您的星标不仅会让我感到温暖和舒适,还会帮助更多的人受益于这个项目。
安装
使用 Composer 从Packagist安装此包
composer require gioni06/gpt3-tokenizer
测试
加载词汇表文件消耗大量内存。您可能需要增加 phpunit 内存限制。https://stackoverflow.com/questions/46448294/phpunit-coverage-allowed-memory-size-of-536870912-bytes-exhausted
./vendor/bin/phpunit -d memory_limit=-1 tests/
使用配置类
use Gioni06\Gpt3Tokenizer\Gpt3TokenizerConfig; // default vocab path // default merges path // caching enabled $defaultConfig = new Gpt3TokenizerConfig(); $customConfig = new Gpt3TokenizerConfig(); $customConfig ->vocabPath('custom_vocab.json') // path to a custom vocabulary file ->mergesPath('custom_merges.txt') // path to a custom merges file ->useCache(false)
关于缓存的说明
令牌化器将尝试使用 apcu
进行缓存,如果不可用,则将使用纯 PHP array
。使用缓存时,在处理长文本时您将看到更好的性能。默认启用缓存。
编码文本
use Gioni06\Gpt3Tokenizer\Gpt3TokenizerConfig; use Gioni06\Gpt3Tokenizer\Gpt3Tokenizer; $config = new Gpt3TokenizerConfig(); $tokenizer = new Gpt3Tokenizer($config); $text = "This is some text"; $tokens = $tokenizer->encode($text); // [1212,318,617,2420]
解码文本
use Gioni06\Gpt3Tokenizer\Gpt3TokenizerConfig; use Gioni06\Gpt3Tokenizer\Gpt3Tokenizer; $config = new Gpt3TokenizerConfig(); $tokenizer = new Gpt3Tokenizer($config); $tokens = [1212,318,617,2420] $text = $tokenizer->decode($tokens); // "This is some text"
计算文本中的令牌数量
use Gioni06\Gpt3Tokenizer\Gpt3TokenizerConfig; use Gioni06\Gpt3Tokenizer\Gpt3Tokenizer; $config = new Gpt3TokenizerConfig(); $tokenizer = new Gpt3Tokenizer($config); $text = "This is some text"; $numberOfTokens = $tokenizer->count($text); // 4
将给定的文本编码为令牌块,每个块包含指定数量的最大令牌数。
此方法在处理需要分成更小块进行进一步处理的大型文本时很有用。
use Gioni06\Gpt3Tokenizer\Gpt3TokenizerConfig; use Gioni06\Gpt3Tokenizer\Gpt3Tokenizer; $config = new Gpt3TokenizerConfig(); $tokenizer = new Gpt3Tokenizer($config); $text = "1 2 hello,world 3 4"; $tokenizer->encodeInChunks($text, 5) // [[16, 362, 23748], [171, 120, 234, 6894, 513], [604]]
将给定的文本分成编码的段,每个段包含指定数量的最大令牌数。
此方法利用 encodeInChunks 方法将文本编码为字节对编码(BPE)令牌,然后将这些令牌解码回文本。
use Gioni06\Gpt3Tokenizer\Gpt3TokenizerConfig; use Gioni06\Gpt3Tokenizer\Gpt3Tokenizer; $config = new Gpt3TokenizerConfig(); $tokenizer = new Gpt3Tokenizer($config); $text = "1 2 hello,world 3 4"; $tokenizer->chunk($text, 5) // ['1 2 hello', ',world 3', ' 4']
许可证
本项目使用 Apache License 2.0 许可证。有关更多信息,请参阅LICENSE 文件。