导语:标签为用户提供了一种新的检索方式,用户和信息通过标签进行关联,信息的标签化、行为的标签化,在提供个性召回能力的同时,也有助于帮我梳理和挖掘业务品类的特征,做相关业务属性的聚合。

背景

当下全连接的信息场景,所有对于有助于连接转化效率提升的内容和考虑尤为重要,这就要求我们在实际业务场景中,结合用户行为的每个关键的行为节点进行深入的分析和思考。通过用户全链路的分析并结合平台用户业务数据的不断沉淀,在不同的行为环节进行辅助和提效,我们将feed(信息流)场景中用户的关键行为分拆为4个阶段:1流量的接入、2检索、3点击、4电话,首先来整体看下,我们在用户的四个关键行为节点都做了哪些内容?(内容摘要参考图1)

(图 1 - 关键节点的技术内容摘要)

  1. 在流量的接入环节,我们希望具备两种能力:一种是对用户身份的预估与分层,另一种是我们需要对已有历史行为的用户进行相对准确的兴趣描述。用户身份的预估是后续多个业务场景策略干预的基础,兴趣的准确描述是提供准确召回能力的基础。
  2. 在检索的这个环节我们尝试了一种新的方式,对信息(车)进行标签化的表述,信息通过标签聚合,可以帮助提升长尾信息的曝光能力,通过用户的行为我们可以将用户 - 标签 - 信息串联,做到标签的个性化展示,通过持续完善标签的质量(召回能力)、标签 - 车系的关联准确度,进而带来对转化效率提升的正向刺激。
  3. 在点击环节 - feed场景下ctr的提升是各业务的重点,在持续优化基础的体验的同时会加入智能的干预,通用的做法是介入模型的干预,对ctr进行预估,并结合召回模块在下一个阶段做信息的精排,过程中会加入策略、规则及算法的融合,另外也需要考虑的一个问题是ctr导向与商业的收入导向的目标需要结合考虑。
  4. 电话这部分主要是考虑系统的高可用与提升号码资源的使用效率,并降低不同spm(渠道)的接入成本,同时针对不同的数据纬度进行分析。今年围绕电话这个环节我们也做了一些赋能的场景,结合用户的身份预估做智能AxB的绑定,结合用户的身份及历史行为进行模型的训练 - 做cvr拨打的预估,这些在提升号码资源的使用效率&降低串号率方面都获得的不错的效果。
  • 今天文章整理的是关于第二个行为环节的内容 - 关于信息标签的挖掘。

为什么要挖掘业务品类的标签?

面前提到,在检索的这个环节我们尝试了一种新的方式,对信息(车)进行标签化的表述,信息通过标签聚合,这有别于传统按业务规则固定的检索方式,可以帮助我们提升长尾信息的曝光能力;通过用户的历史行为我们可以将「用户 - 标签 - 信息」串联,做到标签的个性化展示,通过持续完善标签的质量、标签 - 车系的准确度,进而带来对ctr提升的正向刺激。

信息的标签化,在提升信息个性化展示、体验的同时,也有助于帮助我们发掘品类基本检索属性之外的个性内容,如描述感官的、描述价值的、描述体验的,如:“年轻化、耐造、买菜、动力澎湃、外形炫酷”,这也会极大的丰富我们商品特征的表现形式,结合不同人群兴趣、特征的划分,考虑从信息特征的维度将用户的兴趣进行聚合(这个思路在前面关于用户兴趣描述中也提到过),可以做相对精准的信息召回,进而也会带来对ctr提升的正向刺激。

搭建二手车的标签系统需要对业务有相对深入地了解,在前期语料处理、分词部分需要投入一定的人工成本进行标注、分类和挑选,并结合场景实验的反馈进行持续的优化。标签的种类可以按照业务品类的属性进行区分,比如:“描述外观”、“描述配置”、“描述操控”、“描述情感”、或其他的属性词。

二手车业务标签挖掘这部分包含几块主要的内容:语料的获取、分词、车品类分词模型的训练、词向量、及分层的实验并结合场景的反馈提升标签的质量(召回能力、ctr)标签-车系的准确度,分词模型与词向量的计算很大程度上受限与语料的质量,所以在前期对于语料的处理也会投入不小的精力。

具体内容部分

1、我们先来整体了解标签与业务场景的结合点:如下图

(图 2 - 标签与业务场景的结合方式)

