从0到1构建新闻长文本分类系统

article/2025/8/17 18:11:42

新闻分类系统概述

新闻分类系统,顾名思义,就是对于一片新闻或者是一片文章,进行自动的分类,例如政治,财经,娱乐等等
从技术角度讲,其实属于自然语言处理中比较经典的文本分类问题。当然在一个工业级别的分类系统当中,会遇到各种各样的问题,例如语料优化,文本预处理,特征抽取,模型选择及融合,硬规则等一系列问题。本人有幸在国内某一线互联网公司做过相关的工作,故做一些总结。

分类系统架构设计

对于传统的分类系统来讲,就是如下这几个模块,包括文本预处理,特征抽取,特征选择,模型训练等。但是对于一个工业级的分类系统来说,这是远远不够的。
这里写图片描述
更加详细的分类模及每个模块的组件如下所示,将每个模块的结果都存入DataFlow用于定位问题。规则干预系统可以短期处理模型解决不了的case。
这里写图片描述

基本流程

  1. 文本预处理
    文本预处理主要是指分词(涉及到分词粒度的选取),停留词,高频词和低频词的过滤。值得注意的是,训练时的处理流程和预测时的处理流程要保持一致,否则很有可能出现训练和测试分词不一致的情况,从而影响整个分类系统的性能。

  2. 特征抽取
    特征抽取主要是从新闻的标题,正文中提取出特征,把新闻转换成固定维度的向量
    对于深度模型而言,可能不需要做特征抽取的工作,端到端直接训练即可。例如,fasttext,textcnn;
    对于传统的机器学习模型来说,特征工程的质量会直接影响模型的分类性能;
    在我的分类系统中,特征抽取主要包含三个方面:

    • n-gram单词特征
    • 实体归一化特征
    • 人工特征

    n-gram特征,即如果是uni-gram,文本里面每个单词就是一个特征,如果是bi-gram,那么文本里面连续的两个单词也是一个特征。通常来讲,一般是uni-gram+bi-gram。n如果很大的话,特征会非常稀疏,导致特征向量维度过大
    实体归一化特征是指,对于某些实体,可以将其映射到一个实体桶中,从而增加特征的泛化性能。例如"花千骨" ->“娱乐_电视剧”,“反恐精英” ->"游戏_射击游戏"等等。但有两个问题是,很多实体有歧义,对于这种实体可以不将其归一化,也可以根据上下文进行实体消歧(不在本文讨论范围内);第二个问题是实体归一化依赖于人工运营,且需要不断的更新,需要比较多的人力成本,但是对整个分类系统的改进也是非常明显的。
    人工特征其实就是认为的设计一些规则,如果命中规则,那么就补充特征。相比于硬规则(命中规则就分到某个类别),更加平滑。
    实际得到的特征是以上三类特征的级联

  3. 特征过滤及特征选择
    特征过滤:
    卡方检验进行特征选择:

  4. 基分类器的选取及训练
    选用了四个模型fasttext, svm, pa, nb

  • nb训练速度快,对于大规模训练语料,几分钟就能训练完,而且解释性比较好。但缺点就是模型分类性能比较弱,因为特征独立的假设在新闻分类任务中应该是不成立的。

  • svm分类效果是最好的,但是训练时间比较长。

  • fasttext是端到端的训练,不依赖特征工程,训练效果也非常不错,但是可解释性比较差。

  • pa

    上述的nb,svm,pa在sklearn中都有统一的接口可以直接调用,fasttext也有封装好的api,因此训练起来非常的方便。实际在做模型训练的时候,可以写一个统一的离线训练脚本。

  1. 模型融合策略
    对于四个子模型,如果四个子模型或三个子模型预测的结果一致,则直接投票处理;
    如果是其他情况,则可以考虑使用xgboost进行模型融合,具体的融合方法就是,对于每个样本来说,经过模型输出一个结果(可能是概率向量,即每个类别都对应的一个概率,实际去概率最大的那个类别),也可以经过各种平滑转换成概率向量。对于xgboost来说,输入就是每个子模型的输入的向量,输出就是类别。

  2. 规则系统
    规则系统简单来说就是,当某个样本满足规则的时候,就将这个样本分到某个类别,而忽略模型的分类结果。比较硬,一般用于最新的新闻,比如最近"延禧攻略"等等。这种新闻因为语料库中没有相似的样本,所以分类很可能出错,使用规则可以短期处理这个问题,但是长期来看,可以将这批最新的数据加到语料中,重新训练模型。
    需要注意的是:

  • 规则上线之前都要做评估
  • 尽可能减少对规则的依赖,可能会发生异常的后果
  1. 模型打包上线,对外提供服务

提升分类性能的小技巧

