基于Scrapy和GPT-2的新闻分类与标题生成实战

发布时间:2026/10/31 15:21:39
基于Scrapy和GPT-2的新闻分类与标题生成实战 1. 项目背景与目标去年冬天我偶然发现中新网的新闻数据质量很高但缺乏系统性的分类和挖掘。作为一个数据爱好者我萌生了一个想法能不能用技术手段对这些新闻进行深度分析于是我启动了这个涵盖爬虫、机器学习和文本生成的项目。这个项目的核心目标有三个建立中新网新闻的自动化采集系统开发新闻自动分类模型构建爆款标题生成器2. 数据采集与处理2.1 爬虫架构设计考虑到中新网的robots.txt限制我采用了分布式爬虫架构import scrapy from scrapy.crawler import CrawlerProcess class ChinaNewsSpider(scrapy.Spider): name china_news allowed_domains [chinanews.com] start_urls [http://www.chinanews.com/] custom_settings { DOWNLOAD_DELAY: 2, CONCURRENT_REQUESTS_PER_DOMAIN: 1 } def parse(self, response): # 解析逻辑 pass关键设计要点严格遵守爬虫道德设置2秒请求间隔使用User-Agent轮换池避免被封禁实现断点续爬功能2.2 数据清洗流程采集到的原始数据需要经过严格清洗HTML标签去除广告内容过滤正文提取基于文本密度算法去重处理SimHash算法特别注意中新网的新闻正文通常包含记者信息需要用正则表达式精准剔除3. 新闻分类模型构建3.1 特征工程我尝试了多种特征提取方法TF-IDFWord2VecBERT嵌入最终采用的混合特征方案from sklearn.feature_extraction.text import TfidfVectorizer from gensim.models import Word2Vec # TF-IDF特征 tfidf TfidfVectorizer(max_features5000) tfidf_feats tfidf.fit_transform(texts) # Word2Vec特征 w2v_model Word2Vec(sentences, vector_size100, window5) w2v_feats [avg_w2v(text, w2v_model) for text in texts]3.2 模型选型与优化测试了多种分类算法朴素贝叶斯基线模型SVMXGBoost深度学习模型TextCNN、BiLSTM最终采用的Stacking集成方案第一层 - SVM (kernelrbf) - XGBoost (max_depth6) - BiLSTM (128 units) 第二层 - Logistic Regression模型评估结果模型准确率F1-score朴素贝叶斯0.820.81SVM0.870.86XGBoost0.880.87Stacking0.910.904. 爆款标题生成器4.1 数据洞察分析10万条新闻标题后发现爆款标题的共性特征长度15-20字最佳情感正向情感占比68%关键词包含数字的标题CTR高23%句式为什么...类标题分享量最高4.2 生成模型实现采用GPT-2微调方案from transformers import GPT2LMHeadModel, GPT2Tokenizer tokenizer GPT2Tokenizer.from_pretrained(uer/gpt2-chinese-cluecorpussmall) model GPT2LMHeadModel.from_pretrained(uer/gpt2-chinese-cluecorpussmall) # 微调代码 # ...生成策略Beam Searchnum_beams5温度采样temperature0.7Top-k采样k504.3 效果评估人工评估标准相关性0-5分吸引力0-5分自然度0-5分评估结果模型相关性吸引力自然度规则生成4.23.13.8GPT-2微调4.54.34.65. 意外发现与经验总结5.1 数据偏差问题分析发现政治类新闻占比过高38%经济新闻存在时段性集中社会新闻的地域分布不均解决方案引入分层采样添加时间衰减因子建立地域平衡机制5.2 模型可解释性使用SHAP值分析发现某些敏感词对分类影响过大时间特征被模型过度依赖长文本反而降低分类准确率改进措施建立敏感词过滤表显式提取时间特征优化文本截断策略5.3 工程实践心得分布式爬虫的监控要点请求成功率监控代理IP健康检查异常自动恢复机制模型服务化陷阱中文BERT的显存占用问题批量推理的延迟优化模型版本管理标题生成器的实用技巧添加禁止词表避免生成敏感词引入人工规则后处理建立A/B测试框架6. 项目完整代码结构china-news-analyzer/ ├── crawler/ # 爬虫模块 │ ├── distributed/ # 分布式爬虫 │ └── utils/ # 通用工具 ├── ml/ # 机器学习模块 │ ├── classification/ # 分类模型 │ └── generation/ # 标题生成 ├── web/ # 可视化界面 └── config/ # 配置文件关键依赖Scrapy 2.8.0Transformers 4.26.1XGBoost 1.7.1FastAPI模型服务化这个项目从数据采集到最终应用完整走通了NLP项目的全流程。最大的收获是认识到在实际业务中算法效果只是基础工程实现和业务理解同样重要。特别是在新闻领域内容安全性和模型可解释性往往比单纯的准确率更重要