查看原文
其他

标签会说话?揭秘58本地服务标签挖掘实践

岳鹏涛 58技术 2022-03-15

导语

本文主要介绍了标签挖掘过程中的实践方法,包含基于模型的挖掘和基于统计规则的挖掘方式及其适用的场景。希望对大家有所帮助和启发。


背景

什么是标签?标签是通过对帖子内容分析得到的高度精炼的特征词或短语,将帖子内容标签化可以突出帖子特性,实现帖子内容结构化,帮助用户更快定位到所需要的服务,提升用户体验。
在整个标签挖掘过程中,我们首先对中文分词进行了选型,对比了多种分词工具的分词效果,综合多方考虑,最终选择使用HanLP作为分词工具包应用到标签挖掘工作中。在标签挖掘实践中,我们迭代了相似词、组合词、热搜词等方案,不断丰富标签系统。最后也是目前我们的主要工作是对标签的优化,提升标签质量。

中文分词

中文分词是将汉字序列切分成一个个单独的词。在英文中,单词之间是用空格分割的,但是中文没有明显的分割符,因此我们就要对一句话进行分词,比如“北京小红帽搬家”分词序列为:“北京”、“小红帽”、“搬家”。
目前已有数十种开源分词工具,我们选择了其中的四种:HanLP、IK、Ansj和jieba进行了对比。评价一款工具的好坏,需要一个黄金标准,在此我们选择了最具权威性的分词结果——SIGHAN和人民日报2014年的分词数据源。首先对数据源进行预处理,一是去除数据集中的符号(标点符号、特殊字符等),二是不拆分标准数据集中的专有名词。评测指标有准确率(Precision)、召回率(Recall)、F值(F-measure)和错误率(ErrorRate)。具体对比结果如下表所示。

4种分词工具分词效果对比表1

分词系统

Precision

Recall

F-Measure

ErrorRate

HanLP

0.803

0.803

0.803

0.197

IK

0.739

0.741

0.740

0.262

Ansj(crf)

0.927

0.929

0.928

0.074

jieba

0.803

0.804

0.803

0.198

数据源:SIGHAN,数据量498KB

4种分词工具包分词效果对比表2

分词工具

Precision

Recall

F-measure

ErrorRate

HanLP

0.838

0.856

0.847

0.165

IK

0.717

0.753

0.735

0.297

Ansj(crf)

0.727

0.803

0.763

0.301

jieba

0.758

0.802

0.779

0.256

数据源:人民日报2014数据,数据量10.7M

使用两份不同的分词数据源得到上述两张分词效果对比表,由表1可以看到Ansj的分词效果最好,HanLP与jieba的分词效果相当,IK分词效果最差。由表2可以得出HanLP的分词结果最好。因此我们选择使用HanLP作为我们标签挖掘的基础分词工具,还可以根据业务调整其开源代码,可更好的适配业务场景。由于时间有限,其他分词工具对比可参考文献1。

标签挖掘演进

确定了分词工具,我们开始进行标签挖掘,数据源统一是黄页帖子IMC日志数据,因为黄页二级类目较多,类目间关联性较低,因此分类目训练模型,并实现自动化迭代。




标签挖掘及审核流程图
1. 找相似挖掘
找相似挖掘的思路来源于前期产品同学给出了重点类目的一批标签,基于此,我们尝试使用与已有标签相近的词挖掘新标签。首先从HDFS中读取前N天的日志,分品类对数据进行清洗,根据帖子图片个数、帖子内容长短对帖子实现初步过滤;然后使用HanLP进行分词,根据词性过滤人称代词、形容词、数词等,通过TF-IDF抽取帖子关键词,训练词向量模型,最后计算与种子词相似的词作为新的备选词。




