或者

实例解析关键词聚类的方法策略

作者:数风流人物 浏览:204 发布时间:2018-04-11
分享 评论 0

最近,接手了一个大型的网站,首先要做的就的对这个网站的流量来源进行分析,这其中最繁琐的莫过于对来源关键词的聚类整合了。


所谓关键词聚类就是以领域特征明显的词和短语作为聚类对象,在分类系统的大规模层级分类语料库中,利用独创的文本分类的特征提取算法进行词语的领域聚类,通过控制词语频率的影响,分别获取领域通用词和领域专类词。


所以,要想做好这类做关键词的聚类,就一定要有一些基础信息,基础数据作为背景。在此,我就借助博客的平台跟大家实例解析关键词聚类的方法策略:


1、百度商业词聚类模型


现在对于一些医疗SEO来说看行业新闻,大家经常讨论一个话题就是百度医疗行业的收入贡献比是多少?,其实,爆个大料给大家,在2005年甚至2006年之前,百度自己都不掌握这类数据。


当时百度有一个简单的客户分类,是客服提交的,然后我们看了一下消费的行业分布,结果显示超过50%属于其他分类,这个结果基本上就没法看了。


然后我就琢磨,用商业词能不能直接聚类为行业,当时我在产品部门,合作反欺诈点击的工程师是张怀亭,这是个算法高手,他当年的毕业论文就是关联规则和聚类算法,我就去请教他,他说了一堆,我大部分没听懂,但大概要点知道了一些,然后找他要了论文看了看,也没太看明白,凭借自己粗浅的理解我就动手了,然后这个还真做成了。


我的出发点就是假设客户本身具有行业属性(如果这个假设不存在,那就没辙了),我认为每个客户提交的关键词,彼此是有关联的。某两个关键词如果同时被不同的客户提交,其关联性就会随之增加,这个是最基本的一个定义,叫做共同推举数,也是最容易算的一个值。


但是仅仅依赖于共同推举数有一个问题,就是会导致很多词都和热门词关联,这是不合理的,我记得当时好像是某网上书城的推荐购买那一栏,明显都是热门书籍,似乎也是基于共同推举数做的关联。


问题1:A和B有50个共同推举,A和C有30个共同推举,但是B这个词是热门词,共有2000个客户提交;而C是冷门词,只有50个客户提交,请问A和B的关联度高还是A和C的关联度高?


问题2:客户1提交了10000个词(类似阿里真的是这么提交的);客户2提交了20个词,客户1所提交的10000个词的彼此关联度和客户2之间提交的是否一致?


考虑这两个问题,就需要做权值调整了,然后再计算词与词的关联值。那么,权值该怎么定呢?


对于这个权值的设定做了一个程序,实现程序只用了不到一个下午,然后跑一遍程序大约1个小时到2个小时(那时候百度的商业词还没那么多,客户也没现在呢么多,我的程序其实效率不够好)。


然后我做了一个web展示界面,就是任意输入一个词,列出其关联词及关联值,目测坏案例,分析参数的问题,然后修改参数,再跑一遍。跑了n多遍,大约两三天时间,觉得结果差不多了,词与词的关联建立起来了,考虑第二步,聚类。(当时认识了很多奇葩的商业词,大开眼界,对互联网行业认识彻底改观,比如白小姐,黄大仙 ,这个领域就不再说了)


觉得聚类的做法就极为简单了,把每个行业的代表词(与很多词关联的)抽取出来,当作核心词,然后基于词的关联,延展一级关联、二级关联、三级关联,比如A与B关联,B月C关联,C与D关联,计算彼此权值衰减,得出A与D的关联。尽可能把所有词聚合到核心词上,作成行业词表。


最开始核心词我从库里挑与其他词关联度较高的有20多个,然后多级权值衰减也是假设的,然后跑一遍,看两个指标,第一、覆盖率是多少?第二、准确率如何?选取每个行业关联度最低的词(坏案例的密度较高,有些词会同时被两个行业核心词关联,但权值计算会出问题,导致被并入错误的行业)去看,选择没有被关联上的词去看,分析权值的问题,然后修改衰减参数,增加核心词。这个程序我也是写了一个下午,但是调试权值和增加核心词,做了一个礼拜。


然后,百度商业分析部终于可以推出,基于行业的收入报表。我自豪的说一句,百度做收入行业分布,是基于我的关键词分类算法开始的,当然,今天他们鸟枪换炮了,我的算法效率不够(初期还行,到更大的词规模和更多客户就不行了),覆盖率和准确度并不十分完美(坏案例还是一直存在的,不过尽可能控制在消费总额的10%内,对热门词比较准,但对一些长尾控制不住)。不过、我是在产品部门干的这个活,呵呵。


后来,这个模型还用于智能起价,下面再说一下关于智能起价的一些事。


