rust-bert

GitHub
3.1k 245 较难 1 次阅读 昨天Apache-2.0语言模型音频开发框架图像视频Agent
AI 解读 由 AI 自动生成,仅供参考

rust-bert 是一个专为 Rust 语言打造的自然语言处理(NLP)工具库,让开发者能在 Rust 环境中直接调用业界领先的 Transformer 模型。它相当于 Hugging Face Transformers 库的 Rust 原生移植版,支持 BERT、DistilBERT、GPT2、RoBERTa 等多种主流架构。

在开发中,跨语言调用 Python 模型往往面临环境配置复杂、部署困难及性能损耗等痛点。rust-bert 通过纯 Rust 实现,彻底解决了这些依赖问题,提供了从文本预处理到模型推理的完整流水线。用户只需几行代码,即可轻松实现问答系统、情感分析、机器翻译、文本摘要、命名实体识别及多轮对话等复杂任务。

该工具特别适合追求高性能、低延迟及内存安全的后端工程师、系统架构师及 AI 研究人员。如果你希望在生产环境中构建稳健的 NLP 应用,而不想引入沉重的 Python 运行时,rust-bert 是理想选择。其核心技术亮点在于基于 tch-rs 或 ONNX Runtime 的底层绑定,不仅完美支持 GPU 加速推理,还实现了多线程分词处理,充分发挥了 Rust 在并发计算上的优势,确保在高负载场景下依然保持卓越的性能表现。

使用场景

某电商初创团队正在开发一款实时客服辅助系统,需要在用户咨询瞬间自动提取关键实体并分析情绪,以便快速路由工单。

没有 rust-bert 时

  • 部署沉重:团队必须捆绑庞大的 Python 环境和 PyTorch 依赖,导致容器镜像体积超过 1GB,启动缓慢且占用大量内存。
  • 并发瓶颈:由于 Python 全局解释器锁(GIL)的限制,在处理高并发请求时,多线程分词和推理效率低下,响应延迟经常突破 500ms。
  • 运维复杂:生产环境需同时维护 Rust 业务代码和 Python AI 服务两套运行时,跨语言调用增加了接口不稳定风险和调试难度。
  • 资源浪费:为了维持低延迟,不得不为每个微服务实例分配独立的 GPU 资源,导致云端算力成本居高不下。

使用 rust-bert 后

  • 轻量原生:直接利用 rust-bert 的原生特性,将 BERT 和 DistilBERT 模型编译为单一二进制文件,镜像体积缩减至 50MB 以内,实现秒级启动。
  • 高性能并发:借助 rust-bert 支持的多线程分词与 GPU 推理加速,系统在同等硬件下吞吐量提升 3 倍,平均响应时间稳定在 50ms 以内。
  • 架构统一:整个链路仅使用 Rust 一种语言,消除了跨进程通信开销,开发人员可在同一项目中无缝调试从数据预处理到模型预测的全流程。
  • 成本优化:凭借高效的内存管理和计算性能,团队成功将原本需要 GPU 支撑的任务迁移至高配 CPU 实例运行,每月云账单降低 60%。

rust-bert 通过将顶尖 NLP 能力无缝融入 Rust 生态,让高性能、低成本的实时智能应用开发变得触手可及。

运行环境要求

操作系统
  • Linux
  • macOS
  • Windows
GPU
  • 非必需
  • 支持 GPU 推理(通过 LibTorch),若启用需安装对应 CUDA 版本的 LibTorch(文档示例提及 cu124/CUDA 12.4)
  • CPU 版本默认可用
  • 显存大小取决于具体模型(从几百 MB 到几 GB 不等)
内存

未说明(取决于模型大小,模型文件范围从几百 MB 到几 GB)

依赖
notes1. 该工具是纯 Rust 实现,不需要 Python 环境。2. 必须手动或自动下载 LibTorch C++ 库(CPU 或 CUDA 版本),推荐使用 v2.4。3. 预训练模型会下载到缓存目录(默认 ~/.cache/.rustbert),可通过 RUSTBERT_CACHE 环境变量修改。4. 若使用 ONNX 后端,需单独配置 onnxruntime 动态链接库。5. 首次构建若开启自动下载 LibTorch CUDA 版本,可能需要较长时间且占用数 GB 空间。
python不需要 (这是一个 Rust 原生库)
Rust (工具链)
LibTorch (v2.4+)
tch-rs
rust-tokenizers
ort (可选,用于 ONNX 支持)
rust-bert hero image