相似标签挖掘流程图
这种挖掘方式依赖种子词,需人工挑选标签作为种子词,目前已扩29个类目,备选词挖掘效果较好,70%的备选词可直接作为标签。
2. 组合词挖掘
组合词是指分词工具分出的最小单元词组合而成的新词。判定一个组合词是否成词,我们使用了基于统计规则的方式,计算组合词的凝固度、自由度和词频。比如“ABC”是个新词,则ABC一起出现的频率应远大于词各自出现的频率,这就是凝固度,计算公式为:
自由度可以理解为组合词可以成词(即作为一个整体),它的信息熵的计算,信息熵越大成词率越高。词频不必多说,就是组合词出现的次数,详情可参考文献2。
该种挖掘方式适用于发现未登录词,根据领域语料可以发现具有特色的领域词,比如搬家品类发现“厢货车”等新词,新词效果也取得较好结果[1] ,其中经审核有90%的备选词可直接作为标签入库,提高了人工审核效率。
3. 主题词挖掘
同找相似词一样对帖子数据进行预处理,训练LDA模型,抽取各个类目的主题词作为备选词,但效果欠佳,不推荐使用。
这个方式可以发现帖子主题词,但设置的主题个数对挖掘效果影响较大。
4. 热搜词挖掘
基于用户搜索词日志抽取TopN展示pv的搜索词作为热搜词,去除停用词并做同义词归一化处理,将热搜词作为备选词。
5. 图片标签挖掘
抽取展示TopN的帖子数据,调用第三方图片识别的接口获取图片标签,将符合规则的标签作为备选词。
综上,找相似挖掘的方式应用于有优质标签的类目;组合词挖掘与主题词挖掘用于没有标签的类目。但是备选词若要入库作为标签需要经过覆盖率,网站爬虫等审核方式。

标签优化

通过以上方式我们得到了足够的标签,但是入库的标签还是存在多种问题,比如:多标签同义,负面词标签等,因此对标签数据进行修复亟待解决。




标签优化流程图
1. 同义词挖掘
本文的同义词挖掘主要综合多种方式发现同义词,具体如下:
a) 同义词林
数据来源包括哈工大扩展版词林和词林包,词林中包括同义词和近义词。
b) 字面相似规则
翻转规则:基于业务分析,大部分标签属于组合标签,组合标签是有两个或多个基础词组合成的标签,存在基础词相同但顺序不同的同义标签,基于此我们提出根据翻转规则发现同义词。例如:“空调维修”和“维修空调”表达的是同一个意思,可以归为一个标签。
编辑距离:根据标签与标签之间的编辑距离发现同义词,使用莱温斯坦距离或jaro距离。将编辑距离符合一定阈值的多个标签归一化。
c) 第三方同义词服务
http://www.cilin.org/jyc/,该服务同义词较少,同时受网络限制,得到的同义词较少。
d) 词相似度计算
根据已有词向量,计算标签之间的相似度,当相似度达某个阈值时,就认为两个标签是同义词;针对未登录词的词向量,借鉴了fasttext 针对OOV问题的处理方式,使用ngrams词取平均。
通过以上几种方式综合,可以找到多对同义词,但是同义词与近义词的关系界限模糊,大部分标签无法界定是同义词还是近义词,在挖掘过程中近义词项较多,造成人工审核成本过高,因此我们加入强规则以降低审核成本。
2. 负面词挖掘
根据否定词,比如(“不”、“杜绝”等等)、词性模板和词频发现负面词,但错误率较高,建议审核后入库。
除了以上两种方式对标签进行优化之外,我们还依据线上用户对标签的反馈行为数据,计算标签的权重,每天更新标签的动态分值。

总结

本文主要介绍了标签挖掘过程中的实践方法,包含基于模型的挖掘和基于统计规则的挖掘方式,及其适用的场景。在标签优化实践中提出同义词挖掘和负面词挖掘的方案。
目前黄页有212个二级类目,标签已覆盖了210个二级类目,共9W+标签,支持了前期工程上的使用,但仍存在很多不合适的标签,如何挑出好标签,去除坏标签,我们一直在探索。

参考文献
1. 11款开放中文分词引擎评测(https://www.cnblogs.com/croso/p/5349517.html)
2. 基于SNS的文本数据挖掘(http://www.matrix67.com/blog/archives/5044)

END

阅读推荐
1.埋点治理:如何把App埋点做到极致?
2.独家|React Native 无限列表的优化与实践
3.小程序时代:如何跨多小程序开发协作?
4.如何避免重复造轮子,打造一个属于自己的组件库?
5.基于有限状态机的广告状态管理方案及实现

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存