English | 简体中文 | 繁體中文 | 한국어 | Español | 日本語 | हिन्दी | Русский | Рortuguês | తెలుగు | Français | Deutsch | Tiếng Việt |
JAX、PyTorch和TensorFlow的最先进机器学习
🤗 Transformers 提供了数千种预训练模型,用于执行文本、视觉和音频等不同模态的任务。
这些模型可以应用于:
- 📝 文本,用于文本分类、信息抽取、问答、摘要、翻译和文本生成等任务,支持超过100种语言。
- 🖼️ 图像,用于图像分类、目标检测和分割等任务。
- 🗣️ 音频,用于语音识别和音频分类等任务。
Transformer模型还可以执行多种模态结合的任务,例如表格问答、光学字符识别、从扫描文档中提取信息、视频分类和视觉问答。
🤗 Transformers 提供了API,可以快速下载并使用这些预训练模型处理给定文本,在您的数据集上进行微调,然后在我们的模型中心与社区分享。同时,每个定义架构的Python模块都是独立的,可以修改以进行快速研究实验。
🤗 Transformers 拥有三种最受欢迎的深度学习库的支持 — Jax、PyTorch和TensorFlow — 并在它们之间实现了无缝集成。您可以使用其中一种训练模型,然后使用另一种进行推理。
在线演示
您可以直接在模型中心的页面上测试我们的大部分模型。我们还提供私人模型托管、版本控制和推理API的公共和私人模型。
以下是一些示例: 在自然语言处理方面:
- 使用 BERT 进行遮蔽词填充
- 使用 Electra 进行命名实体识别
- 使用 Mistral 进行文本生成
- 使用 RoBERTa 进行自然语言推断
- 使用 BART 进行摘要生成
- 使用 DistilBERT 进行问答
- 使用 T5 进行翻译
在计算机视觉方面:
- 使用 ViT 进行图像分类
- 使用 DETR 进行目标检测
- 使用 SegFormer 进行语义分割
- 使用 Mask2Former 进行全景分割
- 使用 Depth Anything 进行深度估计
- 使用 VideoMAE 进行视频分类
- 使用 OneFormer 进行通用分割
在音频方面:
在多模态任务方面:
- 使用 TAPAS 进行表格问答
- 使用 ViLT 进行视觉问答
- 使用 LLaVa 进行图像描述
- 使用 SigLIP 进行零样本图像分类
- 使用 LayoutLM 进行文档问答
- 使用 X-CLIP 进行零样本视频分类
- 使用 OWLv2 进行零样本目标检测
- 使用 CLIPSeg 进行零样本图像分割
- 使用 SAM 进行自动蒙版生成
100个使用Transformers的项目
Transformers不仅是一个使用预训练模型的工具包:它是围绕它和Hugging Face Hub建立的项目社区。我们希望Transformers能帮助开发者、研究人员、学生、教授、工程师以及任何人实现他们的梦想项目。
为了庆祝Transformers的100,000颗星,我们决定把重点放在社区上,并创建了awesome-transformers页面,列出了100个在Transformers周边构建的令人难以置信的项目。
如果你拥有或使用的项目认为应该被添加到列表中,请提交PR以添加它!
如果您正在寻找来自Hugging Face团队的定制支持
快速指南
为了立即在给定输入(文本、图像、音频等)上使用模型,我们提供 pipeline
API。Pipelines将一个预训练模型与该模型训练期间使用的预处理一起组合在一起。以下是如何快速使用pipeline来分类正面与负面文本的示例:
>>> from transformers import pipeline
# 为情感分析分配一个pipeline
>>> classifier = pipeline('sentiment-analysis')
>>> classifier('We are very happy to introduce pipeline to the transformers repository.')
[{'label': 'POSITIVE', 'score': 0.9996980428695679}]
第二行代码下载并缓存pipeline使用的预训练模型,而第三行则在给定文本上评估它。这里,答案是 "正面",置信度为99.97%。
许多任务都有一个预训练的 pipeline
准备好使用,不仅在NLP中,也在计算机视觉和语音方面。例如,我们可以轻松地从图像中提取检测到的对象:
>>> import requests
>>> from PIL import Image
>>> from transformers import pipeline
下载一张可爱猫咪的图片
>>> url = "https://yellow-cdn.veclightyear.com/2b54e442/a71c5bc7-41f5-4621-9dd8-6340c120c1ab.png"
>>> image_data = requests.get(url, stream=True).raw
>>> image = Image.open(image_data)
分配一个对象检测管道
>>> object_detector = pipeline('object-detection')
>>> object_detector(image)
[{'score': 0.9982201457023621,
'label': 'remote',
'box': {'xmin': 40, 'ymin': 70, 'xmax': 175, 'ymax': 117}},
{'score': 0.9960021376609802,
'label': 'remote',
'box': {'xmin': 333, 'ymin': 72, 'xmax': 368, 'ymax': 187}},
{'score': 0.9954745173454285,
'label': 'couch',
'box': {'xmin': 0, 'ymin': 1, 'xmax': 639, 'ymax': 473}},
{'score': 0.9988006353378296,
'label': 'cat',
'box': {'xmin': 13, 'ymin': 52, 'xmax': 314, 'ymax': 470}},
{'score': 0.9986783862113953,
'label': 'cat',
'box': {'xmin': 345, 'ymin': 23, 'xmax': 640, 'ymax': 368}}]
在这里,我们得到了一张图片中检测到的对象列表,有一个框框住了对象和一个置信度分数。左边是原始图像,右边是带有预测的图片:
<h3 align="center">
<a><img src="https://yellow-cdn.veclightyear.com/2b54e442/a71c5bc7-41f5-4621-9dd8-6340c120c1ab.png" width="400"></a>
<a><img src="https://yellow-cdn.veclightyear.com/2b54e442/57bbd8be-479f-4346-bb44-695d5c60bae2.png" width="400"></a>
</h3>
你可以在[这篇教程](https://huggingface.co/docs/transformers/task_summary)中了解更多关于`pipeline` API支持的任务。
除了`pipeline`,要下载并使用任何预训练模型来进行给定任务,只需要三行代码。以下是PyTorch版本:
```python
>>> from transformers import AutoTokenizer, AutoModel
>>> tokenizer = AutoTokenizer.from_pretrained("google-bert/bert-base-uncased")
>>> model = AutoModel.from_pretrained("google-bert/bert-base-uncased")
>>> inputs = tokenizer("Hello world!", return_tensors="pt")
>>> outputs = model(**inputs)
这是等效的TensorFlow代码:
>>> from transformers import AutoTokenizer, TFAutoModel
>>> tokenizer = AutoTokenizer.from_pretrained("google-bert/bert-base-uncased")
>>> model = TFAutoModel.from_pretrained("google-bert/bert-base-uncased")
>>> inputs = tokenizer("Hello world!", return_tensors="tf")
>>> outputs = model(**inputs)
tokenizer负责所有预训练模型预期的预处理工作,可以直接调用单个字符串(如上面的例子)或列表。它将输出一个字典,你可以在下游代码中使用或简单地直接传递给模型使用**参数解包操作符。
模型本身是一个常规的PyTorch nn.Module
或一个TensorFlow tf.keras.Model
(根据你的后端)你可以照常使用。这个教程解释了如何将这样的模型集成到经典的PyTorch或TensorFlow训练循环中,或者如何使用Trainer
API快速微调新数据集。
为什么我应该使用transformers?
-
易于使用的最先进模型:
- 在自然语言理解与生成、计算机视觉和音频任务上表现出色。
- 对教育者和从业者来说入门门槛低。
- 只需学习三个类的少量用户面对的抽象。
- 统一的API用于使用我们所有的预训练模型。
-
更低的计算成本、更小的碳足迹:
- 研究人员可以共享训练的模型而不是总是重新训练。
- 从业者可以减少计算时间和生产成本。
- 数十种架构,跨各种模态有超过400,000个预训练模型。
-
为模型生命周期的每一部分选择合适的框架:
- 用3行代码训练最先进的模型。
- 在TF2.0/PyTorch/JAX框架之间移动单个模型。
- 无缝选择合适的框架进行训练、评估和生产。
-
轻松定制模型或示例以满足您的需求:
- 我们为每个架构提供示例,以重现其原始作者发布的结果。
- 尽可能一致地暴露模型内部。
- 模型文件可以独立于库使用,以进行快速实验。
为什么我不应该使用transformers?
- 该库不是神经网络构建块的模块化工具箱。模型文件中的代码未进行额外抽象的重构,目的是使研究人员能够快速迭代每个模型,而无需深入更多抽象文件。
- 训练API并不打算在任何模型上工作,而是针对库提供的模型进行了优化。对于通用机器学习循环,你应该使用另一个库(可能是Accelerate)。
- 尽管我们努力呈现尽可能多的用例,但我们的examples文件夹中的脚本只是示例。预计它们不会在您的特定问题上立即起作用,您需要更改几行代码以适应您的需求。
安装
使用pip
该存储库在Python 3.8+、Flax 0.4.1+、PyTorch 1.11+和TensorFlow 2.6+上进行了测试。
你应该在虚拟环境中安装🤗Transformers。如果你不熟悉Python虚拟环境,请查看用户指南。
首先,使用你将要使用的Python版本创建一个虚拟环境并激活它。
然后,你需要安装至少一个Flax, PyTorch或TensorFlow。 请参考TensorFlow安装页面、PyTorch安装页面和/或Flax和Jax安装页面关于你平台的具体安装指令。
当安装了其中一个后端后,🤗Transformers可以用pip安装,如下:
pip install transformers
如果你想玩一下示例代码或需要最新的代码而不能等待新的发布,你必须从源代码安装库。
使用conda
🤗Transformers可以使用conda安装,如下:
conda install conda-forge::transformers
注意: 从
huggingface
渠道安装transformers
已被弃用。
请参考Flax, PyTorch或TensorFlow安装页面,了解如何使用conda安装它们。
注意: 在Windows上,您可能会被提示激活开发者模式以利用缓存。如果这不是您的选项,请在这个问题中告诉我们。
模型架构
所有由🤗Transformers提供的模型检查点都无缝集成来自huggingface.co model hub, 这些是由用户和组织直接上传的。
当前检查点数:
🤗Transformers目前提供以下架构:请参阅这里以获取每个架构的高级摘要。
要检查每个模型是否在Flax, PyTorch或TensorFlow中有实现,或是否有由🤗Tokenizers库支持的关联tokenizer,请参考这个表格。
这些实现已在多个数据集上进行了测试(请参阅示例脚本)并应与原始实现的性能一致。更多关于性能的详细信息,可以在文档的Examples部分找到。
了解更多
部分 | 描述 |
---|---|
文档 | 完整的API文档和教程 |
任务总结 | 🤗 Transformers支持的任务 |
预处理教程 | 使用Tokenizer 类为模型准备数据 |
训练和微调 | 在PyTorch/TensorFlow训练循环中使用🤗 Transformers提供的模型和Trainer API |
快速导览:微调/使用脚本 | 在广泛任务上微调模型的示例脚本 |
模型共享与上传 | 上传并与社区分享您的微调模型 |
引用
我们现在有一篇可以引用的论文来表示🤗 Transformers库:
@inproceedings{wolf-etal-2020-transformers,
title = "Transformers: State-of-the-Art Natural Language Processing",
author = "Thomas Wolf and Lysandre Debut and Victor Sanh and Julien Chaumond and Clement Delangue and Anthony Moi and Pierric Cistac and Tim Rault and Rémi Louf and Morgan Funtowicz and Joe Davison and Sam Shleifer and Patrick von Platen and Clara Ma and Yacine Jernite and Julien Plu and Canwen Xu and Teven Le Scao and Sylvain Gugger and Mariama Drame and Quentin Lhoest and Alexander M. Rush",
booktitle = "Proceedings of the 2020 Conference on Empirical Methods in Natural Language Processing: System Demonstrations",
month = oct,
year = "2020",
address = "Online",
publisher = "Association for Computational Linguistics",
url = "https://www.aclweb.org/anthology/2020.emnlp-demos.6",
pages = "38--45"
}