UGC数据挖掘策略分析

背景

UGC是“user generated content”的缩写,可译为“用户生产内容”,即网友将自己DIY的内容通过互联网平台进行展示或者提供给其他用户。在UGC模式下,网友不再只是观众,而是成为互联网内容的生产者和供应者,体验式互联网服务得以更深入的进行。

UGC数据是糯米业务经营过程中沉淀下来的宝贵数据资产,基于UGC的数据,可以挖掘出用户情感分布、用户偏好、以及优质语料等有价值的信息。基于这些数据挖掘,可以提升用户体验,与百度内容生态结合,构建出更具想象力的商业形态。

UGC数据挖掘的技术难点有:1)、UGC主题比较分散,2)、预测UGC所表达的感情色彩,3)、关键词稀疏,相似度计算困难。

针对上述难点,解决方案是: 将多主题的UGC切割为多个单主题子UGC;运用情感分析手段预测用户表达的感情色彩;在词面相似度的基础上,应用word2vec模型从语义方向计算关键词之间的相似度。

特殊说明:本文以美食类型为案例进行UGC分析,其他品类均参考美食品类分析UGC。

原理

UGC数据分析主要由情感分析、UGC切割、关键词召回三个步骤组成。情感分析能将UGC进行情感色彩分类,方便提取正向、积极的UGC;UGC切割策略将UGC切割为多个子UGC,有利于召回UGC所描述的推荐菜并提高推荐菜的召回率;本文关键词召回将以美食品类推荐菜召回为例,以所有UGC为语料训练word2vec模型,能够有效地召回UGC对应的推荐菜;最后对单个推荐菜下的所有UGC进行特征提取,并计算UGC的评分,整体流程见图1。

图1

1、预测UGC感情色彩:情感色彩可以是正向、中性、负向,也可以是具体的人类的情感,如喜悦、愤怒、平静等。从正向UGC可以推断用户对描述对象有好感倾向,而负向UGC则是用户在吐槽描述对象,提取正向UGC作为推荐菜的描述。

2、UGC主题比较分散:UGC都可能描述多个推荐菜,推荐菜出现的顺序、次数等特征并不能帮助我们预测该UGC真正要描述的推荐菜。例如:『鸭头很好吃,配菜也好,现炸牛肉丸几乎都是肉,豆腐大多都没动』,该UGC描述了四个菜,但这并不是我们的期望,我们真正想要的是一条UGC对应一个推荐菜,并且在UGC中尽量不提及其他推荐菜。那么将UGC切割将是一个不错的办法,切割结果将在UGC切割策略部分讲解。

3、关键词相似度计算:根据推荐得到的核心词特征比较稀疏,根据稀疏特征召回推荐菜准确率非常低,而且计算量大。 我们的做法是将所有UGC作为训练语料,训练word2vec模型,利用word2vec计算核心词和推荐菜的相似度,从而为子UGC召回推荐菜。这样UGC的召回率大大提升,提高整体UGC质量。经过该策略后,一个推荐菜能够得到多条子UGC,因此对UGC排序是下一个需要解决的问题。

4、UGC排序:排序范围是某一个门店下某一个推荐菜的所有UGC,主要从情感得分、推荐菜与UGC的关联度(核心词与推荐菜的相似度)、UGC长度特征进行综合排序。在前面的过程中已经算得情感得分、UGC关联度,在此只需要计算UGC长度特征所得分。假设UGC长度服从正态分布,按照正态分布密度函数计算各UGC长度得分,正态分布图见图2。

图2

5、评估结果:未引入UGC切割策略、word2vec模型与引入后,UGC的召回率和准确率均有大幅提升,评估方式为PM抽样评估。评估结果如图3:

图3

UGC切割策略

UGC切割过程中需要解决的最大问题是:1、判断一个UGC中描述了多少个核心词;2、计算菜与菜、菜与句子、句子与句子的相似;3、对常用的转折词、语气词、连接词该怎么切。下面介绍切割的具体思想和步骤。

1)、将糯米全量推荐菜切割为更短更多的核心词(菜);2)、UGC按照自然标点分割成片段,构成片段的序列;3)、每个片段与核心词进行匹配;4)、按照先验的知识,描述该核心词的片段,总在这个核心词的后面,利用核心词把句子分割成子句;5)、如果相邻句子的核心词是相近的(核心词距离),两个子句合并成一个子句;6)、如果句子包含转折词或者非描述核心词,直接删除该片段。例如上面的示例UGC切割后将有4条子UGC:[“鸭头很好吃”,”配菜也好”,”现炸牛肉丸几乎都是肉”,”豆腐大多都没动”],子UGC对应的核心词分别是:[“鸭头”,”配菜”,”牛肉丸”,”豆腐”]。UGC切割缩略图如图4:

图4

关键词召回

