数据标注问题

文章商品分类之数据标注 文章商品分类之数据标注

之前有些过一篇文本分类的文章,从技术层面来描述了包括传统NLP技术、深度学习相关的文本分类技术,很有幸做了一个关于文本分类的项目,对这块有进一步的认识。 项目的基本需求是对资讯文章按照语义进行分类。例如ifanr.com/906951中描述的

描述的小米手机相关的新闻,需要将文章分类为手机-手机通讯,然后结合文章相关tag词做相关产品的广告露出,仅仅依靠tag词『小米』可能不太准确,会推荐出粮食相关的『小米』内容,如小米之类的粮食相关的商品。

如果能得到资讯可插入商品的分类,能进一步通过商品类别来滤除tag词的一些badcase,在业务相关的广告露出上,结合商品类目、资讯文章相关tag词,还有一些业务规则,更加合理、准确地露出文章相关的商品。 商品分类主要包括两块内容:是否可插入商品分类器、可插入商品文章的商品分类,以下所有的内容都是从这两块去阐述数据标注中做的一些相关的工作。

数据 杂 乱 差

机器学习类方法,数据为重,数据是机器学习方法、尤其是深度学习方法的魂,是算法能达到性能的上限,所以有效的训练数据是模型准确性保证的关键,而商品分类器的数据相对于资讯分类还是比较麻烦的,资讯分类的数据可以在爬虫的时候爬取新闻文章相对应的类别信息,所以这部分比较容易,而商品分类麻烦就在于文章数据如何拿到对应的标签,要想比较合理地收集训练数据集,单纯的收集文章数据,靠人工标注是不靠谱的,无论是在量上还是数据准确上都是很难的,商品分类数据的收集主要有三个方面的问题:

  • 杂,商品分类体系特别多,耳机类目有将近400个分类,覆盖多种不同类目,从手机到洗护用品都有涉及,很难从商品层面上找到共性;
  • 乱,资讯分类数据在不同类目上分布极度不合理,先验分布比例差异巨大,比例可能达到1000:1;
  • 差,资讯文章文本数据质量差,尤其是图片类文章,文本文字少,很难得到语义信息。

数据标注的三个层次

第一个层次:看山是山,看水是水

最开始,在未完全了解数据的前提下,按往前经验,直接标注数据,标注内容主要包括:是否适合插入商品数据,若适合插入商品,则对应文章的类目,包括0级类目、1级类目、2级类目;每一条记录的标注难度很高,需要完全阅读文章,理解文章内容,再判断是否可插入商品,插入何种商品,一条记录从阅读到最后记录内容,可能需要2分钟以上的内容,这种标注耗时太大,并且由于先验分布的极不均匀,最后标注拿到的数据类别分布也极不均匀,且也存在相关的难点:

  1. 文章池文章数目覆盖时间比较短,提取出的训练样本的多样性很少,比如在标注过程,我们发现文章中战狼相关的内容太多,很明显是由于前段时间文章太多了,抽样出来的文章覆盖太窄,解决方法在于增大文章池文章覆盖时间,从原先前很短时间内的文章池,替代为一年多以上的文章,然后从中随机抽样出指定数量的文章数,保证在一定数量的前提下,训练数据的多样性,不至于标注数据中大部分都是战狼的badcase;
  2. 文章可插入商品的标注,对于标注人员其实还是比较难的,而且前后矛盾比较大,前后冲突也比较多,必须从一定层面上给一些相关信息进行参考,并且由于正负样本中,负样本数量太多,很多标注结果在商品多分类的数据收集上不起作用,我们在前期在滤除矛盾数据后,拿到足够数量的比较合理的可插入商品数据,训练一个初始的二类分类器,并且给定需要标注的数据的可插入商品的得分,在统计各个不同类目的标注情况的得分分布;
  3. 解决负样本数量太多的问题,一个方法是滤除比较低的二类分类器得分,把0.4得分以下的文章滤除,减少不可插入商品的标注量,大大减少标注人员的工作量,另一个方法是按照资讯类别过滤掉一些根本不可能插入商品的文章的分类,如政治等等,只对可能存在标注情况的类目进行标注;

二类分类器的标注可以在第一个层次解决,完成一定量的标注后,因为得分还有类目的限制,正样本相对负样本比较多,这里我们再讲不可能插入商品的类目样本随机抽取若干样本数量,加入到训练集中,训练好二类分类器后,准确率和召回率达到将近90%+, 但是由于标注数据是从类目抽取和人工标注,是人就可能出错,很多是否可插入商品的样本不同标注人员的标注结果都不同,算法的准确率和召回率只能在一定程度说明结果。因此,及早引入测试人员对分类器性能进行测试,在这种情况下,显得尤为重要。

第二个层次:看山不是山,看水不是水

