[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"similar-fastnlp--fastNLP":3,"tool-fastnlp--fastNLP":61},[4,18,26,36,44,53],{"id":5,"name":6,"github_repo":7,"description_zh":8,"stars":9,"difficulty_score":10,"last_commit_at":11,"category_tags":12,"status":17},4358,"openclaw","openclaw\u002Fopenclaw","OpenClaw 是一款专为个人打造的本地化 AI 助手，旨在让你在自己的设备上拥有完全可控的智能伙伴。它打破了传统 AI 助手局限于特定网页或应用的束缚，能够直接接入你日常使用的各类通讯渠道，包括微信、WhatsApp、Telegram、Discord、iMessage 等数十种平台。无论你在哪个聊天软件中发送消息，OpenClaw 都能即时响应，甚至支持在 macOS、iOS 和 Android 设备上进行语音交互，并提供实时的画布渲染功能供你操控。\n\n这款工具主要解决了用户对数据隐私、响应速度以及“始终在线”体验的需求。通过将 AI 部署在本地，用户无需依赖云端服务即可享受快速、私密的智能辅助，真正实现了“你的数据，你做主”。其独特的技术亮点在于强大的网关架构，将控制平面与核心助手分离，确保跨平台通信的流畅性与扩展性。\n\nOpenClaw 非常适合希望构建个性化工作流的技术爱好者、开发者，以及注重隐私保护且不愿被单一生态绑定的普通用户。只要具备基础的终端操作能力（支持 macOS、Linux 及 Windows WSL2），即可通过简单的命令行引导完成部署。如果你渴望拥有一个懂你",349277,3,"2026-04-06T06:32:30",[13,14,15,16],"Agent","开发框架","图像","数据工具","ready",{"id":19,"name":20,"github_repo":21,"description_zh":22,"stars":23,"difficulty_score":10,"last_commit_at":24,"category_tags":25,"status":17},3808,"stable-diffusion-webui","AUTOMATIC1111\u002Fstable-diffusion-webui","stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面，旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点，将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。\n\n无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师，还是想要深入探索模型潜力的开发者与研究人员，都能从中获益。其核心亮点在于极高的功能丰富度：不仅支持文生图、图生图、局部重绘（Inpainting）和外绘（Outpainting）等基础模式，还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外，它内置了 GFPGAN 和 CodeFormer 等人脸修复工具，支持多种神经网络放大算法，并允许用户通过插件系统无限扩展能力。即使是显存有限的设备，stable-diffusion-webui 也提供了相应的优化选项，让高质量的 AI 艺术创作变得触手可及。",162132,"2026-04-05T11:01:52",[14,15,13],{"id":27,"name":28,"github_repo":29,"description_zh":30,"stars":31,"difficulty_score":32,"last_commit_at":33,"category_tags":34,"status":17},1381,"everything-claude-code","affaan-m\u002Feverything-claude-code","everything-claude-code 是一套专为 AI 编程助手（如 Claude Code、Codex、Cursor 等）打造的高性能优化系统。它不仅仅是一组配置文件，而是一个经过长期实战打磨的完整框架，旨在解决 AI 代理在实际开发中面临的效率低下、记忆丢失、安全隐患及缺乏持续学习能力等核心痛点。\n\n通过引入技能模块化、直觉增强、记忆持久化机制以及内置的安全扫描功能，everything-claude-code 能显著提升 AI 在复杂任务中的表现，帮助开发者构建更稳定、更智能的生产级 AI 代理。其独特的“研究优先”开发理念和针对 Token 消耗的优化策略，使得模型响应更快、成本更低，同时有效防御潜在的攻击向量。\n\n这套工具特别适合软件开发者、AI 研究人员以及希望深度定制 AI 工作流的技术团队使用。无论您是在构建大型代码库，还是需要 AI 协助进行安全审计与自动化测试，everything-claude-code 都能提供强大的底层支持。作为一个曾荣获 Anthropic 黑客大奖的开源项目，它融合了多语言支持与丰富的实战钩子（hooks），让 AI 真正成长为懂上",143909,2,"2026-04-07T11:33:18",[14,13,35],"语言模型",{"id":37,"name":38,"github_repo":39,"description_zh":40,"stars":41,"difficulty_score":32,"last_commit_at":42,"category_tags":43,"status":17},2271,"ComfyUI","Comfy-Org\u002FComfyUI","ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎，专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式，采用直观的节点式流程图界面，让用户通过连接不同的功能模块即可构建个性化的生成管线。\n\n这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景，也能自由组合模型、调整参数并实时预览效果，轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性，不仅支持 Windows、macOS 和 Linux 全平台，还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构，并率先支持 SDXL、Flux、SD3 等前沿模型。\n\n无论是希望深入探索算法潜力的研究人员和开发者，还是追求极致创作自由度的设计师与资深 AI 绘画爱好者，ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能，使其成为当前最灵活、生态最丰富的开源扩散模型工具之一，帮助用户将创意高效转化为现实。",107888,"2026-04-06T11:32:50",[14,15,13],{"id":45,"name":46,"github_repo":47,"description_zh":48,"stars":49,"difficulty_score":32,"last_commit_at":50,"category_tags":51,"status":17},4721,"markitdown","microsoft\u002Fmarkitdown","MarkItDown 是一款由微软 AutoGen 团队打造的轻量级 Python 工具，专为将各类文件高效转换为 Markdown 格式而设计。它支持 PDF、Word、Excel、PPT、图片（含 OCR）、音频（含语音转录）、HTML 乃至 YouTube 链接等多种格式的解析，能够精准提取文档中的标题、列表、表格和链接等关键结构信息。\n\n在人工智能应用日益普及的今天，大语言模型（LLM）虽擅长处理文本，却难以直接读取复杂的二进制办公文档。MarkItDown 恰好解决了这一痛点，它将非结构化或半结构化的文件转化为模型“原生理解”且 Token 效率极高的 Markdown 格式，成为连接本地文件与 AI 分析 pipeline 的理想桥梁。此外，它还提供了 MCP（模型上下文协议）服务器，可无缝集成到 Claude Desktop 等 LLM 应用中。\n\n这款工具特别适合开发者、数据科学家及 AI 研究人员使用，尤其是那些需要构建文档检索增强生成（RAG）系统、进行批量文本分析或希望让 AI 助手直接“阅读”本地文件的用户。虽然生成的内容也具备一定可读性，但其核心优势在于为机器",93400,"2026-04-06T19:52:38",[52,14],"插件",{"id":54,"name":55,"github_repo":56,"description_zh":57,"stars":58,"difficulty_score":10,"last_commit_at":59,"category_tags":60,"status":17},4487,"LLMs-from-scratch","rasbt\u002FLLMs-from-scratch","LLMs-from-scratch 是一个基于 PyTorch 的开源教育项目，旨在引导用户从零开始一步步构建一个类似 ChatGPT 的大型语言模型（LLM）。它不仅是同名技术著作的官方代码库，更提供了一套完整的实践方案，涵盖模型开发、预训练及微调的全过程。\n\n该项目主要解决了大模型领域“黑盒化”的学习痛点。许多开发者虽能调用现成模型，却难以深入理解其内部架构与训练机制。通过亲手编写每一行核心代码，用户能够透彻掌握 Transformer 架构、注意力机制等关键原理，从而真正理解大模型是如何“思考”的。此外，项目还包含了加载大型预训练权重进行微调的代码，帮助用户将理论知识延伸至实际应用。\n\nLLMs-from-scratch 特别适合希望深入底层原理的 AI 开发者、研究人员以及计算机专业的学生。对于不满足于仅使用 API，而是渴望探究模型构建细节的技术人员而言，这是极佳的学习资源。其独特的技术亮点在于“循序渐进”的教学设计：将复杂的系统工程拆解为清晰的步骤，配合详细的图表与示例，让构建一个虽小但功能完备的大模型变得触手可及。无论你是想夯实理论基础，还是为未来研发更大规模的模型做准备",90106,"2026-04-06T11:19:32",[35,15,13,14],{"id":62,"github_repo":63,"name":64,"description_en":65,"description_zh":66,"ai_summary_zh":66,"readme_en":67,"readme_zh":68,"quickstart_zh":69,"use_case_zh":70,"hero_image_url":71,"owner_login":72,"owner_name":64,"owner_avatar_url":73,"owner_bio":74,"owner_company":75,"owner_location":75,"owner_email":76,"owner_twitter":75,"owner_website":75,"owner_url":77,"languages":78,"stars":87,"forks":88,"last_commit_at":89,"license":90,"difficulty_score":32,"env_os":91,"env_gpu":92,"env_ram":93,"env_deps":94,"category_tags":101,"github_topics":102,"view_count":32,"oss_zip_url":75,"oss_zip_packed_at":75,"status":17,"created_at":110,"updated_at":111,"faqs":112,"releases":148},5190,"fastnlp\u002FfastNLP","fastNLP","fastNLP: A Modularized and Extensible NLP Framework. Currently still in incubation.","fastNLP 是一款轻量级且高度模块化的自然语言处理（NLP）框架，旨在帮助开发者摆脱繁琐的工程代码束缚，专注于算法模型本身。它主要解决了 NLP 项目中常见的重复性工作难题，如复杂的数据处理循环、训练流程搭建以及多显卡并行配置等，让用户无需大幅修改代码即可轻松实现混合精度训练（fp16）、多卡加速及 ZeRO 优化等高级功能。\n\n这款工具特别适合 NLP 领域的研究人员、算法工程师及深度学习开发者使用。无论是需要快速验证想法的学术研究者，还是追求高效交付的工业界开发者，都能通过 fastNLP 显著缩短从数据准备到模型部署的开发周期。其独特的技术亮点在于强大的兼容性与便捷性：支持多种主流深度学习框架作为后端，并提供了灵活的事件回调机制，允许用户在训练的任何阶段自定义操作。此外，内置的数据缓存与多进程处理功能，进一步提升了数据流转效率。需要注意的是，fastNLP 1.0.0 版本后进行了架构重构以更好地适配不同框架，虽然带来了更优的扩展性，但旧版用户迁移时需留意接口调整。总体而言，fastNLP 是构建高效、可扩展 NLP 应用的得力助手。","# fastNLP\n\n\n[\u002F\u002F]: # ([![Build Status]&#40;https:\u002F\u002Ftravis-ci.org\u002Ffastnlp\u002FfastNLP.svg?branch=master&#41;]&#40;https:\u002F\u002Ftravis-ci.org\u002Ffastnlp\u002FfastNLP&#41;)\n\n[\u002F\u002F]: # ([![codecov]&#40;https:\u002F\u002Fcodecov.io\u002Fgh\u002Ffastnlp\u002FfastNLP\u002Fbranch\u002Fmaster\u002Fgraph\u002Fbadge.svg&#41;]&#40;https:\u002F\u002Fcodecov.io\u002Fgh\u002Ffastnlp\u002FfastNLP&#41;)\n\n[\u002F\u002F]: # ([![Pypi]&#40;https:\u002F\u002Fimg.shields.io\u002Fpypi\u002Fv\u002FfastNLP.svg&#41;]&#40;https:\u002F\u002Fpypi.org\u002Fproject\u002FfastNLP&#41;)\n\n[\u002F\u002F]: # (![Hex.pm]&#40;https:\u002F\u002Fimg.shields.io\u002Fhexpm\u002Fl\u002Fplug.svg&#41;)\n\n[\u002F\u002F]: # ([![Documentation Status]&#40;https:\u002F\u002Freadthedocs.org\u002Fprojects\u002Ffastnlp\u002Fbadge\u002F?version=latest&#41;]&#40;http:\u002F\u002Ffastnlp.readthedocs.io\u002F?badge=latest&#41;)\n\n\nfastNLP是一款轻量级的自然语言处理（NLP）工具包，目标是减少用户项目中的工程型代码，例如数据处理循环、训练循环、多卡运行等。\n\nfastNLP具有如下的特性：\n\n- 便捷。在数据处理中可以通过apply函数避免循环、使用多进程提速等；在训练循环阶段可以很方便定制操作。\n- 高效。无需改动代码，实现fp16切换、多卡、ZeRO优化等。\n- 兼容。fastNLP支持多种深度学习框架作为后端。\n\n> :warning: **为了实现对不同深度学习架构的兼容，fastNLP 1.0.0之后的版本重新设计了架构，因此与过去的fastNLP版本不完全兼容，\n> 基于更早的fastNLP代码需要做一定的调整**: \n\n## fastNLP文档\n[中文文档](http:\u002F\u002Fwww.fastnlp.top\u002Fdocs\u002FfastNLP\u002Fmaster\u002Findex.html)\n\n## 安装指南\nfastNLP可以通过以下的命令进行安装\n```shell\npip install fastNLP>=1.0.0alpha\n```\n如果需要安装更早版本的fastNLP请指定版本号，例如\n```shell\npip install fastNLP==0.7.1\n```\n另外，请根据使用的深度学习框架，安装相应的深度学习框架。\n\n\u003Cdetails>\n\u003Csummary>Pytorch\u003C\u002Fsummary>\n下面是使用pytorch来进行文本分类的例子。需要安装torch>=1.6.0。\n\n```python\nfrom fastNLP.io import ChnSentiCorpLoader\nfrom functools import partial\nfrom fastNLP import cache_results\nfrom fastNLP.transformers.torch import BertTokenizer\n\n# 使用cache_results装饰器装饰函数，将prepare_data的返回结果缓存到caches\u002Fcache.pkl，再次运行时，如果\n#  该文件还存在，将自动读取缓存文件，而不再次运行预处理代码。\n@cache_results('caches\u002Fcache.pkl')\ndef prepare_data():\n    # 会自动下载数据，并且可以通过文档看到返回的 dataset 应该是包含\"raw_words\"和\"target\"两个field的\n    data_bundle = ChnSentiCorpLoader().load()\n    # 使用tokenizer对数据进行tokenize\n    tokenizer = BertTokenizer.from_pretrained('hfl\u002Fchinese-bert-wwm')\n    tokenize = partial(tokenizer, max_length=256)  # 限制数据的最大长度\n    data_bundle.apply_field_more(tokenize, field_name='raw_chars', num_proc=4)  # 会新增\"input_ids\", \"attention_mask\"等field进入dataset中\n    data_bundle.apply_field(int, field_name='target', new_field_name='labels')  # 将int函数应用到每个target上，并且放入新的labels field中\n    return data_bundle\ndata_bundle = prepare_data()\nprint(data_bundle.get_dataset('train')[:4])\n\n# 初始化model, optimizer\nfrom fastNLP.transformers.torch import BertForSequenceClassification\nfrom torch import optim\nmodel = BertForSequenceClassification.from_pretrained('hfl\u002Fchinese-bert-wwm')\noptimizer = optim.AdamW(model.parameters(), lr=2e-5)\n\n# 准备dataloader\nfrom fastNLP import prepare_dataloader\ndls = prepare_dataloader(data_bundle, batch_size=32)\n\n# 准备训练\nfrom fastNLP import Trainer, Accuracy, LoadBestModelCallback, TorchWarmupCallback, Event\ncallbacks = [\n    TorchWarmupCallback(warmup=0.1, schedule='linear'),   # 训练过程中调整学习率。\n    LoadBestModelCallback()  # 将在训练结束之后，加载性能最优的model\n]\n# 在训练特定时机加入一些操作， 不同时机能够获取到的参数不一样，可以通过Trainer.on函数的文档查看每个时机的参数\n@Trainer.on(Event.on_before_backward())\ndef print_loss(trainer, outputs):\n    if trainer.global_forward_batches % 10 == 0:  # 每10个batch打印一次loss。\n        print(outputs.loss.item())\n\ntrainer = Trainer(model=model, train_dataloader=dls['train'], optimizers=optimizer,\n                  device=0, evaluate_dataloaders=dls['dev'], metrics={'acc': Accuracy()},\n                  callbacks=callbacks, monitor='acc#acc',n_epochs=5,\n                  # Accuracy的update()函数需要pred，target两个参数，它们实际对应的就是以下的field。\n                  evaluate_input_mapping={'labels': 'target'},  # 在评测时，将dataloader中会输入到模型的labels重新命名为target\n                  evaluate_output_mapping={'logits': 'pred'}  # 在评测时，将model输出中的logits重新命名为pred\n                  )\ntrainer.run()\n\n# 在测试集合上进行评测\nfrom fastNLP import Evaluator\nevaluator = Evaluator(model=model, dataloaders=dls['test'], metrics={'acc': Accuracy()},\n                      # Accuracy的update()函数需要pred，target两个参数，它们实际对应的就是以下的field。\n                      output_mapping={'logits': 'pred'},\n                      input_mapping={'labels': 'target'})\nevaluator.run()\n```\n\n更多内容可以参考如下的链接\n### 快速入门\n\n- [0. 10 分钟快速上手 fastNLP torch](http:\u002F\u002Fwww.fastnlp.top\u002Fdocs\u002FfastNLP\u002Fmaster\u002Ftutorials\u002Ftorch\u002Ffastnlp_torch_tutorial.html)\n\n### 详细使用教程\n\n- [1. Trainer 和 Evaluator 的基本使用](http:\u002F\u002Fwww.fastnlp.top\u002Fdocs\u002FfastNLP\u002Fmaster\u002Ftutorials\u002Fbasic\u002Ffastnlp_tutorial_0.html)\n- [2. DataSet 和 Vocabulary 的基本使用](http:\u002F\u002Fwww.fastnlp.top\u002Fdocs\u002FfastNLP\u002Fmaster\u002Ftutorials\u002Fbasic\u002Ffastnlp_tutorial_1.html)\n- [3. DataBundle 和 Tokenizer 的基本使用](http:\u002F\u002Fwww.fastnlp.top\u002Fdocs\u002FfastNLP\u002Fmaster\u002Ftutorials\u002Fbasic\u002Ffastnlp_tutorial_2.html)\n- [4. TorchDataloader 的内部结构和基本使用](http:\u002F\u002Fwww.fastnlp.top\u002Fdocs\u002FfastNLP\u002Fmaster\u002Ftutorials\u002Fbasic\u002Ffastnlp_tutorial_3.html)\n- [5. fastNLP 中的预定义模型](http:\u002F\u002Fwww.fastnlp.top\u002Fdocs\u002FfastNLP\u002Fmaster\u002Ftutorials\u002Fbasic\u002Ffastnlp_tutorial_4.html)\n- [6. Trainer 和 Evaluator 的深入介绍](http:\u002F\u002Fwww.fastnlp.top\u002Fdocs\u002FfastNLP\u002Fmaster\u002Ftutorials\u002Fbasic\u002Ffastnlp_tutorial_4.html)\n- [7. fastNLP 与 paddle 或 jittor 的结合](http:\u002F\u002Fwww.fastnlp.top\u002Fdocs\u002FfastNLP\u002Fmaster\u002Ftutorials\u002Fbasic\u002Ffastnlp_tutorial_5.html)\n- [8. 使用 Bert + fine-tuning 完成 SST-2 分类](http:\u002F\u002Fwww.fastnlp.top\u002Fdocs\u002FfastNLP\u002Fmaster\u002Ftutorials\u002Fbasic\u002Ffastnlp_tutorial_e1.html)\n- [9. 使用 Bert + prompt 完成 SST-2 分类](http:\u002F\u002Fwww.fastnlp.top\u002Fdocs\u002FfastNLP\u002Fmaster\u002Ftutorials\u002Fbasic\u002Ffastnlp_tutorial_e2.html)\n\n\n\u003C\u002Fdetails>\n\n\u003Cdetails>\n\u003Csummary>Paddle\u003C\u002Fsummary>\n下面是使用paddle来进行文本分类的例子。需要安装paddle>=2.2.0以及paddlenlp>=2.3.3。\n\n```python\nfrom fastNLP.io import ChnSentiCorpLoader\nfrom functools import partial\n\n# 会自动下载数据，并且可以通过文档看到返回的 dataset 应该是包含\"raw_words\"和\"target\"两个field的\ndata_bundle = ChnSentiCorpLoader().load()\n\n# 使用tokenizer对数据进行tokenize\nfrom paddlenlp.transformers import BertTokenizer\ntokenizer = BertTokenizer.from_pretrained('hfl\u002Fchinese-bert-wwm')\ntokenize = partial(tokenizer, max_length=256)  # 限制一下最大长度\ndata_bundle.apply_field_more(tokenize, field_name='raw_chars', num_proc=4)  # 会新增\"input_ids\", \"attention_mask\"等field进入dataset中\ndata_bundle.apply_field(int, field_name='target', new_field_name='labels')  # 将int函数应用到每个target上，并且放入新的labels field中\nprint(data_bundle.get_dataset('train')[:4])\n\n# 初始化 model \nfrom paddlenlp.transformers import BertForSequenceClassification, LinearDecayWithWarmup\nfrom paddle import optimizer, nn\nclass SeqClsModel(nn.Layer):\n    def __init__(self, model_checkpoint, num_labels):\n        super(SeqClsModel, self).__init__()\n        self.num_labels = num_labels\n        self.bert = BertForSequenceClassification.from_pretrained(model_checkpoint)\n\n    def forward(self, input_ids, token_type_ids=None, position_ids=None, attention_mask=None):\n        logits = self.bert(input_ids, token_type_ids, position_ids, attention_mask)\n        return logits\n\n    def train_step(self, input_ids, labels, token_type_ids=None, position_ids=None, attention_mask=None):\n        logits = self(input_ids, token_type_ids, position_ids, attention_mask)\n        loss_fct = nn.CrossEntropyLoss()\n        loss = loss_fct(logits.reshape((-1, self.num_labels)), labels.reshape((-1, )))\n        return {\n            \"logits\": logits,\n            \"loss\": loss,\n        }\n    \n    def evaluate_step(self, input_ids, token_type_ids=None, position_ids=None, attention_mask=None):\n        logits = self(input_ids, token_type_ids, position_ids, attention_mask)\n        return {\n            \"logits\": logits,\n        }\n\nmodel = SeqClsModel('hfl\u002Fchinese-bert-wwm', num_labels=2)\n\n# 准备dataloader\nfrom fastNLP import prepare_dataloader\ndls = prepare_dataloader(data_bundle, batch_size=16)\n\n# 训练过程中调整学习率。\nscheduler = LinearDecayWithWarmup(2e-5, total_steps=20 * len(dls['train']), warmup=0.1)\noptimizer = optimizer.AdamW(parameters=model.parameters(), learning_rate=scheduler)\n\n# 准备训练\nfrom fastNLP import Trainer, Accuracy, LoadBestModelCallback, Event\ncallbacks = [\n    LoadBestModelCallback()  # 将在训练结束之后，加载性能最优的model\n]\n# 在训练特定时机加入一些操作， 不同时机能够获取到的参数不一样，可以通过Trainer.on函数的文档查看每个时机的参数\n@Trainer.on(Event.on_before_backward())\ndef print_loss(trainer, outputs):\n    if trainer.global_forward_batches % 10 == 0:  # 每10个batch打印一次loss。\n        print(outputs[\"loss\"].item())\n\ntrainer = Trainer(model=model, train_dataloader=dls['train'], optimizers=optimizer,\n                  device=0, evaluate_dataloaders=dls['dev'], metrics={'acc': Accuracy()},\n                  callbacks=callbacks, monitor='acc#acc',\n                  # Accuracy的update()函数需要pred，target两个参数，它们实际对应的就是以下的field。\n                  evaluate_output_mapping={'logits': 'pred'},\n                  evaluate_input_mapping={'labels': 'target'}\n                  )\ntrainer.run()\n\n# 在测试集合上进行评测\nfrom fastNLP import Evaluator\nevaluator = Evaluator(model=model, dataloaders=dls['test'], metrics={'acc': Accuracy()},\n                      # Accuracy的update()函数需要pred，target两个参数，它们实际对应的就是以下的field。\n                      output_mapping={'logits': 'pred'},\n                      input_mapping={'labels': 'target'})\nevaluator.run()\n```\n\n更多内容可以参考如下的链接\n### 快速入门\n\n- [0. 10 分钟快速上手 fastNLP paddle](http:\u002F\u002Fwww.fastnlp.top\u002Fdocs\u002FfastNLP\u002Fmaster\u002Ftutorials\u002Ftorch\u002Ffastnlp_torch_tutorial.html)\n\n### 详细使用教程\n\n- [1. 使用 paddlenlp 和 fastNLP 实现中文文本情感分析](http:\u002F\u002Fwww.fastnlp.top\u002Fdocs\u002FfastNLP\u002Fmaster\u002Ftutorials\u002Fpaddle\u002Ffastnlp_tutorial_paddle_e1.html)\n- [2. 使用 paddlenlp 和 fastNLP 训练中文阅读理解任务](http:\u002F\u002Fwww.fastnlp.top\u002Fdocs\u002FfastNLP\u002Fmaster\u002Ftutorials\u002Fpaddle\u002Ffastnlp_tutorial_paddle_e2.html)\n\n\u003C\u002Fdetails>\n\n\u003Cdetails>\n\u003Csummary>oneflow\u003C\u002Fsummary>\n\u003C\u002Fdetails>\n\n\n\n\u003Cdetails>\n\u003Csummary>jittor\u003C\u002Fsummary>\n\u003C\u002Fdetails>\n\n\n## 项目结构\n\nfastNLP的项目结构如下：\n\n\u003Ctable>\n\u003Ctr>\n    \u003Ctd>\u003Cb> fastNLP \u003C\u002Fb>\u003C\u002Ftd>\n    \u003Ctd> 开源的自然语言处理库 \u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n    \u003Ctd>\u003Cb> fastNLP.core \u003C\u002Fb>\u003C\u002Ftd>\n    \u003Ctd> 实现了核心功能，包括数据处理组件、训练器、测试器等 \u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n    \u003Ctd>\u003Cb> fastNLP.models \u003C\u002Fb>\u003C\u002Ftd>\n    \u003Ctd> 实现了一些完整的神经网络模型 \u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n    \u003Ctd>\u003Cb> fastNLP.modules \u003C\u002Fb>\u003C\u002Ftd>\n    \u003Ctd> 实现了用于搭建神经网络模型的诸多组件 \u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n    \u003Ctd>\u003Cb> fastNLP.embeddings \u003C\u002Fb>\u003C\u002Ftd>\n    \u003Ctd> 实现了将序列index转为向量序列的功能，包括读取预训练embedding等 \u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n    \u003Ctd>\u003Cb> fastNLP.io \u003C\u002Fb>\u003C\u002Ftd>\n    \u003Ctd> 实现了读写功能，包括数据读入与预处理，模型读写，数据与模型自动下载等 \u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftable>\n\n\u003Chr>\n\n","# fastNLP\n\n\n[\u002F\u002F]: # ([![构建状态]（https:\u002F\u002Ftravis-ci.org\u002Ffastnlp\u002FfastNLP.svg?branch=master）]（https:\u002F\u002Ftravis-ci.org\u002Ffastnlp\u002FfastNLP）)\n\n[\u002F\u002F]: # ([![codecov]（https:\u002F\u002Fcodecov.io\u002Fgh\u002Ffastnlp\u002FfastNLP\u002Fbranch\u002Fmaster\u002Fgraph\u002Fbadge.svg）]（https:\u002F\u002Fcodecov.io\u002Fgh\u002Ffastnlp\u002FfastNLP）)\n\n[\u002F\u002F]: # ([![Pypi]（https:\u002F\u002Fimg.shields.io\u002Fpypi\u002Fv\u002FfastNLP.svg）]（https:\u002F\u002Fpypi.org\u002Fproject\u002FfastNLP）)\n\n[\u002F\u002F]: # (![Hex.pm]（https:\u002F\u002Fimg.shields.io\u002Fhexpm\u002Fl\u002Fplug.svg）)\n\n[\u002F\u002F]: # ([![文档状态]（https:\u002F\u002Freadthedocs.org\u002Fprojects\u002Ffastnlp\u002Fbadge\u002F?version=latest）]（http:\u002F\u002Ffastnlp.readthedocs.io\u002F?badge=latest）)\n\n\nfastNLP是一款轻量级的自然语言处理（NLP）工具包，目标是减少用户项目中的工程型代码，例如数据处理循环、训练循环、多卡运行等。\n\nfastNLP具有如下的特性：\n\n- 便捷。在数据处理中可以通过apply函数避免循环、使用多进程提速等；在训练循环阶段可以很方便定制操作。\n- 高效。无需改动代码，实现fp16切换、多卡、ZeRO优化等。\n- 兼容。fastNLP支持多种深度学习框架作为后端。\n\n> :warning: **为了实现对不同深度学习架构的兼容，fastNLP 1.0.0之后的版本重新设计了架构，因此与过去的fastNLP版本不完全兼容，\n> 基于更早的fastNLP代码需要做一定的调整**: \n\n## fastNLP文档\n[中文文档](http:\u002F\u002Fwww.fastnlp.top\u002Fdocs\u002FfastNLP\u002Fmaster\u002Findex.html)\n\n## 安装指南\nfastNLP可以通过以下的命令进行安装\n```shell\npip install fastNLP>=1.0.0alpha\n```\n如果需要安装更早版本的fastNLP请指定版本号，例如\n```shell\npip install fastNLP==0.7.1\n```\n另外，请根据使用的深度学习框架，安装相应的深度学习框架。\n\n\u003Cdetails>\n\u003Csummary>Pytorch\u003C\u002Fsummary>\n下面是使用pytorch来进行文本分类的例子。需要安装torch>=1.6.0。\n\n```python\nfrom fastNLP.io import ChnSentiCorpLoader\nfrom functools import partial\nfrom fastNLP import cache_results\nfrom fastNLP.transformers.torch import BertTokenizer\n\n# 使用cache_results装饰器装饰函数，将prepare_data的返回结果缓存到caches\u002Fcache.pkl，再次运行时，如果\n#  该文件还存在，将自动读取缓存文件，而不再次运行预处理代码。\n@cache_results('caches\u002Fcache.pkl')\ndef prepare_data():\n    # 会自动下载数据，并且可以通过文档看到返回的 dataset 应该是包含\"raw_words\"和\"target\"两个field的\n    data_bundle = ChnSentiCorpLoader().load()\n    # 使用tokenizer对数据进行tokenize\n    tokenizer = BertTokenizer.from_pretrained('hfl\u002Fchinese-bert-wwm')\n    tokenize = partial(tokenizer, max_length=256)  # 限制数据的最大长度\n    data_bundle.apply_field_more(tokenize， field_name='raw_chars', num_proc=4)  # 会新增\"input_ids\", \"attention_mask\"等field进入dataset中\n    data_bundle.apply_field(int， field_name='target', new_field_name='labels')  # 将int函数应用到每个target上，并且放入新的labels field中\n    return data_bundle\ndata_bundle = prepare_data()\nprint(data_bundle.get_dataset('train')[:4])\n\n# 初始化model, optimizer\nfrom fastNLP.transformers.torch import BertForSequenceClassification\nfrom torch import optim\nmodel = BertForSequenceClassification.from_pretrained('hfl\u002Fchinese-bert-wwm')\noptimizer = optim.AdamW(model.parameters(), lr=2e-5)\n\n# 准备dataloader\nfrom fastNLP import prepare_dataloader\ndls = prepare_dataloader(data_bundle， batch_size=32)\n\n# 准备训练\nfrom fastNLP import Trainer， Accuracy， LoadBestModelCallback， TorchWarmupCallback， Event\ncallbacks = [\n    TorchWarmupCallback(warmup=0.1， schedule='linear），   # 训练过程中调整学习率。\n    LoadBestModelCallback()  # 将在训练结束之后，加载性能最优的model\n]\n# 在训练特定时机加入一些操作， 不同时机能够获取到的参数不一样，可以通过Trainer.on函数的文档查看每个时机的参数\n@Trainer.on(Event.on_before_backward())\ndef print_loss(trainer， outputs):\n    if trainer.global_forward_batches % 10 == 0：  # 每10个batch打印一次loss。\n        print(outputs.loss.item())\n\ntrainer = Trainer(model=model， train_dataloader=dls['train']， optimizers=optimizer，\n                  device=0， evaluate_dataloaders=dls['dev']， metrics={'acc': Accuracy()}，\n                  callbacks=callbacks， monitor='acc#acc'，n_epochs=5，\n                  # Accuracy的update()函数需要pred，target两个参数，它们实际对应的就是以下的field。\n                  evaluate_input_mapping={'labels': 'target'}，  # 在评测时，将dataloader中会输入到模型的labels重新命名为target\n                  evaluate_output_mapping={'logits': 'pred'}  # 在评测时，将model输出中的logits重新命名为pred\n                  )\ntrainer.run()\n\n# 在测试集合上进行评测\nfrom fastNLP import Evaluator\nevaluator = Evaluator(model=model， dataloaders=dls['test']， metrics={'acc': Accuracy()}，\n                      # Accuracy的update()函数需要pred，target两个参数，它们实际对应的就是以下的field。\n                      output_mapping={'logits': 'pred'}，\n                      input_mapping={'labels': 'target'})\nevaluator.run()\n```\n\n更多内容可以参考如下的链接\n### 快速入门\n\n- [0. 10 分钟快速上手 fastNLP torch](http:\u002F\u002Fwww.fastnlp.top\u002Fdocs\u002FfastNLP\u002Fmaster\u002Ftutorials\u002Ftorch\u002Ffastnlp_torch_tutorial.html)\n\n### 详细使用教程\n\n- [1. Trainer 和 Evaluator 的基本使用](http:\u002F\u002Fwww.fastnlp.top\u002Fdocs\u002FfastNLP\u002Fmaster\u002Ftutorials\u002Fbasic\u002Ffastnlp_tutorial_0.html)\n- [2. DataSet 和 Vocabulary 的基本使用](http:\u002F\u002Fwww.fastnlp.top\u002Fdocs\u002FfastNLP\u002Fmaster\u002Ftutorials\u002Fbasic\u002Ffastnlp_tutorial_1.html)\n- [3. DataBundle 和 Tokenizer 的基本使用](http:\u002F\u002Fwww.fastnlp.top\u002Fdocs\u002FfastNLP\u002Fmaster\u002Ftutorials\u002Fbasic\u002Ffastnlp_tutorial_2.html)\n- [4. TorchDataloader 的内部结构和基本使用](http:\u002F\u002Fwww.fastnlp.top\u002Fdocs\u002FfastNLP\u002Fmaster\u002Ftutorials\u002Fbasic\u002Ffastnlp_tutorial_3.html)\n- [5. fastNLP 中的预定义模型](http:\u002F\u002Fwww.fastnlp.top\u002Fdocs\u002FfastNLP\u002Fmaster\u002Ftutorials\u002Fbasic\u002Ffastnlp_tutorial_4.html)\n- [6. Trainer 和 Evaluator 的深入介绍](http:\u002F\u002Fwww.fastnlp.top\u002Fdocs\u002FfastNLP\u002Fmaster\u002Ftutorials\u002Fbasic\u002Ffastnlp_tutorial_4.html)\n- [7. fastNLP 与 paddle 或 jittor 的结合](http:\u002F\u002Fwww.fastnlp.top\u002Fdocs\u002FfastNLP\u002Fmaster\u002Ftutorials\u002Fbasic\u002Ffastnlp_tutorial_5.html)\n- [8. 使用 Bert + fine-tuning 完成 SST-2 分类](http:\u002F\u002Fwww.fastnlp.top\u002Fdocs\u002FfastNLP\u002Fmaster\u002Ftutorials\u002Fbasic\u002Ffastnlp_tutorial_e1.html)\n- [9. 使用 Bert + prompt 完成 SST-2 分类](http:\u002F\u002Fwww.fastnlp.top\u002Fdocs\u002FfastNLP\u002Fmaster\u002Ftutorials\u002Fbasic\u002Ffastnlp_tutorial_e2.html)\n\n\n\u003C\u002Fdetails>\n\n\u003Cdetails>\n\u003Csummary>Paddle\u003C\u002Fsummary>\n下面是使用paddle来进行文本分类的例子。需要安装paddle>=2.2.0以及paddlenlp>=2.3.3。\n\n```python\nfrom fastNLP.io import ChnSentiCorpLoader\nfrom functools import partial\n\n# 会自动下载数据，并且可以通过文档看到返回的 dataset 应该是包含\"raw_words\"和\"target\"两个field的\ndata_bundle = ChnSentiCorpLoader().load()\n\n# 使用tokenizer对数据进行tokenize\nfrom paddlenlp.transformers import BertTokenizer\ntokenizer = BertTokenizer.from_pretrained('hfl\u002Fchinese-bert-wwm')\ntokenize = partial(tokenizer， max_length=256)  # 限制一下最大长度\ndata_bundle.apply_field_more(tokenize， field_name='raw_chars'， num_proc=4)  # 会新增\"input_ids\"， \"attention_mask\"等field进入dataset中\ndata_bundle.apply_field(int， field_name='target'， new_field_name='labels')  # 将int函数应用到每个target上，并且放入新的labels field中\nprint(data_bundle.get_dataset('train')[:4])\n\n# 初始化模型\nfrom paddlenlp.transformers import BertForSequenceClassification, LinearDecayWithWarmup\nfrom paddle import optimizer, nn\nclass SeqClsModel(nn.Layer):\n    def __init__(self, model_checkpoint, num_labels):\n        super(SeqClsModel, self).__init__()\n        self.num_labels = num_labels\n        self.bert = BertForSequenceClassification.from_pretrained(model_checkpoint)\n\n    def forward(self, input_ids, token_type_ids=None, position_ids=None, attention_mask=None):\n        logits = self.bert(input_ids, token_type_ids, position_ids, attention_mask)\n        return logits\n\n    def train_step(self, input_ids, labels, token_type_ids=None, position_ids=None, attention_mask=None):\n        logits = self(input_ids, token_type_ids, position_ids, attention_mask)\n        loss_fct = nn.CrossEntropyLoss()\n        loss = loss_fct(logits.reshape((-1, self.num_labels)), labels.reshape((-1, )))\n        return {\n            \"logits\": logits,\n            \"loss\": loss,\n        }\n    \n    def evaluate_step(self, input_ids, token_type_ids=None, position_ids=None, attention_mask=None):\n        logits = self(input_ids, token_type_ids, position_ids, attention_mask)\n        return {\n            \"logits\": logits,\n        }\n\nmodel = SeqClsModel('hfl\u002Fchinese-bert-wwm', num_labels=2)\n\n# 准备数据加载器\nfrom fastNLP import prepare_dataloader\ndls = prepare_dataloader(data_bundle, batch_size=16)\n\n# 训练过程中调整学习率。\nscheduler = LinearDecayWithWarmup(2e-5, total_steps=20 * len(dls['train']), warmup=0.1)\noptimizer = optimizer.AdamW(parameters=model.parameters(), learning_rate=scheduler)\n\n# 准备训练\nfrom fastNLP import Trainer, Accuracy, LoadBestModelCallback, Event\ncallbacks = [\n    LoadBestModelCallback()  # 将在训练结束之后，加载性能最优的模型\n]\n# 在训练特定时机加入一些操作， 不同时机能够获取到的参数不一样，可以通过Trainer.on函数的文档查看每个时机的参数\n@Trainer.on(Event.on_before_backward())\ndef print_loss(trainer, outputs):\n    if trainer.global_forward_batches % 10 == 0:  # 每10个batch打印一次loss。\n        print(outputs[\"loss\"].item())\n\ntrainer = Trainer(model=model, train_dataloader=dls['train'], optimizers=optimizer,\n                  device=0, evaluate_dataloaders=dls['dev'], metrics={'acc': Accuracy()},\n                  callbacks=callbacks, monitor='acc#acc',\n                  # Accuracy的update()函数需要pred，target两个参数，它们实际对应的就是以下的field。\n                  evaluate_output_mapping={'logits': 'pred'},\n                  evaluate_input_mapping={'labels': 'target'}\n                  )\ntrainer.run()\n\n# 在测试集合上进行评测\nfrom fastNLP import Evaluator\nevaluator = Evaluator(model=model, dataloaders=dls['test'], metrics={'acc': Accuracy()},\n                      # Accuracy的update()函数需要pred，target两个参数，它们实际对应的就是以下的field。\n                      output_mapping={'logits': 'pred'},\n                      input_mapping={'labels': 'target'})\nevaluator.run()\n```\n\n更多内容可以参考如下的链接\n### 快速入门\n\n- [0. 10 分钟快速上手 fastNLP paddle](http:\u002F\u002Fwww.fastnlp.top\u002Fdocs\u002FfastNLP\u002Fmaster\u002Ftutorials\u002Ftorch\u002Ffastnlp_torch_tutorial.html)\n\n### 详细使用教程\n\n- [1. 使用 paddlenlp 和 fastNLP 实现中文文本情感分析](http:\u002F\u002Fwww.fastnlp.top\u002Fdocs\u002FfastNLP\u002Fmaster\u002Ftutorials\u002Fpaddle\u002Ffastnlp_tutorial_paddle_e1.html)\n- [2. 使用 paddlenlp 和 fastNLP 训练中文阅读理解任务](http:\u002F\u002Fwww.fastnlp.top\u002Fdocs\u002FfastNLP\u002Fmaster\u002Ftutorials\u002Fpaddle\u002Ffastnlp_tutorial_paddle_e2.html)\n\n\u003C\u002Fdetails>\n\n\u003Cdetails>\n\u003Csummary>oneflow\u003C\u002Fsummary>\n\u003C\u002Fdetails>\n\n\n\n\u003Cdetails>\n\u003Csummary>jittor\u003C\u002Fsummary>\n\u003C\u002Fdetails>\n\n\n## 项目结构\n\nfastNLP的项目结构如下：\n\n\u003Ctable>\n\u003Ctr>\n    \u003Ctd>\u003Cb> fastNLP \u003C\u002Fb>\u003C\u002Ftd>\n    \u003Ctd> 开源的自然语言处理库 \u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n    \u003Ctd>\u003Cb> fastNLP.core \u003C\u002Fb>\u003C\u002Ftd>\n    \u003Ctd> 实现了核心功能，包括数据处理组件、训练器、测试器等 \u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n    \u003Ctd>\u003Cb> fastNLP.models \u003C\u002Fb>\u003C\u002Ftd>\n    \u003Ctd> 实现了一些完整的神经网络模型 \u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n    \u003Ctd>\u003Cb> fastNLP.modules \u003C\u002Fb>\u003C\u002Ftd>\n    \u003Ctd> 实现了用于搭建神经网络模型的诸多组件 \u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n    \u003Ctd>\u003Cb> fastNLP.embeddings \u003C\u002Fb>\u003C\u002Ftd>\n    \u003Ctd> 实现了将序列index转为向量序列的功能，包括读取预训练embedding等 \u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n    \u003Ctd>\u003Cb> fastNLP.io \u003C\u002Fb>\u003C\u002Ftd>\n    \u003Ctd> 实现了读写功能，包括数据读入与预处理，模型读写，数据与模型自动下载等 \u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftable>\n\n\u003Chr>","# fastNLP 快速上手指南\n\nfastNLP 是一款轻量级的自然语言处理（NLP）工具包，旨在减少数据处理、训练循环及多卡运行等工程型代码。它支持 PyTorch、PaddlePaddle 等多种深度学习框架后端，具备便捷、高效和兼容的特性。\n\n## 环境准备\n\n*   **系统要求**：支持 Linux、macOS 和 Windows。\n*   **Python 版本**：建议 Python 3.7 及以上。\n*   **前置依赖**：\n    *   需先安装对应的深度学习框架（如 `torch>=1.6.0` 或 `paddle>=2.2.0` + `paddlenlp>=2.3.3`）。\n    *   fastNLP 1.0.0+ 版本重构了架构，与旧版本（0.x）不完全兼容，请根据项目需求选择版本。\n\n## 安装步骤\n\n### 1. 安装 fastNLP\n推荐使用 pip 安装最新稳定版（1.0.0+）：\n\n```shell\npip install fastNLP>=1.0.0alpha\n```\n\n若需使用旧版本（如 0.7.1），请指定版本号：\n\n```shell\npip install fastNLP==0.7.1\n```\n\n> **提示**：国内用户可使用清华源加速安装：\n> `pip install fastNLP>=1.0.0alpha -i https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple`\n\n### 2. 安装深度学习后端\n根据你选择的框架安装相应依赖（以 PyTorch 为例）：\n\n```shell\npip install torch>=1.6.0\n```\n\n## 基本使用\n\n以下是一个基于 **PyTorch** 的中文文本分类最小示例，展示了从数据加载、预处理到训练评估的全流程。\n\n### 示例：中文情感分析 (ChnSentiCorp)\n\n```python\nfrom fastNLP.io import ChnSentiCorpLoader\nfrom functools import partial\nfrom fastNLP import cache_results\nfrom fastNLP.transformers.torch import BertTokenizer\n\n# 1. 数据准备与缓存\n# 使用 cache_results 装饰器自动缓存处理后的数据，避免重复预处理\n@cache_results('caches\u002Fcache.pkl')\ndef prepare_data():\n    # 自动下载数据集，包含 \"raw_words\" 和 \"target\" 字段\n    data_bundle = ChnSentiCorpLoader().load()\n    \n    # 加载分词器并进行 Tokenize\n    tokenizer = BertTokenizer.from_pretrained('hfl\u002Fchinese-bert-wwm')\n    tokenize = partial(tokenizer, max_length=256)\n    \n    # 多进程加速数据处理，新增 \"input_ids\", \"attention_mask\" 等字段\n    data_bundle.apply_field_more(tokenize, field_name='raw_chars', num_proc=4)\n    \n    # 转换标签格式\n    data_bundle.apply_field(int, field_name='target', new_field_name='labels')\n    return data_bundle\n\ndata_bundle = prepare_data()\n\n# 2. 模型与优化器初始化\nfrom fastNLP.transformers.torch import BertForSequenceClassification\nfrom torch import optim\n\nmodel = BertForSequenceClassification.from_pretrained('hfl\u002Fchinese-bert-wwm')\noptimizer = optim.AdamW(model.parameters(), lr=2e-5)\n\n# 3. 构建 DataLoader\nfrom fastNLP import prepare_dataloader\ndls = prepare_dataloader(data_bundle, batch_size=32)\n\n# 4. 配置训练器\nfrom fastNLP import Trainer, Accuracy, LoadBestModelCallback, TorchWarmupCallback, Event\n\ncallbacks = [\n    TorchWarmupCallback(warmup=0.1, schedule='linear'),  # 学习率预热\n    LoadBestModelCallback()  # 保存最佳模型\n]\n\n# 自定义回调：每 10 个 batch 打印一次 loss\n@Trainer.on(Event.on_before_backward())\ndef print_loss(trainer, outputs):\n    if trainer.global_forward_batches % 10 == 0:\n        print(outputs.loss.item())\n\ntrainer = Trainer(\n    model=model, \n    train_dataloader=dls['train'], \n    optimizers=optimizer,\n    device=0,  # 指定 GPU 设备\n    evaluate_dataloaders=dls['dev'], \n    metrics={'acc': Accuracy()},\n    callbacks=callbacks, \n    monitor='acc#acc',\n    n_epochs=5,\n    # 字段映射：将 dataloader 的 labels 映射为 metric 需要的 target，logits 映射为 pred\n    evaluate_input_mapping={'labels': 'target'},\n    evaluate_output_mapping={'logits': 'pred'}\n)\n\n# 5. 开始训练\ntrainer.run()\n\n# 6. 测试集评估\nfrom fastNLP import Evaluator\nevaluator = Evaluator(\n    model=model, \n    dataloaders=dls['test'], \n    metrics={'acc': Accuracy()},\n    output_mapping={'logits': 'pred'},\n    input_mapping={'labels': 'target'}\n)\nevaluator.run()\n```\n\n### 核心特性说明\n*   **便捷数据处理**：通过 `apply_field` 和 `apply_field_more` 避免手动循环，支持多进程加速。\n*   **灵活训练控制**：`Trainer` 支持通过 `Event` 在训练的不同阶段（如反向传播前）插入自定义逻辑。\n*   **自动字段映射**：通过 `input_mapping` 和 `output_mapping` 解耦模型输出与评估指标所需的字段名称。\n\n更多详细教程请参考 [fastNLP 官方文档](http:\u002F\u002Fwww.fastnlp.top\u002Fdocs\u002FfastNLP\u002Fmaster\u002Findex.html)。","某电商数据团队需要快速构建一个中文评论情感分析模型，以实时监控用户对新品的反馈。\n\n### 没有 fastNLP 时\n- **数据处理繁琐**：编写大量原生 Python 循环和多重进程代码来清洗文本及分词，容易出错且难以维护。\n- **训练逻辑重复**：每次实验都需手动重写训练循环、梯度回传及多卡并行逻辑，工程代码占比过高。\n- **性能优化困难**：若想开启 FP16 混合精度训练或 ZeRO 显存优化，必须深入修改底层代码，门槛极高。\n- **调试监控缺失**：缺乏内置机制在训练特定节点（如反向传播前）自动打印 Loss 或保存最优模型，依赖人工插桩。\n\n### 使用 fastNLP 后\n- **处理高效便捷**：利用 `apply_field_more` 函数配合多进程参数，一行代码即可完成批量分词与特征提取，自动缓存结果避免重复计算。\n- **训练开箱即用**：通过 `Trainer` 类直接封装训练流程，无需改动核心逻辑即可一键切换单卡、多卡或 FP16 模式。\n- **灵活定制回调**：借助 `Event` 机制和 `Callback` 系统，轻松实现在每 10 个 batch 自动打印 Loss 或训练结束后自动加载最佳模型。\n- **评估标准化**：使用 `Evaluator` 统一测试流程，通过简单的字段映射配置即可解决模型输出与指标输入名称不一致的问题。\n\nfastNLP 将开发者从重复的工程样板代码中解放出来，使其能专注于算法策略本身，显著缩短从数据到模型的落地周期。","https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Ffastnlp_fastNLP_f8d741a8.png","fastnlp","https:\u002F\u002Foss.gittoolsai.com\u002Favatars\u002Ffastnlp_a030d277.png","由复旦大学的自然语言处理（NLP）团队发起的国产自然语言处理开源项目",null,"xpqiu@fudan.edu.cn","https:\u002F\u002Fgithub.com\u002Ffastnlp",[79,83],{"name":80,"color":81,"percentage":82},"Python","#3572A5",85.7,{"name":84,"color":85,"percentage":86},"Jupyter Notebook","#DA5B0B",14.3,3147,450,"2026-03-22T14:57:21","Apache-2.0","","未说明（支持多卡运行、FP16 切换及 ZeRO 优化，暗示需要 NVIDIA GPU，但无具体型号或显存要求）","未说明",{"notes":95,"python":93,"dependencies":96},"fastNLP 1.0.0 之后版本架构重构，与旧版本不兼容。支持多种深度学习框架后端（包括 PyTorch、PaddlePaddle、OneFlow、Jittor），需根据所选框架单独安装对应的深度学习库及版本。",[97,98,99,100],"fastNLP>=1.0.0alpha","torch>=1.6.0 (PyTorch 后端)","paddle>=2.2.0 (PaddlePaddle 后端)","paddlenlp>=2.3.3 (PaddlePaddle 后端)",[35,14],[103,104,105,106,107,108,109],"natural-language-processing","deep-learning","nlp-library","nlp-parsing","chinese-nlp","text-classification","text-processing","2026-03-27T02:49:30.150509","2026-04-08T01:49:12.015866",[113,118,123,128,133,138,143],{"id":114,"question_zh":115,"answer_zh":116,"source_url":117},23520,"使用多 GPU 训练时出现 Tensor 维度错误，如何解决？","这通常是因为在模型的 forward 函数中处理 padding 时 max_len 设置不当。解决方法是动态获取输入 tensor 的 shape 来设置 max_len。例如：`mask = seq_len_to_mask(seq_len, max_len=max_seq_len)`，其中 `max_seq_len` 应通过传入的 words（形状为 batch_size x max_len 的 tensor）的 shape 来获取，而不是硬编码。","https:\u002F\u002Fgithub.com\u002Ffastnlp\u002FfastNLP\u002Fissues\u002F331",{"id":119,"question_zh":120,"answer_zh":121,"source_url":122},23521,"使用 Predictor 加载模型预测新数据时出现 'CUDA error: device-side assert triggered' 或维度不匹配错误，原因是什么？","这是因为预测数据中出现了训练时未见过的字符（新词），导致实际维度大于模型初始化时的 Vocab 维度。解决方案是：必须保存训练时的 vocab，在预测时先使用该 vocab 对新数据进行 index，将未出现的词标记为 unknown，然后再送入模型预测。不要直接在预测阶段将新词加入 vocab，因为模型权重中不存在这些新词的向量。","https:\u002F\u002Fgithub.com\u002Ffastnlp\u002FfastNLP\u002Fissues\u002F287",{"id":124,"question_zh":125,"answer_zh":126,"source_url":127},23522,"导入 fastNLP 时出现 'SyntaxError: invalid syntax' 错误怎么办？","该错误通常是因为 Python 版本过低导致的。fastNLP 使用了 f-string 等语法特性，需要 Python 3.6 或更高版本。如果使用的是 Python 3.5 或更低版本，请升级到 Python 3.6+ 并重新安装 fastNLP。","https:\u002F\u002Fgithub.com\u002Ffastnlp\u002FfastNLP\u002Fissues\u002F160",{"id":129,"question_zh":130,"answer_zh":131,"source_url":132},23523,"遇到 'ImportError: cannot import name ... from fastNLP.modules.utils' 这类导入错误如何解决？","这通常是由于安装的 fastNLP 版本与代码不匹配造成的。建议先卸载当前版本（`pip uninstall fastNLP`），然后安装最新版源码（`pip install git+https:\u002F\u002Fgithub.com\u002Ffastnlp\u002FfastNLP`）。如果特定版本（如 0.5.0）才能运行某些旧代码，请明确指定版本安装。另外，部分工具函数可能位于 `fastNLP.io.file_utils` 而非 `modules.utils`，请检查导入路径。","https:\u002F\u002Fgithub.com\u002Ffastnlp\u002FfastNLP\u002Fissues\u002F333",{"id":134,"question_zh":135,"answer_zh":136,"source_url":137},23524,"如何在 fastNLP 中集成超参数搜索工具（如 Ray, Optuna）进行多卡训练？","在多卡（DDP）模式下，每个子进程会重新运行主脚本。为了共享超参数搜索结果，需要在创建 study 时配置 storage 参数并设置 `load_if_exists=True`。这样其他进程启动时会加载主进程生成的参数状态，避免从头开始。参考 Optuna 的 PyTorch DDP 示例进行配置。注意：如果模型代码报错，Ray 可能不会直接在控制台显示详细错误，需查看 Ray 生成的 error.txt 文件。","https:\u002F\u002Fgithub.com\u002Ffastnlp\u002FfastNLP\u002Fissues\u002F409",{"id":139,"question_zh":140,"answer_zh":141,"source_url":142},23525,"fastNLP 的命令行参数（argparse）应该包含哪些内容？","建议 argparse 仅用于处理与**文件路径**相关的参数（如配置文件路径、数据目录等）。所有关于模型结构、训练超参数的配置都应写在配置文件中，不要通过 argparse 传递。这样可以避免维护两套参数配置系统，降低出错风险。","https:\u002F\u002Fgithub.com\u002Ffastnlp\u002FfastNLP\u002Fissues\u002F30",{"id":144,"question_zh":145,"answer_zh":146,"source_url":147},23526,"Star-Transformer 模型复现结果与论文相差较大，是否有完整代码？","官方已确认该问题，并表示会在 fastNLP 0.5 版本中正式更新完整的、可复现结果的 Star-Transformer 代码。建议升级至 0.5 或更高版本以获取修复后的实现。","https:\u002F\u002Fgithub.com\u002Ffastnlp\u002FfastNLP\u002Fissues\u002F148",[149,154,159,164,169,173,177],{"id":150,"version":151,"summary_zh":152,"released_at":153},145046,"v0.6.0","2020年秋季的稳定版本，欢迎关注我们的 [文档](http:\u002F\u002Fdocument.fastnlp.top\u002Fdocs\u002FfastNLP\u002F) 和 [Gitee 仓库](https:\u002F\u002Fgitee.com\u002Ffastnlp\u002FfastNLP)。","2020-11-06T15:31:29",{"id":155,"version":156,"summary_zh":157,"released_at":158},145047,"v0.5.0","0.5.0版本进行了较大改动，新增了很多功能。大家可以通过[文档](https:\u002F\u002Ffastnlp.readthedocs.io\u002Fzh\u002Flatest\u002Findex.html)进一步了解这些更新。\r\n\r\n0.5.0版本有大量改动，并增加了许多功能。您可以通过我们的[文档](https:\u002F\u002Ffastnlp.readthedocs.io\u002Fzh\u002Flatest\u002Findex.html)了解这些更新内容。","2019-10-11T16:43:41",{"id":160,"version":161,"summary_zh":162,"released_at":163},145048,"v0.4.1","我们终于发布了fastNLP的0.4版本，这个版本的改动较大，大家请阅读我们的[文档](https:\u002F\u002Ffastnlp.readthedocs.io\u002Fzh\u002Fv0.4.1\u002F)。","2019-05-22T10:49:48",{"id":165,"version":166,"summary_zh":167,"released_at":168},145049,"v0.3.1","新特性：\n- 添加了一系列回调函数：EarlyStopCallback、LRFinder、LRScheduler 等。\n- 添加了填充器，支持自定义填充方法（`EngChar2dPadder` 解决二维填充问题）。\n- 扩展了 `DataSet` 初始化支持的输入类型。\n- 多进程批处理。\n- 升级了中文分词\u002F词性标注\u002F句法分析 API。\n- 添加了 BERT 及预训练模型加载接口。\n\n修复的 bug：\n- 验证步骤计数问题。\n- 保存时移除 GPU ID。\n- 重构 `FieldArray` 中的类型系统。\n- ……\n\n代码结构优化：\n- 减少了对 `reproduction\u002F` 模块的依赖。\n- 重命名文件夹。\n- 优化了 Trainer 类的方法。\n\n测试：\n- 增加了对回调函数的测试。\n- 增加了对数据处理器的更多测试。\n\n教程：\n- 添加了一份关于填充的教程。\n- 添加了一份测试指南。","2019-02-06T02:42:45",{"id":170,"version":171,"summary_zh":75,"released_at":172},145050,"v0.3.0","2019-01-14T01:08:46",{"id":174,"version":175,"summary_zh":75,"released_at":176},145051,"v0.2.0","2018-12-07T12:17:07",{"id":178,"version":179,"summary_zh":75,"released_at":180},145052,"v0.1.0","2018-10-01T13:54:52"]