闲鱼是怎么让二手属性抽取准确率达到95%+的?

闲鱼是怎么让二手属性抽取准确率达到95%+的?

先上效果

闲鱼是怎么让二手属性抽取准确率达到95%+的?

图1 - 二手属性抽取算法效果Demo(1)

背景

闲鱼作为一款C2X的app,站在商品发布的角度,闲鱼商品相对于淘宝商品的特点有:

  1. 轻发布导致商品信息不足 闲鱼采用图文描述的轻发布模式,迎合了用户快速发布的体验,但也导致了商品结构化信息不足的问题。如果平台希望更理解商品到底是什么,就需要算法去识别用户描述的图片和文本。
  2. 商品具有独特的二手属性 不同于淘宝~ 4 ; 5新品的一手属性(例如品牌、型号、规格参数等),二手属k X . | s W 9性指的是在商品入手一段时间后,能够反映商品折损/保值情况的属性,比如商品的【使用次数】、【购买渠道】、【包装/配件是否完整】等。 不同类目有该类目独特的二手属性,比如个护美妆有【保质期】,手机有【屏幕外观】、【拆修情况】,服装类有【是否下过i T O e u @ Y 1 D水】等。

问题和D } W 9 D难点

二手属性抽取在NLP领域属于信息抽取(Information ExtractioP M w A ( F 3 d Cn)问题,通常的做法是拆解为命名实体0 n I D O T识别(NER)任务和文本分类(Text Classification)任务。

二手属性抽取任务的难点 C , 3有:

  1. 不同的类目、不同的二手属性/属性簇,需要构建不同的模型。
  2. 如果使用有监督学习(Bert家族),打标工作会非常的5 { [ E j繁重,开发周期会变得很长。

解决方案

方法论

在当今NLP环境,依旧是Bert家族(或TransforA V E i X H V Ymer衍生的各种算法, D p A : @ g)大行其道,霸榜GLUE、CLUE等各大NLP榜单,信息抽取任务也不例外,所以笔者在本方案中的某些场景也使用了Bert家族。不过笔者认为,没有一a j c u种算法在各种场景下都是全能的,只有在给定领域、指定场景& T m ] M t w A +下最适用的算法。此外,笔者总结了自己的一套属性抽取的方法论:

  1. 句式相对固定,或者句式受模板限制,如文9 c = C本描述模板是典型的时间+地点+人物+事件(某事某地某人做了啥事),用NER,建议方法:CRF、BiLSTM+CRF、Bert家族、Bert家族+| 7 W sC^ [ s + ) } fRF等。

  2. 句式不固定,但领域c M B O ? , ^ p `/场景关键词相对固定,或者有一些关键词模J 6 ` n Y = A @ Q板、俗称、行话等,用文本分类:

  3. 近义词、近义表述不是特别多的情况(≤几十种到上百种),关键词呈对数正态分布/指数分布(即有很多高频且集中的关键词),建议方法:正则表达式+规则。

  4. 近义词、近义表述非常多的情况(≥几百种到上千种- N $),典型的如地名识别,建议方法:用Bert家族

  5. 句式和词w ~ V 4语都不固定,典型的如社交评论/聊z 4 A天的情感分析,建议方法:用Berl = N o D @ ) T et家族。

方案架构

闲鱼是怎么让二手属性抽取准确率达到95%+的?

