[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"similar-jiangxinyang227--textClassifier":3,"tool-jiangxinyang227--textClassifier":65},[4,17,27,35,43,56],{"id":5,"name":6,"github_repo":7,"description_zh":8,"stars":9,"difficulty_score":10,"last_commit_at":11,"category_tags":12,"status":16},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 真正成长为懂上",159636,2,"2026-04-17T23:33:34",[13,14,15],"开发框架","Agent","语言模型","ready",{"id":18,"name":19,"github_repo":20,"description_zh":21,"stars":22,"difficulty_score":23,"last_commit_at":24,"category_tags":25,"status":16},4487,"LLMs-from-scratch","rasbt\u002FLLMs-from-scratch","LLMs-from-scratch 是一个基于 PyTorch 的开源教育项目，旨在引导用户从零开始一步步构建一个类似 ChatGPT 的大型语言模型（LLM）。它不仅是同名技术著作的官方代码库，更提供了一套完整的实践方案，涵盖模型开发、预训练及微调的全过程。\n\n该项目主要解决了大模型领域“黑盒化”的学习痛点。许多开发者虽能调用现成模型，却难以深入理解其内部架构与训练机制。通过亲手编写每一行核心代码，用户能够透彻掌握 Transformer 架构、注意力机制等关键原理，从而真正理解大模型是如何“思考”的。此外，项目还包含了加载大型预训练权重进行微调的代码，帮助用户将理论知识延伸至实际应用。\n\nLLMs-from-scratch 特别适合希望深入底层原理的 AI 开发者、研究人员以及计算机专业的学生。对于不满足于仅使用 API，而是渴望探究模型构建细节的技术人员而言，这是极佳的学习资源。其独特的技术亮点在于“循序渐进”的教学设计：将复杂的系统工程拆解为清晰的步骤，配合详细的图表与示例，让构建一个虽小但功能完备的大模型变得触手可及。无论你是想夯实理论基础，还是为未来研发更大规模的模型做准备",90106,3,"2026-04-06T11:19:32",[15,26,14,13],"图像",{"id":28,"name":29,"github_repo":30,"description_zh":31,"stars":32,"difficulty_score":10,"last_commit_at":33,"category_tags":34,"status":16},8553,"spec-kit","github\u002Fspec-kit","Spec Kit 是一款专为提升软件开发效率而设计的开源工具包，旨在帮助团队快速落地“规格驱动开发”（Spec-Driven Development）模式。传统开发中，需求文档往往与代码实现脱节，导致沟通成本高且结果不可控；而 Spec Kit 通过将规格说明书转化为可执行的指令，让 AI 直接依据明确的业务场景生成高质量代码，从而减少从零开始的随意编码，确保产出结果的可预测性。\n\n该工具特别适合希望利用 AI 辅助编程的开发者、技术负责人及初创团队。无论是启动全新项目还是在现有工程中引入规范化流程，用户只需通过简单的命令行操作，即可初始化项目并集成主流的 AI 编程助手。其核心技术亮点在于“规格即代码”的理念，支持社区扩展与预设模板，允许用户根据特定技术栈定制开发流程。此外，Spec Kit 强调官方维护的安全性，提供稳定的版本管理，帮助开发者在享受 AI 红利的同时，依然牢牢掌握架构设计的主动权，真正实现从“凭感觉写代码”到“按规格建系统”的转变。",88749,"2026-04-17T09:48:14",[15,26,14,13],{"id":36,"name":37,"github_repo":38,"description_zh":39,"stars":40,"difficulty_score":10,"last_commit_at":41,"category_tags":42,"status":16},3704,"NextChat","ChatGPTNextWeb\u002FNextChat","NextChat 是一款轻量且极速的 AI 助手，旨在为用户提供流畅、跨平台的大模型交互体验。它完美解决了用户在多设备间切换时难以保持对话连续性，以及面对众多 AI 模型不知如何统一管理的痛点。无论是日常办公、学习辅助还是创意激发，NextChat 都能让用户随时随地通过网页、iOS、Android、Windows、MacOS 或 Linux 端无缝接入智能服务。\n\n这款工具非常适合普通用户、学生、职场人士以及需要私有化部署的企业团队使用。对于开发者而言，它也提供了便捷的自托管方案，支持一键部署到 Vercel 或 Zeabur 等平台。\n\nNextChat 的核心亮点在于其广泛的模型兼容性，原生支持 Claude、DeepSeek、GPT-4 及 Gemini Pro 等主流大模型，让用户在一个界面即可自由切换不同 AI 能力。此外，它还率先支持 MCP（Model Context Protocol）协议，增强了上下文处理能力。针对企业用户，NextChat 提供专业版解决方案，具备品牌定制、细粒度权限控制、内部知识库整合及安全审计等功能，满足公司对数据隐私和个性化管理的高标准要求。",87618,"2026-04-05T07:20:52",[13,15],{"id":44,"name":45,"github_repo":46,"description_zh":47,"stars":48,"difficulty_score":10,"last_commit_at":49,"category_tags":50,"status":16},2268,"ML-For-Beginners","microsoft\u002FML-For-Beginners","ML-For-Beginners 是由微软推出的一套系统化机器学习入门课程，旨在帮助零基础用户轻松掌握经典机器学习知识。这套课程将学习路径规划为 12 周，包含 26 节精炼课程和 52 道配套测验，内容涵盖从基础概念到实际应用的完整流程，有效解决了初学者面对庞大知识体系时无从下手、缺乏结构化指导的痛点。\n\n无论是希望转型的开发者、需要补充算法背景的研究人员，还是对人工智能充满好奇的普通爱好者，都能从中受益。课程不仅提供了清晰的理论讲解，还强调动手实践，让用户在循序渐进中建立扎实的技能基础。其独特的亮点在于强大的多语言支持，通过自动化机制提供了包括简体中文在内的 50 多种语言版本，极大地降低了全球不同背景用户的学习门槛。此外，项目采用开源协作模式，社区活跃且内容持续更新，确保学习者能获取前沿且准确的技术资讯。如果你正寻找一条清晰、友好且专业的机器学习入门之路，ML-For-Beginners 将是理想的起点。",85092,"2026-04-10T11:13:16",[26,51,52,53,14,54,15,13,55],"数据工具","视频","插件","其他","音频",{"id":57,"name":58,"github_repo":59,"description_zh":60,"stars":61,"difficulty_score":62,"last_commit_at":63,"category_tags":64,"status":16},5784,"funNLP","fighting41love\u002FfunNLP","funNLP 是一个专为中文自然语言处理（NLP）打造的超级资源库，被誉为\"NLP 民工的乐园”。它并非单一的软件工具，而是一个汇集了海量开源项目、数据集、预训练模型和实用代码的综合性平台。\n\n面对中文 NLP 领域资源分散、入门门槛高以及特定场景数据匮乏的痛点，funNLP 提供了“一站式”解决方案。这里不仅涵盖了分词、命名实体识别、情感分析、文本摘要等基础任务的标准工具，还独特地收录了丰富的垂直领域资源，如法律、医疗、金融行业的专用词库与数据集，甚至包含古诗词生成、歌词创作等趣味应用。其核心亮点在于极高的全面性与实用性，从基础的字典词典到前沿的 BERT、GPT-2 模型代码，再到高质量的标注数据和竞赛方案，应有尽有。\n\n无论是刚刚踏入 NLP 领域的学生、需要快速验证想法的算法工程师，还是从事人工智能研究的学者，都能在这里找到急需的“武器弹药”。对于开发者而言，它能大幅减少寻找数据和复现模型的时间；对于研究者，它提供了丰富的基准测试资源和前沿技术参考。funNLP 以开放共享的精神，极大地降低了中文自然语言处理的开发与研究成本，是中文 AI 社区不可或缺的宝藏仓库。",79857,1,"2026-04-08T20:11:31",[15,51,54],{"id":66,"github_repo":67,"name":68,"description_en":69,"description_zh":70,"ai_summary_zh":71,"readme_en":72,"readme_zh":73,"quickstart_zh":74,"use_case_zh":75,"hero_image_url":76,"owner_login":77,"owner_name":78,"owner_avatar_url":79,"owner_bio":78,"owner_company":78,"owner_location":78,"owner_email":78,"owner_twitter":78,"owner_website":78,"owner_url":80,"languages":81,"stars":94,"forks":95,"last_commit_at":96,"license":78,"difficulty_score":97,"env_os":98,"env_gpu":99,"env_ram":98,"env_deps":100,"category_tags":105,"github_topics":78,"view_count":10,"oss_zip_url":78,"oss_zip_packed_at":78,"status":16,"created_at":106,"updated_at":107,"faqs":108,"releases":138},8824,"jiangxinyang227\u002FtextClassifier","textClassifier","tensorflow implementation","textClassifier 是一个基于 TensorFlow 构建的开源文本分类项目，旨在为开发者提供一套完整且多样的深度学习模型实现方案。它主要解决了在自然语言处理（NLP）任务中，如何针对不同场景选择合适模型进行高效情感分析与文本归类的问题，特别适用于需要快速验证算法效果或深入理解模型原理的技术人员。\n\n该项目不仅涵盖了经典的 textCNN、charCNN 和双向 LSTM（Bi-LSTM）架构，还集成了引入注意力机制（Attention）、递归卷积神经网络（RCNN）以及对抗训练（Adversarial Training）等进阶模型。更值得一提的是，textClassifier 紧跟技术前沿，提供了 Transformer 编码器结构以及 ELMo 动态词向量预训练模型的落地代码，帮助用户探索从传统统计方法到现代预训练大模型的技术演进。\n\n项目以 IMDB 电影评论情感分析为例，详细展示了从数据清洗、Word2Vec 词向量训练到模型构建与评估的全流程。无论是希望入门深度学习的学生、需要复现论文算法的研究人员，还是寻求工程化参考的后端开发者，都能通过 textClassifi","textClassifier 是一个基于 TensorFlow 构建的开源文本分类项目，旨在为开发者提供一套完整且多样的深度学习模型实现方案。它主要解决了在自然语言处理（NLP）任务中，如何针对不同场景选择合适模型进行高效情感分析与文本归类的问题，特别适用于需要快速验证算法效果或深入理解模型原理的技术人员。\n\n该项目不仅涵盖了经典的 textCNN、charCNN 和双向 LSTM（Bi-LSTM）架构，还集成了引入注意力机制（Attention）、递归卷积神经网络（RCNN）以及对抗训练（Adversarial Training）等进阶模型。更值得一提的是，textClassifier 紧跟技术前沿，提供了 Transformer 编码器结构以及 ELMo 动态词向量预训练模型的落地代码，帮助用户探索从传统统计方法到现代预训练大模型的技术演进。\n\n项目以 IMDB 电影评论情感分析为例，详细展示了从数据清洗、Word2Vec 词向量训练到模型构建与评估的全流程。无论是希望入门深度学习的学生、需要复现论文算法的研究人员，还是寻求工程化参考的后端开发者，都能通过 textClassifier 获得清晰的代码指引和扎实的实践基础，轻松上手各类主流文本分类任务。","### 文本分类项目\n***\n**本项目为基于CNN，RNN 和NLP中预训练模型构建的多个常见的文本分类模型。**\n\n#### requirements\n* python==3.5.6\n* tensorflow-gpu==1.10.0\n\n#### 1. 数据集\n&ensp;&ensp;数据集为IMDB电影评论的情感分析数据集，总共有三个部分：\n* 带标签的训练集：labeledTrainData.tsv\n* 不带标签的训练集：unlabeledTrainData.tsv\n* 测试集：testData.tsv\n\n&ensp;&ensp;字段的含义：\n* id  电影评论的id\n* review  电影评论的内容\n* sentiment  情感分类的标签（只有labeledTrainData.tsv数据集中有）\n\n#### 2. 数据预处理 \n&ensp;&ensp;数据预处理方法\u002FdataHelper\u002FprocessData.ipynb\n\n&ensp;&ensp;将原始数据处理成干净的数据，处理后的数据存储在\u002Fdata\u002FpreProcess下，数据预处理包括：\n* 去除各种标点符号\n* 生成训练word2vec模型的输入数据 \u002Fdata\u002FpreProcess\u002FwordEmbedding.txt\n\n#### 3. 训练word2vec词向量\n&ensp;&ensp;预训练word2vec词向量\u002Fword2vec\u002FgenWord2Vec.ipynb\n* 预训练的词向量保存为bin格式 \u002Fword2vec\u002Fword2Vec.bin\n\n#### 4. textCNN 文本分类\n&ensp;&ensp;textCNN模型来源于论文[Convolutional Neural Networks for Sentence Classification](https:\u002F\u002Farxiv.org\u002Fabs\u002F1408.5882)\n\n&ensp;&ensp;textCNN可以看作是一个由三个单层的卷积网络的输出结果进行拼接的融合模型，作者提出了三种大小的卷积核[3, 4, 5]，卷积核的滑动使得其\n类似于NLP中的n-grams，因此当你需要更多尺度的n-grams时，你可以选择增加不同大小的卷积核，比如大小为2的卷积核可以代表\n2-grams.\n\n&ensp;&ensp;textCNN代码在\u002FtextCNN\u002FtextCNN.ipynb。实现包括四个部分：\n* 参数配置类 Config （包括训练参数，模型参数和其他参数）\n* 数据预处理类 Dataset （包括生成词汇空间，获得预训练词向量，分割训练集和验证集）\n* textCNN模型类 TextCNN\n* 模型训练\n\n#### 5. charCNN 文本分类\n&ensp;&ensp;textCNN模型来源于论文[Character-level Convolutional Networks for Text\nClassification](https:\u002F\u002Farxiv.org\u002Fabs\u002F1509.01626)\n\n&ensp;&ensp;char-CNN是一种基于字符级的文本分类器，将所有的文本都用字符表示，\n*注意这里的数据预处理时不可以去掉标点符号或者其他的各种符号，最好是保存论文中提出的69种字符，我一开始使用去掉特殊符号的字符后的文本输入到模型中会无法收敛*。\n此外由于训练数据集比较少，即使论文中最小的网络也无法收敛，此时可以减小模型的复杂度，包括去掉一些卷积层等。\n\n&ensp;&ensp;charCNN代码在\u002FcharCNN\u002FcharCNN.ipynb。实现也包括四个部分，也textCNN一致，但是在这里的数据预处理有很大不一样，剩下\n的就是模型结构不同，此外模型中可以引入BN层来对每一层的输出做归一化处理。\n\n#### 6. Bi-LSTM 文本分类\n&ensp;&ensp;Bi-LSTM可以参考我的博客[深度学习之从RNN到LSTM](https:\u002F\u002Fwww.cnblogs.com\u002Fjiangxinyang\u002Fp\u002F9362922.html)\n\n&ensp;&ensp;Bi-LSTM是双向LSTM，LSTM是RNN的一种，是一种时序模型，Bi-LSTM是双向LSTM，旨在同时捕获文本中上下文的信息，\n在情感分析类的问题中有良好的表现。\n\n&ensp;&ensp;Bi-LSTM的代码在\u002FBi-LSTM\u002FBi-LSTM.ipynb中。除了模型类的代码有改动，其余代码几乎和textCNN一样。\n\n#### 7. Bi-LSTM + Attention 文本分类\n&ensp;&ensp;Bi-LSTM + Attention模型来源于论文[Attention-Based Bidirectional Long Short-Term Memory Networks for\nRelation Classification](http:\u002F\u002Faclweb.org\u002Fanthology\u002FY\u002FY15\u002FY15-1009.pdf)\n\n&ensp;&ensp;Bi-LSTM + Attention 就是在Bi-LSTM的模型上加入Attention层，在Bi-LSTM中我们会用最后一个时序的输出向量\n作为特征向量，然后进行softmax分类。Attention是先计算每个时序的权重，然后将所有时序\n的向量进行加权和作为特征向量，然后进行softmax分类。在实验中，加上Attention确实对结果有所提升。\n\n&ensp;&ensp;Bi-LSTM + Attention的代码在\u002FBi-LSTM+Attention\u002FBi-LSTMAttention.ipynb中，除了模型类中\n加入Attention层，其余代码和Bi-LSTM一致。\n\n#### 8. RCNN 文本分类\n&ensp;&ensp;RCNN模型来源于论文[Recurrent Convolutional Neural Networks for Text Classification](https:\u002F\u002Farxiv.org\u002Fabs\u002F1609.04243)\n\n&ensp;&ensp;RCNN 整体的模型构建流程如下：\n* 利用Bi-LSTM获得上下文的信息，类似于语言模型\n* 将Bi-LSTM获得的隐层输出和词向量拼接[fwOutput, wordEmbedding, bwOutput]\n* 将拼接后的向量非线性映射到低维\n* 向量中的每一个位置的值都取所有时序上的最大值，得到最终的特征向量，该过程类似于max-pool\n* softmax分类\n\n&ensp;&ensp;RCNN的代码在\u002FRCNN\u002FRCNN.ipynb中。\n\n#### 9. adversarialLSTM 文本分类\n&ensp;&ensp;Adversarial LSTM模型来源于论文[Adversarial Training Methods\nFor Semi-Supervised Text Classification](https:\u002F\u002Farxiv.org\u002Fabs\u002F1605.07725)\n\n&ensp;&ensp;adversarialLSTM的核心思想是通过对word Embedding上添加噪音生成对抗样本，将对抗样本以和原始样本\n同样的形式喂给模型，得到一个Adversarial Loss，通过和原始样本的loss相加得到新的损失，通过优化该新\n的损失来训练模型，作者认为这种方法能对word embedding加上正则化，避免过拟合。\n\n&ensp;&ensp;adversarialLSTM的代码在\u002FadversarialLSTM\u002FadversarialLSTM.ipynb中。\n\n#### 10. Transformer 文本分类\n&ensp;&ensp;Transformer模型来源于论文[Attention Is All You Need](https:\u002F\u002Farxiv.org\u002Fabs\u002F1706.03762)\n\n&ensp;&ensp;Transformer模型有两个结构：Encoder和Decoder，在进行文本分类时只需要用到\nEncoder结构，Decoder结构是生成式模型，用于自然语言生成的。Transformer的核心结构是\nself-Attention机制，具体的介绍见[Transformer模型（Atention is all you need）](https:\u002F\u002Fwww.cnblogs.com\u002Fjiangxinyang\u002Fp\u002F10069330.html)。\n\n&ensp;&ensp;Transformer模型的代码在\u002FTransformer\u002Ftransformer.ipynb中。\n\n#### 11. ELMo预训练模型 文本分类\n&ensp;&ensp;ELMo模型来源于论文[Deep contextualized word representations](https:\u002F\u002Farxiv.org\u002Fabs\u002F1802.05365?context=cs)\n\n&ensp;&ensp;ELMo的结构是BiLM（双向语言模型），基于ELMo的预训练模型能动态地生成\n词的向量表示，具体的介绍见[ELMO模型（Deep contextualized word representation）](https:\u002F\u002Fwww.cnblogs.com\u002Fjiangxinyang\u002Fp\u002F10060887.html)\n\n&ensp;&ensp;ELMo预训练模型用于文本分类的代码位于\u002FELMo\u002Felmo.ipynb中。\n\u002FELMo\u002Fbilm\u002F下是ELMo项目中的源码，\u002FELMo\u002FmodelParams\u002F下是各种文件。\n\n#### 12. Bert预训练模型 文本分类\n&ensp;&ensp;BERT模型来源于论文[BERT: Pre-training of Deep Bidirectional Transformers for\nLanguage Understanding](https:\u002F\u002Farxiv.org\u002Fabs\u002F1810.04805)\n\n&ensp;&ensp;BERT模型是基于双向Transformer实现的语言模型，集预训练和下游任务于一个模型中，\n因此在使用的时候我们不需要搭建自己的下游任务模型，直接用BERT模型即可，我们将谷歌开源的源码下载\n下来放在bert文件夹中，在进行文本分类只需要修改run_classifier.py文件即可，另外我们需要将训练集\n和验证集分割后保存在两个不同的文件中，放置在\u002FBERT\u002Fdata下。然后还需要下载谷歌预训练好的模型放置在\n\u002FBERT\u002FmodelParams文件夹下，还需要建一个\u002FBERT\u002Foutput文件夹用来放置训练后的模型文件\n\n&ensp;&ensp;做完上面的步骤之后只要执行下面的脚本即可\n\n&ensp;&ensp;export BERT_BASE_DIR=..\u002FmodelParams\u002Funcased_L-12_H-768_A-12\n\n&ensp;&ensp;export DATASET=..\u002Fdata\u002F\n\n&ensp;&ensp;python run_classifier.py \\\n  &ensp;&ensp;&ensp;&ensp;--data_dir=$MY_DATASET \\\n  &ensp;&ensp;&ensp;&ensp;--task_name=imdb \\\n  &ensp;&ensp;&ensp;&ensp;--vocab_file=$BERT_BASE_DIR\u002Fvocab.txt \\\n  &ensp;&ensp;&ensp;&ensp;--bert_config_file=$BERT_BASE_DIR\u002Fbert_config.json \\\n  &ensp;&ensp;&ensp;&ensp;--output_dir=..\u002Foutput\u002F \\\n  &ensp;&ensp;&ensp;&ensp;--do_train=true \\\n  &ensp;&ensp;&ensp;&ensp;--do_eval=true \\\n  &ensp;&ensp;&ensp;&ensp;--init_checkpoint=$BERT_BASE_DIR\u002Fbert_model.ckpt \\\n  &ensp;&ensp;&ensp;&ensp;--max_seq_length=200 \\\n  &ensp;&ensp;&ensp;&ensp;--train_batch_size=16 \\\n  &ensp;&ensp;&ensp;&ensp;--learning_rate=5e-5\\\n  &ensp;&ensp;&ensp;&ensp;--num_train_epochs=3.0\n\n&ensp;&ensp;BERT模型用于文本分类的详细使用可以看我的博客\n[文本分类实战（十）—— BERT 预训练模型](https:\u002F\u002Fwww.cnblogs.com\u002Fjiangxinyang\u002Fp\u002F10241243.html)\n\n\n","### 文本分类项目\n***\n**本项目基于CNN、RNN以及NLP中的预训练模型，构建了多个常见的文本分类模型。**\n\n#### requirements\n* python==3.5.6\n* tensorflow-gpu==1.10.0\n\n#### 1. 数据集\n&ensp;&ensp;数据集为IMDB电影评论的情感分析数据集，总共有三个部分：\n* 带标签的训练集：labeledTrainData.tsv\n* 不带标签的训练集：unlabeledTrainData.tsv\n* 测试集：testData.tsv\n\n&ensp;&ensp;字段的含义：\n* id  电影评论的id\n* review  电影评论的内容\n* sentiment  情感分类的标签（只有labeledTrainData.tsv数据集中有）\n\n#### 2. 数据预处理 \n&ensp;&ensp;数据预处理方法\u002FdataHelper\u002FprocessData.ipynb\n\n&ensp;&ensp;将原始数据处理成干净的数据，处理后的数据存储在\u002Fdata\u002FpreProcess下，数据预处理包括：\n* 去除各种标点符号\n* 生成训练word2vec模型的输入数据 \u002Fdata\u002FpreProcess\u002FwordEmbedding.txt\n\n#### 3. 训练word2vec词向量\n&ensp;&ensp;预训练word2vec词向量\u002Fword2vec\u002FgenWord2Vec.ipynb\n* 预训练的词向量保存为bin格式 \u002Fword2vec\u002Fword2Vec.bin\n\n#### 4. textCNN 文本分类\n&ensp;&ensp;textCNN模型来源于论文[Convolutional Neural Networks for Sentence Classification](https:\u002F\u002Farxiv.org\u002Fabs\u002F1408.5882)\n\n&ensp;&ensp;textCNN可以看作是一个由三个单层的卷积网络的输出结果进行拼接的融合模型，作者提出了三种大小的卷积核[3, 4, 5]，卷积核的滑动使得其\n类似于NLP中的n-grams，因此当你需要更多尺度的n-grams时，你可以选择增加不同大小的卷积核，比如大小为2的卷积核可以代表\n2-grams.\n\n&ensp;&ensp;textCNN代码在\u002FtextCNN\u002FtextCNN.ipynb。实现包括四个部分：\n* 参数配置类 Config （包括训练参数，模型参数和其他参数）\n* 数据预处理类 Dataset （包括生成词汇空间，获得预训练词向量，分割训练集和验证集）\n* textCNN模型类 TextCNN\n* 模型训练\n\n#### 5. charCNN 文本分类\n&ensp;&ensp;textCNN模型来源于论文[Character-level Convolutional Networks for Text\nClassification](https:\u002F\u002Farxiv.org\u002Fabs\u002F1509.01626)\n\n&ensp;&ensp;char-CNN是一种基于字符级的文本分类器，将所有的文本都用字符表示，\n*注意这里的数据预处理时不可以去掉标点符号或者其他的各种符号，最好是保存论文中提出的69种字符，我一开始使用去掉特殊符号的字符后的文本输入到模型中会无法收敛*。\n此外由于训练数据集比较少，即使论文中最小的网络也无法收敛，此时可以减小模型的复杂度，包括去掉一些卷积层等。\n\n&ensp;&ensp;charCNN代码在\u002FcharCNN\u002FcharCNN.ipynb。实现也包括四个部分，也textCNN一致，但是在这里的数据预处理有很大不一样，剩下\n的就是模型结构不同，此外模型中可以引入BN层来对每一层的输出做归一化处理。\n\n#### 6. Bi-LSTM 文本分类\n&ensp;&ensp;Bi-LSTM可以参考我的博客[深度学习之从RNN到LSTM](https:\u002F\u002Fwww.cnblogs.com\u002Fjiangxinyang\u002Fp\u002F9362922.html)\n\n&ensp;&ensp;Bi-LSTM是双向LSTM，LSTM是RNN的一种，是一种时序模型，Bi-LSTM是双向LSTM，旨在同时捕获文本中上下文的信息，\n在情感分析类的问题中有良好的表现。\n\n&ensp;&ensp;Bi-LSTM的代码在\u002FBi-LSTM\u002FBi-LSTM.ipynb中。除了模型类的代码有改动，其余代码几乎和textCNN一样。\n\n#### 7. Bi-LSTM + Attention 文本分类\n&ensp;&ensp;Bi-LSTM + Attention模型来源于论文[Attention-Based Bidirectional Long Short-Term Memory Networks for\nRelation Classification](http:\u002F\u002Faclweb.org\u002Fanthology\u002FY\u002FY15\u002FY15-1009.pdf)\n\n&ensp;&ensp;Bi-LSTM + Attention 就是在Bi-LSTM的模型上加入Attention层，在Bi-LSTM中我们会用最后一个时序的输出向量\n作为特征向量，然后进行softmax分类。Attention是先计算每个时序的权重，然后将所有时序\n的向量进行加权和作为特征向量，然后进行softmax分类。在实验中，加上Attention确实对结果有所提升。\n\n&ensp;&ensp;Bi-LSTM + Attention的代码在\u002FBi-LSTM+Attention\u002FBi-LSTMAttention.ipynb中，除了模型类中\n加入Attention层，其余代码和Bi-LSTM一致。\n\n#### 8. RCNN 文本分类\n&ensp;&ensp;RCNN模型来源于论文[Recurrent Convolutional Neural Networks for Text Classification](https:\u002F\u002Farxiv.org\u002Fabs\u002F1609.04243)\n\n&ensp;&ensp;RCNN 整体的模型构建流程如下：\n* 利用Bi-LSTM获得上下文的信息，类似于语言模型\n* 将Bi-LSTM获得的隐层输出和词向量拼接[fwOutput, wordEmbedding, bwOutput]\n* 将拼接后的向量非线性映射到低维\n* 向量中的每一个位置的值都取所有时序上的最大值，得到最终的特征向量，该过程类似于max-pool\n* softmax分类\n\n&ensp;&ensp;RCNN的代码在\u002FRCNN\u002FRCNN.ipynb中。\n\n#### 9. adversarialLSTM 文本分类\n&ensp;&ensp;Adversarial LSTM模型来源于论文[Adversarial Training Methods\nFor Semi-Supervised Text Classification](https:\u002F\u002Farxiv.org\u002Fabs\u002F1605.07725)\n\n&ensp;&ensp;adversarialLSTM的核心思想是通过对word Embedding上添加噪音生成对抗样本，将对抗样本以和原始样本\n同样的形式喂给模型，得到一个Adversarial Loss，通过和原始样本的loss相加得到新的损失，通过优化该新\n的损失来训练模型，作者认为这种方法能对word embedding加上正则化，避免过拟合。\n\n&ensp;&ensp;adversarialLSTM的代码在\u002FadversarialLSTM\u002FadversarialLSTM.ipynb中。\n\n#### 10. Transformer 文本分类\n&ensp;&ensp;Transformer模型来源于论文[Attention Is All You Need](https:\u002F\u002Farxiv.org\u002Fabs\u002F1706.03762)\n\n&ensp;&ensp;Transformer模型有两个结构：Encoder和Decoder，在进行文本分类时只需要用到\nEncoder结构，Decoder结构是生成式模型，用于自然语言生成的。Transformer的核心结构是\nself-Attention机制，具体的介绍见[Transformer模型（Atention is all you need）](https:\u002F\u002Fwww.cnblogs.com\u002Fjiangxinyang\u002Fp\u002F10069330.html)。\n\n&ensp;&ensp;Transformer模型的代码在\u002FTransformer\u002Ftransformer.ipynb中。\n\n#### 11. ELMo预训练模型 文本分类\n&ensp;&ensp;ELMo模型来源于论文[Deep contextualized word representations](https:\u002F\u002Farxiv.org\u002Fabs\u002F1802.05365?context=cs)\n\n&ensp;&ensp;ELMo的结构是BiLM（双向语言模型），基于ELMo的预训练模型能动态地生成\n词的向量表示，具体的介绍见[ELMO模型（Deep contextualized word representation）](https:\u002F\u002Fwww.cnblogs.com\u002Fjiangxinyang\u002Fp\u002F10060887.html)\n\n&ensp;&ensp;ELMo预训练模型用于文本分类的代码位于\u002FELMo\u002Felmo.ipynb中。\n\u002FELMo\u002Fbilm\u002F下是ELMo项目中的源码，\u002FELMo\u002FmodelParams\u002F下是各种文件。\n\n#### 12. Bert预训练模型 文本分类\n&ensp;&ensp;BERT模型来源于论文[BERT: Pre-training of Deep Bidirectional Transformers for\nLanguage Understanding](https:\u002F\u002Farxiv.org\u002Fabs\u002F1810.04805)\n\n&ensp;&ensp;BERT模型是基于双向Transformer实现的语言模型，集预训练和下游任务于一个模型中，\n因此在使用的时候我们不需要搭建自己的下游任务模型，直接用BERT模型即可，我们将谷歌开源的源码下载\n下来放在bert文件夹中，在进行文本分类只需要修改run_classifier.py文件即可，另外我们需要将训练集\n和验证集分割后保存在两个不同的文件中，放置在\u002FBERT\u002Fdata下。然后还需要下载谷歌预训练好的模型放置在\n\u002FBERT\u002FmodelParams文件夹下，还需要建一个\u002FBERT\u002Foutput文件夹用来放置训练后的模型文件\n\n&ensp;&ensp;做完上面的步骤之后只要执行下面的脚本即可\n\n&ensp;&ensp;export BERT_BASE_DIR=..\u002FmodelParams\u002Funcased_L-12_H-768_A-12\n\n&ensp;&ensp;export DATASET=..\u002Fdata\u002F\n\n&ensp;&ensp;python run_classifier.py \\\n  &ensp;&ensp;&ensp;&ensp;--data_dir=$MY_DATASET \\\n  &ensp;&ensp;&ensp;&ensp;--task_name=imdb \\\n  &ensp;&ensp;&ensp;&ensp;--vocab_file=$BERT_BASE_DIR\u002Fvocab.txt \\\n  &ensp;&ensp;&ensp;&ensp;--bert_config_file=$BERT_BASE_DIR\u002Fbert_config.json \\\n  &ensp;&ensp;&ensp;&ensp;--output_dir=..\u002Foutput\u002F \\\n  &ensp;&ensp;&ensp;&ensp;--do_train=true \\\n  &ensp;&ensp;&ensp;&ensp;--do_eval=true \\\n  &ensp;&ensp;&ensp;&ensp;--init_checkpoint=$BERT_BASE_DIR\u002Fbert_model.ckpt \\\n  &ensp;&ensp;&ensp;&ensp;--max_seq_length=200 \\\n  &ensp;&ensp;&ensp;&ensp;--train_batch_size=16 \\\n  &ensp;&ensp;&ensp;&ensp;--learning_rate=5e-5\\\n  &ensp;&ensp;&ensp;&ensp;--num_train_epochs=3.0\n\n&ensp;&ensp;BERT模型用于文本分类的详细使用可以看我的博客\n[文本分类实战（十）—— BERT 预训练模型](https:\u002F\u002Fwww.cnblogs.com\u002Fjiangxinyang\u002Fp\u002F10241243.html)","# textClassifier 快速上手指南\n\n本指南帮助开发者快速部署并运行基于 CNN、RNN 及预训练模型（如 BERT、ELMo）的文本分类项目。\n\n## 1. 环境准备\n\n本项目依赖特定的 Python 版本和 TensorFlow GPU 版本，请确保环境配置一致以避免兼容性问题。\n\n*   **操作系统**: Linux \u002F Windows (需支持 GPU)\n*   **Python**: `3.5.6`\n*   **深度学习框架**: `tensorflow-gpu==1.10.0`\n*   **数据集**: IMDB 电影评论情感分析数据集（包含训练集、无标签集和测试集）\n\n> **提示**: 国内用户可使用清华或阿里镜像源加速 Python 包安装。\n\n## 2. 安装步骤\n\n### 2.1 克隆项目\n首先获取项目源代码：\n```bash\ngit clone \u003C项目仓库地址>\ncd textClassifier\n```\n\n### 2.2 安装依赖\n创建虚拟环境并安装指定版本的依赖包：\n```bash\npip install -i https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple python==3.5.6\npip install -i https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple tensorflow-gpu==1.10.0\n```\n*(注：若系统已安装对应版本 Python，可直接安装 tensorflow)*\n\n### 2.3 数据预处理与词向量训练\n在运行具体模型前，需先处理数据并生成词向量。\n\n1.  **数据清洗**：运行预处理脚本，去除标点符号并生成 Word2Vec 输入数据。\n    ```bash\n    # 执行 Jupyter Notebook 或使用 nbconvert 运行\n    jupyter nbconvert --execute dataHelper\u002FprocessData.ipynb\n    ```\n    *输出路径*: `\u002Fdata\u002FpreProcess\u002FwordEmbedding.txt`\n\n2.  **训练 Word2Vec**：生成预训练词向量文件。\n    ```bash\n    jupyter nbconvert --execute word2vec\u002FgenWord2Vec.ipynb\n    ```\n    *输出路径*: `\u002Fword2vec\u002Fword2Vec.bin`\n\n## 3. 基本使用\n\n项目包含了多种模型实现，均位于对应的 `.ipynb` 文件中。以下以 **TextCNN** 为例展示最简使用流程，其他模型操作逻辑类似。\n\n### 3.1 运行 TextCNN 模型\n打开并执行 `\u002FtextCNN\u002FtextCNN.ipynb`。该 Notebook 内部已封装完整流程：\n\n1.  **参数配置**: 实例化 `Config` 类，设置训练参数、模型超参等。\n2.  **数据加载**: 实例化 `Dataset` 类，加载词汇空间、预训练词向量并划分训练\u002F验证集。\n3.  **模型构建**: 实例化 `TextCNN` 类，构建包含多尺度卷积核（3, 4, 5）的网络结构。\n4.  **开始训练**: 调用训练函数启动模型训练。\n\n```python\n# 伪代码示例 (参考 textCNN.ipynb 内部逻辑)\nfrom textCNN import Config, Dataset, TextCNN\n\n# 1. 配置参数\nconfig = Config()\n\n# 2. 准备数据\ndataset = Dataset(config)\ndataset.load_data()\n\n# 3. 初始化模型\nmodel = TextCNN(config, dataset.word_vec)\n\n# 4. 训练模型\nmodel.train(dataset.train_data, dataset.val_data)\n```\n\n### 3.2 运行其他模型\n根据需求选择对应的 Notebook 执行：\n\n*   **CharCNN**: `\u002FcharCNN\u002FcharCNN.ipynb` (注意：此模型需保留标点符号，不可使用上述通用预处理结果)\n*   **Bi-LSTM**: `\u002FBi-LSTM\u002FBi-LSTM.ipynb`\n*   **Bi-LSTM + Attention**: `\u002FBi-LSTM+Attention\u002FBi-LSTMAttention.ipynb`\n*   **RCNN**: `\u002FRCNN\u002FRCNN.ipynb`\n*   **Adversarial LSTM**: `\u002FadversarialLSTM\u002FadversarialLSTM.ipynb`\n*   **Transformer**: `\u002FTransformer\u002Ftransformer.ipynb`\n*   **ELMo**: `\u002FELMo\u002Felmo.ipynb` (需确保 `\u002FELMo\u002Fbilm\u002F` 源码及 `\u002FELMo\u002FmodelParams\u002F` 参数文件就位)\n\n### 3.3 运行 BERT 模型\nBERT 模型使用独立的脚本运行，需提前下载谷歌预训练模型并放置于 `\u002FBERT\u002FmodelParams`，数据放置于 `\u002FBERT\u002Fdata`。\n\n执行以下命令启动训练与评估：\n\n```bash\nexport BERT_BASE_DIR=..\u002FmodelParams\u002Funcased_L-12_H-768_A-12\nexport DATASET=..\u002Fdata\u002F\n\npython run_classifier.py \\\n  --data_dir=$MY_DATASET \\\n  --task_name=imdb \\\n  --vocab_file=$BERT_BASE_DIR\u002Fvocab.txt \\\n  --bert_config_file=$BERT_BASE_DIR\u002Fbert_config.json \\\n  --output_dir=..\u002Foutput\u002F \\\n  --do_train=true \\\n  --do_eval=true \\\n  --init_checkpoint=$BERT_BASE_DIR\u002Fbert_model.ckpt \\\n  --max_seq_length=200 \\\n  --train_batch_size=16 \\\n  --learning_rate=5e-5\\\n  --num_train_epochs=3.0\n```","某电商数据团队需要每日处理数万条新增用户商品评论，以快速识别负面反馈并触发客服介入。\n\n### 没有 textClassifier 时\n- 依赖人工抽样阅读评论，效率极低且无法覆盖全量数据，导致大量严重投诉被遗漏。\n- 尝试手动编写关键词规则（如“不好”、“差评”），但无法识别反讽或复杂语境，误判率高达 40%。\n- 缺乏统一的模型对比框架，团队在 CNN、LSTM 等算法选型上反复试错，开发周期长达数周。\n- 未利用无标签数据进行半监督学习，浪费了海量未标注评论数据，模型在冷启动阶段表现糟糕。\n\n### 使用 textClassifier 后\n- 部署预置的 Bi-LSTM + Attention 模型，实现全量评论毫秒级自动情感打分，负面信息实时预警。\n- 利用 RCNN 和 Transformer 架构深度捕捉上下文语义，精准识别“虽然贵但值得”等复杂句式，准确率提升至 92%。\n- 直接调用封装好的 TextCNN 和 CharCNN 模块进行多模型并行训练与对比，一天内即可完成从数据预处理到最优模型上线。\n- 通过 adversarialLSTM 模块引入对抗训练，有效利用无标签数据增强模型鲁棒性，显著解决了小样本下的过拟合问题。\n\ntextClassifier 将原本繁琐的 NLP 工程链路标准化，让团队能专注于业务逻辑而非底层算法实现，大幅缩短了智能舆情系统的落地周期。","https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fjiangxinyang227_textClassifier_de07597b.png","jiangxinyang227",null,"https:\u002F\u002Foss.gittoolsai.com\u002Favatars\u002Fjiangxinyang227_050420fc.jpg","https:\u002F\u002Fgithub.com\u002Fjiangxinyang227",[82,86,90],{"name":83,"color":84,"percentage":85},"Jupyter Notebook","#DA5B0B",82.2,{"name":87,"color":88,"percentage":89},"Python","#3572A5",17.8,{"name":91,"color":92,"percentage":93},"Shell","#89e051",0,1148,549,"2026-04-15T03:28:14",4,"未说明","必需 (基于 tensorflow-gpu)，具体型号和显存大小未说明，CUDA 版本需与 TensorFlow 1.10.0 兼容",{"notes":101,"python":102,"dependencies":103},"1. 项目包含多种模型（TextCNN, CharCNN, Bi-LSTM, BERT 等），其中 CharCNN 训练数据较少时可能无法收敛，需减小模型复杂度。2. 使用 BERT 模型时需手动下载谷歌预训练模型文件并配置目录结构。3. 数据预处理阶段需生成 word2vec 输入数据及预训练词向量。4. 代码主要位于各个子目录下的 .ipynb 文件中。","3.5.6",[104],"tensorflow-gpu==1.10.0",[15],"2026-03-27T02:49:30.150509","2026-04-18T09:19:36.376280",[109,114,119,124,129,133],{"id":110,"question_zh":111,"answer_zh":112,"source_url":113},39564,"在小数据集上使用 Transformer 进行文本分类，效果为何不如 LSTM？有哪些优化建议？","在小数据集（如 IMDB）上，Transformer 的效果可能略差于 BiLSTM + Attention。维护者给出以下优化建议：\n1. 位置嵌入：使用固定的 one-hot 位置嵌入比论文中的正弦余弦可训练嵌入效果更好，能降低模型复杂度。\n2. Mask 机制：在 Encoder 结构中，添加或去除 mask 对结果影响不大，mask 更多用于 Decoder。\n3. 层数设置：尝试多层 Transformer 发现效果无变化甚至下降，小数据集建议使用单层。\n4. 正则化：主要在 Multi-head Attention 层添加 Dropout，Feed Forward 层若用卷积实现可不加。\n结论：小数据集推荐优先使用 LSTM，若用 Transformer 需简化结构。","https:\u002F\u002Fgithub.com\u002Fjiangxinyang227\u002FtextClassifier\u002Fissues\u002F1",{"id":115,"question_zh":116,"answer_zh":117,"source_url":118},39565,"BERT 模型添加 BiLSTM+Attention 层后准确率反而大幅下降，可能是什么原因？","这通常是由于代码实现错误导致的。有用户反馈在修正自己的代码错误后，模型表现恢复正常。建议检查 BiLSTM 和 Attention 层的连接逻辑、维度匹配以及参数初始化是否正确，确保没有破坏 BERT 原有的特征提取能力。","https:\u002F\u002Fgithub.com\u002Fjiangxinyang227\u002FtextClassifier\u002Fissues\u002F21",{"id":120,"question_zh":121,"answer_zh":122,"source_url":123},39566,"运行 BERT+BiLSTM+Attention 模型的预测脚本（predict.sh）时报错且无法生成 test_results.tsv，如何解决？","需要修改两处代码以修复预测流程：\n1. 修改 `bert\u002Fmodeling.py` 第 339 行：将 `assignment_map[name] = name` 改为 `assignment_map[name] = name_to_variable[name]` 以解决变量映射作用域错误。\n2. 修改 `bert_blstm_atten.py`：\n   - 在第 137 行 logits 后添加概率计算：`probabilities = tf.nn.softmax(logits, axis=-1)`\n   - 在 `model_fn_builder` 函数的 `model_fn` 中，将 `predictions=predictions` 修改为 `predictions={\"probabilities\": probabilities}`。\n完成上述修改后即可正常运行预测并生成 `test_results.tsv` 文件。","https:\u002F\u002Fgithub.com\u002Fjiangxinyang227\u002FtextClassifier\u002Fissues\u002F15",{"id":125,"question_zh":126,"answer_zh":127,"source_url":128},39567,"Transformer 验证集与训练集 batch_size 不同时，如何处理 PositionEmbedding 的维度报错？","不要将 batchSize 设为固定值。应动态获取当前输入的 batch 大小，使用代码：`batchSize = tf.shape(self.inputX)[0]`。这样可以自动适应训练集和验证集不同的 batch 大小，避免维度不匹配的问题。","https:\u002F\u002Fgithub.com\u002Fjiangxinyang227\u002FtextClassifier\u002Fissues\u002F10",{"id":130,"question_zh":131,"answer_zh":132,"source_url":113},39568,"Transformer 计算 Key Mask 时似乎无法正确识别 Padding 位置，原因是什么？","这是因为位置嵌入（Position Embedding）与词嵌入拼接后，Padding 位置的向量不再全为 0（位置嵌入部分非零），导致 `tf.sign(tf.abs(tf.reduce_sum(keys, axis=-1)))` 计算结果永远为 1。解决方案是：不要使用拼接后的矩阵来计算 Mask，而应将拼接前的原始输入矩阵（仅包含词嵌入或专门的 padding 标记）作为新参数传入 Multi-head Attention 函数，专门用于获取准确的 Padding 位置信息。",{"id":134,"question_zh":135,"answer_zh":136,"source_url":137},39569,"BiLSTM-Attention 模型中 Attention 机制的权重矩阵 W 初始化维度是否有误？","是的，存在潜在错误。在 Attention 部分，权重矩阵 W 不应初始化为一个一维向量（如 `[hiddenSize]`）。根据 Attention 机制原理，W 通常应是一个二维矩阵（例如 `[hiddenSize, hiddenSize]` 或 `[hiddenSize, 1]` 取决于具体实现），以便正确计算注意力分数。如果代码中写为 `W = tf.Variable(tf.random_normal([hiddenSize], stddev=0.1))`，建议检查并修正为合适的二维形状。","https:\u002F\u002Fgithub.com\u002Fjiangxinyang227\u002FtextClassifier\u002Fissues\u002F12",[]]