企业中的文本分类

2019 年 6 月 24 日

企业中的文本分类

概述


新型深度模型天天刷屏刷榜,模型日新月异,做算法的不免感到焦虑。发现自己看论文的速度已经赶不上他们发论文的速度了。在此启发下,想写一写自己工作的思考,面对一个领域,我们如何进行技术选型,这个系列我会结合着自己的工作,帮助大家选择一个好的 Baseline 模型。可能这也是我的困惑,大家模型介绍的欢天喜地,并没有指出哪些适合做 baseline ,到头还得自己一个一个试,希望我的经验能帮助大家节省一点点时间。我就很满足了。技术更新太快,自己并不是专家,您看到这篇文章的时候,可能已经有点过时,择优享用吧。


问题描述


今日主角:文本分类


问题定义:给定一段文本,预测一个或者多个标签。


问题举例:


  • 搜索类目预测:

  • query - 红色连衣裙

  • label - 女装_连衣裙

  • 智能客服意图分类:

  • query - 我的快递怎么还没到

  • label - 物流没到

  • 新闻分类:

  • query - 哈登今日xx分

  • label - 体育

  • 情感分类:

  • query - 我好难过啊

  • label - 伤心


技术侧划分:


  • query 的长度:短句、段落、文章

  • 预测 label:一个、多个 (同时满足)

  • label 数量


技术价值:该技术非常的实用,一方面可以帮助公司节省一些人力标注成本,另一方面,可以赋能业务,让业务做一些之前无法做到的分析、运营。


模型介绍


本文不一一对比各个模型的原理,参看用深度学习 ( CNN RNN Attention ) 解决大规模文本分类问题 - 综述和实践。这里我一句话介绍一下模型的区别。


一句话模型总结


传统非 embedding 模型:baseline 太低,我直接忽略。有能超过 textcnn 的请指教。


textcnn:抽取 Ngram 特性,适用于词语特征明显的业务,几个词就能很好的区分问题,参数量要够大,size 取正常词语长度 ( 1,2,3,4,5 ) 即可,非常好用的短文本 Baseline 。


textrnn:抽取序列特征,正常情况下和 cnn 几乎没有太大差异,企业场景几乎可以忽略,性能够的话,可以无脑和 textcnn 做概率层面的模型融合。


rcnn:几乎可以忽略,企业场景几乎可以忽略提升。


bert:比 textcnn / textrnn 会有不同幅度提升,可以适应更小的训练数据,但是性能和复杂度都不太适合做 baseline 。能用好 bert 的可能也不在这篇文章的适用人群范围了。


HAN ( Hierarchical Attention Networks for Document Classification ) :双层的 attention ,文本较长的可以作为 baseline 非常不错。


好了,模型介绍到此结束。


文本分类 Trick


这里,我来说一下,具体应用场景下我们一般关注什么样的问题。以及我们有哪些解决对策。个人做的应用偏向于短文本,所以 trick 也会偏向短文本。


思考 1:训练数据量、标签量


  1. 每个标签需要有足够丰富度,主观评估一个新 case 进来,要能找到大概相似的问法 ( 不要幻想模型可以无中生有,以上模型都不具备此能力 ) 。

  2. 评估训练集准确率,不要有太多脏数据。

  3. 标签是否变化,变化标签需要定时训练,增量数据来源需要有保障。

  4. 每个标签下的数据量:1w 条通常就够了。( 这条针对对数据量没概念的同学 )

  5. 记住:文本分类,至少在短文本分类下,数据决定一切,99%的质的提升都来自数据的处理。


思考 2:数据来源


  1. 用户行为数据:如果用户的行为能抽取出高质量的标签,那这一定是个非常 nice 的来源,他可以是应付动态。

  2. 业务标注:人工标注,需要一定的人力成本,可以提供好用的工具帮助业务快速标注。

  3. 无标注抽取:通常我们有大量无标注的数据,这些数据是真实的,所以要好好利用这部分,正则、规则、模型预训练抽取都是能有非常大提升的地方。


思考 3:评估与调整


  1. 主观评估:做业务不是打比赛,不是一个死的东西,你需要知道你模型能干啥,textcnn 来说,就是能抽取词语特性,有类似的训练集数据大多都是能出结果的。不要单瞅着一个 top1 准确率,要看 badcase 是什么原因造成的,能从数据层处理的,就在数据层处理。

  2. 关注80%:企业中的文本分类都多都是类目分布不均匀的,不要太在意一些很少很少的 case ,先把头部的做好。

  3. 模型调参:参数先要自己摸一摸,知道大致的参数规模。参数规模尽可能大就好了,这里会有个边际效应。比如 textcnn filter_num 我一般设置200-400,少了不够,多了无用。不管选取哪个 baseline ,都需要把模型给玩熟悉,他能干啥,不能干啥要知道,然后去就搞数据。

  4. 关注过拟合:需要大致看下训练集和测试机的 loss 差异,注意不要过拟合。


关于模型优化、流程优化


技术层面的东西讲完了,留下一些自己的思考,当作和大家讨论。