智能起价其实是百度一个失败的商业尝试,对业务的伤害非常大,但是初期的设计理念并没有大问题,百度当时基于关键词的竞价(当时的竞价模式非常简单,别跟我说现在百度的竞价模式不这样,我明白),对商业价值的挖掘是有缺陷的,比如一些超级热门词,3毛一个点击也是卖不掉的(比如电影,小游戏)。是不是可以便宜点卖呢?对一些非但是价值很高的词,因为发现的客户少,所以起价很低,而其商业价值并不弱,比如 最新SEO技术的报价 这样的长尾词可能参与竞价的只有一两个客户,但是其商业价值不会低于 SEO技术 这样的高价词。


所以,智能起价真正的目的,是给热门非商业词降价,给冷门长尾商业词提价。


那么我就提出一个观点,关键词的起价应与他关联词的平均点击价格相关。然后他们拿这个模型去跟领导讲,很快就通过了。(牢骚一句,赵某童鞋去讲的,被领导问毛了,就说算法是技术部门的,他也不是很清楚,他去讲的时候明明是我提供的原型! 不过后来技术部门又做了一版,但那是后话了)


智能起价模型失败的原因,有两个原因:


(1)、他们上的时候为了提高对非商业词的覆盖率,硬把关键词包含规则加上去了。导致了一些坏案例。(比如平板,平板电脑,并不是一个行业)。当时效果很不好,领导很不爽,批评我的坏案例太多,列了一堆,我挨个去查,所列的没有一个是我算法算出来的,都是词包含包进去的。其实这个问题还不算严重,词包含固然有坏案例,但是影响面极为有限。


(2)、就是领导太急迫了,这个事情我的建议是,起价权值低一点(通过算法计算每个词关联平均价格,然后关联平均价格*起价参数=该词起价,这是基本公式,起价参数全凭个人判断),看效果慢慢调整,结果领导一上来设的相当高,所以,客户极大不爽,各种擦屁股持续了几个月,百度那个季度实在可怜。


凤巢之后,智能起价终于寿终正寝。凤巢的方案更完美,更综合,这是必须承认的。


2、搜索词/指数词的聚类


当然,除了以上所述的,也可以基于搜索网民的提交来计算关联度,但是首先,网民的搜索行为,并不如客户提交商业词行为那样具有分类属性。其次,我当时的处理能力也搞不定这样的数据规模的关联计算。


那么基于什么呢?基于关键词+搜索量。


这事又是怀亭帮忙,当时他帮我做所有搜索记录的整理,包括汇总和反刷处理,除了一些ip,客户端标记清理外,最重要的还有一个规则,是基于渠道分布和客户端分布规则。


正常的搜索词,来自于不同渠道的比例应该是遵循一个合理分布比例的,所谓渠道包括百度官网,hao123,其他联盟渠道等等,如果严重不遵守这个比例,基本就是刷指数了,但这个规则没有应用到百度指数上,至少当时没应用到,原因似乎是这样的,当时几乎所有榜单上的热门女星,似乎都有经纪公司或粉丝团的刷榜行为。所以当时我手里有百度所有搜索词的搜索数据(清理掉刷指数的数据),而且每日更新。


那么怎么分类呢?如果做全分类,我真做不到,但是热门词是可以做的。这里有一个要点,就是每个热门关键词,都不是孤立存在的。而这些热门词的相关词(基于词包含)里,会携带一些表明其行业属性的词根,然后可以回溯这个热门词的行业属性。


举个例,比如某一个热门游戏,魔兽, 会有大量诸如魔兽攻略,魔兽新服,魔兽道具,魔兽外挂等等相关词。通过这些相关词的词根(可以对词根标记分类属性)回溯原词,以及原词所有相关词的分类。比如电视剧,常见词根有 第**集,最新集 ,一个小说,常见词根有 第**章 , 最新章节 等。


当然,还有一个情况,有些词是多含义的,比较典型如苹果(IT产品,电影,水果)。武林外传(电视剧,游戏)等。通过词根的分析,并基于不同词根下的搜索量加权,得到该词的搜索属性,偏向哪个领域,或各个领域的比例,是的,不是很精确,但是还是有一定价值的。


建议的实现方法就是,针对每个未分类的热门词,去遍历包含他的所有词,然后基于预先定义的分类词根去套,对包含每个分类词根的长尾词根据搜索量加权,汇总得到该热门词的分类属性,以及覆盖包含该热门词的所有长尾词的分类属性。


这个算法思路,不适合对长尾词挖掘(含有行业属性词根的长尾词可以覆盖,但是毕竟覆盖率不够),但是对百度热榜可以有很好的帮助,对热门词的挖掘和自动分类还是有一定把握的,当时不少人抱怨我说百度热榜更新不及时,一些新游戏都很火了也进不了热榜,我就拉着百度热榜的产品经理和技术分享过,还提供过原型代码,然后也没有然后了。


至少当时,我能不断看到网民搜索行为的分类比例(百度长尾词太多,我的模型覆盖搜索量只有50%左右),以及变化趋势,比如眼看着视频类的搜索比例快速增长。