1. 新闻时效性问题
新闻的时效性问题很普遍,在一个工业级的产品中,有专门的算法去过滤过期的新闻。我们关心的是对于一些新的新闻,而且在训练语料中没有出现的特征,该怎么处理。短期可以用规则系统去解决。长期来讲,就要构造新的训练数据,和老训练数据做一定的融合,再进行特征抽取和特征选择,最后用总的数据重新训练再上线即可。
实际操作的时候可以写一个总的离线训练脚本,输入文件的路径,输出模型。脚本中包含特征抽取,模型训练,模型融合,模型评估等步骤,这样处理起来比较高效
2. 媒体直挂
对于一个feed流产品而言,很多的内容都是自媒体创造的,所以可以根据媒体的类型进行直挂。比如某个媒体是讲NBA的,那么这个媒体的内容大概率都是体育类。

3. 训练语料的分布及优化
训练语料中往往包含大量的噪声,如何对训练语料去噪也是一个比较头疼的问题。训练语料的优化主要包含三个个方面,一方面是某个类别的准确率很高,但是召回率不足;另一方面是准确率不足,召回率很高;还有就是准确召回都很低.
去噪手段:交叉验证,二分类器(置信度阈值),降采样,关键词

  • 对于准确率很高,召回率不足的类:查看哪些类别和该类混淆的比较多,训练一个二分类器从该类别中去去除噪声;或者说如果两个类别相互混淆,可以使用十折交叉验证(9份数据训练,对1份数据去噪,循环操作)的方法去噪。
  • 对于准确率很低,但召回率很高的类:这种情况可以看看召回错误样本的分布,然后利用降采样或者关键词的手段去噪
  • 对于准确和召回都比较低的类:这就很难了,先处理上面两种情况吧。所有的去噪手段都可以试试…

4. Debug信息管理
一个工业级别的分类系统当中,往往都需要分析badcase,如果系统只给出分类结果的话,很难去查错。正确的姿势应该是在系统的每个节点,都给出相关的信息。比如每个子模型的每个结果,融合后模型的分类结果,是否命中媒体直挂系统,是否命中规则系统等等,对于朴素贝叶斯模型,可以给出每个单词的权重。通过这种方式去分析badcase,可以直接找到错误的原因,提高效率.

分类系统服务化中的架构设计问题

这个不在本文讨论范围内,有兴趣的同学可以自己去了解

  • 加权轮询
  • 加权最小连接数
  • 源地址散列调度

开源项目


http://chatgpt.dhexx.cn/article/jSgFM4cB.shtml

相关文章

谈文本分类

本文来自对《文本分类研究综述》汪岿的阅读 文章目录 1. 为什么要进行文本分类2. 文本分类的分类、应用3. 当前文本分类面临的挑战4. 文本分类的前景 1. 为什么要进行文本分类 在大数据时代,网络上的文本数据日益增长。采用文本分类技术对海量数据进行科学地组织和…

多模态融合技术综述和应用

文章目录 多模态技术基础1,多模态融合架构(神经网络模型的基本结构形式)1.1联合架构1.2协同架构1.3编解码架构(自监督) 2,多模态融合方法2.1早期融合2.2 晚期融合2.3混合融合 3,模态对齐方法3.1…

大数据分析案例-基于随机森林算法构建新闻文本分类模型

🤵‍♂️ 个人主页:@艾派森的个人主页 ✍🏻作者简介:Python学习者 🐋 希望大家多多支持,我们一起进步!😄 如果文章对你有帮助的话, 欢迎评论 💬点赞👍🏻 收藏 📂加关注+ 喜欢大数据分析项目的小伙伴,希望可以多多支持该系列的其他文章 大数据分析案例合集…

【数据挖掘】天池挑战赛 新闻推荐

比赛网址:https://tianchi.aliyun.com/competition/entrance/531842/introduction 项目源码:Github 一、项目知识点 数据预处理; 数据可视化; 特征工程; 模型选择; 实验结果的评价; 二、…

python-新闻文本分类详细案例-(数据集见文末链接)

文章目录 分析思路所用数据集一、导入相关包二、数据分析1.读取数据2. jieba分词并去除停用词3. TF-IDF4. 网格搜索寻最优模型及最优参数5. 预测并评估预测效果 总结 分析思路 新闻文本数据包含四类新闻,分别用1,2,3,4 表示。 &a…

NetWORK ShortCuts 创建

很多时候我们创建了很多SHARE DRIVE的SHOT CUT: 但是我们不知道他们的路径在哪里,在下一台新电脑的时候,我们又要重新创建?NONONO, 我们打开其中一个SHORT CUT 我们点一下 "Proposal_Content_RPA" 右边的空…

shortcuts实现

