在很多网站中我们看到有文章推荐功能,有的网站中还使用的无觅插件或百度的脚本挂件,然而推荐出来的文章却存在两个问题:相关性不大,不能引起读者兴趣。 那么,有没有一种方法,提高相关文章的推荐吻合度呢?答案是有的。 我还见过很多博客中放出的根据标签来推荐相关文章的代码,这种方法应该是比较好的,但是问题是,很多博主对标签的选择非常不专业,标签的选取常常是 随意的,即便两篇文章都含有“百度”这个标签,可能一篇文章是讲百度搜索规则的变化,而另一篇讲百度年营收,两篇文章根本没有非常明显的相关性。 1.期待谷歌更加强大的推荐挂件 在这个方面,虽然我们对百度寄予了厚望,但是实际上我更相信谷歌的技术。原理很简单: 通过不同用户的不同搜索词进入不同文章,而这些搜索词在其他用户而言又是意思相近的。 理解起来有点难,我们只能通过例子来说明:有A、B、C三个用户。有a、b、c三篇文章。A搜索“w”点击进入了a文章,B搜索“m”点击进入了b 文章,C搜索“p”进入c文章时,谷歌发现w、m、p这三个词组意思非常相近,所以判断a、b、c三篇文章是相关文章,因此在三篇文章下方返回了一个相关 文章列表(使用javascript来调用)。 通过历史记录来判断某些文章相关,很多用户点击进入某篇文章后,同时进入另外一篇文章,说明文章相关性强。 如果非得靠谷歌搜索的关键词,就显得太傻了,通过谷歌统计代码,从历史浏览记录来进行深入判断。当A进入a文章之后,发现下方有一个随机的推荐列 表,如果发现有自己需要的或者感兴趣的文章b,就会点击进去,这些行为被记录在谷歌的大数据中,当从a进入b被无数人实践过后,甚至可以统计b出现在a页 面的哪个位置更容易被点击,第几次进入的时候是否不愿意再点击b文章了,而谷歌完全有能力做到这种分析,最终当B、C首次进入a文章的时候,b文章的链接 就会非常合理的出现在该出现的位置。而实际上,如果无数用户从a进入,最后到了c这篇文章,那么为什么不直接把c文章链接放在a页面呢?这多少有点大数据 的意思。 2.统计和聚类:数据库爬虫 人工智能希望计算机有理解能力,但实际上目前我们只能通过统计和聚类来更加只能的判断相关性和可能性。100个人买了尿不湿的时候买了啤酒,这不能说明什么,但是有1万亿人次都这样做了呢? 通过设计一个爬虫程序,到数据库中的文章表中去抓取,对文章标题、内容、摘要、关键词、标签等进行分词统计。最原始的方案是最长匹配词数量越多,文章相关性越强。 爬虫要做的就是匹配词组,因此最开始应该有一个词典。但是词典需要人为手工建立,略显麻烦。解决方案也很简单,用一篇典型文章作为原始案例,让爬虫 去爬,反复的爬,通过分词建立原始词典。利用这个原始词典再去爬其他的文章,遇到新词的时候就加入到词典中。这种方法能够保证新词只会在后面去爬的文章中 出现。在爬的过程中,一方面可以发现新词加入词典,另一方面又把词频统计出来,按照词组的长度降序排,找到最长词。通过对文章最长词的对比,确定文章的相 关性。 但是这种方法必须面临两个问题,一个是效率问题,一个是干扰问题。搜索引擎中最核心的问题之一就是效率,主要是两个方面的效率,一个是爬取,另一个是检索。对应到推荐系统中,一方面是如何确定文章的相关性(爬的效率),另一方面是如何更快的根据爬的结果返回相关文章列表(取的效率)。干扰问题则是指 部分文章的词频无法反应这个问题的核心主旨,例如一篇含有100行代码的文章,介绍性的文字可能只有20-30行,这种情况下很难防止统计结果与文章核心 主旨不符(而其他文章的统计结果又相对比较准确)。 为了提高效率,你可以鼓动你的读者来为你提供词典,比如说读者读完文章后,你要求他输入认为可以概括本文的关键词,这样可以让爬虫更加确定自己是否应该省去某些词,而重视某些词。 3.最有可行性:标签、搜索和浏览记录 上面说到的两种方案都是离我们比较远的,普通程序员很难在自己的网站中实现。回归现实,我们希望真正可以在网站中实现的一种方案(即使可能相关性结果稍微弱一点)。 标签是最合理的一种方案。给不同的文章贴上3个以上的标签,因为标签是人工撰写的,所以最好有一个自己的标签列表,防止把 同一个意思写成了不同的标签,例如“自行车”“单车”“脚踏车”。把标签统一起来,意思相近的,全部统归为一个词,下次再打算贴标签的时候,就只用这个 词。3个以上的标签基本上能反映出该文章大概要讲什么内容。在使用程序去挑选相关文章的时候,尽可能的匹配所有标签,假如两篇文章有3个以上的标签,那应 该是有相同主题的内容的吧。我见过只要有一个标签相同就推荐出来,我认为这种方法不好,文章开头已经举过了例子。 但标签的方法毕竟是人工来弄,思考和统归过程是很累的。 (责任编辑:admin) |