codewithkyrian/transformers

最先进的PHP机器学习。在PHP中运行Transformers

0.5.2 2024-08-29 13:06 UTC

This package is auto-updated.

Last update: 2024-09-17 14:10:32 UTC


README

TransformersPHP

最先进的PHP机器学习

Total Downloads Latest Stable Version License Documentation

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,它将模型与其必要的预处理和后处理步骤组合在一起。

您还可以通过将模型ID或路径作为pipeline函数的第二个参数指定来使用不同的模型。例如

use function Codewithkyrian\Transformers\Pipelines\pipeline;

// Allocate a pipeline for translation
$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模型。对于受支持的任务,应该可以使用已转换为在Hugging Face上与Xenova的Transformers.js一起工作的模型。

配置

您可以根据以下方式配置 TransformersPHP 库的行为

use Codewithkyrian\Transformers\Transformers;

Transformers::setup()
    ->setCacheDir('...') // Set the default cache directory for transformers models. Defaults to `.transformers-cache/models`
    ->setRemoteHost('...') // Set the remote host for downloading models. Defaults to `https://hugging-face.cn`
    ->setRemotePathTemplate('...') // Set the remote path template for downloading models. Defaults to `{model}/resolve/{revision}/{file}`
    ->setAuthToken('...') // Set the auth token for downloading models. Defaults to `null`
    ->setUserAgent('...') // Set the user agent for downloading models. Defaults to `transformers-php/{version}`
    ->setImageDriver('...') // Set the image driver for processing images. Defaults to `IMAGICK'
    ->apply(); // Apply the configuration

您可以以任何顺序调用 set 方法,也可以完全省略任何一个,在这种情况下,它将使用默认值。有关配置选项及其含义的更多信息,请参阅文档

将您的模型转换为 ONNX 格式

TransformersPHP 仅与 ONNX 模型兼容,因此您必须将您的 PyTorch、TensorFlow 或 JAX 模型转换为 ONNX 格式。建议使用 🤗 Optimum 来执行模型的转换和量化。

预下载模型

默认情况下,TransformersPHP 在您首次使用管道或预训练模型时,会自动从 Hugging Face 模型库检索模型权重(ONNX 格式)。这可能会导致初次使用时出现轻微的延迟。为了提高用户体验,建议在运行 PHP 应用程序中的模型之前预先下载您打算使用的模型,尤其是对于较大的模型。一种方法是手动运行一次请求,但 TransformersPHP 还提供命令行工具来帮助您完成此操作。

./vendor/bin/transformers download <model_identifier> [<task>] [options]