快速开始

rust-bert

构建状态 最新版本 文档 许可证

Rust原生的最先进自然语言处理模型和流水线。移植自Hugging Face的 Transformers库,使用 tch-rsonnxruntime绑定,并结合来自 rust-tokenizers的预处理功能。支持多线程分词和GPU推理。本仓库公开了模型基础架构、特定任务的头部(见下文)以及 开箱即用的流水线。本文档末尾提供了 基准测试

只需几行代码,即可开始进行问答、命名实体识别、翻译、摘要生成、文本生成、对话代理等任务:

    let qa_model = QuestionAnsweringModel::new(Default::default ()) ?;

let question = String::from("Where does Amy live ?");
let context = String::from("Amy lives in Amsterdam");

let answers = qa_model.predict( & [QaInput { question, context }], 1, 32);

输出:

[Answer { score: 0.9976, start: 13, end: 21, answer: "Amsterdam" }]

目前支持的任务包括:

  • 翻译
  • 摘要生成
  • 多轮对话
  • 零样本分类
  • 情感分析
  • 命名实体识别
  • 词性标注
  • 问答
  • 语言生成
  • 掩码语言模型
  • 句子嵌入
  • 关键词提取
展开以查看支持的模型/任务矩阵
序列分类 标记分类 问答 文本生成 摘要生成 翻译 掩码语言模型 句子嵌入
DistilBERT
MobileBERT
DeBERTa
DeBERTa (v2)
FNet
BERT
RoBERTa
GPT
GPT2
GPT-Neo
GPT-J
BART
Marian
MBart
M2M100
NLLB
Electra
ALBERT
T5
LongT5
XLNet
Reformer
ProphetNet
Longformer
Pegasus

入门指南

本库依赖于 tch crate 来实现与 C++ Libtorch API 的绑定。Libtorch 库是必需的,可以通过自动或手动方式下载。以下提供了关于如何设置环境以使用这些绑定的参考,请参阅 tch 获取详细信息或支持。

此外,本库会使用一个缓存文件夹来下载预训练模型。该缓存位置默认为 ~/.cache/.rustbert,但可以通过设置 RUSTBERT_CACHE 环境变量来更改。请注意,本库所使用的语言模型大小通常在数百兆到数GB之间。

手动安装(推荐)

  1. https://pytorch.org/get-started/locally/ 下载 libtorch。此包需要 v2.4 版本;如果“开始使用”页面上不再提供该版本,可以通过修改目标链接来访问文件,例如对于带有 CUDA12 的 Linux 版本:https://download.pytorch.org/libtorch/cu124/libtorch-cxx11-abi-shared-with-deps-2.4.0%2Bcu124.zip注意: 当您从 crates.iorust-bert 作为依赖项使用时,请务必查看已发布的包的 readme,因为所需的 LIBTORCH 版本可能与此处文档中记录的版本不同(此处文档适用于当前仓库版本)。
  2. 将库解压到您选择的位置。
  3. 设置以下环境变量:
Linux:
export LIBTORCH=/path/to/libtorch
export LD_LIBRARY_PATH=${LIBTORCH}/lib:$LD_LIBRARY_PATH
Windows
$Env:LIBTORCH = "X:\path\to\libtorch"
$Env:Path += ";X:\path\to\libtorch\lib"

macOS + Homebrew

brew install pytorch jq
export LIBTORCH=$(brew --cellar pytorch)/$(brew info --json pytorch | jq -r '.[0].installed[0].version')
export LD_LIBRARY_PATH=${LIBTORCH}/lib:$LD_LIBRARY_PATH

自动安装

或者,您可以让 build 脚本自动为您下载 libtorch 库。为此,需要启用 download-libtorch 功能标志。默认情况下会下载 CPU 版本的 libtorch。要下载 CUDA 版本,请将环境变量 TORCH_CUDA_VERSION 设置为 cu124。请注意,libtorch 库体积较大(启用 CUDA 的版本约为几 GB),因此首次构建可能需要几分钟才能完成。