场景:

  1. 为列表页固定位置提供个性筛选标签区域 - 此区域可以理解为穿插在feed中的一块固定的位置,如图所示该部分标签内容的组成包括:用户的筛选条件、热门标签、个性标签、创意标签等。该场景实验的指标是对标上下车源信息的点击率,目前二手车第一版标签的实验也是在这个场景上进行的,通过持续的迭代观测效果。
  2. 发布场景 - 个性标签选择&单元参数,在规范和格式化的发布场景中,我们希望针对目标车系、车型召回个性的标签,用于车源信息的补充说明,在丰富信息个性展示的同时,这些标签也会作为单元参数,同上面提到的用户兴趣描述-召回的场景进行协同,关注用户在某个业务属性上的兴趣专注度,高效的召回相关的信息。
  3. item信息的标签展示(个性内容)- feed场景中item标签的展示可以体现信息的个性,个性的标签也会match用户的属性,做个性的召回展示。
  4. 优质的标签或无命中的检索词,进行阶段性的汇总,提供给中台检索部门支持搜索框检索,这部分是对高频、业务特殊属性词、无命中检索能力的一个补充和支持。

2、处理阶段(语料的处理 -> 词向量 -> 关联关系 -> 实验):

  1. 语料的处理 - 标签工程对抓取的语料做分词处理,分词的过程也是训练车品类分词模型的过程(需要先期人工的标注),对分词的结果进行人工的筛选,选定备用的标签,存储标签库,关于标签库的设计在后续内容中进行说明。
  2. 词向量 - 对标签做词向量的计算,这有助于帮助我们扩展标签的召回能力(这个地方我们起初犯过一个错误,我们过分依赖词向量对召回的扩展能力,但不知标签词向量的计算是依赖语料的,我们先期选定的语料是某口碑的数据,语料本身的形式、内容会有很多的局限性,这就造成计算的词向量并不具备广泛认知的代表性,也就造成了最初线上标签召回能力差和准确度低的问题)。
  3. 关联关系 - 前面的内容已经提到用户兴趣的描述,在标签的召回环节也会依赖用户的兴趣基础做标签子集的召回,信息 - 标签 - 人存在稳定的映射关系,做到标签的个性展示。
  4. 实验 - 第四部分是关于实验的对照,标签工程的两个核心的指标是:1 标签的召回能力 2 标签到车系的对应关系准确度,所以通过线上用户在标签点击和信息点击环节的数据回溯,可以帮助我们去观测这批选定标签的质量,这也是实验的重点。

3、二手车标签工程详细流程展开如下:

(图 3 - 二手车标签工程整体流程)

流程描述:

阶段1 - 语料的收集

语料的收集可以有多种渠道,我们可以挖掘站内车源信息本身的内容、可以从车相关的新闻/媒体文章中截取相关的内容、可以统计站内搜索的内容/热词、也可以收集公开的口碑/评价信息进行标签的提取,受限于资源和精力的投入,目前我们通过最后一种方式进行语料的收集和完善(这边也会涉及到一些爬虫性能的优化,不做展开)。

阶段2 - 分词

分词是提取标签的过程,是NLP的一个环节,起初关于分词工具的选择,我们对标了jieba、HanLP和LTP,针对相同的语料分词系效果基本一致,受限于商业应用的限制及开发语言的支持,最终考虑使用HanLP作为我们的分词工具,分词的结果经过规则的过滤产出粗选词,这边是人工标注的环节,将业务类的词组进行标注,避免分词过度,也会摒弃问题语料或干扰词,处理后的语料会放回到模型中继续参与分词,分词的过程本身也是训练车品类分词模型的过程。

关于词向量的计算前面也稍微提了一下,词向量的计算结果很大程度上受限于语料的来源,如word2Vec会通过固定窗口长度的上下文预测词条的概率,计算词向量,相同的词条在媒体类文章和口碑类评论两种语料中计算出的词向量是差别很大的,所以后面我们也弱化了通过词向量计算扩展标签的召回能力这种方式,并加入一定的人力成本去做词条的整理和归类(先验知识)。

阶段3 - 标签库

标签库的内容是个持续更新和完善的过程,接收分词的结果,并针对备选词作人工的筛选与分类,去掉无用的词条、错误的词条。

我们会将不同品类的词条进行划分,相近含有的词条会参考线上实验的效果(标签ctr)做取舍,如 “动力嗷嗷 0.00048、动力澎湃 0.00167、动力强劲 0.001164”,参考ctr最终会保留词条“动力澎湃”。

我们也会去掉一些ctr很高但词意表述或者召回含义并不清晰的词条,如“小轿车、颜值、稳重”这类的词条,这些词条不利于我们后续从标签到车系准确关系的建立,词条召回的含义过于发散,相对优质的标签是可以准确表述一类或几类商品,并且这种表述符合大多数人的认知。

