两种简单有效的标签选择方法
不论是通过搜索还是推荐,用户看到了很多我们用各种逻辑和理由展示给他的物品,他只从中消费了一部分物品。那么问题来了,到底是那些特性吸引了用户消费呢?
一种简单粗暴的办法是直接把用户产生过行为的物品标签累积在一起。但是这里要说的是另一种思路。
我们把用户对物品的行为,消费或者没有消费看成是一个分类问题,比如点击是“正样本”,“未点击是负样本”。用户用实际行动帮我们标注了若干数据,那么挑选出他实际感兴趣的特性就变成了特征选择问题。
最常用的是两个方法:卡方检验(CHI)和信息增益(IG)。基本思想是:
-
把物品的结构化内容看成文档。
-
把用户对物品的行为看成是类别。
-
每个用户看见过的物品就是一个文本集合。
-
在这个文本集合上使用特征选择算法选出每个用户关心的东西。
CHI
CHI 就是卡方检验,本身是一种特征选择方法。
前面的 TF-IDF 和 TextRank 都是无监督关键词提取算法,而 CHI 则是有监督的,需要提供分类标注信息。为什么需要呢?在文本分类任务中,挑选关键词就得为了分类任务服务,而不仅仅是挑选出一种直观上看着重要的词。卡方检验本质上在检验“词和某个类别 C 相互独立”这个假设是否成立,和这个假设偏离越大,就越说明这个词和类别 C 有关联,这个词当然就是关键词了。
计算一个词 Wi 和一个类别 Cj 的卡方值,需要统计四个值:
-
类别为 Cj 的文本中出现词 Wi 的文本数 A。
-
词 Wi 在非 Cj 的文本中出现的文本数 B 。
-
类别为 Cj 的文本中没有出现 Wi 的文本数 C。
-
词 Wi 在非 Cj 的文本中没有出现的文本数 D。
听起来有点绕,我把它画成一个表格更加一目了然。
然后按照如下公式计算每一个词和每一个类别的卡方值:
关于这个卡方值计算说明几点:
-
每个词和每个类别都要计算,只要对其中一个类别有帮助的词都应该留下。
-
由于是比较卡方值的大小,所以公式中的 N 可以不参与计算,因为它对每个词都一样,是总的文本数。
-
卡方值越大,意味着偏离“词和类别相互独立”的假设越远,靠“词和类别互相不独立”这个备择假设越近。
实现卡方算法时候,需要稍微对原公式做一定的变化,降低实现复杂度。观察表格中,有些统计量是不好统计的,比如“不属于类别 $C_{j}$ 且不包含 $W_{i}$”这个统计量。我们借助另外的统计量来计算卡方值,目的是对语料库一次遍历就得到每个标签的卡方值。
只需要统计这几个量:
-
A:类别 Cj 中包含词 Wi 的数量;
-
M: 类别 Cj 的语料数量,也就是 A+C 的值;
-
Q:包含词 Wi 的语料数量,也就是 A+B;
-
N:全部语料数量
于是原公式中的 B,C,D 分别就是:
-
B = Q - A
-
C = M - A
-
D = N + A - Q - M
每个标签与每个类别的卡方值计算方式为:
python 实现如下:
IG(信息增益)
IG 即 Information Gain,信息增益,是一种有监督的关键词选择方法,需要有标注信息。要理解信息增益,理解了信息熵就差不多了。
如何理解信息熵?我们还是以上述表格示例说明。一批文本被标注了类别,那么任意挑出一条文本问你,“猜猜这是什么类别?”如果原来每个类别的文本数量都一样,那肯定最不好猜,如果其中一个类别的文本 C 数远远多于其他类别,那么你猜这条文本属于类别 C 就很可能猜对。这两个情况区别就在于信息熵不同:
-
各个类别的文本数量差不多时,信息熵就比较大。
-
其中少数类别的文本数量明显较多时,信息熵就较小。
再进一步想一件事,如果从这一堆文本中再挑出包含有词 W 的文本,再来猜任意一条文本的类别时,仍然会有上面两种情况。这时候考虑一个情况:如果在整个文本上的情况属于情况 1,但挑出包含词 W 后变成情况 2 了,那么你自然会想:这个词 W 是不是非常有用?因为,有了它我们就能以较高的成功率猜对任意一条文本的类别了。
对,上面这个思考过程就是信息增益的思想,信息增益计算分为一下三步:
1. 统计全局文本的信息熵,通常是按照类别的分布计算,计算公式为:
其中,$p(C_i)$ 是类别在语料库中的概率
2. 统计每个词的条件熵,就是知道了一个词后再统计文本的信息熵,只不过这里要分别计算包含词和不包含词两部分的信息熵,再按照各自文本比例加权平均,计算公式为:
计算待评估标签在整个语料库上的概率 $p(tag)$,以及在出现标签的语料库子集中的熵和在不出现标签的语料库子集的熵,最后按照概率加权平均。
3. 两者相减就是每个词的信息增益。即:
信息增益应用最广就是数据挖掘中的决策树分类算法,经典的决策树分类算法挑选分裂节点时就是计算各个属性的信息增益,始终挑选信息增益最大的节点作为分裂节点。
卡方检验和信息增益不同之处在于:前者是针对每一个分类单独筛选一套标签出来,后者是则是全局统一筛选。
这些方法都是在离线阶段批量完成的,把用户的画像生成配置成离线任务,每天更新一遍,次日就可以使用新的用户画像。对于一个新用户,能不能在他刚刚进入产品时就快速生成一个简单的画像呢?答案是:当然可以。后面的文章中会讲到这个 MAB 问题。
信息增益用 Python 实现如下:
还有一句
两个标签选择方法,实现简单,原理清晰,居家旅行必备,你值得一试,或者加入我们团队一起试试其他方法,我们在折腾的事情有:对话系统,智能客服,知识图谱,语义理解,信息流,搜索排序……凡所应有,无所不有。
时间:2019-03-10 19:31 来源: 转发量:次
声明:本站部分作品是由网友自主投稿和发布、编辑整理上传,对此类作品本站仅提供交流平台,转载的目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,不为其版权负责。如果您发现网站上有侵犯您的知识产权的作品,请与我们取得联系,我们会及时修改或删除。
相关文章:
- [机器学习]人工智能十年回顾:CNN、AlphaGo、GAN……它们曾这
- [机器学习]机器学习基础图表:概念、原理、历史、趋势和算法
- [机器学习]20年以后,半数工作将被人工智能取代?这些“高危行业”有哪些
- [机器学习]人工智能十年回顾:CNN、AlphaGo、GAN……它们曾这
- [机器学习]年终总结:2021年五大人工智能(AI)和机器学习(ML)发展趋势
- [机器学习]神经科学如何影响人工智能?看DeepMind在NeurIPS2
- [机器学习]美俄人工智能军事应用
- [机器学习]民调不靠谱?人工智能预测拜登获胜
- [机器学习]ResNet、Faster RCNN、Mask RCNN是专利算法吗?盘点何恺
- [机器学习]YOLO算法最全综述:从YOLOv1到YOLOv5
相关推荐:
网友评论: