textClassifier
textClassifier 是一个基于 TensorFlow 构建的开源文本分类项目,旨在为开发者提供一套完整且多样的深度学习模型实现方案。它主要解决了在自然语言处理(NLP)任务中,如何针对不同场景选择合适模型进行高效情感分析与文本归类的问题,特别适用于需要快速验证算法效果或深入理解模型原理的技术人员。
该项目不仅涵盖了经典的 textCNN、charCNN 和双向 LSTM(Bi-LSTM)架构,还集成了引入注意力机制(Attention)、递归卷积神经网络(RCNN)以及对抗训练(Adversarial Training)等进阶模型。更值得一提的是,textClassifier 紧跟技术前沿,提供了 Transformer 编码器结构以及 ELMo 动态词向量预训练模型的落地代码,帮助用户探索从传统统计方法到现代预训练大模型的技术演进。
项目以 IMDB 电影评论情感分析为例,详细展示了从数据清洗、Word2Vec 词向量训练到模型构建与评估的全流程。无论是希望入门深度学习的学生、需要复现论文算法的研究人员,还是寻求工程化参考的后端开发者,都能通过 textClassifier 获得清晰的代码指引和扎实的实践基础,轻松上手各类主流文本分类任务。
使用场景
某电商数据团队需要每日处理数万条新增用户商品评论,以快速识别负面反馈并触发客服介入。
没有 textClassifier 时
- 依赖人工抽样阅读评论,效率极低且无法覆盖全量数据,导致大量严重投诉被遗漏。
- 尝试手动编写关键词规则(如“不好”、“差评”),但无法识别反讽或复杂语境,误判率高达 40%。
- 缺乏统一的模型对比框架,团队在 CNN、LSTM 等算法选型上反复试错,开发周期长达数周。
- 未利用无标签数据进行半监督学习,浪费了海量未标注评论数据,模型在冷启动阶段表现糟糕。
使用 textClassifier 后
- 部署预置的 Bi-LSTM + Attention 模型,实现全量评论毫秒级自动情感打分,负面信息实时预警。
- 利用 RCNN 和 Transformer 架构深度捕捉上下文语义,精准识别“虽然贵但值得”等复杂句式,准确率提升至 92%。
- 直接调用封装好的 TextCNN 和 CharCNN 模块进行多模型并行训练与对比,一天内即可完成从数据预处理到最优模型上线。
- 通过 adversarialLSTM 模块引入对抗训练,有效利用无标签数据增强模型鲁棒性,显著解决了小样本下的过拟合问题。
textClassifier 将原本繁琐的 NLP 工程链路标准化,让团队能专注于业务逻辑而非底层算法实现,大幅缩短了智能舆情系统的落地周期。
运行环境要求
- 未说明
必需 (基于 tensorflow-gpu),具体型号和显存大小未说明,CUDA 版本需与 TensorFlow 1.10.0 兼容
未说明

快速开始
文本分类项目
本项目基于CNN、RNN以及NLP中的预训练模型,构建了多个常见的文本分类模型。
requirements
- python==3.5.6
- tensorflow-gpu==1.10.0
1. 数据集
数据集为IMDB电影评论的情感分析数据集,总共有三个部分:
- 带标签的训练集:labeledTrainData.tsv
- 不带标签的训练集:unlabeledTrainData.tsv
- 测试集:testData.tsv
字段的含义:
- id 电影评论的id
- review 电影评论的内容
- sentiment 情感分类的标签(只有labeledTrainData.tsv数据集中有)
2. 数据预处理
数据预处理方法/dataHelper/processData.ipynb
将原始数据处理成干净的数据,处理后的数据存储在/data/preProcess下,数据预处理包括:
- 去除各种标点符号
- 生成训练word2vec模型的输入数据 /data/preProcess/wordEmbedding.txt
3. 训练word2vec词向量
预训练word2vec词向量/word2vec/genWord2Vec.ipynb
- 预训练的词向量保存为bin格式 /word2vec/word2Vec.bin
4. textCNN 文本分类
textCNN模型来源于论文Convolutional Neural Networks for Sentence Classification
textCNN可以看作是一个由三个单层的卷积网络的输出结果进行拼接的融合模型,作者提出了三种大小的卷积核[3, 4, 5],卷积核的滑动使得其 类似于NLP中的n-grams,因此当你需要更多尺度的n-grams时,你可以选择增加不同大小的卷积核,比如大小为2的卷积核可以代表 2-grams.
textCNN代码在/textCNN/textCNN.ipynb。实现包括四个部分:
- 参数配置类 Config (包括训练参数,模型参数和其他参数)
- 数据预处理类 Dataset (包括生成词汇空间,获得预训练词向量,分割训练集和验证集)
- textCNN模型类 TextCNN
- 模型训练
5. charCNN 文本分类
textCNN模型来源于论文Character-level Convolutional Networks for Text Classification
char-CNN是一种基于字符级的文本分类器,将所有的文本都用字符表示, 注意这里的数据预处理时不可以去掉标点符号或者其他的各种符号,最好是保存论文中提出的69种字符,我一开始使用去掉特殊符号的字符后的文本输入到模型中会无法收敛。 此外由于训练数据集比较少,即使论文中最小的网络也无法收敛,此时可以减小模型的复杂度,包括去掉一些卷积层等。
charCNN代码在/charCNN/charCNN.ipynb。实现也包括四个部分,也textCNN一致,但是在这里的数据预处理有很大不一样,剩下 的就是模型结构不同,此外模型中可以引入BN层来对每一层的输出做归一化处理。
6. Bi-LSTM 文本分类
Bi-LSTM可以参考我的博客深度学习之从RNN到LSTM
Bi-LSTM是双向LSTM,LSTM是RNN的一种,是一种时序模型,Bi-LSTM是双向LSTM,旨在同时捕获文本中上下文的信息, 在情感分析类的问题中有良好的表现。
Bi-LSTM的代码在/Bi-LSTM/Bi-LSTM.ipynb中。除了模型类的代码有改动,其余代码几乎和textCNN一样。
7. Bi-LSTM + Attention 文本分类
Bi-LSTM + Attention模型来源于论文Attention-Based Bidirectional Long Short-Term Memory Networks for Relation Classification
Bi-LSTM + Attention 就是在Bi-LSTM的模型上加入Attention层,在Bi-LSTM中我们会用最后一个时序的输出向量 作为特征向量,然后进行softmax分类。Attention是先计算每个时序的权重,然后将所有时序 的向量进行加权和作为特征向量,然后进行softmax分类。在实验中,加上Attention确实对结果有所提升。
Bi-LSTM + Attention的代码在/Bi-LSTM+Attention/Bi-LSTMAttention.ipynb中,除了模型类中 加入Attention层,其余代码和Bi-LSTM一致。
8. RCNN 文本分类
RCNN模型来源于论文Recurrent Convolutional Neural Networks for Text Classification
RCNN 整体的模型构建流程如下:
- 利用Bi-LSTM获得上下文的信息,类似于语言模型
- 将Bi-LSTM获得的隐层输出和词向量拼接[fwOutput, wordEmbedding, bwOutput]
- 将拼接后的向量非线性映射到低维
- 向量中的每一个位置的值都取所有时序上的最大值,得到最终的特征向量,该过程类似于max-pool
- softmax分类
RCNN的代码在/RCNN/RCNN.ipynb中。
9. adversarialLSTM 文本分类
Adversarial LSTM模型来源于论文Adversarial Training Methods For Semi-Supervised Text Classification
adversarialLSTM的核心思想是通过对word Embedding上添加噪音生成对抗样本,将对抗样本以和原始样本 同样的形式喂给模型,得到一个Adversarial Loss,通过和原始样本的loss相加得到新的损失,通过优化该新 的损失来训练模型,作者认为这种方法能对word embedding加上正则化,避免过拟合。
adversarialLSTM的代码在/adversarialLSTM/adversarialLSTM.ipynb中。
10. Transformer 文本分类
Transformer模型来源于论文Attention Is All You Need
Transformer模型有两个结构:Encoder和Decoder,在进行文本分类时只需要用到 Encoder结构,Decoder结构是生成式模型,用于自然语言生成的。Transformer的核心结构是 self-Attention机制,具体的介绍见Transformer模型(Atention is all you need)。
Transformer模型的代码在/Transformer/transformer.ipynb中。
11. ELMo预训练模型 文本分类
ELMo模型来源于论文Deep contextualized word representations
ELMo的结构是BiLM(双向语言模型),基于ELMo的预训练模型能动态地生成 词的向量表示,具体的介绍见ELMO模型(Deep contextualized word representation)
ELMo预训练模型用于文本分类的代码位于/ELMo/elmo.ipynb中。 /ELMo/bilm/下是ELMo项目中的源码,/ELMo/modelParams/下是各种文件。
12. Bert预训练模型 文本分类
BERT模型来源于论文BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding
BERT模型是基于双向Transformer实现的语言模型,集预训练和下游任务于一个模型中, 因此在使用的时候我们不需要搭建自己的下游任务模型,直接用BERT模型即可,我们将谷歌开源的源码下载 下来放在bert文件夹中,在进行文本分类只需要修改run_classifier.py文件即可,另外我们需要将训练集 和验证集分割后保存在两个不同的文件中,放置在/BERT/data下。然后还需要下载谷歌预训练好的模型放置在 /BERT/modelParams文件夹下,还需要建一个/BERT/output文件夹用来放置训练后的模型文件
做完上面的步骤之后只要执行下面的脚本即可
export BERT_BASE_DIR=../modelParams/uncased_L-12_H-768_A-12
export DATASET=../data/
python run_classifier.py
--data_dir=$MY_DATASET
--task_name=imdb
--vocab_file=$BERT_BASE_DIR/vocab.txt
--bert_config_file=$BERT_BASE_DIR/bert_config.json
--output_dir=../output/
--do_train=true
--do_eval=true
--init_checkpoint=$BERT_BASE_DIR/bert_model.ckpt
--max_seq_length=200
--train_batch_size=16
--learning_rate=5e-5
--num_train_epochs=3.0
BERT模型用于文本分类的详细使用可以看我的博客 文本分类实战(十)—— BERT 预训练模型
常见问题
相似工具推荐
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 真正成长为懂上
LLMs-from-scratch
LLMs-from-scratch 是一个基于 PyTorch 的开源教育项目,旨在引导用户从零开始一步步构建一个类似 ChatGPT 的大型语言模型(LLM)。它不仅是同名技术著作的官方代码库,更提供了一套完整的实践方案,涵盖模型开发、预训练及微调的全过程。 该项目主要解决了大模型领域“黑盒化”的学习痛点。许多开发者虽能调用现成模型,却难以深入理解其内部架构与训练机制。通过亲手编写每一行核心代码,用户能够透彻掌握 Transformer 架构、注意力机制等关键原理,从而真正理解大模型是如何“思考”的。此外,项目还包含了加载大型预训练权重进行微调的代码,帮助用户将理论知识延伸至实际应用。 LLMs-from-scratch 特别适合希望深入底层原理的 AI 开发者、研究人员以及计算机专业的学生。对于不满足于仅使用 API,而是渴望探究模型构建细节的技术人员而言,这是极佳的学习资源。其独特的技术亮点在于“循序渐进”的教学设计:将复杂的系统工程拆解为清晰的步骤,配合详细的图表与示例,让构建一个虽小但功能完备的大模型变得触手可及。无论你是想夯实理论基础,还是为未来研发更大规模的模型做准备
spec-kit
Spec Kit 是一款专为提升软件开发效率而设计的开源工具包,旨在帮助团队快速落地“规格驱动开发”(Spec-Driven Development)模式。传统开发中,需求文档往往与代码实现脱节,导致沟通成本高且结果不可控;而 Spec Kit 通过将规格说明书转化为可执行的指令,让 AI 直接依据明确的业务场景生成高质量代码,从而减少从零开始的随意编码,确保产出结果的可预测性。 该工具特别适合希望利用 AI 辅助编程的开发者、技术负责人及初创团队。无论是启动全新项目还是在现有工程中引入规范化流程,用户只需通过简单的命令行操作,即可初始化项目并集成主流的 AI 编程助手。其核心技术亮点在于“规格即代码”的理念,支持社区扩展与预设模板,允许用户根据特定技术栈定制开发流程。此外,Spec Kit 强调官方维护的安全性,提供稳定的版本管理,帮助开发者在享受 AI 红利的同时,依然牢牢掌握架构设计的主动权,真正实现从“凭感觉写代码”到“按规格建系统”的转变。
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 提供专业版解决方案,具备品牌定制、细粒度权限控制、内部知识库整合及安全审计等功能,满足公司对数据隐私和个性化管理的高标准要求。
ML-For-Beginners
ML-For-Beginners 是由微软推出的一套系统化机器学习入门课程,旨在帮助零基础用户轻松掌握经典机器学习知识。这套课程将学习路径规划为 12 周,包含 26 节精炼课程和 52 道配套测验,内容涵盖从基础概念到实际应用的完整流程,有效解决了初学者面对庞大知识体系时无从下手、缺乏结构化指导的痛点。 无论是希望转型的开发者、需要补充算法背景的研究人员,还是对人工智能充满好奇的普通爱好者,都能从中受益。课程不仅提供了清晰的理论讲解,还强调动手实践,让用户在循序渐进中建立扎实的技能基础。其独特的亮点在于强大的多语言支持,通过自动化机制提供了包括简体中文在内的 50 多种语言版本,极大地降低了全球不同背景用户的学习门槛。此外,项目采用开源协作模式,社区活跃且内容持续更新,确保学习者能获取前沿且准确的技术资讯。如果你正寻找一条清晰、友好且专业的机器学习入门之路,ML-For-Beginners 将是理想的起点。
funNLP
funNLP 是一个专为中文自然语言处理(NLP)打造的超级资源库,被誉为"NLP 民工的乐园”。它并非单一的软件工具,而是一个汇集了海量开源项目、数据集、预训练模型和实用代码的综合性平台。 面对中文 NLP 领域资源分散、入门门槛高以及特定场景数据匮乏的痛点,funNLP 提供了“一站式”解决方案。这里不仅涵盖了分词、命名实体识别、情感分析、文本摘要等基础任务的标准工具,还独特地收录了丰富的垂直领域资源,如法律、医疗、金融行业的专用词库与数据集,甚至包含古诗词生成、歌词创作等趣味应用。其核心亮点在于极高的全面性与实用性,从基础的字典词典到前沿的 BERT、GPT-2 模型代码,再到高质量的标注数据和竞赛方案,应有尽有。 无论是刚刚踏入 NLP 领域的学生、需要快速验证想法的算法工程师,还是从事人工智能研究的学者,都能在这里找到急需的“武器弹药”。对于开发者而言,它能大幅减少寻找数据和复现模型的时间;对于研究者,它提供了丰富的基准测试资源和前沿技术参考。funNLP 以开放共享的精神,极大地降低了中文自然语言处理的开发与研究成本,是中文 AI 社区不可或缺的宝藏仓库。