从标签的质量角度考虑,我们也尽量不会选择2个字词条,主要以4个字及以上的词条为主,如“动力澎湃、外观拉风、城市穿梭利器、路感清晰、省心省油”等。

标签的筛选需要4个阶段:1 从标签的个性代表度进行筛选、2 从标签到信息的召回能力进行筛选、3 对标签按属性进行分类,比如我们依赖这些词条的描述内容进行划分:描述驾驶体验、感官、配置、商品特征等、4 最后阶段做标签的检查处理。

总体来说,标签库的工作需要对业务有相对深入的理解,带有业务特性的先验知识和决策在这个环节中起到了非常关键的作用。

阶段4 - 场景的反馈

在标签的召回环节,我们同之前第一部分用户兴趣的描述-模型相结合,依托中台的日晷平台进行多组的线上实验,日晷系统支持多层的多策略的实验组合,与工程的接入有良好的切合,配置成本也相对不高。实验的结果结合曝光和用户的点击行为对不同标签的线上效果进行反馈,主要是围绕标签的召回能力和准确率进行的,这个环节的反馈会帮助我们不断迭代标签库内容,在项目较成熟后期,我们也会考虑将这个环节开放产品配置的模块。

4、分词效果的迭代

关于分词部分,大体经历了三个阶段的迭代「语料 - 宝马品牌业务口碑数据」,如下图4描述:

(图 4 - 分词的迭代)

第一版的分词实验是按词性进行的,观测结果并不理想,分词效果如下:

「颜/ 值/ ,/ 还是/ 颜/ 值/ 。/ 新/ X3/ 的/ 前/ 脸/ 很/ 凌厉/ ,/ 侧面/ 比例/ 和/ 腰/ 线/ 也/ 不错/ 。/ 操控/ 让/ 人/ 极其/ 满意/ ,/ 尤其/ 高速/ 时/ 的/ 表现/ ,/ 简直/ 就是/ 越/ 快/ 越/ 稳/ ,/ 开/ 宝马/ 看来/ 的确/ 不是/ 吹/ 的/ 。」

已有的分词器是单纯按照词性进行分词的,接下来,我们需要针对不同词性的组合来进行第二版的分词。

第二版的分词引入了结构化感知机标注框架进行辅助分词,该框架是通过感知机做序列标注任务,配置起来也相对简单和实用,针对类似语料分词的效果如:

「颜值/nz ,/w 还是/c 颜值/nz 。/w 新/a X3/n 的/u 前脸/n 很/d 凌厉/a ,/w 侧面/f 比例/n 和/c 腰线/n 也/d 不错/a 。/w 操控/v 让/v 人/n 极其/d 满意/v ,/w 尤其/d 高速/d 时/Ng 的/u 表现/vn ,/w 简直/d 就/d 是/v 越/d 快/a 越/d 稳/a ,/w 开宝/v 马看来/nr 的确/d 不/d 是/v 吹/v 的/u 。/w」。

从分词的效果来看,如“新X3”、“开宝马”、“高速时”等这类的领域词汇没有被标注出来,从而认为降低了分词的效果。

分词效果的提升是个不断迭代的过程,在标准模型的基础上加大人工标注的投入,分阶段筛选出可用词条,做有放回的语料补充,或通过词性做词组的扩展。在hanlp的基础上我们新加了chelib(车型库)中的品牌车系和汽车的专用词库,并对不影响句子整体表达的副词、连词等词性的分词做了过滤,同时也增加了对负面词语的判定逻辑,在分词质量上有了较大的提升。

(图 5 - 业务品类的标签词)

5. 关于分词与工程部分的结合流程,如下图6:

(图 6 - 与工程部分的结合的流程)

说明:

  1. 基础的语料经过格式的规整存储mysql,规整后的语料数据包含:id、time、city、品牌、车系、内容。
  2. 通过人工标注的方式将业务品类相对固定的词条生成字典,提供hanlp初始化。
  3. 经过初步的分词后的结果产出10w量级的词条,经过去重、过滤及业务侧个性的筛选规则要求,有效分词为5.7w。
  4. 通过词性的标注和词组的扩展流程,产出可用词组,针对这些词组做业务相关性的分析和筛选,并针对筛选后的结果集做聚合,这部分可以认定为基础标签,基础标签结合先线上实验效果的反馈最终会进行评估,筛选稳定优质的线上使用标签。
  5. 配合阶段4也会做词向量的计算,产出词向量矩阵,扩展标签的召回能力,并加入一定量的人工成本进行干预。

6、关于词向量部分

