管道 API
就像 transformers Python 库 一样,Transformers.js 为用户提供了一种简单的方法来利用 transformers 的强大功能。pipeline()
函数是使用预训练模型进行推理的最简单、最快捷的方法。
有关可用任务/管道的完整列表,请查看 此表。
基础知识
首先创建 pipeline()
的一个实例,并指定要使用它的任务。例如,要创建一个情感分析管道,你可以这样做
import { pipeline } from '@huggingface/transformers';
let classifier = await pipeline('sentiment-analysis');
首次运行时,pipeline
将下载并缓存与该任务关联的默认预训练模型。这可能需要一些时间,但后续调用会快得多。
默认情况下,模型将从 Hugging Face Hub 下载并存储在 浏览器缓存 中,但可以通过多种方式指定自定义模型和缓存位置。有关更多信息,请参见 此处。
现在,你可以通过将其作为函数调用来在目标文本上使用分类器
let result = await classifier('I love transformers!');
// [{'label': 'POSITIVE', 'score': 0.9998}]
如果你有多个输入,可以将它们作为一个数组传递
let result = await classifier(['I love transformers!', 'I hate transformers!']);
// [{'label': 'POSITIVE', 'score': 0.9998}, {'label': 'NEGATIVE', 'score': 0.9982}]
你还可以通过将其作为 pipeline()
函数的第二个参数传递,来指定用于管道的不同模型。例如,要使用不同的模型进行情感分析(例如,一个训练用于预测评论情感的模型,作为 1 到 5 之间的星级数),你可以这样做
let reviewer = await pipeline('sentiment-analysis', 'Xenova/bert-base-multilingual-uncased-sentiment');
let result = await reviewer('The Shawshank Redemption is a true masterpiece of cinema.');
// [{label: '5 stars', score: 0.8167929649353027}]
Transformers.js 支持加载托管在 Hugging Face Hub 上的任何模型,前提是它具有 ONNX 权重(位于名为 onnx
的子文件夹中)。有关如何将你的 PyTorch、TensorFlow 或 JAX 模型转换为 ONNX 的更多信息,请参见 转换部分。
pipeline()
函数是快速使用预训练模型进行推理的好方法,因为它可以为你处理所有预处理和后处理。例如,如果你想使用 OpenAI 的 Whisper 模型执行自动语音识别 (ASR),你可以这样做
// Allocate a pipeline for Automatic Speech Recognition
let transcriber = await pipeline('automatic-speech-recognition', 'Xenova/whisper-small.en');
// Transcribe an audio file, loaded from a URL.
let result = await transcriber('https://huggingface.co/datasets/Narsil/asr_dummy/resolve/main/mlk.flac');
// {text: ' I have a dream that one day this nation will rise up and live out the true meaning of its creed.'}
管道选项
加载
我们提供各种选项来控制模型从 Hugging Face Hub(或本地)加载的方式。默认情况下,将使用模型的量化版本,该版本更小、更快,但通常精度较低。要覆盖此行为(即,使用非量化模型),可以使用自定义 PretrainedOptions
对象作为 pipeline
函数的第三个参数
// Allocation a pipeline for feature extraction, using the unquantized model
const pipe = await pipeline('feature-extraction', 'Xenova/all-MiniLM-L6-v2', {
quantized: false,
});
你还可以通过传递 revision
参数来指定要使用的模型版本。由于 Hugging Face Hub 使用基于 git 的版本控制系统,因此你可以使用任何有效的 git 版本规范符(例如,分支名称或提交哈希)
let transcriber = await pipeline('automatic-speech-recognition', 'Xenova/whisper-tiny.en', {
revision: 'output_attentions',
});
有关选项的完整列表,请查看 PretrainedOptions 文档。
运行
许多管道都有您可以指定的其他选项。例如,当使用执行多语言翻译的模型时,您可以像这样指定源语言和目标语言
// Allocation a pipeline for translation
let translator = await pipeline('translation', 'Xenova/nllb-200-distilled-600M');
// Translate from English to Greek
let result = await translator('I like to walk my dog.', {
src_lang: 'eng_Latn',
tgt_lang: 'ell_Grek'
});
// [ { translation_text: 'Μου αρέσει να περπατάω το σκυλί μου.' } ]
// Translate back to English
let result2 = await translator(result[0].translation_text, {
src_lang: 'ell_Grek',
tgt_lang: 'eng_Latn'
});
// [ { translation_text: 'I like to walk my dog.' } ]
当使用支持自回归生成的模型时,您可以指定生成参数,例如新标记的数量、采样方法、温度、重复惩罚等等。有关可用参数的完整列表,请参阅 GenerationConfig 类。
例如,要使用 LaMini-Flan-T5-783M
生成一首诗,您可以执行以下操作
// Allocate a pipeline for text2text-generation
let poet = await pipeline('text2text-generation', 'Xenova/LaMini-Flan-T5-783M');
let result = await poet('Write me a love poem about cheese.', {
max_new_tokens: 200,
temperature: 0.9,
repetition_penalty: 2.0,
no_repeat_ngram_size: 3,
});
将 result[0].generated_text
记录到控制台将显示
Cheese, oh cheese! You're the perfect comfort food.
Your texture so smooth and creamy you can never get old.
With every bite it melts in your mouth like buttery delights
that make me feel right at home with this sweet treat of mine.
From classic to bold flavor combinations,
I love how versatile you are as an ingredient too?
Cheddar is my go-to for any occasion or mood;
It adds depth and richness without being overpowering its taste buds alone
有关每个管道可用选项的更多信息,请参阅 API 参考。如果您想对推理过程进行更多控制,可以使用 AutoModel
、AutoTokenizer
或 AutoProcessor
类。
可用任务
任务
自然语言处理
任务 | 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 | 将文本分类为在训练期间未见过的类别。 | ✅ (文档) (模型) |
特征提取 | feature-extraction | 将原始数据转换为可处理的数值特征,同时保留原始数据集中的信息。 | ✅ (文档) (模型) |
视觉
任务 | ID | 描述 | 支持? |
---|---|---|---|
深度估计 | depth-estimation | 预测图像中存在的物体的深度。 | ✅ (文档) (模型) |
图像分类 | image-classification | 为整个图像分配标签或类别。 | ✅ (文档) (模型) |
图像分割 | image-segmentation | 将图像划分为多个部分,其中每个像素都映射到一个物体。此任务有多种变体,例如实例分割、全景分割和语义分割。 | ✅ (文档) (模型) |
图像到图像 | image-to-image | 变换源图像以匹配目标图像或目标图像域的特征。 | ✅ (文档) (模型) |
遮罩生成 | mask-generation | 为图像中的物体生成遮罩。 | ❌ |
目标检测 | object-detection | 识别图像中某些定义类别的物体。 | ✅ (文档) (模型) |
视频分类 | n/a | 为整个视频分配标签或类别。 | ❌ |
无条件图像生成 | n/a | 在任何上下文中生成图像(如提示文本或另一个图像)。 | ❌ |
图像特征提取 | image-feature-extraction | 将原始数据转换为可处理的数值特征,同时保留原始图像中的信息。 | ✅ (文档) (模型) |
音频
任务 | ID | 描述 | 支持? |
---|---|---|---|
音频分类 | audio-classification | 为给定的音频分配标签或类别。 | ✅ (文档) (模型) |
音频到音频 | n/a | 从输入音频源生成音频。 | ❌ |
自动语音识别 | automatic-speech-recognition | 将给定的音频转录为文本。 | ✅ (文档) (模型) |
文本到语音 | text-to-speech 或 text-to-audio | 根据文本输入生成自然发声的语音。 | ✅ (文档) (模型) |
表格
任务 | ID | 描述 | 支持? |
---|---|---|---|
表格分类 | n/a | 根据属性集对目标类别(组)进行分类。 | ❌ |
表格回归 | n/a | 根据属性集预测数值。 | ❌ |
多模态
任务 | ID | 描述 | 支持? |
---|---|---|---|
文档问答 | document-question-answering | 回答有关文档图像的问题。 | ✅ (文档) (模型) |
图像到文本 | image-to-text | 从给定的图像输出文本。 | ✅ (文档) (模型) |
文本到图像 | text-to-image | 根据输入文本生成图像。 | ❌ |
视觉问答 | visual-question-answering | 根据图像回答开放式问题。 | ❌ |
零样本音频分类 | zero-shot-audio-classification | 将音频分类到训练期间未见过的类别中。 | ✅ (文档) (模型) |
零样本图像分类 | zero-shot-image-classification | 将图像分类到训练期间未见过的类别中。 | ✅ (文档) (模型) |
零样本目标检测 | zero-shot-object-detection | 识别训练期间未见过的类别中的目标。 | ✅ (文档) (模型) |
强化学习
任务 | ID | 描述 | 支持? |
---|---|---|---|
强化学习 | n/a | 通过反复试验,并通过接收奖励(负面或正面)作为反馈,从与环境的互动中学习行动。 | ✅ |