验证安装

通过在您的 Cargo.toml 中添加 rust-bert 依赖项,或克隆 rust-bert 源代码并运行示例来验证安装是否成功以及是否正确链接了 libtorch

git clone git@github.com:guillaume-be/rust-bert.git
cd rust-bert
cargo run --example sentence_embeddings

ONNX 支持(可选)

可通过可选的 onnx 功能启用 ONNX 支持。此时,该 crate 会利用 ort crate,它提供了对 onnxruntime C++ 库的绑定。有关进一步的安装说明和支持,请参阅该项目的主页。

  1. 启用可选的 onnx 功能。rust-bert crate 并不包含 ort 的任何可选依赖项,最终用户应根据需要选择合适的功能集,以拉取所需的 onnxruntime C++ 库。
  2. 目前推荐的安装方式是使用动态链接,并指向现有的库位置。请为 ort 使用 load-dynamic cargo 功能。
  3. ORT_DYLIB_PATH 设置为指向已下载的 onnxruntime 库的位置(根据操作系统不同,可能是 onnxruntime.dlllibonnxruntime.solibonnxruntime.dylib)。这些库可以从 onnxruntime 项目的 发布页面 下载。

大多数架构(包括编码器、解码器和编码器-解码器)都受支持。该库旨在保持与使用 Optimum 库导出的模型兼容。关于如何使用 Optimum 将 Transformer 模型导出为 ONNX 的详细指南可在 https://huggingface.co/docs/optimum/main/en/exporters/onnx/usage_guides/export_a_model 上找到。创建 ONNX 模型所使用的资源与基于 PyTorch 的模型类似,只是将 PyTorch 替换为 ONNX 模型而已。由于 ONNX 模型在处理可选参数方面不如其 PyTorch 对应物灵活,因此将解码器或编码器-解码器模型导出为 ONNX 通常会产生多个文件。这些文件是预期的(但并非全部必要),可用于本库中的相应功能,具体如下表所示:

架构 编码器文件 不带历史信息的解码器文件 带有历史信息的解码器文件
编码器(如 BERT) 必需 不使用 不使用
解码器(如 GPT2) 不使用 必需 可选
编码器-解码器(如 BART) 必需 必需 可选

请注意,当“带历史信息的解码器文件”是可选但未提供时,计算效率会下降,因为模型无法使用缓存的历史键值来进行注意力机制,从而导致大量冗余计算。Optimum 库提供了导出选项,以确保生成这样的“带历史信息的解码器文件”。基础的编码器和解码器模型架构分别在 encoderdecoder 模块中提供,以便于使用。

生成模型(纯解码器或编码器/解码器架构)可在 models 模块中找到。针对 ONNX 模型检查点,提供了多种流水线,包括序列分类、零样本分类、标记分类(包括命名实体识别和词性标注)、问答、文本生成、摘要和翻译。这些模型在流水线中使用时,采用与 PyTorch 对应模型相同的配置和分词器文件。ONNX 模型的示例位于 ./examples 目录中。

即用型流水线

基于 Hugging Face 的流水线,本 crate 提供了即用型端到端 NLP 流水线。目前可用的功能如下:

免责声明 本仓库的贡献者不对第三方使用此处提供的预训练系统所产生的任何结果负责。

1. 问答

从给定的问题和上下文中提取答案。基于 SQuAD(斯坦福问答数据集)微调的 DistilBERT 模型。

    let qa_model = QuestionAnsweringModel::new(Default::default ()) ?;

let question = String::from("Amy住在哪儿?");
let context = String::from("Amy住在阿姆斯特丹");

let answers = qa_model.predict( & [QaInput { question, context }], 1, 32);

输出:

[Answer { score: 0.9976, start: 13, end: 21, answer: "阿姆斯特丹" }]
 
2. 翻译

支持广泛源语言和目标语言的翻译流水线。利用两种主要架构进行翻译任务:

  • 基于 Marian 的模型,适用于特定的源语言/目标语言组合;
  • M2M100 模型允许在 100 种语言之间直接翻译(但对于某些选定的语言,计算成本较高且性能较低)。

