`
ahuaxuan
  • 浏览: 633326 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

通过对web日志的挖掘来实现内容推荐系统

阅读更多
/**

*作者:张荣华

*日期:2008-3-9

**/

先说一说问题,不知道大家有没有这样的经验,反正我是经常碰到。

        举例1,某些网站每隔几天就发邮件给我,每次发的邮件内容都是一些我根本不感兴趣的东西,我不甚其扰,对其深恶痛绝。
        举例2,添加具有某功能的一个msn机器人,每天都有几次突然蹦出一个窗口,推荐一堆我根本不想知道的内容,烦不烦啊, 我只好将你阻止掉。

        每一个观众只想看他感兴趣的东西,而不是一下与之无关的事物,那么如何才能知道观众的兴趣所在呢,还是数据挖掘,经过一番思考,终于有点思路,即根据用户以往的浏览历史来预测用户将来的行为,也就是基于内容的推荐。
基于内容的推荐(Content-based Recommendation)是信息过滤技术的延续与发展,它是建立在项目的内容信息上作出推荐的,而不需要依据用户对项目的评价意见,更多地需要用机器学习的方法从关于内容的特征描述的事例中得到用户的兴趣资料。在基于内容的推荐系统中,项目或对象是通过相关的特征的属性来定义,系统基于用户评价对象的特征,学习用户的兴趣,考察用户资料与待预测项目的相匹配程度。用户的资料模型取决于所用学习方法,常用的有决策树、神经网络和基于向量的表示方法等。基于内容的用户资料是需要有用户的历史数据,用户资料模型可能随着用户的偏好改变而发生变化。


基于内容推荐方法的优点是:
1)不需要其它用户的数据,没有冷开始问题和稀疏问题。
2)能为具有特殊兴趣爱好的用户进行推荐。
3)能推荐新的或不是很流行的项目,没有新项目问题。
4)通过列出推荐项目的内容特征,可以解释为什么推荐那些项目。
5)已有比较好的技术,如关于分类学习方面的技术已相当成熟。


    缺点是要求内容能容易抽取成有意义的特征,要求特征内容有良好的结构性,并且用户的口味必须能够用内容特征形式来表达,不能显式地得到其它用户的判断情况。

要实现内容推荐系统总体来说要经过4个大的步骤:
1 搜集数据,即搜集用户的行为资料,其中也包括很多方法,根据我找到的资料与以往的经验来看,web日志可以作为我们的切入点,即我们的数据来源。

2 过滤数据,web日志中有很多无用的信息,我们要把这些无用的信息排除掉,而且要区分出用户和日志数据之间的联系。

3 分析数据,利用分类聚类技术分析出这些日志数据之间的关联性,以及这些日志数据和用户之间的关联性,这也是最重要的一步。

4 输出结果。

    有了这个思路之后,我们可以着手做第一步,即日志数据的收集
我们知道,大多数的web服务器都是有自己的日志记录的,比如说apache安装之后有一个logs目录,其中就有它的日志文件,一般说来它有自己的一个格式,比如说:
1浏览器所在主机的 IP 地址(ip); 2访问日期和时间(date-time);3客户机与服务器通信所用的方法(methed,get or post); 4客户机请求访问页面的 URL; 5服务器返回的状态(status); 6客户端浏览器的类型;

  
        但是这个日志文件有一些不能克服的问题,或者我不知道如何克服,那么我先说说我的疑问,首先,这个日志文件中记录的是ip地址,据了解,网络中有很多计算机的ip地址是相同的,因为他们在一个统一的路由后面,这个比例可能达到25%。那么我们就无法根据ip地址来唯一确定一个用户。其次,一般的web服务器中都会用多个应用,那么其他应用的访问信息对我们来说有可能是多余的。再者,web服务器的日志形式比较单一,灵活性不大,可定制的余地很小,在日志数据中有效数据所占的比例较小。还有,一些静态文件的请求也会被web服务器记录下来,比如说js文件,css文件,还有图片文件,等等这些东西对内容推荐来说都是无用的资源。

        基于上面3点原因,我认为可以自定义日志数据。为了解决用户唯一性,我们让应用为每一个浏览器生成一个clientId保存在对应的浏览器上,这样该浏览器只要访问网站,我们就可以确定这个浏览器的唯一性,当然我们仍然不能确定浏览器使用者的唯一性,但是我们可以更进一步,如果浏览器的使用者登陆网站的话,我们就可以使用用户id来确定用户的唯一性,不过大多数网站用户可能在使用网站的时候并不会登陆,我也是这样,没有关系,即使使用clientId问题也不会太大,随着社会的发展,计算机的拥有量逐渐增加,一般来说一个人只会使用一台固定的电脑,在公司里尤其是这样。所以我认为clientId的方案是可行的,也许有人要问,别人的浏览器禁止了cookie怎么办,那么我只能说没有办法,不过还好事实是绝大多数人都没有这样做。

接下来我们可以定义一下我们所需要的日志数据的格式,比如这样,
ip,clientId,userId,url,datetime,get or post等等。
这样数据有效性会大大提高。

在得到较为有效的数据之后,我们还需要对这些数据进行再次过滤:
    1 去掉一些非内容的url,这些数据也是无效数据,这些非内容的url需要我们自己手工的统计出来,然后和日志数据中的数据进行比对,将这些非内容数据从日志数据中清除出去。
    2 同时我们也需要把post请求从日志数据中清除出去,或者我们在记录日志的时候根本不应该把post请求记录下来。


        经过以上步骤之后我们就可以开始第3个阶段了,统计每个用户的访问的url,对这些url进行访问,得到对应的html中所包含的数据,这些数据都是文本,将有用的文本提取出来,然后对这些有用的文本进行聚类。这样就可以得到每个用户喜欢的几个类别。

        聚类完成之后我们就可以开始分类了,即把最新的文章或者内容和对应的类别进行匹配,匹配成功之后,我们可以认为这个新文章或者内容可以推荐给对应的用户。

        问题:以上的流程只适用于没有使用缓存的系统,但是一般大型的网站都会使用varnish,squid等等,使用它们之后我们就无法得到用户访问的日志数据了,所以如果使用了varnish或者squid,我们不得不再次面对web服务器的日志数据。

        在不考虑varnish或者squid的情况下,使用lucene+jamon+htmlparse基本就可以实现以上推荐系统。

分享到:
评论
10 楼 scbkjf 2008-10-07  
insky 写道
仅仅通过服务器日志截取信息这方面paper多的是  但是商用效果确实不好  商用推荐系统要求准确有效  那百分之几的准确度可能正是最重要的
-------
推荐系统可大可小  比如搜索商品,页面停留时间可能是一个相当重要的因素,停留时间在不考虑用户挂起离开情况下与用户兴趣度成正比,如果停留时间太短,则证明该商品属于不敢兴趣需要过滤掉,但是用户行为往往是不可琢磨的,有的习惯同时点开多个tag进行浏览,有的习惯一个商品一个商品看,这就变向增加了数据获许准确度的难度。web log mining研究过一个阶段,后来决定还是自己写几段小程序控制准确度要高些。在保证信息有效度的基础上再进行挖掘要有效的多。


   日志挖掘是一个离线处理的过程,你说的是在线记录用户的点击流信息的问题,他们同属于数据收集的范畴,但是在线收集的缺陷实际也非常的明显,会大量消耗系统资源去记录一些实际和网站功能不相干的信息,而且你不能保证记录你的用户行为信息的数据库不出现一些设计时没有考虑到的问题,比如插入错误或者异常等问题致使你要的数据不能被记录。理论上可行的东西不见得实际就能投入应用。我要补充一下的是,你写的收集用户信息的程序,在将来网站进行维护的时候如果不是你本人做修改,维护起来也是一个巨大的麻烦,新手上去根本就不知道往哪里改。用哪种方法是要看具体的网站具体的情况而言,我觉得楼主的文章写的还是很好的,尽管我觉得你说的方法在实现信息收集的准确率的方面会有很大的提高,但我觉得如果是一个日访问过十万的网站来说,你的办法会以牺牲网站的执行性能作为代价去换取信息记录。网站上增加代码就有多出现bug的风险。日志挖掘就弥补了在线收集信息的一些不足的地方。
    一般说来,在你不能保证你的网站开发时就已经运用在线收集用户信息程序的前提下,你必须要用日志作为一个重要的挖掘手段。
    这是我的看法,你有什么不同的见解可以交流一下。
9 楼 insky 2008-07-26  
仅仅通过服务器日志截取信息这方面paper多的是  但是商用效果确实不好  商用推荐系统要求准确有效  那百分之几的准确度可能正是最重要的
-------
推荐系统可大可小  比如搜索商品,页面停留时间可能是一个相当重要的因素,停留时间在不考虑用户挂起离开情况下与用户兴趣度成正比,如果停留时间太短,则证明该商品属于不敢兴趣需要过滤掉,但是用户行为往往是不可琢磨的,有的习惯同时点开多个tag进行浏览,有的习惯一个商品一个商品看,这就变向增加了数据获许准确度的难度。web log mining研究过一个阶段,后来决定还是自己写几段小程序控制准确度要高些。在保证信息有效度的基础上再进行挖掘要有效的多。
8 楼 ahuaxuan 2008-07-25  
insky 写道
既然我们可以记录用户点击行为(点击流)  而且更加有效准确有针对性  为什么还要log mining ?  日志挖掘确实可以挖掘很多有用信息,但是似乎在网络安全应用更广泛  通过log分析出的推荐信息可靠性如何呢?不知道您是否明白我的意思  我是说既然我们有更准确的办法实现  为什么还要用日志挖掘?另 好多server不允许你修改apache服务器 你日志格式就是固定的 也不能确保你想check的信息就在日志中吧?


你是说把用户的行为再通过程序记录下来对吧,这个和apache记录或者lighttpd记录访问日志有各自的优缺点

程序记录日志缺点
1需要写额外的代码
2数据量较大,需要额外的投入

程序记录日志的优点
1可以定制数据格式
2可以清洗记录的操作可以在记录的初期就执行


server自己记录也有其优缺点
有点
1不需要开发额外的代码

缺点
2不能精确记录

总结:我并没有说一定要使用server的日志来作为推荐的源,当然可以自己记录用户行为的日志,比如说我们公司的一套协同过滤推荐系统,就是通过分析每天上亿条的自己记录的日志来工作的。


7 楼 insky 2008-07-25  
既然我们可以记录用户点击行为(点击流)  而且更加有效准确有针对性  为什么还要log mining ?  日志挖掘确实可以挖掘很多有用信息,但是似乎在网络安全应用更广泛  通过log分析出的推荐信息可靠性如何呢?不知道您是否明白我的意思  我是说既然我们有更准确的办法实现  为什么还要用日志挖掘?另 好多server不允许你修改apache服务器 你日志格式就是固定的 也不能确保你想check的信息就在日志中吧?
6 楼 ahuaxuan 2008-07-25  
jin_nth 写道
http://www.adastral.ucl.ac.uk/~icox/course/presentations/RecommenderSystems.ppt


谢谢了,我稍微看了一下开头,发现这个知识结构和我之前研究的资料是一致的。

推荐系统中分为几大类,比如说基于搜索,基于内容,基于规则,还有协同过滤等等,他们适用的场景不太一样,本文讨论的基于内容的的推荐系统(我的文章中写道:要实现内容推荐系统总体来说要经过4个大的步骤: )。看来要普及这个知识先要来一篇概论才行
5 楼 jin_nth 2008-07-25  
http://www.adastral.ucl.ac.uk/~icox/course/presentations/RecommenderSystems.ppt
4 楼 ahuaxuan 2008-07-24  
leon_a 写道
这个问题与算法相关的东东也就是数据挖掘生成策略树的东东,可以应用ID3算法与C4.5算法.

你说的只是分类而已,而且这种方法不太适合文本分类。

insky 写道
recommendation system仅靠分析log是不够的  现成的日志分析软件很多 java开源的也有  推荐系统还是要track user behavior

难道我的文章中不是说的要trackuser 的behavior吗?track的途径就是通过log,通过log我可以查看用户访问过哪些网页,这不就是user 的behavior吗?


还有如果你在这方面有经验的话,我也很乐于听听你的做法。我的做法我已经阐述的很明白了,就是通过log拿到用户访问的网页之后分词,文本聚类,然后文本分类,根据距离进行推荐。

希望能听听你的高见



insky 写道
lz可以Google下 RecommenderSystems这个ppt 作者Arnaud De Bruyn
表述简单 易于理解 

我没有搜到,你有吗,能否传上来一份,谢谢
3 楼 insky 2008-07-23  
lz可以Google下 RecommenderSystems这个ppt 作者Arnaud De Bruyn
表述简单 易于理解 
2 楼 insky 2008-07-23  
recommendation system仅靠分析log是不够的  现成的日志分析软件很多 java开源的也有  推荐系统还是要track user behavior
1 楼 leon_a 2008-04-07  
这个问题与算法相关的东东也就是数据挖掘生成策略树的东东,可以应用ID3算法与C4.5算法.

相关推荐

Global site tag (gtag.js) - Google Analytics