1、word2vec模型

word2vec是一个计算word vector的开源工具,算法的背后是一个浅层神经网络。word2vec模型有两种构建词向量模型:CBoW模型和Skip-gram模型。word2vec可以在百万数量级的词典和上亿的数据集上进行高效地训练;该模型得到的训练结果——词向量(word embedding),可以很好地度量词与词之间的相似性,本文主要就是运用词向量计算核心词与推荐菜的相似度。

CBOW模型是给定上下文预测一个中心词,比如:给定“猫 喜欢 鱼”, [“猫”,“喜欢”, “鱼”]为上下文,而我们需要去预测和生成的中心词为”吃”。Skip-Gram模型是给定中心词预测它周围的词,与CBOW模型刚好相反。对于这两种模型,对于数据集比较小的情况CBOW性能要比Skip-Gram模型好,但是对于数据集比较大时,其性能要差一些。无论是CBOW模型还是skip-gram模型,都是以Huffman树作为基础的。

下面主要介绍下word2vec模型训练流程、词向量、Huffman树、CBOW模型、skip-gram模型。

2、word2vec模型训练流程

先介绍一下word2vec的训练流程,这个模型拆解步骤并不多,主要简单介绍主要处理过程。

第一步:将语料分词,我们这里是借助公司的自然语言处理接口(NLP)。过滤无意义分词,比如纯数字、乱码等,这样分词后语料比较干净、噪音较小;

第二步:扫描分词后的语料,统计每个词的频数,保存在hash表里;

第三步:根据词的词频建立哈夫曼树;

第四步:初始化词向量与哈夫曼树非叶子节点的向量,向量的维度是我们给定的参数size;

第五步:训练,也就是迭代最优化。回到语料库,逐一读取所有分词,用梯度下降算出梯度,再更新词向量的值、非叶子节点处向量的词。

在实际应用中非常简单,例如使用python的gensim包,能很容易训练、运用一个word2vec模型,预测结果如图5:

图5

3、词向量

word2vec所有词语投影到K维的向量空间,每个词语都可以用一个K维向量表示,通常将词语表示成向量有两种方法:one-hot Representation、Distributed Representation。

假如语料库里一共有N个词,one-hot表示即是为每个词分配一个唯一的索引,并且将每个词表示为N维的向量,在该词索引对应的维度值为1,其余维度均为0,如图8。这种简单的表示方法已经可以解决相当一部分NLP的问题,不过仍然存在不足,即词向量与词向量之间都是相互独立的,我们无法通过这种词向量得知两个词在语义上是否相似,并且如果N非常大,这种高维稀疏的表示也有可能引发维度灾难。为了解决上述问题,就有了Distributed Representation。one-hot向量如图6:

图6

word2vec通过Distributed Representation将词表示为向量,即通过训练将词表示为限定维度K的实数向量,这种非稀疏表示的向量很容易求它们之间的距离(欧式、余弦等),从而判断词与词语义上的相似性。如K=3时,我们得到的实数向量可以是[0.5,0.22,0.7]。

4、Huffman树

哈夫曼树是一棵最优二叉树,哈夫曼树中的每个叶子节点都有一个权值,并且所有叶子节点的权值乘上其到根节点路径的长度的累加和最小。因此权值较大的叶子节点往往比较靠近根节点。每个词汇最终都是哈夫曼树的叶子节点,词频就是相应的权值,所有的非叶子节点代表了某一类的词,如图9中的Wsyn1,每一个Wsyn1也是与叶子节点的词一样,为K维的向量。哈夫曼树建立好以后,每个词都会有一个二进制的哈夫曼编码,用于表示从根节点到该词汇的路径。比如我们假设往左子节点走编码为0,往右为1,下图中红框内的词的哈夫曼编码就是101。

图7

5、CBOW模型

本文介绍的CBOW模型、skip-gram模型都是基于hierarchical softmax框架。CBOW模型图如图8:

图8

(1)这里的context(w)表示上下各c个词,总共2c个词,每个词假设为m维向量;

(2)Project Layer对2c个词向量进行累加;

(3)输出层是一棵哈夫曼树,叶子节点表示语料中的词,每个词的出现频次作为权重进行编码;

(4)哈夫曼树的设计是为了优化传统神经网络算法的计算效率问题。

6、skip-gram模型

模型图如图9:

图9

(1)Input Layer以及Projection Layer都是当前词的词向量,m维;

(2)Output Layer跟CBOW一样,都是哈夫曼树。

总结

基于UGC的数据,我们能够挖掘更有价值的业务数据,为糯米业务创新和流量变现提供了数据支撑。UGC挖掘技术也还在进一步迭代、优化中,希望有识之士能够提供更多优秀的UGC挖掘技术或建议,以挖掘更有价值的数据为糯米的业务助力。

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180306G0IIVE00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券