关于词向量:

  1. 词向量描述了目标词组在固定语料基础集上训练的空间位置(多维空间)。
  2. 可以通过欧式或cos计算标签之间的空间距离,帮助我们找到距离相近的标签。
  3. 距离相近的标签一定程度上可以帮助我们扩展标签词的信息召回能力,提升召回率,并在信息返回上提供了一定新颖信息的探索能力。
  4. 目前我们采用word2vec进行词向量的计算,word2vec是目前比较普遍的词向量算法,word2vector 输出的结果可以理解为当前的词在固定语料中的空间位置,很多人都有一些了解,它包含CBOW/Skip-gram两种训练模式,是一个结构简单的神经网络,通过上下文预测当前词、或者通过当前词预测上下文,感兴趣的可以参考下word2vector的原理、训练过程。

【词向量的生成过程】:

(图 7 - 词向量的生成)

前面提到词向量可以理解为:目标词条在当前语料中的空间位置,以“我”字为例在我们语料中训练后100维的词向量可表示为如下:

(图 8)

通过词向量扩展标签的召回能力:

通过对已选标签词向量的计算,生成词向量矩阵,这可以帮助我们发现当前语料基础上的相似标签,以扩展标签的召回能力,如下图9:标签3与标签2、标签4词向量接近,那么我们可以认识车型2、车型3、车型6也在标签3的召回能力中,当然这个过程也需要介入一定量的人力查验的工作,check相关车系、车型的符合度,进而调整标签同车、车型的映射关系。

(图 9 - 标签相似性的扩展)

7、标签库

标签库的数据层级的设计对应了二手车的车型库的基本层级结构,映射关系分了3层:品牌 → 车系 → 车型,从数据的层级结构来看,标签依次对应了品牌、车系、车系,可以按不同的维度层级进行聚合,生成相关的检索条件,从标签数据的存储格式:ID | name | 车型ids | 车系ids | 品牌ids 可以发现标签的召回顺序依次是车型、车系、品牌,在后来的实际应用中,可以认定准确描述车型级别的标签很少,并且不具备良好的召回能力和泛化能力,所有我们目前考虑的召回层级只到车系这一级别。如图10:

(图 10 - 标签库的层级关系)

标签库本身是个不断迭代和自我学习的过程,清晰的层级映射服务于线上的召回场景,并结合线上效果的反馈提升和优化标签子集,主要参考的指标仍然是召回能力和准确率,本身用户的行为就是一个很好的反馈,所以标签库的实验也是一个ctr和质量提升相互促进的过程。另外目前二手车标签挖掘的内容相对比较基础,初步搭建工程的同时实现了关于上面全流程的几个核心的节点,但可参考的指标还没有明显的提升,后续如果资源允许,我们也考虑加大这部分的投入,将这部分配置工具化,提供给产品同学可操作与观察的配置平台,这这部分实验的工作快速有效的流程化进行。

(图 11 - 标签库的更新)

8、从场景、标签服务、用户模型三个模块来简单说明目前我们线上标签召回的时序:

用户的基础行为topN会映射为标签,通过相似度扩展标签的范围,这样我们将人和info通过标签建立关联,标签映射ses查询条件,直接用于相关info的召回,召回时序如下图12:

(图 12 - 标签召回的时序)

说明:

  1. 流量入口我们选取的是二手车m页的第二页曝光内容,在feed流中插入实验的标签区域,该区域的曝光会携带用户信息(cookie、设备信息等)首先从标签服务拉取标签信息,用户的身份信息会结合用户的模型进行兴趣召回,这个点是同之前我们的说到的用户兴趣描述相结合的,基础用户数据是IDMapping与相关设备信息、cookie、tel的映射,保存了IDMapping到用户兴趣的模型,标签服务通过用户兴趣描述的topN(检索条件)反向查询标签,作为标签的召回子集反馈给场景。针对无行为用户(新客)或行为较少的用户,就需要考虑标签的补足,补足的标签主要是从按地域热门标签中抽取。
  2. 标签曝光后,用户通过标签的点击做车源信息的召回,召回的顺序是从车型 → 车系 → 品牌,这边的信息召回也会结合广告贴策略有所侧重,召回能力不足时,同样需要考虑补足的能力,比如通过词向量召回相似或热门召回更多的信息,相同属性及语意相似的标签,我们也会保存关联的关系,如:动力澎湃 - 动力强劲、外观拉风 - 外观拉轰、外形威猛 - 肌肉车,后者虽然不在线上召回的子集,但却可以帮助提升召回的能力。
  3. 车源信息的曝光结合用户的点击行为作为我们回溯模型的