作为一项基础技术,文本分类服务很多业务。人力有限的情况下,很难做一些定制化的优化。所以模型的更新一定是有较大提升的,即在性能无影响的情况下,所有场景都能比较稳步提升。当然这并不容易。但是可以尝试做出一些新东西,更贴近业务或者其他更易用的模型。


模型提升点


  1. 文本分类可以融入特征:比如加入问题的类目、品牌、甚至用户等信息,丰富文本分类的信息。这里就需要设计一下网络结果,适应这种特征的融入。

  2. 更自然语言的模型:比如业务同学的观点都很抽象,是否可以通过半阅读理解的形式补充。举个例子:生鲜坏果是一个常见的客服问题。很多非生鲜的可能会被错判,业务是否能加一个选项:生鲜水果。通过这个词选项能优化部分 case 。这部分可以通过语义向量的引入解决。

  3. 迁移学习:BERT 的迁移效果非常好,各个业务如果有类似的话,迁移也是个非常不错的优化点。

  4. 实体化:词语实体化一直是比较想探索的模块,词语实体化后能大大减少训练数据的复杂度,并且具有更高的泛化性和可控性。


流程提升点


数据为王的模型下,如何让打标的人更快的达标也是个技术活。


  1. 提供近义词:水果->苹果、梨子…能自动出来当然更好啦,这也比较容易用 w2v 实现。

  2. 提供近似语句:模型可以预测出相似的句子来辅助标注。

  3. 聚类:帮助发现一些新的类簇,很多标签可能需要新搞一个。


本文来自 DataFun 社区


原文链接


https://mp.weixin.qq.com/s?__biz=MzU1NTMyOTI4Mw==&mid=2247491378&idx=1&sn=e7cf7920b41977037afaae38abb6d77c&chksm=fbd4ad5ecca324480f8de818698dd83095428a480a1b04fafa8af208c5dc45464ee39682f98e&scene=27#wechat_redirect


2019 年 6 月 24 日 08:004759

评论 1 条评论

发布
用户头像
学习了
2019 年 08 月 06 日 09:16
回复
没有更多评论了
发现更多内容

鹰眼 | 分布式日志系统上云的架构和实践

小小的一朵云

大数据

第五周总结

Vincent

极客时间 极客大学

哦!这该死的 C 语言

cxuan

c 后端

数据结构与算法系列之数组

书旅

数据结构 算法 数组 数据结构与算法

图计算黑科技:打开中文词嵌入训练实践新模式

小小的一朵云

大数据

看动画学算法之:排序-快速排序

程序那些事

排序 快速排序 数据结构和算法 看动画学算法

程序的机器级表示-异构的数据结构

引花眠

计算机基础

ARTS打卡 第16周

引花眠

微服务 ARTS 打卡计划

Elasticsearch索引容量管理实践【>>戳文章免费体验Elasticsearch服务30天】

小小的一朵云

大数据

导致系统不可用原因及密码验证

PB级大规模Elasticsearch集群运维与调优实践【>>戳文章免费体验Elasticsearch服务30天】

小小的一朵云

大数据

CountDownLatch 瞬间炸裂!同基于 AQS,凭什么 CyclicBarrier 可以这么秀?

程序员小航

源码 AQS 源码阅读 java; CyclicBarrier

极客大学-架构师训练营

9527

神盾首创非对称联邦学习,深度保障数据隐私

小小的一朵云

大数据

ARTS打卡Week 12

teoking

Mysql学习笔记:InnoDB事务和ACID模型

马迪奥

MySQL innodb

你必须要了解的「架构」小历史

码农田小齐

spring Spring Cloud Spring Boot

为什么互联网巨头们纷纷使用Git而放弃SVN?(内含Git核心命令与原理总结)

冰河

git 冰河 代码管理 代码仓库 分支合并

oeasy教您玩转 linux 010213 中文 fcitx

o

C语言指针详解

C语言与CPP编程

c c++ 编程语言 指针

安全相关总结

03 Spring Security 入门实例

哈库拉玛塔塔

Spring Boot kotlin spring security

链表中移除重复节点,保罗·格雷厄姆的传奇博客,Mac三指拖动操作,大数据平台 John 易筋 ARTS 打卡 Week 17

John(易筋)

ARTS 打卡计划 大数据平台 链表移除相同节点 保罗格雷厄姆 mac三指操作设置

简述C语言宏定义的使用

C语言与CPP编程

c c++ 编程语言

前端 10 问之 Docker (第一篇)

局外人

Docker

ARTS 打卡 (20.09.07-20.09.13)

小王同学

Spring 5 中文解析测试篇-Spring MVC测试框架

青年IT男

单元测试 Spring5

ASP.NET Core 性能优化最佳实践

newbe36524

微服务 性能优化 .net core ASP.NET Core

洗牌算法

C语言与CPP编程

c c++ 算法 编程语言

ARTS Week16

时之虫

ARTS 打卡计划

智能商业时代的思考(二)网络协同抓住用户

刘旭东

微信 商业价值 数据智能 网络协同 商业智能

企业中的文本分类-InfoQ