参数说明

  • <model_identifier>:这指定了您想要下载的模型。您可以通过浏览 Hugging Face 模型库(https://hugging-face.cn/models?library=transformers.js)来找到模型标识符。
  • [<task>]:(可选)此参数允许下载特定任务的配置和权重。如果您知道将要使用该模型执行的具体任务(例如,“text2text-generation”),这将非常有帮助。
  • [options]:(可选)您可以使用附加选项进一步自定义下载过程。
    • --cache_dir=<directory>:指定一个目录来存储下载的模型(默认为配置的缓存)。您可以在命令中使用 -c 作为快捷方式。
    • --quantized=<true|false>:如果可用,则下载量化模型版本(默认为 true)。量化模型较小且运行速度较快,但可能精度略低。您可以在命令中使用 -q 作为快捷方式。

注意

请记住将您的缓存目录添加到您的 .gitignore 文件中,以避免将下载的模型提交到您的 Git 仓库。

支持的任务/模型

此包仍在开发中,但以下是 TransformersPHP 当前测试和支持的任务和架构列表。

任务

自然语言处理

视觉

音频

表格

多模态

强化学习

模型

  1. ALBERT(来自谷歌研究和芝加哥丰田技术研究所)与论文ALBERT: A Lite BERT for Self-supervised Learning of Language Representations一起发布,由 Zhenzhong Lan、Mingda Chen、Sebastian Goodman、Kevin Gimpel、Piyush Sharma 和 Radu Soricut 撰写。
  2. 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 撰写。
  3. BERT(来自谷歌)与论文BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding一起发布,由 Jacob Devlin、Ming-Wei Chang、Kenton Lee 和 Kristina Toutanova 撰写。
  4. BERT For Sequence Generation(来自谷歌)与论文Leveraging Pre-trained Checkpoints for Sequence Generation Tasks一起发布,由 Sascha Rothe、Shashi Narayan 和 Aliaksei Severyn 撰写。
  5. BERTweet(来自VinAI Research)与论文《BERTweet: A pre-trained language model for English Tweets》一同发布,该论文由Dat Quoc Nguyen、Thanh Vu和Anh Tuan Nguyen撰写。
  6. BigBird-Pegasus(来自Google Research)与论文《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撰写。
  7. BigBird-RoBERTa(来自Google Research)与论文《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撰写。
  8. 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撰写。
  9. CodeGen(来自Salesforce)与论文《A Conversational Paradigm for Program Synthesis》一同发布,该论文由Erik Nijkamp、Bo Pang、Hiroaki Hayashi、Lifu Tu、Huan Wang、Yingbo Zhou、Silvio Savarese、Caiming Xiong撰写。
  10. ConvBERT(来自YituTech)与论文《ConvBERT: Improving BERT with Span-based Dynamic Convolution》一同发布,该论文由Zihang Jiang、Weihao Yu、Daquan Zhou、Yunpeng Chen、Jiashi Feng、Shuicheng Yan撰写。
  11. DeBERTa(来自Microsoft)与论文《DeBERTa: Decoding-enhanced BERT with Disentangled Attention》一同发布,该论文由Pengcheng He、Xiaodong Liu、Jianfeng Gao、Weizhu Chen撰写。
  12. DeBERTa-v2(来自Microsoft)与论文《DeBERTa: Decoding-enhanced BERT with Disentangled Attention》一同发布,该论文由Pengcheng He、Xiaodong Liu、Jianfeng Gao、Weizhu Chen撰写。
  13. DETR(来自Facebook)与论文《End-to-End Object Detection with Transformers》一同发布,该论文由Nicolas Carion、Francisco Massa、Gabriel Synnaeve、Nicolas Usunier、Alexander Kirillov、Sergey Zagoruyko撰写。
  14. DistilBERT(来自HuggingFace),与论文《DistilBERT, a distilled version of BERT: smaller, faster, cheaper and lighter》一同发布,该论文由Victor Sanh、Lysandre Debut和Thomas Wolf撰写。同样的方法已应用于将GPT2压缩为DistilGPT2,RoBERTa压缩为DistilRoBERTa,Multilingual BERT压缩为DistilmBERT,以及德语版的DistilBERT。
  15. Donut(来自NAVER),与Geewook Kim,Teakgyu Hong,Moonbin Yim,Jeongyeon Nam,Jinyoung Park,Jinyeong Yim,Wonseok Hwang,Sangdoo Yun,Dongyoon Han,Seunghyun Park等人在论文《OCR-free Document Understanding Transformer》中一同发布。
  16. ELECTRA(来自Google Research/斯坦福大学),与Kevin Clark,Minh-Thang Luong,Quoc V. Le,Christopher D. Manning在论文《ELECTRA: Pre-training text encoders as discriminators rather than generators》中一同发布。
  17. FLAN-T5(来自Google AI),在google-research/t5x仓库中发布,由Hyung Won Chung,Le Hou,Shayne Longpre,Barret Zoph,Yi Tay,William Fedus,Eric Li,Xuezhi Wang,Mostafa Dehghani,Siddhartha Brahma,Albert Webson,Shixiang Shane Gu,Zhuyun Dai,Mirac Suzgun,Xinyun Chen,Aakanksha Chowdhery,Sharan Narang,Gaurav Mishra,Adams Yu,Vincent Zhao,Yanping Huang,Andrew Dai,Hongkun Yu,Slav Petrov,Ed H. Chi,Jeff Dean,Jacob Devlin,Adam Roberts,Denny Zhou,Quoc V. Le,和Jason Wei共同发布。
  18. GPT-2(来自OpenAI),与Alec Radford*,Jeffrey Wu*,Rewon Child,David Luan,Dario Amodei**和Ilya Sutskever**在论文《Language Models are Unsupervised Multitask Learners》中一同发布。
  19. GPT-J(来自EleutherAI),在kingoflolz/mesh-transformer-jax仓库中发布,由Ben Wang和Aran Komatsuzaki共同发布。
  20. GPTBigCode(来自BigCode),与Loubna Ben Allal,Raymond Li,Denis Kocetkov,Chenghao Mou,Christopher Akiki,Carlos Munoz Ferrandis,Niklas Muennighoff,Mayank Mishra,Alex Gu,Manan Dey,Logesh Kumar Umapathi,Carolyn Jane Anderson,Yangtian Zi,Joel Lamy Poirier,Hailey Schoelkopf,Sergey Troshin,Dmitry Abulkhanov,Manuel Romero,Michael Lappert,Francesco De Toni,Bernardo García del Río,Qian Liu,Shamik Bose,Urvashi Bhattacharyya,Terry Yue Zhuo,Ian Yu,Paulo Villegas,Marco Zocca,Sourab Mangrulkar,David Lansky,Huu Nguyen,Danish Contractor,Luis Villa,Jia Li,Dzmitry Bahdanau,Yacine Jernite,Sean Hughes,Daniel Fried,Arjun Guha,Harm de Vries,Leandro von Werra在论文《SantaCoder: don't reach for the stars!》中一同发布。
  21. M2M100(来自Facebook),与Angela Fan,Shruti Bhosale,Holger Schwenk,Zhiyi Ma,Ahmed El-Kishky,Siddharth Goyal,Mandeep Baines,Onur Celebi,Guillaume Wenzek,Vishrav Chaudhary,Naman Goyal,Tom Birch,Vitaliy Liptchinsky,Sergey Edunov,Edouard Grave,Michael Auli,Armand Joulin在论文《Beyond English-Centric Multilingual Machine Translation》中一同发布。
  22. MobileBERT(来自CMU/Google Brain),与Zhiqing Sun,Hongkun Yu,Xiaodan Song,Renjie Liu,Yiming Yang,和Denny Zhou在论文《MobileBERT: a Compact Task-Agnostic BERT for Resource-Limited Devices》中一同发布。
  23. OWL-ViT(来自谷歌AI),与论文《简单开放式词汇视觉Transformer对象检测》一起发布,该论文由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共同撰写。
  24. OWLv2(来自谷歌AI),与论文《开放式词汇对象检测的扩展》一起发布,该论文由Matthias Minderer、Alexey Gritsenko和Neil Houlsby共同撰写。
  25. RoBERTa(来自Facebook),与论文《RoBERTa:一种鲁棒优化的BERT预训练方法》一起发布,该论文由Yinhan Liu、Myle Ott、Naman Goyal、Jingfei Du、Mandar Joshi、Danqi Chen、Omer Levy、Mike Lewis、Luke Zettlemoyer和Veselin Stoyanov共同撰写。
  26. RoBERTa-PreLayerNorm(来自Facebook),与论文《fairseq:一种快速、可扩展的序列建模工具包》一起发布,该论文由Myle Ott、Sergey Edunov、Alexei Baevski、Angela Fan、Sam Gross、Nathan Ng、David Grangier和Michael Auli共同撰写。
  27. RoFormer(来自追一科技),与论文《RoFormer:增强Transformer与旋转位置嵌入》一起发布,该论文由Jianlin Su、Yu Lu、Shengfeng Pan、Bo Wen和Yunfeng Liu共同撰写。
  28. SigLIP(来自谷歌AI),与论文《用于语言图像预训练的Sigmoid损失函数》一起发布,该论文由Xiaohua Zhai、Basil Mustafa、Alexander Kolesnikov和Lucas Beyer共同撰写。
  29. Swin2SR(来自维尔茨堡大学),与论文《Swin2SR:用于压缩图像超分辨率和修复的SwinV2 Transformer》一起发布,该论文由Marcos V. Conde、Ui-Jin Choi、Maxime Burchi和Radu Timofte共同撰写。
  30. T5(来自谷歌AI),与论文《使用统一的文本到文本Transformer探索迁移学习的极限》一起发布,该论文由Colin Raffel、Noam Shazeer、Adam Roberts、Katherine Lee、Sharan Narang、Michael Matena、Yanqi Zhou、Wei Li和Peter J. Liu共同撰写。
  31. T5v1.1(来自谷歌AI),在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共同发布。
  32. TrOCR(来自微软),与论文《基于Transformer的预训练模型的基于Transformer的光学字符识别(TrOCR)》一起发布,该论文由Minghao Li、Tengchao Lv、Lei Cui、Yijuan Lu、Dinei Florencio、Cha Zhang、Zhoujun Li和Furu Wei共同撰写。
  33. 视觉Transformer (ViT)(来自谷歌AI)与论文《一幅图胜过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撰写。
  34. YOLOS(来自华中科技大学)与论文《你只需看一个序列:通过目标检测重新思考视觉中的Transformer》一同发布,该论文由Fang Yuxin,Liao Bencheng,Wang Xinggang,Fang Jiemin,Qi Jiyang,Wu Rui,Niu Jianwei,Liu Wenyu撰写。