该库中提供了以下语言对的 Marian 预训练模型,用户也可以导入任何基于 PyTorch 的模型来进行预测:

  • 英语 <-> 法语
  • 英语 <-> 西班牙语
  • 英语 <-> 葡萄牙语
  • 英语 <-> 意大利语
  • 英语 <-> 加泰罗尼亚语
  • 英语 <-> 德语
  • 英语 <-> 俄语
  • 英语 <-> 中文
  • 英语 <-> 荷兰语
  • 英语 <-> 瑞典语
  • 英语 <-> 阿拉伯语
  • 英语 <-> 希伯来语
  • 英语 <-> 印地语
  • 法语 <-> 德语

对于所提出的 Marian 预训练模型不支持的语言,用户可以使用 M2M100 模型,该模型支持 100 种语言之间的直接翻译(无需经过英语中转)。完整支持的语言列表可在crate 文档中找到。

use rust_bert::pipelines::translation::{Language, TranslationModelBuilder};
fn main() -> anyhow::Result<()> {
    let model = TranslationModelBuilder::new()
        .with_source_languages(vec![Language::English])
        .with_target_languages(vec![Language::Spanish, Language::French, Language::Italian])
        .create_model()?;
    let input_text = "This is a sentence to be translated";
    let output = model.translate(&[input_text], None, Language::French)?;
    for sentence in output {
        println!("{}", sentence);
    }
    Ok(())
}

输出:

Il s'agit d'une phrase à traduire
 
3. 摘要生成

使用预训练的 BART 模型进行摘要生成。

    let summarization_model = SummarizationModel::new(Default::default ()) ?;

