TransformersPHP
PHP的最先进机器学习
TransformersPHP旨在在功能上与Python库等效,同时保持相同水平的性能和易用性。该库基于Hugging Face的Transformers库构建,提供了100多种语言的数千个预训练模型。它旨在为PHP开发者提供一个简单易用的库,使用与Python库类似的API。这些模型可用于各种任务,包括文本生成、摘要、翻译等。
TransformersPHP使用ONNX Runtime来运行模型,这是一个用于Open Neural Network Exchange (ONNX)模型的高性能评分引擎。您可以使用🤗 Optimum轻松将任何PyTorch或TensorFlow模型转换为ONNX格式,并在TransformersPHP中使用。
要了解更多关于该库及其工作原理的信息,请查看我们的详细文档。
快速浏览
由于TransformersPHP旨在在功能上与Python库等效,因此从现有的Python或Javascript代码中学习非常容易。我们提供了pipeline
API,这是一个高级、易用的API,它将模型与其必要的预处理和后处理步骤组合在一起。
Python(原始) | PHP(我们的) | Javascript(Xenova) |
---|---|---|
|
|
|
您还可以通过将模型ID或路径指定为pipeline
函数的第二个参数来使用不同的模型。例如:
use function Codewithkyrian\Transformers\Pipelines\pipeline;
// 分配一个用于翻译的pipeline
$pipe = pipeline('translation', 'Xenova/distilbert-base-uncased-finetuned-sst-2-english');
安装
您可以通过Composer安装该库。这是安装该库的推荐方式。
composer require codewithkyrian/transformers
[!注意] ONNX库是特定于平台的,因此在代码将要执行的目标平台上运行composer require命令很重要。在大多数情况下,这将是您的开发机器或部署应用程序的服务器,但如果您使用Docker容器,请在该容器内运行
composer require
命令。
PHP FFI扩展
TransformersPHP使用PHP FFI扩展与ONNX运行时交互。FFI扩展在PHP 7.4及更高版本中默认包含,但可能默认未启用。如果FFI扩展未启用,您可以通过取消注释(删除行首的;
)来在php.ini
文件中启用以下行:
extension = ffi
此外,您需要在php.ini
文件中将ffi.enable
指令设置为true
:
ffi.enable = true
进行这些更改后,重启您的Web服务器或PHP-FPM服务,您就可以开始使用了。
文档
有关如何使用该库的更详细信息,请查看文档:https://codewithkyrian.github.io/transformers-php
使用
默认情况下,TransformersPHP使用托管的预训练ONNX模型。对于支持的任务,在HuggingFace上已转换为可与Xenova的Transformers.js一起工作的模型应该可以直接与TransformersPHP一起使用。
配置
您可以按如下方式配置TransformersPHP库的行为:
use Codewithkyrian\Transformers\Transformers;
Transformers::setup()
->setCacheDir('...') // 设置transformers模型的默认缓存目录。默认为`.transformers-cache/models`
->setRemoteHost('...') // 设置下载模型的远程主机。默认为`https://huggingface.co`
->setRemotePathTemplate('...') // 设置下载模型的远程路径模板。默认为`{model}/resolve/{revision}/{file}`
->setAuthToken('...') // 设置下载模型的认证令牌。默认为`null`
->setUserAgent('...') // 设置下载模型的用户代理。默认为`transformers-php/{version}`
->setImageDriver('...') // 设置处理图像的图像驱动程序。默认为`IMAGICK'
->apply(); // 应用配置
你可以按任意顺序调用这些`set`方法,或者完全省略任何一个,在这种情况下,它将使用默认值。有关配置选项及其含义的更多信息,请查看[文档](https://codewithkyrian.github.io/transformers-php/configuration)。
## 将模型转换为ONNX格式
TransformersPHP仅支持ONNX模型,因此,你必须将PyTorch、TensorFlow或JAX模型转换为ONNX格式。建议使用[🤗 Optimum](https://huggingface.co/docs/optimum)来执行模型的转换和量化。
## 预先下载模型
默认情况下,当你首次使用管道或预训练模型时,TransformersPHP会自动从Hugging Face模型仓库获取模型权重(ONNX格式)。这可能会导致初次使用时略有延迟。为了改善用户体验,建议在PHP应用中运行模型之前预先下载你打算使用的模型,特别是对于较大的模型。一种方法是手动运行一次请求,但TransformersPHP还提供了一个命令行工具来帮助你实现这一点:
```bash
./vendor/bin/transformers download <model_identifier> [<task>] [options]
参数说明:
- <model_identifier>:指定你要下载的模型。你可以通过浏览Hugging Face模型仓库(https://huggingface.co/models?library=transformers.js)找到模型标识符。
- [
] :(可选)此参数允许下载特定任务的配置和权重。如果你知道将要使用模型的具体任务,这会很有帮助(例如,"text2text-generation")。 - [options]:(可选)你可以使用额外的选项进一步自定义下载过程:
- --cache_dir=
:指定存储下载模型的目录(默认为配置的缓存)。你可以在命令中使用-c作为快捷方式。 - --quantized=<true|false>:下载量化模型版本(如果可用,默认为true)。量化模型更小更快,但准确性可能略有降低。在命令中使用-q作为快捷方式。
- --cache_dir=
[!注意] 记得将你的缓存目录添加到
.gitignore
文件中,以避免将下载的模型提交到git仓库。
支持的任务/模型
这个包还在开发中,但以下是TransformersPHP目前测试并支持的任务和架构列表。
任务
自然语言处理
任务 | ID | 描述 | 是否支持 |
---|---|---|---|
填充遮蔽 | fill-mask | 遮蔽句子中的某些词并预测应该替换这些遮蔽的词。 | ✅ |
问答 | question-answering | 从给定文本中检索问题的答案。 | ✅ |
句子相似度 | sentence-similarity | 确定两个文本的相似程度。 | ✅ |
摘要生成 | summarization | 在保留重要信息的同时生成文档的简短版本。 | ✅ |
表格问答 | table-question-answering | 回答关于给定表格中信息的问题。 | ❌ |
文本分类 | text-classification 或 sentiment-analysis | 为给定文本分配标签或类别。 | ✅ |
文本生成 | text-generation | 通过预测序列中的下一个词来生成新文本。 | ✅ |
文本到文本生成 | text2text-generation | 将一个文本序列转换为另一个文本序列。 | ✅ |
词元分类 | token-classification 或 ner | 为文本中的每个词元分配标签。 | ✅ |
翻译 | translation | 将文本从一种语言转换为另一种语言。 | ✅ |
零样本分类 | zero-shot-classification | 将文本分类为训练期间未见过的类别。 | ✅ |
视觉
任务 | ID | 描述 | 是否支持 |
---|---|---|---|
深度估计 | depth-estimation | 预测图像中物体的深度。 | ❌ |
图像分类 | image-classification | 为整个图像分配标签或类别。 | ✅ |
图像分割 | image-segmentation | 将图像划分为多个部分,每个像素映射到一个物体。这个任务有多个变体,如实例分割、全景分割和语义分割。 | ❌ |
图像到图像 | image-to-image | 将源图像转换以匹配目标图像或目标图像域的特征。 | ✅ |
遮罩生成 | mask-generation | 为图像中的物体生成遮罩。 | ❌ |
物体检测 | object-detection | 识别图像中特定定义类别的物体。 | ✅ |
音频
任务 | ID | 描述 | 是否支持 |
---|---|---|---|
音频分类 | audio-classification | 为给定音频分配标签或类别。 | ❌ |
音频到音频 | N/A | 从输入音频源生成音频。 | ❌ |
自动语音识别 | automatic-speech-recognition | 将给定音频转录为文本。 | ❌ |
文本转语音 | text-to-speech 或 text-to-audio | 根据文本输入生成自然语音。 | ❌ |
表格数据
多模态
任务 | ID | 描述 | 是否支持 |
---|---|---|---|
文档问答 | document-question-answering | 回答文档图像上的问题。 | ❌ |
特征提取 | feature-extraction | 将原始数据转换为可处理的数值特征,同时保留原始数据集中的信息。 | ✅ |
图像特征提取 | image-feature-extraction | 从图像中提取特征。 | ✅ |
图像到文本 | image-to-text | 从给定图像输出文本。 | ✅ |
文本到图像 | text-to-image | 根据输入文本生成图像。 | ❌ |
视觉问答 | visual-question-answering | 基于图像回答开放式问题。 | ❌ |
零样本音频分类 | zero-shot-audio-classification | 将音频分类到训练期间未见过的类别中。 | ❌ |
零样本图像分类 | zero-shot-image-classification | 将图像分类到训练期间未见过的类别中。 | ✅ |
零样本物体检测 | zero-shot-object-detection | 识别训练期间未见过的类别的物体。 | ✅ |
强化学习
任务 | ID | 描述 | 是否支持 |
---|---|---|---|
强化学习 | N/A | 通过与环境互动、尝试错误并接收奖励(负面或正面)作为反馈来学习行动。 | ❌ |
模型
-
ALBERT (来自谷歌研究院和芝加哥丰田技术研究所)发布于论文 ALBERT: A Lite BERT for Self-supervised Learning of Language Representations,作者为Zhenzhong Lan, Mingda Chen, Sebastian Goodman, Kevin Gimpel, Piyush Sharma, Radu Soricut。
-
BART (来自Facebook)发布于论文 BART: Denoising Sequence-to-Sequence Pre-training for Natural Language Generation, Translation, and Comprehension,作者为Mike Lewis, Yinhan Liu, Naman Goyal, Marjan Ghazvininejad, Abdelrahman Mohamed, Omer Levy, Ves Stoyanov和Luke Zettlemoyer。
-
BERT (来自谷歌)发布于论文 BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding,作者为Jacob Devlin, Ming-Wei Chang, Kenton Lee和Kristina Toutanova。
-
BERT For Sequence Generation (来自谷歌)发布于论文 Leveraging Pre-trained Checkpoints for Sequence Generation Tasks,作者为Sascha Rothe, Shashi Narayan, Aliaksei Severyn。
-
BERTweet (来自VinAI Research)发布于论文 BERTweet: A pre-trained language model for English Tweets,作者为Dat Quoc Nguyen, Thanh Vu和Anh Tuan Nguyen。
-
BigBird-Pegasus (来自谷歌研究院)发布于论文 Big Bird: Transformers for Longer Sequences,作者为Manzil Zaheer, Guru Guruganesh, Avinava Dubey, Joshua Ainslie, Chris Alberti, Santiago Ontanon, Philip Pham, Anirudh Ravula, Qifan Wang, Li Yang, Amr Ahmed。
-
BigBird-RoBERTa (来自谷歌研究院)发布于论文 Big Bird: Transformers for Longer Sequences,作者为Manzil Zaheer, Guru Guruganesh, Avinava Dubey, Joshua Ainslie, Chris Alberti, Santiago Ontanon, Philip Pham, Anirudh Ravula, Qifan Wang, Li Yang, Amr Ahmed。
-
CLIP (来自OpenAI)发布于论文 Learning Transferable Visual Models From Natural Language Supervision,作者为Alec Radford, Jong Wook Kim, Chris Hallacy, Aditya Ramesh, Gabriel Goh, Sandhini Agarwal, Girish Sastry, Amanda Askell, Pamela Mishkin, Jack Clark, Gretchen Krueger, Ilya Sutskever。
-
CodeGen (来自Salesforce)发布于论文 A Conversational Paradigm for Program Synthesis,作者为Erik Nijkamp, Bo Pang, Hiroaki Hayashi, Lifu Tu, Huan Wang, Yingbo Zhou, Silvio Savarese, Caiming Xiong。
-
ConvBERT (来自YituTech)发布于论文 ConvBERT: Improving BERT with Span-based Dynamic Convolution,作者为Zihang Jiang, Weihao Yu, Daquan Zhou, Yunpeng Chen, Jiashi Feng, Shuicheng Yan。
-
DeBERTa (来自微软)发布于论文 DeBERTa: Decoding-enhanced BERT with Disentangled Attention,作者为Pengcheng He, Xiaodong Liu, Jianfeng Gao, Weizhu Chen。
-
DeBERTa-v2 (来自微软)发布于论文 DeBERTa: Decoding-enhanced BERT with Disentangled Attention,作者为Pengcheng He, Xiaodong Liu, Jianfeng Gao, Weizhu Chen。
-
DETR (来自Facebook)发布于论文 End-to-End Object Detection with Transformers,作者为Nicolas Carion, Francisco Massa, Gabriel Synnaeve, Nicolas Usunier, Alexander Kirillov, Sergey Zagoruyko。
-
DistilBERT(由HuggingFace开发),与论文《DistilBERT, a distilled version of BERT: smaller, faster, cheaper and lighter》一同发布,作者为Victor Sanh、Lysandre Debut和Thomas Wolf。同样的方法被用于将GPT2压缩为DistilGPT2,RoBERTa压缩为DistilRoBERTa,多语言BERT压缩为DistilmBERT,以及DistilBERT的德语版本。
-
Donut(由NAVER开发),与论文《OCR-free Document Understanding Transformer》一同发布,作者为Geewook Kim、Teakgyu Hong、Moonbin Yim、Jeongyeon Nam、Jinyoung Park、Jinyeong Yim、Wonseok Hwang、Sangdoo Yun、Dongyoon Han和Seunghyun Park。
-
ELECTRA(由Google Research/斯坦福大学开发),与论文《ELECTRA: Pre-training text encoders as discriminators rather than generators》一同发布,作者为Kevin Clark、Minh-Thang Luong、Quoc V. Le和Christopher D. Manning。
-
FLAN-T5(由Google AI开发),在google-research/t5x仓库中发布,作者包括Hyung Won Chung、Le Hou、Shayne Longpre等多位研究人员。
-
GPT-2(由OpenAI开发),与论文《Language Models are Unsupervised Multitask Learners》一同发布,作者为Alec Radford*、Jeffrey Wu*、Rewon Child、David Luan、Dario Amodei和Ilya Sutskever。
-
GPT-J(由EleutherAI开发),在kingoflolz/mesh-transformer-jax仓库中发布,作者为Ben Wang和Aran Komatsuzaki。
-
GPTBigCode(由BigCode开发),与论文《SantaCoder: don't reach for the stars!》一同发布,作者包括Loubna Ben Allal、Raymond Li、Denis Kocetkov等多位研究人员。
-
M2M100(由Facebook开发),与论文《Beyond English-Centric Multilingual Machine Translation》一同发布,作者包括Angela Fan、Shruti Bhosale、Holger Schwenk等多位研究人员。
-
MobileBERT(由CMU/Google Brain开发),与论文《MobileBERT: a Compact Task-Agnostic BERT for Resource-Limited Devices》一同发布。 作者:孙志清、于洪坤、宋晓丹、刘仁杰、杨一鸣和周丹尼。
-
OWL-ViT(来自谷歌人工智能)随论文《使用视觉变换器的简单开放词汇目标检测》发布,作者为Matthias Minderer、Alexey Gritsenko、Austin Stone、Maxim Neumann、Dirk Weissenborn、Alexey Dosovitskiy、Aravindh Mahendran、Anurag Arnab、Mostafa Dehghani、Zhuoran Shen、Xiao Wang、Xiaohua Zhai、Thomas Kipf和Neil Houlsby。
-
OWLv2(来自谷歌人工智能)随论文《扩展开放词汇目标检测》发布,作者为Matthias Minderer、Alexey Gritsenko和Neil Houlsby。
-
RoBERTa(来自Facebook)随论文《RoBERTa:一种稳健优化的BERT预训练方法》发布,作者为Yinhan Liu、Myle Ott、Naman Goyal、Jingfei Du、Mandar Joshi、Danqi Chen、Omer Levy、Mike Lewis、Luke Zettlemoyer和Veselin Stoyanov。
-
RoBERTa-PreLayerNorm(来自Facebook)随论文《fairseq:一个快速、可扩展的序列建模工具包》发布,作者为Myle Ott、Sergey Edunov、Alexei Baevski、Angela Fan、Sam Gross、Nathan Ng、David Grangier和Michael Auli。
-
RoFormer(来自追一科技)随论文《RoFormer:具有旋转位置嵌入的增强型Transformer》发布,作者为苏剑林、陆宇、潘胜峰、温博和刘云峰。
-
SigLIP(来自谷歌人工智能)随论文《用于语言图像预训练的Sigmoid损失》发布,作者为Xiaohua Zhai、Basil Mustafa、Alexander Kolesnikov和Lucas Beyer。
-
Swin2SR(来自维尔茨堡大学)随论文《Swin2SR:用于压缩图像超分辨率和恢复的SwinV2 Transformer》发布,作者为Marcos V. Conde、Ui-Jin Choi、Maxime Burchi和Radu Timofte。
-
T5(来自谷歌人工智能)随论文《探索统一文本到文本Transformer的迁移学习极限》发布,作者为Colin Raffel、Noam Shazeer、Adam Roberts、Katherine Lee、Sharan Narang、Michael Matena、Yanqi Zhou、Wei Li和Peter J. Liu。
-
T5v1.1(来自谷歌人工智能)在github仓库"google-research/text-to-text-transfer-transformer"中发布,作者为Colin Raffel、Noam Shazeer、Adam Roberts、Katherine Lee、Sharan Narang、Michael Matena、Yanqi Zhou、Wei Li和Peter J. Liu。
-
TrOCR(来自微软)随论文《TrOCR:基于预训练模型的Transformer光学字符识别》发布,作者为李明浩、吕腾超、崔磊、陆怡娟、Dinei Florencio、张茶、李舟军和魏福如。
-
Vision Transformer (ViT)(来自谷歌人工智能)随论文《一张图片胜过16x16个词:大规模图像识别的Transformer》发布,作者为Alexey Dosovitskiy、Lucas Beyer、Alexander Kolesnikov、Dirk Weissenborn、Xiaohua Zhai、Thomas Unterthiner、Mostafa Dehghani、Matthias Minderer、Georg Heigold、Sylvain Gelly、Jakob Uszkoreit和Neil Houlsby。
-
YOLOS(来自华中科技大学)随论文《你只需看一个序列:通过目标检测重新思考视觉中的Transformer》发布,作者未提供。 方宇鑫、廖本成、王兴刚、方杰民、齐吉阳、吴瑞、牛建伟、刘文予 著。