1.使用条件 android 7.1以上 2.功能说明 长按桌面app图标出现快捷方式列表,点击可跳转到app的指定界面,用户也可以将其作为一个单独的快捷方式 3.效果截图 3.技术实现 分为两种方式,静态xml配置和动态代码配置,二者各有优劣&#…

Android ShortCuts使用

ShortCuts是什么? Shortcuts是指在桌面长按app图标而出现的快捷方式,可以为你的app的关键功能添加更加快速的入口而不是先打开app 点击快捷方式可以访问应用功能,而且这种快捷方式也可以被拖拽到桌面的单独位置,变成单独的左面快…

Android App Shortcuts

周五了,周末还远吗?~ 加入我知识星球的人都得到了提升,可不要错过哦~ 点击阅读原文即可。 本文较长,阅读大约十分钟 ~ 我们都知道iPhone6S推出了3D Touch的功能,也算是一个大卖点,Google也后来居上&#xf…

Linux下cut命令用法详解

Linux下cut命令用法详解 原创:frozen_sucker(冰棍) 有时我们经常会遇到这样一些问题:有一页电话号码薄,上面按顺序规则地写着人名、家庭住址、电话、备注等,此时我们只想取出所有人的名字和其对应的电话号码,你有几种…

使用Dynamic Shortcuts

在看完Static Shortcuts后, 我们不相信Google仅仅给我们开发者开放了局限性如此大的使用方式, 肯定还会存在灵活性更大的API, 是的, 这就是我们马上要讲的Dynamic Shortcuts, 我把它称为动态配置. 说起动态配置, 那肯定是用java代码实现了, 那如何实现呢? 首先第一步, 我们需…

Shortcuts,让你可以在系统的桌面上为所欲为

/ 今日科技快讯 / 近日,有用户刷抖音时看到烤虾广告下单,实付款194元买了250克烤虾干,货到付款后发现是三无产品,且外形口感与广告宣传天差地别。对此抖音表示,已对此事展开相关调查,并下架涉嫌虚假宣传…

Shortcuts使用解析(一)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/susan_123456/article/details/93793490 Shortcuts是什么? Shortcuts是指在桌面长按App图标而出现的快捷方式,可以为你的App的关键功能添加更快速的…

是时候来了解android7了:shortcuts(快捷方式)

本文已授权微信公众号:鸿洋(hongyangAndroid)在微信公众号平台原创首发。 就在前几天的一个晚上, Google召开了它的秋季发布会, 毫无悬念的宣布了它的最新手机品牌Pixel, 与此同时我的nexus设备也从亲儿子降级成为干儿子. 不过还好Google并没…

Android 7.1 新特性:快捷方式 Shortcuts 详解

Android 7.1 新特性:快捷方式 Shortcuts 详解 一、Shortcuts 介绍 Android 7.1 允许 App 自定义 Shortcuts,类似 iOS 的 3D touch。通过在桌面长按 App 弹出 Shortcut 列表,点击某个 Shortcut 快速进入某项操作,同时 Shortcut 可以…

Android7.1新特性:快捷方式Shortcuts详解

Shortcuts介绍 Android7.1(API Level 25)及以上系统可以自定义Shortcuts,通过在桌面上长按App Icon弹出Shortcut列表,点击某个shortcut可使用户快捷得打开App里常用的或推荐的任务。长按列表中的任一个Shortcut可拖动到桌面进行固…

oracle 左连接

oracle左连接小结 当使用左连接关联表进行查询时,如果右侧的表在关联的条件中有重复的数据,就会导致最后的查询结果比预期的多,比如: select * from A 需要关联的表 select * from B 这里的两个表的id都是主键,现在…

lambda多表左连接

下面是mysql多表左连接,对应的lambda表达式写法,只为快速解决你的问题,详细的就不介绍了,只出结果,相信稍微有点基础的都能看懂。相关知识点,请自行百度 关键字:GroupJoin、SelectMany sql语句…

实例讲解内连接、左连接、右连接、交叉连接、外连接以及全连接

目录 示例表&#xff1a;1.内连接-inner&#xff1a;实例1&#xff1a;内连接表a和表b实例2&#xff1a;内连接表a和表c实例3&#xff1a;内连接表a和表b,使用“>”号实例4&#xff1a;内连接表a和表b,使用“<”号实例5&#xff1a;内连接表a和表b,指定字段显示实例6&…

mysql 左连接查询记录数,MySQL左连接查询记录行数

最近修复一个数据问题&#xff0c;其中用到了左连接&#xff0c;我的意识里还以为A左连接B&#xff0c;查询出的记录数量会是A的记录数&#xff0c;然而实际操作后发现认知严重错。 网上关于左连接的一张图 摘自网上的一张图&#xff0c;图确实没毛病&#xff0c;但我却产生了误…