let input = ["In findings published Tuesday in Cornell University's arXiv by a team of scientists \
from the University of Montreal and a separate report published Wednesday in Nature Astronomy by a team \
from University College London (UCL), the presence of water vapour was confirmed in the atmosphere of K2-18b, \
a planet circling a star in the constellation Leo. This is the first such discovery in a planet in its star's \
habitable zone — not too hot and not too cold for liquid water to exist. The Montreal team, led by Björn Benneke, \
used data from the NASA's Hubble telescope to assess changes in the light coming from K2-18b's star as the planet \
passed between it and Earth. They found that certain wavelengths of light, which are usually absorbed by water, \
weakened when the planet was in the way, indicating not only does K2-18b have an atmosphere, but the atmosphere \
contains water in vapour form. The team from UCL then analyzed the Montreal team's data using their own software \
and confirmed their conclusion. This was not the first time scientists have found signs of water on an exoplanet, \
but previous discoveries were made on planets with high temperatures or other pronounced differences from Earth. \
\"This is the first potentially habitable planet where the temperature is right and where we now know there is water,\" \
said UCL astronomer Angelos Tsiaras. \"It's the best candidate for habitability right now.\" \"It's a good sign\", \
said Ryan Cloutier of the Harvard–Smithsonian Center for Astrophysics, who was not one of either study's authors. \
\"Overall,\" he continued, \"the presence of water in its atmosphere certainly improves the prospect of K2-18b being \
a potentially habitable planet, but further observations will be required to say for sure. \"
K2-18b was first identified in 2015 by the Kepler space telescope. It is about 110 light-years from Earth and larger \
but less dense. Its star, a red dwarf, is cooler than the Sun, but the planet's orbit is much closer, such that a year \
on K2-18b lasts 33 Earth days. According to The Guardian, astronomers were optimistic that NASA's James Webb space \
telescope — scheduled for launch in 2021 — and the European Space Agency's 2028 ARIEL program, could reveal more \
about exoplanets like K2-18b."];

let output = summarization_model.summarize( & input);

(示例来自: WikiNews)

输出:

"科学家在距离地球110光年的行星K2-18b上发现了水蒸气。这是首次在恒星宜居带内的行星上发现此类现象。该行星的温度既不太热也不太冷,适合液态水存在。"
 
4. 对话模型

基于微软的 DialoGPT 的对话模型。此管道允许生成人类与模型之间的一轮或多轮对话。DialoGPT 的页面指出:

人类评估结果显示,在单轮对话图灵测试中,DialoGPT 生成的回复质量可与人类回复相媲美。 (DialoGPT 仓库)

该模型使用 ConversationManager 来跟踪正在进行的对话并为其生成回复。

use rust_bert::pipelines::conversation::{ConversationModel, ConversationManager};

let conversation_model = ConversationModel::new(Default::default ());
let mut conversation_manager = ConversationManager::new();

let conversation_id = conversation_manager.create("Going to the movies tonight - any suggestions?");
let output = conversation_model.generate_responses( & mut conversation_manager);

示例输出:

"The Big Lebowski."
 
5. 自然语言生成

根据提示生成语言。提供 GPT2 和 GPT 作为基础模型。包含束搜索、top-k 采样、核采样、温度设置和重复惩罚等技术。支持从多个提示批量生成句子。如果模型有填充标记,则序列将用填充标记左填充;否则将用未知标记填充。这可能会影响结果,建议提交长度相近的提示以获得最佳效果。

    let model = GPT2Generator::new(Default::default ()) ?;

let input_context_1 = "The dog";
let input_context_2 = "The cat was";

let generate_options = GenerateOptions {
max_length: 30,
..Default::default ()
};

let output = model.generate(Some( & [input_context_1, input_context_2]), generate_options);

示例输出:

[
    "然而,这只狗的主人不愿透露姓名。根据诉讼文件,该动物的主人是一位29岁的"
    "这只狗一直都是家庭的一员。‘他一直都会是我的狗,也一直都在照顾我’"
    "这只狗现在已经能在家里待了三个多月了。‘它是一只非常好的狗。她’"
    "这只猫本月早些时候在死者的一位亲属家中被发现。猫的主人希望匿名,"
    "这只猫是由两岁的贾兹敏从街上救回来的。‘我不知道该怎么办,’她说"
    "这只猫遭到两只流浪狗的袭击,随后被送往医院。另外两只猫也在此次袭击中受伤,正在接受治疗。"
]
 
6. 零样本分类

使用针对自然语言推理任务微调的模型,对输入句子进行零样本分类,并提供标签。

    let sequence_classification_model = ZeroShotClassificationModel::new(Default::default ()) ?;

let input_sentence = "您在2020年会投票给谁?";
let input_sequence_2 = "首相宣布了一项刺激计划,该计划受到了反对派的广泛批评。";
let candidate_labels = & ["政治", "公共卫生", "经济", "体育"];

let output = sequence_classification_model.predict_multilabel(
& [input_sentence, input_sequence_2],
candidate_labels,
None,
128,
);

输出:

[
  [ Label { "政治", score: 0.972 }, Label { "公共卫生", score: 0.032 }, Label {"经济", score: 0.006 }, Label {"体育", score: 0.004 } ],
  [ Label { "政治", score: 0.975 }, Label { "公共卫生", score: 0.0818 }, Label {"经济", score: 0.852 }, Label {"体育", score: 0.001 } ],
]
 
7. 情感分析

预测句子的二元情感。基于SST-2数据集微调的DistilBERT模型。

    let sentiment_classifier = SentimentModel::new(Default::default ()) ?;

let input = [
"这可能是我最喜欢的电影,讲述的是无私、牺牲和为崇高事业奉献的故事,但它并不说教或枯燥。",
"这部电影试图同时成为太多东西:辛辣的政治讽刺、好莱坞大片、俗气的爱情喜剧、宣扬家庭价值观的宣传片……",
"如果你喜欢原汁原味、直击心灵的笑声,你一定会喜欢这部电影。无论你年轻还是年长,都会爱上这部电影,甚至连我妈妈都喜欢。",
];

let output = sentiment_classifier.predict( & input);

(示例来自IMDb

输出:

[
    Sentiment { polarity: Positive, score: 0.9981985493795946 },
    Sentiment { polarity: Negative, score: 0.9927982091903687 },
    Sentiment { polarity: Positive, score: 0.9997248985164333 }
]
 
8. 命名实体识别

从文本中提取实体(人名、地点、组织、其他)。基于CoNNL03数据集微调的BERT cased large模型,由巴伐利亚州立图书馆的MDZ数字图书馆团队贡献。目前提供英语、德语、西班牙语和荷兰语版本。

    let ner_model = NERModel::new( default::default ()) ?;

let input = [
"我叫艾米。我住在巴黎。",
"巴黎是法国的一座城市。"
];

let output = ner_model.predict( & input);

输出:

[
  [
    Entity { word: "艾米", score: 0.9986, label: "I-PER" }
    Entity { word: "巴黎", score: 0.9985, label: "I-LOC" }
  ],
  [
    Entity { word: "巴黎", score: 0.9988, label: "I-LOC" }
    Entity { word: "法国", score: 0.9993, label: "I-LOC" }
  ]
]
 
9. 关键词/关键短语提取

从输入文档中提取关键词和关键短语。

fn main() -> anyhow::Result<()> {
    let keyword_extraction_model = KeywordExtractionModel::new(Default::default())?;

    let input = "Rust是一种多范式、通用的编程语言。\
       Rust强调性能、类型安全和并发性。Rust通过强制内存安全——即确保所有引用都指向有效的内存——来实现这一点,而无需像其他内存安全语言那样使用垃圾回收器或引用计数。为了同时保证内存安全并防止并发数据竞争,Rust的借用检查器会在编译时跟踪程序中所有引用的对象生命周期和变量作用域。Rust在系统编程领域很受欢迎,同时也提供了包括函数式编程结构在内的高级特性。";

    let output = keyword_extraction_model.predict(&[input])?;
}

输出:

"rust" - 0.50910604
"programming" - 0.35731024
"concurrency" - 0.33825397
"concurrent" - 0.31229728
"program" - 0.29115444
 
10. 词性标注

从文本中提取词性标签(名词、动词、形容词等)。

    let pos_model = POSModel::new( default::default ()) ?;

let input = ["我的名字是鲍勃"];

let output = pos_model.predict( & input);

输出:

[
    Entity { word: "My", score: 0.1560, label: "PRP" }
    Entity { word: "name", score: 0.6565, label: "NN" }
    Entity { word: "is", score: 0.3697, label: "VBZ" }
    Entity { word: "Bob", score: 0.7460, label: "NNP" }
]
 
11. 句子嵌入

生成句子嵌入(向量表示)。这些可以用于密集信息检索等应用。

    let model = SentenceEmbeddingsBuilder::remote(
SentenceEmbeddingsModelType::AllMiniLmL12V2
).create_model() ?;

let sentences = [
"这是一个示例句子",
"每个句子都会被转换"
];

let output = model.encode( & sentences) ?;

输出:

[
    [-0.000202666, 0.08148022, 0.03136178, 0.002920636 ...],
    [0.064757116, 0.048519745, -0.01786038, -0.0479775 ...]
]
 
12. 掩码语言模型

预测输入句子中的掩码词汇。

    let model = MaskedLanguageModel::new(Default::default ()) ?;

let sentences = [
"你好,我是一名<mask>学生",
"巴黎是法国的<mask>。它位于欧洲的<mask>。"
];

let output = model.predict( & sentences);

输出:

[
    [MaskedToken { text: "college", id: 2267, score: 8.091}],
    [
        MaskedToken { text: "capital", id: 3007, score: 16.7249}, 
        MaskedToken { text: "located", id: 2284, score: 9.0452}
    ]
]

基准测试

对于简单的流水线任务(序列分类、标记分类、问答),Python 和 Rust 之间的性能预计是相当的。这是因为这些流水线中最耗时的部分是语言模型本身,而它们在 Torch 后端中采用了相同的实现。论文 Rust 中的端到端 NLP 流水线 提供了一个涵盖所有流水线的基准测试部分。

对于文本生成任务(摘要、翻译、对话、自由文本生成),则可以预期显著的优势(处理速度可快 2 到 4 倍,具体取决于输入和应用场景)。文章 使用 Rust 加速文本生成 专门讨论了这些文本生成应用,并提供了与 Python 性能对比的更多细节。

加载预训练及自定义模型权重

基础模型和特定任务的头部也适用于希望公开自己基于 Transformer 的模型的用户。在 ./examples 目录下提供了使用原生 Rust 分词器库准备数据的示例,涵盖 BERT、DistilBERT、RoBERTa、GPT、GPT2 和 BART 等模型。需要注意的是,从 PyTorch 导入模型时,参数命名规范需要与 Rust 模式保持一致。如果权重文件中找不到任何模型参数的权重,加载预训练权重将会失败。若需跳过这一质量检查,可以从变量存储中调用替代方法 load_partial

预训练模型可在 Hugging Face 的 模型中心 上找到,并可使用本库中定义的 RemoteResources 进行加载。

./utils 目录中包含一个转换工具脚本,用于将 PyTorch 权重转换为与此库兼容的权重集。该脚本需要安装 Python 和 torch,使用方法如下:python ./utils/convert_model.py path/to/pytorch_model.bin,其中 path/to/pytorch_model.bin 是原始 PyTorch 权重文件的路径。

python3 -m venv .venv
source .venv/bin/activate

pip install -r requirements.txt

python utils/convert_model.py path/to/pytorch_model.bin

引用

如果您在工作中使用了 rust-bert,请引用 Rust 中的端到端 NLP 流水线

@inproceedings{becquin-2020-end,
    title = "End-to-end {NLP} Pipelines in Rust",
    author = "Becquin, Guillaume",
    booktitle = "Second Workshop for NLP Open Source Software (NLP-OSS) Proceedings",
    year = "2020",
    publisher = "Association for Computational Linguistics",
    url = "https://www.aclweb.org/anthology/2020.nlposs-1.4",
    pages = "20--25",
}

致谢

感谢 Hugging Face 托管了一组与本 Rust 库兼容的权重。现成的预训练模型列表可在 https://huggingface.co/models?filter=rust 查看。

常见问题

相似工具推荐

openclaw

OpenClaw 是一款专为个人打造的本地化 AI 助手,旨在让你在自己的设备上拥有完全可控的智能伙伴。它打破了传统 AI 助手局限于特定网页或应用的束缚,能够直接接入你日常使用的各类通讯渠道,包括微信、WhatsApp、Telegram、Discord、iMessage 等数十种平台。无论你在哪个聊天软件中发送消息,OpenClaw 都能即时响应,甚至支持在 macOS、iOS 和 Android 设备上进行语音交互,并提供实时的画布渲染功能供你操控。 这款工具主要解决了用户对数据隐私、响应速度以及“始终在线”体验的需求。通过将 AI 部署在本地,用户无需依赖云端服务即可享受快速、私密的智能辅助,真正实现了“你的数据,你做主”。其独特的技术亮点在于强大的网关架构,将控制平面与核心助手分离,确保跨平台通信的流畅性与扩展性。 OpenClaw 非常适合希望构建个性化工作流的技术爱好者、开发者,以及注重隐私保护且不愿被单一生态绑定的普通用户。只要具备基础的终端操作能力(支持 macOS、Linux 及 Windows WSL2),即可通过简单的命令行引导完成部署。如果你渴望拥有一个懂你

349.3k|★★★☆☆|今天
Agent开发框架图像

stable-diffusion-webui

stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面,旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点,将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。 无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师,还是想要深入探索模型潜力的开发者与研究人员,都能从中获益。其核心亮点在于极高的功能丰富度:不仅支持文生图、图生图、局部重绘(Inpainting)和外绘(Outpainting)等基础模式,还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外,它内置了 GFPGAN 和 CodeFormer 等人脸修复工具,支持多种神经网络放大算法,并允许用户通过插件系统无限扩展能力。即使是显存有限的设备,stable-diffusion-webui 也提供了相应的优化选项,让高质量的 AI 艺术创作变得触手可及。

162.1k|★★★☆☆|昨天
开发框架图像Agent

everything-claude-code

everything-claude-code 是一套专为 AI 编程助手(如 Claude Code、Codex、Cursor 等)打造的高性能优化系统。它不仅仅是一组配置文件,而是一个经过长期实战打磨的完整框架,旨在解决 AI 代理在实际开发中面临的效率低下、记忆丢失、安全隐患及缺乏持续学习能力等核心痛点。 通过引入技能模块化、直觉增强、记忆持久化机制以及内置的安全扫描功能,everything-claude-code 能显著提升 AI 在复杂任务中的表现,帮助开发者构建更稳定、更智能的生产级 AI 代理。其独特的“研究优先”开发理念和针对 Token 消耗的优化策略,使得模型响应更快、成本更低,同时有效防御潜在的攻击向量。 这套工具特别适合软件开发者、AI 研究人员以及希望深度定制 AI 工作流的技术团队使用。无论您是在构建大型代码库,还是需要 AI 协助进行安全审计与自动化测试,everything-claude-code 都能提供强大的底层支持。作为一个曾荣获 Anthropic 黑客大奖的开源项目,它融合了多语言支持与丰富的实战钩子(hooks),让 AI 真正成长为懂上

140.4k|★★☆☆☆|今天
开发框架Agent语言模型

ComfyUI

ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎,专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式,采用直观的节点式流程图界面,让用户通过连接不同的功能模块即可构建个性化的生成管线。 这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景,也能自由组合模型、调整参数并实时预览效果,轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性,不仅支持 Windows、macOS 和 Linux 全平台,还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构,并率先支持 SDXL、Flux、SD3 等前沿模型。 无论是希望深入探索算法潜力的研究人员和开发者,还是追求极致创作自由度的设计师与资深 AI 绘画爱好者,ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能,使其成为当前最灵活、生态最丰富的开源扩散模型工具之一,帮助用户将创意高效转化为现实。

107.7k|★★☆☆☆|3天前
开发框架图像Agent

Deep-Live-Cam

Deep-Live-Cam 是一款专注于实时换脸与视频生成的开源工具,用户仅需一张静态照片,即可通过“一键操作”实现摄像头画面的即时变脸或制作深度伪造视频。它有效解决了传统换脸技术流程繁琐、对硬件配置要求极高以及难以实时预览的痛点,让高质量的数字内容创作变得触手可及。 这款工具不仅适合开发者和技术研究人员探索算法边界,更因其极简的操作逻辑(仅需三步:选脸、选摄像头、启动),广泛适用于普通用户、内容创作者、设计师及直播主播。无论是为了动画角色定制、服装展示模特替换,还是制作趣味短视频和直播互动,Deep-Live-Cam 都能提供流畅的支持。 其核心技术亮点在于强大的实时处理能力,支持口型遮罩(Mouth Mask)以保留使用者原始的嘴部动作,确保表情自然精准;同时具备“人脸映射”功能,可同时对画面中的多个主体应用不同面孔。此外,项目内置了严格的内容安全过滤机制,自动拦截涉及裸露、暴力等不当素材,并倡导用户在获得授权及明确标注的前提下合规使用,体现了技术发展与伦理责任的平衡。

88.9k|★★★☆☆|今天
开发框架图像Agent

NextChat

NextChat 是一款轻量且极速的 AI 助手,旨在为用户提供流畅、跨平台的大模型交互体验。它完美解决了用户在多设备间切换时难以保持对话连续性,以及面对众多 AI 模型不知如何统一管理的痛点。无论是日常办公、学习辅助还是创意激发,NextChat 都能让用户随时随地通过网页、iOS、Android、Windows、MacOS 或 Linux 端无缝接入智能服务。 这款工具非常适合普通用户、学生、职场人士以及需要私有化部署的企业团队使用。对于开发者而言,它也提供了便捷的自托管方案,支持一键部署到 Vercel 或 Zeabur 等平台。 NextChat 的核心亮点在于其广泛的模型兼容性,原生支持 Claude、DeepSeek、GPT-4 及 Gemini Pro 等主流大模型,让用户在一个界面即可自由切换不同 AI 能力。此外,它还率先支持 MCP(Model Context Protocol)协议,增强了上下文处理能力。针对企业用户,NextChat 提供专业版解决方案,具备品牌定制、细粒度权限控制、内部知识库整合及安全审计等功能,满足公司对数据隐私和个性化管理的高标准要求。

87.6k|★★☆☆☆|昨天
开发框架语言模型