crazzy501/gpt3-tokenizer

用于 GPT-3 的字节对编码(BPE)的 PHP 包。

1.0.1.2 2023-07-17 12:40 UTC

This package is auto-updated.

Last update: 2024-09-17 15:24:54 UTC


README

这是一个 GPT-3 分词器的 PHP 版本。它基于原始的 Python 实现 [链接] 和 Nodejs 实现 [链接]

GPT-2 和 GPT-3 使用一种称为字节对编码的技术将文本转换为一系列整数,这些整数随后用作模型的输入。在与 OpenAI API 交互时,在将文本发送到 API 之前计算给定文本中的标记数量可能很有用。

想了解更多,请阅读 Hugging Face 的 分词器总结

支持 ⭐️

如果你觉得我的工作有用,我很高兴你能通过为这个项目点一个星 ⭐️ 来表示你的支持。这只需一秒钟,对我来说意义重大。你的星标不仅会让我感到温暖,还会帮助更多的人受益于这个项目。

安装

使用 Composer 从 Packagist 安装此包

composer require gioni06/gpt3-tokenizer

测试

加载词汇表文件消耗大量内存。你可能需要增加 phpunit 内存限制。 [链接]

./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 文件。