商品类目分类,在第一个层次中尽管有标注,但是其实有效数据太少,如果能够重新做一遍这个项目,我会将是否可插入商品的分类和商品类目分类作为两个分开的任务来进行标注。这里给各位小伙伴提醒一下,在标注任务的相关工作上,尽量能把复杂的任务拆分为简单的任务,将任务细化到标注人员只标注yes或者no的程度,标注人员尤其是外包,由于各个阶层、各方面专业的人都有,越是复杂的问题上,对问题的理解越不一致。在和标注团队合作一段时间后,更深地了解这其中的问题,很有意思。

**如何分解问题?**从两个方面来处理:

  • 和业务团队沟通,将原先将近400个分类的分类问题,按照类目业务的重要性,将分类类别按重要性标注为0、1、2,选取其中最重要的率先进行标注;
  • 将原先标注的标注各个类目的问题,分解为对样本对应类目来标注是否正确, 具体解放方法是,在第一层次的基础上,我们收获了一批对应商品类目的样本数量,样本数量没有达到能直接上线的程度。但是,我们可以通过已有的训练数据,去训练一个合适的分类器,然后去文章池子去过一遍,然后按照类别进行分析, 综合考虑准确性、召回率的前提下,对每一个类别分配合理的阈值,当maxprob为某个类别且类别概率大于该类别阈值时,则露出来给标注人员来标注,判断该文章被分配到类目是否合适。

第二层次在一定程度上能够较快地收集到一批数据,但是由于本身样本的多样性还有先验分布概率差异太大,这样去对待标注问题,其实是很难的,能存在的问题就是标注20w数据可能在31类其中某个类别只有100不到,这种靠人工标注明显不可靠,因为数据分布差异性太大,最后分类器的指标也很难让人信服。

第三个层次:看山还是山,看水还是水

考虑到第二个层次遗留的问题,我们很难通过标注人员来帮助我们来完成这种问题,这里我们回溯到前面,从头开始考虑数据标注:

  • 是否可以通过自动化的手段,例如前面提到的资讯文章分类的手段,从爬虫拿到对应的分类信息,这样的数据质量,不仅高,而且无需标注成本。很不幸,很难直接拿到这样的数据;
  • 如果直接提取自动化手段不靠谱,那么我们是否可以通过一些文本提取的手段,来提取一些类别的关键词,滤除不合适的类别的关键词,然后用关键词去过滤文章池子,这样可以快速地得到对应类别的文章列表。

想到这个方法之后,我们直接从两个方向上去获取类别和关键词的映射序列:

  1. 按之前商品title分类器,对商品title分词,然后分类,得到分类和词的映射,按count与类别词总count数和tfidf权重去过滤关键词;
  2. 即使按1的手段,我们过滤了一部分数据后,我们发现在很多类目上,还有很多tag词,如母婴-洗护用品下面,妈妈这次词无论词频还是tfidf权重都很高,但是用妈妈去召回母婴-洗护用品下的文章时,会有很大的问题,因为妈妈这词召回出来的文章在其他很多类目都有,所以我们应该排除这部分词,这部分工作说简单也不简单,说费时费力还真是麻烦,所以我们这儿用外包同学来帮忙做这部分词的清理,通过召回文章去看对应的词是否仅在该类目出现;

通过上面之后,我们可以得到31分类下大概20w左右的数据,训练好商品分类器后,我们观察分类器在大部分类目下都达到0.8+的准确率,但是在有些类目下确实有问题,但是由于直接对20w数据来进行重新标注工作量太大,耗时太多,根本不可行,更好的一种方式,是通过对测试样本分类,通过测试人员检查是否有badcase,我们测试人员发现一些娱乐明星相关的新闻,经常会被分到粮油调味的问题,很奇怪,按常识应该不会,但是就是发现了,分析了一轮应该是数据有问题,后来我们发现我们在滤除关键词时,将糯米留在了粮油调味的类目下,而杨幂和刘恺威的小孩,小名就叫『糯米』,而娱乐明星相关的新闻,在原先的样本池子就很多,因此污染了粮油调味这一类目的训练数据,所以我们只需要让外包同学帮忙重新滤除下粮油调味这个类目的数据即可,工作量大大降低,通过这种以结果(badcase)为导向的处理方式,对于标注人员只需要检查某个类目下数据是否属于这个类目即可,而对于算法工程师,我们能更加清楚地知道这类badcase的由来、可解决的方式、分类器在这类数据上的表现等等,而对于业务团队就更加开心了,能够切实看到分类器的效果、还有badcase,还能追着算法工程师去解决,何乐而不为呢?

总结

稍微总结下,因为之前实际项目经验的不足,在最开始的时候,我们作为算法从业人员,把工作重点都集中在算法、模型这块,其实转过头来,这样是不对的,数据才是整个项目中80%应该关注的内容,数据好,算法才好,调嘛嘛优。

  • 0
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值