图2 - 二手属性抽取方案架构图

  • NLP任务 如前所述,将不同的二手属性识别a q ( i Z需求拆解为文本多分类、多标签分类以及NER任务。
  • 文本多分类:即“n选1”问题,比如根据文本判断商品是否包邮(二分类)。
  • 多标签分类:即同时进行多个“n选1”问题,比如同时判断某手机商品的屏幕外观(好/中/差)和机身2 4 $外观(好/中/差)。多标签分类通常的做法是对不同标签共享网络层,并将损失函数以一定权重叠加,由于多个标签之间有一定程度的联系,效果有时候会比做多个单独的“n选1”问题更6 z 5 7 F W好,同时由于是多个属性(属性簇)一起建模,在训练和推断的时候也会更省事。
  • NER:即命名实H o n W k h 5 7 x体识别。

建模方法

1. 人工打标阶段 由于打标的q A ^人工成本比较高,需要设法利用集团的AliNLP进行辅R ; + m 助。方法是,首先0 b o利用AliNLP的电商NER模型对输入文本进行解} = E H q K | c析。然i h & 6 * l [后进行拆解) , S,对属于NER任务的二手属性,如保质期/保修期/容量/使用次数/服装风格等,可以U D ! ; 6 ( ; v .直接定位到相关词性或实体的关键词进行BIO标注;对属于分类任务的o # Q w + Z & s其它二手属性,则可以在电商NER的分词结果基础上打标,提高人工标注的效率。

2. 算法训练阶段 此为方案核心,本方案训练算法主要通过3种途径:

(1)使用Albert-Tiny:建模采用主流对预训/ Q ^练+finetune的方案。由于该模型推断速度更快,用于对QPS和响应要求非常高的实时在线场% D : 5 4景。对于NER任务也可以尝试在网络最后面接一层CRF或不接。 Albert:Albert意指“A lite bert”,名副其实,它的优点在训练速度快。

Albert的源码c 1 C相比Bert的源码基本如出一辙,但网络结构有几点重要的区别:

1. Word Embeddin4 4 Y J E kg层做了因式分? 7 ^ F f解,在词向量上大大减少了参数量。S G 5 @设词表大小为V,词向量长度为H` [ = e b + _ w,对Bert,词向量参数量为VH;对Albert,先把词向长度量缩减为E,再扩充为H,参数量为VE+E*H,由于E远小于Hs } o v t,H远小于V,用于训练的参数量得到锐减。

1. 跨层参数i S C ! s %共享:以albert-base为例,albert会在12层之间共享每层的attention参数或全连接层ffn的参数,默认是两者都共享。源码中通过tenorflow.variable_scope的reuse参数可以轻松实现。参数共享4 . k C 2 R h q .进一步减少了需要训练的参数量。 除此之外,Alb{ 4 a qert还有一些训练任务和训练细节上的优化,此处按下不表。

Albert依据网络深度不同分为: - Albert-f Q @Lar: B A C h #ge/xLarge/xxLa& ` grge:24层 - Albert-Base:12层 - Albert-Sm~ C f S N , N p call:6层 - Albert-Tiny:4层 一般来说,层数越多,训练和推断耗时都会越久。考虑到线上部署的实时性要求更快<typo id="typo-2200" data-origin="的推" ignoretag="true">的推</typo>断速度,本方案选8 m ; U { 0择了最小的Albert-Tiny。其中文推断速度相对bert-base提高约10倍,且精度基本保留(数据引用自github/albert_zh)p ] { ( d A )

U 4 z2)使用StrutBert-Base:建模采用主流对预训练+finetune的方案。经测算,在二手属性 f 8 m r g J识别上,它比Albert-Tiny准确率相对提升约1%到! q c z X1.5%,可用于离线T+1场景。对于NER任务也可以尝试在网络最后面接一层CRF或不接。 StructBert:为阿里自研算法,优点在精度高,GLUE榜单上已经排到第3名。! * l l F =

Word Struc8 0 | O Htural Objective:StrutBert在Bert的MLM任务基础上,加上了打乱词序并迫使其重构正确词序的任务:论文中是随机抽取一个三元词组(trigram)进行打乱,然后加上了如下公式作为MLM损失函数的约束。StrutBert的这个灵感也许来自于网上的一p l W ) (个段子:“研表究明,汉字9 9 + 7序顺并不n - & 3 ~ C n u d定一影<typo id="typo-2707" data-origin$ ? z="阅" ignoretag="true">阅</typo>响读,事证实明了当你看这完句话之后才发字现都乱是的”。

本方案之所以选择StrutBert,是因为集团内有该算法在电商领域专属的预训练% W 9 V s d $ ;模型(接口),它依据网络深度不同分为:C 3 ( X a t v

  • StrutBert-Base:12层* StrutBert-Lite:6层* StrutBert-Tiv _ 0 ) ^ny:4层

在离线T+1场景下,追求精度更高而对实时性无太大要求,因此本方案选择了StrutBert-z } X 4Baso 5 ! l Y % ] Ve。

本方案之所以选择StrutBert,是因为集团内有该算法在电商领域专属的预训练模型W T ](接口),它依据网] v n b ^ .络深度不同分为:

  • StrutBert-Base:12层* StrutBert-Lite:6层* StrutBert-Tiny:4层

在离线T+1场景下,E V p ] # # } a R追求精度更高而对实时性无太大要求,因此本方案z v ` . / y选择了StrutBer, R L Y B Xt-Base。B I d H % t

(3)使用正则表达式:优点:速度最快,比Albert-Tiny还快10-100倍以上;且在许多句式和关键词相对固定的二s 5 P # x & 6手属性上,准[ | p [ 4 c 6 & p确率比上面两种算法更高;且易于维护。缺点:非常依X B F b ; Y z +赖业务知识、行业经验和数据分析对大量正则模式进行梳理。

3. 规则修正阶段

  1. 识别结果归一化:对于NER任务,许多识别出来的结果不能直接使用,需要做“归一化”,例如某件男装衣服的尺码识别出来为“175/88A”,那么应该自动映射到“L码”。
  2. 某些二手属性之z 7 n d }间可能会存在冲突或依赖,因此在算法识别之后,需要对识别结} @ p { 4果依据] _ 5 I a [ O业务规则进行一定修正。比如某商f ? Z品卖家声称是“全新”,但是同时x f t w r _ O又表明“仅用过3次”,那么“全新”会自动降级为“非全新”(99新或95新,不同类目分级略有f ; # ) X不同)。

算法部署

  • 离线T+1场景3 | k:通过ODPS(现名MaxCompute)+UDF的方式进行部署,即算法会通过Python写成UDF脚本,模型文件则作为资源上传到D F I S b SODPS上。* 在线实时场景:模型通过PAI-EAT W 7 X 3 v u c JS进行分布式部署,数据交互通= $ C * * R Y ?过iGraph(一种实时图数据库)和TPP完成。

算法评估

对每个类目的每个二手属性,制定好评| } ? [测的标准,然后抽样一定量级的数据,交由外包进行人工评估。评估工作通过对比人工识别的结果和算法识别的结果是否一致,给出准确率、精确率、召回率等。

最终效果Y | t

准确率

本方案识别结果经过人工评估,每个类目无论是准确率、<typo i_ y _ * / 3 p ~d=l ] H o W l"typo-3732" data-origin="精召" ignoretag="true">精召</typo>率都达到了非常高的水平,a E 9 i :且误差值均c r ! F f R W q N远小于上线限制,并已d j k 3经上线应用在闲鱼主要类目D Y j $的商品上。

应用场景&后续展望

二手属性抽取的结果目前已应用的场景包括:

  1. 定价场景
  2. 聊天场景
  3. 优质商品池挖掘
  4. w z 6索导购
  5. 个性化商品推荐

后续展望:

  1. 目前二手属性抽取总共覆盖闲鱼主流类目商品,随着开发进行,后续计划覆盖到全部类目。
  2. 目前二手属性抽取主要依赖于文本识别,闲鱼商J 0 X b品是图文描述,后续A $ 0 Z q a e可以考虑在图片上下功夫,通过图像算法完善商品的结构化信息。
  3. 利用和) V c | D H t . H分析商品二手属性,形成优质商品标准,扩充优质商品池。

作者:渐漓