基于知识库的信息推荐系统
Knowledge lib based information recommendation system
姓 名:谢 松
学 院:数学科学学院
专 业:信息与计算科学
届 别:2008届本科
指导老师:林 荣 德
基于知识库的信息推荐系统
摘要
在使用互联网时,用户希望能够尽可能简单快捷的找到自己想要查找的信息。传统的信息服务满足了人们一定的需要,但由于其通用的性质,仍然不能满足不同背景、不同目的和不同时期的查询请求,个性化信息服务就显得越来越重要。这种本质上仍然是属于“人找信息”。为此本项目试图从用户的行为中挖掘出一些可用的信息,并通过这些信息来描述用户的兴趣所在,然后从互联网抓取用户感兴趣的内容推荐东西给用户。 本项目主要面临的问题是:
(1)、怎么评价一个互联网的网页与用户兴趣之间的关系。系统访问互联网抓取到的网页与用户的兴趣之间应该有一个可以模糊度量的关系。这种度量可以让本项目评价用户是否对该网页是否感兴趣。例如,本项目得到一个描述”水果苹果”的网页,本项目如果把这个网页推荐给一个对水果不感兴趣的苹果公司的支持者,显然是有失公允的。因此评价算法的好坏直接影响着用户的体验和系统的精度。
(2)、怎么描述用户的行为。用户行为是一个抽象的概念,本项目所指的用户行为并不是用户的身体动作,而应该使用用户浏览过的网页的内容来度量,这涉及到本项目需要采用一个良好的分词算法来描述用户浏览过的页面。
(3)、怎么动态收敛到用户不断变化的兴趣。通常来说,一个用户的兴趣分类可以分成短期的和长期的。短期的兴趣可以是用户临时产生的,本项目不能把这种突然产生的临时的用户兴趣归类到长期的兴趣中。此外,一个用户她(他)的兴趣爱好也应该是一个缓慢变化的过程。系统应该能够及时的收敛到用户变化的兴趣。
关键字
相关度评分 分词 文本聚类 文本篇章分析 知识库
Abstract
The information age has made it easy to store large amounts of data. The proliferation of documents available on the Internet, on corporate intranets, on news wires, and elsewhere is overwhelming. However, although the amount of data available to us is constantly increasing, our ability to absorb and process this information remains constant. Search engines only exacerbate the problem by making more and more documents available in a matter of a few key strokes.
Text mining is a new and exciting research area that tries to solve the information overload problem by using techniques from data mining, machine learning ,natural language processing ,information retrieval ,and knowledge management. Information extraction, term extraction, the storage of the intermediate representations, the techniques to analyze these intermediate representations, and visualization of the results.
In fact we want to find the hidden information behind user’ behavior. We believe that information will help us to know what information those web user wanted. The user’ behavior is described by text in those web pages. So we turn to find information behind text in those pages, rather than look into those pages. In fact, those web pages are nothing but text.
We use the traditional search engines like Google, Bing, Baidu, and Youdao. We are not building a search engine in this project. We just use those existed search engines to get those possible results, which we will present to our users.in this aspect; we are similar to Meta search engines, but exactly the same. Of course we need to grade all those results from search engine, then decide which result should introduced to our user and which should not.
Finally, we find people’ interests is changing with time, we didn’t know where it changing for, but it’s luckily that we can catch up with it. We introduce a new algorithms—fast increase, slow decrease.
This issue presents a general theory of text mining along with the main techniques behind it.
We offer a generalized architecture for text mining and outline the algorithms and data structures typically used by text mining systems.
Keywords
Text mining, support vector machine, knowledge lib, personalized recommendation
目录
第一章 引言
Internet自1991年CREN诞生起,其丰富多彩的内容吸引了众多的用户,其信息呈几何级数的增长,如今已成为人们获取信息的一个重要途径。由于Web信息包含了许多重复、过时、零散混乱的数据和信息,人们不得不花费大量的时间去搜索浏览自己可能感兴趣的信息。搜索引擎是最普遍的检索信息的工具,传统的信息检索技术满足了人们一般的需要,然而对于不同用户所关注的特定领域的信息却无能为力。
人们不再满足于亲自借助传统搜索引擎和其他门户网站去找寻自己感兴趣的信息,而是希望自动获得自己需要的信息。即从“人找信息”的模式转变成了“信息找人”的信息提供模式。系统能够分析用户的行为,然后把用户需要的信息发给他,而且是延续不断地提供信息,用户离线时系统在捕捉网络上任何他想知道的信息,等到该用户上线时推送给他。根据用户个人独特的信息需求,从互联网上搜索出有关的信息,并将它们整合在一起,以便有针对性地满足各种不同用户的信息需求。
本项目采用人工智能常用的专家系统的思路方式来分析和识别用户兴趣。首先分析用户的浏览记录,项目只分析用户浏览记录的标题,因为用户是根据标题来查找自己感兴趣的内容的。本项目将用户浏览记录的标题的分词结果与用户兴趣概念知识库进行匹配,找出其中可能为用户兴趣概念的分词。然后访问搜索引擎,从搜索引擎获取用户兴趣概念的推荐信息。
全文分为三大部分。第一部分是用户行为的挖掘涉及到自动分词和分词分类两个部分,本项目采用向前本文对向前最大分词算法提出了专有名词的分词和噪声词的消去问题的改进算法。第二部分构建了一个用户兴趣概念知识库,系统将用户的浏览记录的分词结果和兴趣概念知识库进行比较,识别出用户的兴趣词。本章提出了VSM的权重的时间修正算法,这个算法可以较好的适应用户兴趣随时间的变化。第三部分为测试和结论部分,本项目测试主要关注用户兴趣的识别和收敛以及推荐信息的精确度,同时本章还讨论了一些算法中可能对推荐结果的收敛性造成影响的因素。
第二章 用户行为挖掘
互联网的数据挖掘分为三类挖掘;第一,数据内容挖掘,其二数据结构挖掘,第三,用户行为挖掘。第三种用户行为挖掘实质也与数据内容挖掘紧密相关。但是又不仅仅只关注数据的内容,因此独立成第三种数据挖掘。Web网页的实质就是网页里面的文本内容,只不过用html标签作为载体呈现给用户。本项目对网页的文本内容进行分析,通过内容里面的文字分类分析记录用户的喜好。例如用户浏览一个标题为”苹果新任ceo库克”的网页,本项目分析标题可以得出该用户对IT行业的苹果公司有某些权重的兴趣,当然如果他总是阅读和”苹果公司”相关的网页,本项目可以把”某些”这个词换成”非常”—即该用户对IT行业的苹果公司非常感兴趣。本项目可以归纳出:文本篇章分析处理过程即根据已建立的领域知识库里面的知识结构,分析出文本篇章与某一领域主题之间的关系度。然后根据本项目分类得到的信息从互联网检索信息,对检索来的信息进行评分处理,最后把评分高的那些信息推荐给用户。
2.1 Web页面的特征表示
web页面的文本信息、文字格式、文档结构、页面布局以及链接结构都是web页面的表示特征。普通用户阅读报纸的时候大部分都先阅读新闻的标题,然后选择是否阅读新闻的具体内容。同样,用户在使用互联网的时都是先看标题,然后决定是否需要阅读具体内容。因此,本项目只需要关心web页面的文本信息这一个web的特征表示而忽略其他的几个方面。为了加快分类用户的行为的处理速度,本项目只需要分析网页的标题,而不用考虑网页的全部内容。
2.2 文本表示
文本的内容形式十分复杂本项目,本项目需要选定一个语言特征,以此为基础分析分本[2]。
文本的内容特征
用什么作为特征来描述文本内容是文本表示的核心问题。英文中常用词<word>、词串<word n-gram>(指在文本中出现的固定长度的多个词)、以及词组<phrase>作为特征来表示文本。相关研究实验结果表明英文中基于词<word>的特征表示是最适合文本分类的。中文由于其的特殊性,本项目常说的词组类似于英文中的词。
关键词的相互关系评价
本项目需要评价关键词之间的相互关系。Vector Space Model(VSM)模型是描述分词之间关系的常用模型。VSM模型中,文档被看做是由特征二元组组成的特征向量(feature vector),其表达式如式(2.1)[5]。
其中,为特征的二元组,为在文档中的权重;s为特征集的大小。在VSM中,本项目不考虑特征在文本中的位置以及语法信息等的作用。
一个特征向量对应于高维特征空间中的一个点,这是可以简化式(2.1)为式(2.2)。这时,特征向量对应于权值向量。
(2.2)
在VSM中,文档被描述为向量,对文档的各种操作就可以借助向量运算进行,例如文档的合并、删除、和比较等操作文档与文档之间的相似度可以是向量之间的相似度来度量。
2.3 自动分词技术
用户浏览一条新闻往往是看到新闻的标题含有某个或者某几个他感兴趣的分词。为了精确表述用户的兴趣,本项目需要对文本进行分词,把句子切割成若干个准确的词。然后对分词进行分类。为此本项目引入自动分词技术。
自动分词技术是指把输入计算机的语句自动切割成词的序列的过程。特定情况下,分词结果也包含一些词组和词素。一般来说建立一个好的自动分词算法关键是选择一个好的分词算法和建立一个好的分词字典(分词词库)。
分词算法常用的方法有如下几种[13]:
1、 字典匹配法:最大匹配法,逐词遍历法,逆向匹配法。
2、 联想词群法:如联想回溯AB法,联想树分析法,无词库法。
3、 知识与规则法:如切词规则法,切分与语义校正法,规则描述切词法。
4、 人工智能法:如专家系统,神经网络。
中文分词的难点在于:
1、语法的复杂性。汉字词组的组合非常灵活,难以确定字在词组中的位置。例如:”被子”不适合被分拆成”被”、”子”两个字;而”菜刀”适合被分拆成”菜”、”刀”两个字。[4]
2、切分的模糊性。例如:”好好学习”这个句子,可以分拆成”好好”、”好学”(四声)、”学习”三种理解方式。
这里本项目采用最大匹配分词算法,也称作贪心算法。分词过程需要去掉无意词和噪声词。例如:”姚明访问瑞士残疾学校瑞士公主陪同”这个句子,采用最大匹配算法结果是:”姚明”、”访问”、”瑞士”、”残疾”、”学校”、”瑞士”、”公主”、”陪同”。
2.4 专有名词的分词
专有名词的分词本应该是2.3小节的一部分内容,但是2.3小节所述的前向最大分词算法的最大的问题是容易把专有名词分词错误。4.3.3节的测试部分有一个赘例。测试中常见的就是把例如”F-22”分词称”F”,”-22”,产生这样的分词结果是因为这种词语结构并不符合常用的语言习惯,专有名词大部分都出现在科学技术领域,有着特定的编号习惯。”F”为英文字母,自然语言中,英文字母后面往往跟着的仍然是英文字母。”-22”并无太多意义,因此按照人类的语言习惯,上述分词结果是合理的。但是F-22实际上是一个专有名词,他的分词并不能用常规的分词算法来识别,本项目必须提供一个专有名词词库来解决专有名词的分词问题[7]。
加入了专有名词修正的分词算法的伪代码如算法2-1。
算法2-1
String str;
For(int i=0;i<str.length-1;i++)
{
If(str contains 专有名词)
{
该专有名词部分作为一个整体加入分词结果;
继续常规分词;
}
}
这种算法可以解决专有名词的分词问题,但是这种算法并不十分完善,他没有很完美的结合语言环境进行分词。因此,本项目必须结合常规的分词算法来规避这个问题。
2.5 关键词及关键词的识别
在上一节2.4中提到的分词算法可以将一个句子拆分成多个分词,这对于本项目来说还是不够的;用户阅读一条新闻可能就只关注其中一个或者几个关键词,本项目需要从分词结果中找出用户可能关注的关键点是什么。因此本项目引入关键词和关键词的识别问题。例如:
”姚明访问瑞士残疾学校瑞士公主陪同”这个句子,采用向前最大匹配算法结果是:”姚明”、”访问”、”瑞士”、”残疾”、”学校”、”瑞士”、”公主”、”陪同”。对于一个NBA球迷来说,这句话他只关心”姚明”这个词,该语句的关键词应该为”姚明”,换了其他的作家”孔乙己君” ,“孔乙己君问瑞士残疾学校瑞士公主陪同”这条新闻该体育球迷则不会有兴趣阅读。为了能够识别出文章里面的关键词,本文提出了两种算法来识别文本中的关键词,并且在4.3节的测试部分有对这两种算法进行测试比较。
2.5.1 噪声词消去算法
这种算法是一种发散算法,系统只消去那些明显没有语义区分作用的分词,剩下的都认为是有意词。但是系统的噪声词词库不可能做得很完美,因此,总是会有一些噪声词被系统误认为是关键词,这时候系统的推荐信息就会产生误差。因此这是一种发散算法。算法的伪代码实现如算法2-2。
算法2-2
String GetKeyWord(string instring)
{
If(噪声词词库 contains instring)
{
Return instring;
}
else
{
Return null;
}
}
当然这种算法和第二种算法相比也有它的优点,这种算法不会误缩小用户的实际兴趣,并且可以自动收录新的关键词。
2.5.2 固定关键词词库算法
固定关键词词库算法并不是说关键词词库是固定不变的,固定关键词词库算法是指:只有在关键词词库中存在的分词,才可以作为关键词存储。这种算法的伪代码如算法2-3。
算法2-3
String GetKeyWord(string instring)
{
If(关键词词库中 contains instring)
{
Return instring;
}
else
{
Return null;
}
}
算法2-2和算法2-3相比,收敛效果会比较好,但是算法2-3可能会遗漏某些用户感兴趣的关键词,而且需要人工维护关键词词库,这个关键词词库的关键词数量大约为数量级。
2.6 分词分类
本项目采用三层分类的方式对分词进行分类。图2-1是一个分类的实例。
图2-1 三层分类示意图
顶级分类体育下面有三个次级分类”NBA”、”CBA”、”世界杯”。为了保证系统的精确性,本项目采用手工进行顶级以及次级分类,并且手动添加一个初始化的子节点分类的训练样本,第三级分类为具体的文本分词。这部分内容,在聂荣金同学的论文中有详细的表述。
第三章 用户兴趣模型
个性化信息的推荐研究,关键是建立一个准确的用户兴趣模型。根据VSM模型,用户的兴趣是一个可以用表达式(2.1)来描述的向量空间。从线性代数的向量空间理论可以抽象的理解用户兴趣模型,本项目认为用户的兴趣总和是以单个不相交的用户兴趣向量为基向量构成的向量空间。本章介绍本项目个性化信息的推荐研究,关键是建立一个准确的用户兴趣模型。传统用户兴趣模型的构建过程如图3-1。
图3-1 传统用户兴趣模型的构建过程
图3-1所示的用户兴趣模型的构建过程并不能反映户兴趣的变化,本文根据计算机网络的拥塞控制算法和路由选择算法提出一种”用户—兴趣—时间”模型来反映用户的兴趣曲线随时间的变化。并且讨论了模型的曲线尽可能收敛到用户实际兴趣曲线的几种算法。
计算用户兴趣强度值通常有三种方式:
1、用户自己填写
2、根据用户行为来分析用户兴趣
3、根据用户对推荐信息的反馈进一步更新兴趣强度
其中第一种方式在系统的直接表现就是由用户自己设定自己的兴趣领域,这种方式会增加用户的负担,不是一种用户友好的方式,因此不是本项目主要研究的方向。第二种和第三种是本文主要关注的方向。其中第三方式会有增强效果:同时增强兴趣曲线的收敛速度,扩大收敛曲线的误差。本文的接下来会讨论第三种方式的增强效果。
3.1 特征权值
特征确定后,需要计算特征在向量中的权值,用来描述特征在文档中的重要程度。常用的权值计算方法有布尔权值、权值以及熵权值。
鉴于布尔权值不能够精确地描述向量之间的权值数量关系,本项目采用权值来描述特征在向量中的权值。
基于两个观点:特征在文档中出现的次数越多越重要;特征在越多的文本中出现越不重要。(G.Salton,et al.,1975). 权重一般有两项,其中项反映了第一个观点,反映了第二个观点。
权值的计算方法如式(3.1):
(3.1)
其中,是特征在文档出现的频率,为出现特征的文档数。
3.2 特征权值的时间修正:快开始,慢减少算法
计算机网络是一个动态变化的网络,网络中每一个部分的状态都是动态变化的,及时发现网络拥塞状态的改变对提高网络利用率来说是很重要的,TCP协议为了最大可能的保持网络的利用率,并且拥有一个较低的网络延迟,TCP协议采用“加性增,乘性减”算法的拥塞控制策略。[<计算机网络-自顶向下方法与Internet特色>James F.Kurose、Keith W.Ross.177]同样,人的兴趣和爱好都会随着时间的变迁而变化。为了更加迅速的收敛到用户的兴趣,并且能够反映出用户的兴趣随着时间的变化,我采用”快开始,慢减少”的算法来表示人的兴趣和时间的关系。”快开始,慢减少”算法的描述如下图3-2 图3-2 快开始,满减少示例图
本项目引入以下一些概念的描述:
时间轴:在图3-2中,横坐标为本项目所表述的时间,其含义为:“用户相邻的两次登录使用该系统,它和实际时间并不相同,这个月登录第一次,到下次再登录,中间的时间间隔为1”。
权值增量:用户浏览一次含有某个分词A,对应的分词A所增加的权值增量。本项目定义为0.125,分词的最大权值为1.也就是说,用户浏览八次同一个分词,则该分词的权值将增加到最大值1来,继续浏览,权值任然保持为1.权值增量之所以定义为0.125,也就是浏览八次即可增加到最大权值,是因为,如果设置成布尔权值,也就是非0即1,本项目无法精确度量某个人的兴趣和爱好。而如果权值增量过小,那么某个分词要想达到最大权值,需要过多的次数,则用户又很难快速收敛到他的一个短期的兴趣爱好,即对收敛过于迟钝。例如,某个对IT不感兴趣的女性A看到乔布斯去世的消息,突然对乔布斯的生平产生了很浓的兴趣,然后在接下来的一周内她想了解乔布斯的事情,由于权值增量过小,她需要浏览一百次乔布斯相关的网页,系统才意识到她对乔布斯很感兴趣,然后主动推送乔布斯相关的内容给该用户,这时候该用户可能已经重新回到了平静的生活中去了。
慢减少:这个世界到底什么是一成不变的?没有,只有变才是一成不变的。人的兴趣和爱好也是在不断变化的。A甚少关心乔布斯,乔布斯去世之后几天,她突然对这个传奇人物产生了兴趣,然后浏览了很多乔布斯的介绍。这时候,系统已经把该用户A对”乔布斯”的分词权值置为最大权值。半个月之后,她不再关心乔布斯了,相应的她对”乔布斯”的权值评分也应该相应的逐步减少。因此本项目提出了”慢减少”,即用户对每一个分词的权值都应该是随时间轴降低的,本项目把”慢减少”的权值定义为0.05,也就是说如果用户在二十个时间轴内没有浏览过一次某个分词的相关的内容的话,那么”慢减少”算法会把该用户对该分词的权重降低到0。
算法所需编程工作较少,本项目只需要在数据库服务器建立一个定时作业即可。作业的伪代码描述如算法3-1。
算法3-1
While time is 0:0:0
update t_PersonalWord set kdegree=kdegree-1 where kdegree>1;
end while
3.3 页面聚类
本项目试图通记录、描述、分析用户的行为,而用户的行为最终是通过页面的内容来描述的—即基于内容的页面聚类。页面聚类技术是基于以下假设的:同类的文档相似度较大,不同类的文档相似度较小。Web页面聚类根据web页面的某种联系或者相关性对web页面进行组织。
3.4用户兴趣概念知识库
人工智能的专家系统常常采用人工收录特定领域的知识库和规则库的办法来提供自动化的解决方案。本项目为了提高用户兴趣分词的识别准确度,采用构建用户兴趣概念知识库的方法来识别用户的兴趣。用户兴趣概念知识库的本质是一个数据字典。它包含有尽可能全的用户兴趣概念分词。
用户兴趣概念知识库的逻辑结构也满足图2-1所描述的三层分词分类的结构。所有知识库的知识都存储在图2-1的叶子节点上。本项目并不采用这种三层森林的存储结构,而采用数据库存储的二维关系表存储知识库。为了用二维关系数据库存储图2-1的三层逻辑结构,用户兴趣概念知识库的内容应包含表3-1所示的内容。
表3-1 知识库的存储内容
知识
父节点
所在层
3.5 产生推荐信息
用户利用搜索引擎手动检索自己想知道的内容是利用关键词来检索的,基于知识库的信息推荐系统则利用构建的用户兴趣模型访问搜索引擎来产生推荐信息。用户的兴趣是以用户兴趣知识库的知识为基向量构成的向量空间,本项目以用户兴趣向量空间的基向量为产生推荐信息的依据,也就是表达式(2.1)中的。这时候本项目还不能确定本项目产生的推荐信息对于不同用户的重要程度。本项目利用VSM模型向量的第二个分量所表示的的阈值来度量推荐信息对用户的重要程度。
3.5.1 获取推荐信息
本项目选择用户最感兴趣的关键词,通过访问搜索引擎检索该关键词的信息获取推荐信息。这种方式类似于元搜索引擎,本项目不需要像google那样维护一个互联网的页面的数据库备份,其次单一的搜索引擎的搜索结果查全率并不理想。即使是google这样的搜索引擎巨头,其数据库所包含的网页的备份占全部互联网的总网页数量也是微乎其微的。本项目可以访问多个权威的搜索引擎,可以获取某一个用户感兴趣的关键词的更多的信息。之所以称为类元搜索引擎,是因为本项目不是即时搜索。本地服务器在长时间的访问搜索引擎,并不要求在一个很短的时间内返回搜索结果给用户,这一点保证本项目有时间来对搜索结果进行耗费一定时间的精确评分。
图3-3 服务器搜索引擎的交互
类元搜索引擎的体系结构:
接口代理(Interface Agent)
这部分管理与各个搜索引擎的交互。对应某个搜索引擎的接口代理需要将用户的查询转换成该搜索引擎认识的格式(以Google新闻搜索为例:http://news.google.com.hk/search?q=params)发送出去,并负责解析所收到的该搜索引擎的搜索结果,将解析过的搜索结果传递给调度中心。
结果重排序(Re-ranking Mechanism)
这部分将来自各个搜索引擎的搜索结果综合起来,给每一个搜索得到的结果进行评分,按评分高低重新排序,形成一个统一的搜索结果列表。
结果存储(Result Storage)
这部分将重新排序后的搜索结果保存进数据库,等到用户登录在线时将推荐结果推送给用户。
3.5.2 搜索结果预处理
通过搜集得来的海量原始网页,还必须通过预处理形成好的数据结构,这样才能成为用户提供查询服务的核心和关键。搜索结果的预处理主要包括下面几个方面:
(1)、关键词的提取在有大量HTML标签的网页文件中,依照一定的规则,提取出可以代表网页内容的关键词。即提取后得到一个关键词集用式(3.2)表示。
用这个词集代表网页内容。
(2)、链接分析人们可以通过分析HTML文档中所含的指向其它文档的链接信息,来判断网页之间的关系以及网页的内容。
(3)、网页重要程度计算这罩指的是在预处理中网页的重要性判断,与后面要说的用户查询所得的网页重要性不同。即与用户的查询无关。例如用Google的核心技术PageRank就可以体现出这种重要性。
3.5.3 搜索结果评分排序算法
传统的元搜索引擎评分排序并不涉及到其他用户数据,只是孤立的对搜索结果进行排序。通常有如下两种方式重排序的方式:
(1)、采用标准评分机制重新评分后,再排序搜索结果。
这种方法将会分别为元搜索引擎所调用的其他爬虫式搜索引擎设定一个评
分转换比例,然后按照该评分标准重新排序。不过这种方法所依赖的各个评分标准井不一定很可靠的。
(2)、用自己的排序算法将各个搜索结果合并起来后,彻底重新排序。
这里的排序算法和传统搜索引擎中的排序算法是一样的。这种方法一般能够
得到比较精确的排序结果。然而,这种方法需要下载并分析所有的网页,因此响
应速度会比较慢。
推荐结果的评分计算:
为了表述的方便,本项目假设有一个用户”张三”,本项目的检索关键词是”乔布斯”,所属二级分类为IT,本项目要评价对于张三而言某个页面的page A的评分。本项目采用传统的概率统计学的方式计算一个页面的评分。首先,本项目根据本项目检索的关键词”乔布斯”的二级分类”IT”获取该分类个所有的分词,同时记录对该分词的权重,然后计算每个分词在该网页中出现的次数,于是该页面的评分可以用式(3.3)来计算。
推荐结果并不是都满足推荐要求的,为了过滤掉那些用户不感兴趣的搜索结果,本项目引入了搜索结果的去噪算法。
搜索引擎返回的结果经过评分之后本项目需要对结果进行筛选,剔除噪音数据。本项目设定一个较合理的阈值,当评分结果大于定义的阈值时,即为正常数据,否则为噪音数据,需要予以剔除。
搜索结果的去噪算法伪代码如算法3-2。
算法3-2 搜索结果的去噪
#define VALUE 5
If(评分>5)
{
结果存入数据库中;
}
else
{
此时为噪音数据,剔除;
}
阈值的定义需要很谨慎。当阈值定义过大,会严重影响系统收敛的速度。尤其是对于用户短期的兴趣的收敛。
当阈值设置过大,系统虽然可以发现用户的新的兴趣倾向,但是在用户兴趣萌芽初期,这种兴趣会被认为是噪音而被过滤掉,因此系统不会把这个兴趣相关的信息推荐给用户浏览;这导致该兴趣相关的关键词的权重很难获得提升。从而会出现一种获得推荐的信息的权重会快速增加,而新的兴趣爱好又很难获得增加的现象。基于这些考虑,本项目定义阈值需要在系统的精确度评估的时候要进行慎重的修正。
本项目以调用Bing搜索“科比”为例,描述类元搜索引擎的算法。
(1)、获取关键字。关键字为系统对页面自动分词聚类得到的分词。
(2)、调用搜索引擎搜索关键字相关信息。本项目以Bing搜索为例
但是搜索返回结果为如下所示的普通的HTML代码,本项目需要提取出HTML中的每一条搜索结果的超链接。
<a href="http://news.xinhuanet.com/sports/2012-04/23/c_123022265
.htm" target="_blank" onmousedown="return si_T('&ID=news,5034.2')"><strong>科比</strong>公开质疑工会举动 保罗接替老鱼成下任主席?</a></div><div class="sn_oi"><span class="sn_snip">新浪体育讯北京时间4月23日,在去年的NBA劳资谈判中,球员工会主席德里克-费舍尔作为球员的代表,一直在为球员争取着最大的利益。那个时候,他的身边站满了同时在工会共事的球员以及那些支持他的球员 </span>
本项目需要从大量类似上述html代码中提取出:
http://news.xinhuanet.com/sports/2012-04/23/c_123022265.htm
这类的超链接,然后对超链接进行评分。
(1)、搜索结果评分
为了评估搜索结果的质量,本项目访问搜索结果的页面得到页面的文本内容。如下所示。本项目需要评估这些文本内容对某个具体用户而言的分数。
<span id="content">
<p style="TEXT-JUSTIFY: distribute; TEXT-ALIGN: justify; TEXT-INDENT: 30px; MARGIN: 0px 3px 15px" align="justify">
新浪体育讯 北京时间4月23日,在去年的NBA劳资谈判中,球员工会主席德里克-费舍尔作为球员的代表,一直在为球员争取着最大的利益。那个时候,他的身边站满了同时在工会共事的球员以及那些支持他的球员。不过在那场旷日持久的劳资谈判已经过去了将近四个月的时间,费舍尔却突然发现一切都变了。
程序运行效果如图3-5所示,返回结果的形式:
“评分
超链接
标题”
图3-5 搜索返回结果
(2)、去掉无效链接
本项目调用搜索引擎,返回html代码;系统利用链接的正则表达式匹配所有满足网络超链接的,所满足的表达式的格式如正则表达式(3.4)。
表达式(3.4)中的***为通配符,即任何字符都可以。
注意:这里本项目不能认为超链接格式必须满足正则表达式(3.5)。
原因如下:有许多的网页链接都是以缩略的方式存在的,目前的互联网网页命名有许多不规则的url链接。
然而,正则表达式(3.5)有许多弊病,它会把许多不是有效超链接的html里面的内容认定成有效超链接。每次返回的结果都不可避免任然含有有许多的无效的超链接在html文档里,本项目需要过滤掉这些无用的超链接,这部分的工作都放置在b)中完成。本项目的系统遍历所有的html中的超链接,针对每一个超链接发起一个http请求,如果http请求是无效请求,本项目可以认定这个超链接是无效超链接,即可去掉。
3.5.4 搜索结果的去重算法
不同搜索引擎所收录的内容有一定的重复比例,可能用户在搜索同一个关键词的时候,从Google和Bing会有同样的收录页面。与元搜索引擎一样,搜索有许多重复结果。本项目需要删除重复的结果。
检索结果重复的情况有如下三种:
(1)、搜索结果指向同一个页面的重复。这种情况比较简单,本项目只需要检查页面的url是否相同。
(2)、搜索结果指向不同页面的重复。这种情况比较复杂。网页中的内容和html标签混合在一起,即使两篇完全一样的文章嵌入不同的页面也几乎不可能做到html内容完全一样。
(3)、搜索结果指向不同页面的意思相近的重复。这种情况类似于情况2。要检测这种情况的重复页面,本项目需要去掉html中所有的html标签,提取网页的内容,然后提取文本内容的摘要,比较文章摘要是否相同。
本文关注的主要问题并不是搜索结果的去重;因此只考虑情况1、所描述的重复。为此,本项目只要检测相应的页面的url地址是否相同即可。
图3-6 指向同一个页面的检索重复
3.5 用户兴趣变化的勒夏特列原理
勒夏特列原理是法国化学家勒夏特列提出的一个关于化学反应平衡移动问题的原理。主要内容为:如果改变影响平衡的一个条件(如浓度、压强或温度等),平衡就向能够减弱这种改变的方向移动。引述到这里是表述用户改变时,个性化推荐信息有减弱用户兴趣变化的效果。 例如,用户A一直很关注”林书豪”,本项目根据用户的浏览记录推荐了a,b,c三条关于林书豪的信息;然而某天开始该用户突然对”林书豪”不怎么感兴趣了,而对”美式足球”有了很浓的兴趣。这时候,用户从公共推荐里面浏览了一些关于”美式足球”的内容。但是系统根据用户以前的浏览记录分析得到一些新的推荐信息,这些推荐信息的用户兴趣评分最高的那些依然是关于”林书豪”的,而”美式足球”相关的推荐信息的评分会很低,因而其排序也相应比较靠后。Google研究发现用户很少浏览10页以后的搜索结果。同样用户也会很少浏览排名很后的推荐信息。因而此时用户浏览到他新的兴趣的机会会减少。但是,这只会减缓用户”兴趣”变化,而不会阻止用户兴趣的变化。在前面” 特征权值的时间修正:快开始,慢减少算法”这一节中我有提到一种用户兴趣的时间修正算法,根据这个算法,当用户A长时间没有浏览过”林书豪”相关的信息时,”林书豪”的权重会逐渐降低到0。因此,用户兴趣的勒夏特列原理只会减缓而不会阻止用户兴趣的变化。
3.6 分布式处理
在数据量为的数量级时,处理单个用户的推荐信息需要处理器时间。对于大量用户而言,在一台服务器上运行是远远不够的。为了实现大规模的应用,系统采用分布式处理器进行计算处理[8]。本项目采用队列的方式处理数据,将待处理的用户排列成队列,每次处理服务器请求获得一个待处理用户时,数据库服务器将检查待处理用户队列是否为空,如果队列不为空,那么返回一个用户给处理服务器,同时,将该用户移出待处理用户队列。待处理用户队列模型如图3-7所示。
数据请求过程:
每一个独立处理服务器需要转入空闲时间片刻时就访问数据服务器获取一条待处理用户记录,如果全部数据都已处理完,处理数据线程转入休眠状态。为了保证数据请求的互斥,本项目把数据记录的分发放在数据库事务处理里面进行处理,这样可以保证本项目的数据库数据的唯一性。
图3-7 待处理用户队列
处理服务器:
对于多台运算服务器和数据库之间的协作,本文用图3-8加以说明。
图3-8 分布式处理系统结构
处理过程的伪代码如算法3-3。
算法3-3 分布式处理与队列请求算法
While(true){
Thread t:
{
while(null!=(Record a=Request a record from database server))
{
处理该记录…;
}
}
处理线程线程转入休眠状态,休眠一个小时,一小时后唤醒;
}
第四章 文本篇章分析和信息推荐系统的设计
文本篇章分析和信息推荐系统的目的就是挖掘用户的行为,尽可能准确的收敛到用户的兴趣。让用户从逛街式的浏览互联网信息的方式中解放出来,不让用户从繁杂的网络中搜寻自己感兴趣的东西。而且能够让用户了解其他人所感兴趣的东西,而不致于过小限定在自己的兴趣范围内。
系统运行情景:(说明:用户界面是web页面,这部分内容参考罗林群同学的论文,这里我不赘述)。
4.1 系统的体系结构及数据设计
为了保证程序的简明性,提高分布式部署时的效率,我把整个系统分成:浏览记录分词分类、公共推荐、个性化推荐三个小的程序。可以用图4-1来描述系统的结构构成。
图4-1 系统的结构构成
图4-1中分词分类程序需要从数据库获取用户浏览记录,对用户浏览的网页的标题进行分词,对分词结果进行分类,并根据用户兴趣知识库识别分词结果中包含的用户的兴趣概念,然后将分词的结果写入数据库中。
个性化推荐程序和公共推荐程序都用到分词分类程序的分词结果,它们用分词分类程序挖掘的用户兴趣概念作为关键词访问搜索引擎,经过一些权重排名计算和去重处理之后,将结果作为推荐信息写回数据库。最后用户上线时即可将这些信息推荐给每个用户。
4.1.1 分词和分类
用户web界面记录用户浏览过的信息,然后保存相关数据到服务器中。相关数据接口的格式如表 4-1。
表 4-1
用户ID
网页标题
网页url
浏览时间
是否处理过
数据类型
int
string
string
datatime
bit
举例
1
姚明、叶莉陪同摩洛哥王妃访问特殊教育学校
http://sports.163.com/photoview/4TCQ0005/78568.htm
2012-03-25 16:45:53.000
False
系统从数据库中选取没有处理过的记录进行分词处理。例如有一个标题为“姚明、叶莉陪同摩洛哥王妃访问特殊教育学校“的用户浏览记录没有进行过分词处理,那么分词程序将对“姚明、叶莉陪同摩洛哥王妃访问特殊教育学校“进行分词处理,得到结果如下(用”/”进行分割):
姚明/、/叶莉/陪同/摩纳哥/王妃/访问/特殊教育/学校
去掉噪声词”、”之后:
“姚明/叶莉/陪同/摩纳哥/王妃/访问/特殊教育/学校”
然后将分词结果保存到用户分词词库中。
4.1.2 分词权重计算
本项目采用简单的统计算法进行权重的计算。
算法的伪代码描述如算法4-1。
算法4-1
获取新的分词结果 a;
If(“a”在该用户的分词表中已经存在)
{
把数据库中该分词权重+1;
return success;
}
else if(“a”在该用户的分词表中不存在)
{
插入新的分词结果”a”;
把分词”a”权重赋值为1;
return success;
}
else
{
return false;
}
算法4-1的运行结果如图4-1。
图4-1 分词结果
4.1.3 公共热点推荐
公共热点推荐是从所有用户行为收敛而来。为了保证用户能够及时接收到其他重大事情的相关信息,提供用户了解互联网其他用户所感兴趣的事情。本项目要产生公共热点推荐,需要访问到数据逻辑层提供的几个表,需要使用的几个主要接口以及说明在表4-2中。
表4-2 公共推荐的接口及说明
字段
wContent
kdegree
kID
title
含义
分词具体内容
分词权重
分词分类
推荐信息标题
所属表
t_PublicWord
t_PublicWord
t_PublicWord
t_PublicIntroodution
字段
url
grade
含义
推荐信息网址
推荐评分
所属表
t_PublicIntroodution
t_PublicIntroodution
表4-2中的kdegree为式(2.4)中的。这部分的信息是面向所有用户的。当然,公共热点信息是根据所有用户的浏览记录统计计算,访问搜索引擎产生的。
相关伪代码如算法4-2:
算法4-2 公共推荐的算法
Process Begin:
获取一个权重最高的未处理的分词”a”;
If(“a”为空)
{
程序转入休眠;第二天0时0分0秒重新唤醒运行;
}
else
{
以”a”作为搜索关键词访问搜索引擎;
接受搜索引擎返回的html代码;
对html代码进行预处理,正则表达式匹配超链接url;
访问url超链接,对url进行网页排名评价;
将url、网页排名评分、网页标题写入数据库
将分词”a”标记为已处理。
}
Process End
4.1.4 个性化推荐
个性化推荐是本系统的主要目的所在,公共推荐主要的目的是为了提供用户改变自己兴趣的可能,而分词和分类只是为了推荐提供基础服务。本项目要产生个性化热点推荐,需要访问到数据逻辑层提供的几个表,需要使用的几个主要接口以及说明在表4-3中。
表4-3 个性化推荐所用接口及说明
字段
wContent
kdegree
kID
含义
分词内容
分词权重
分词所属分类
所属表
t_PersonalWord
t_PersonalWord
t_PersonalWord
字段
url
grade
含义
推荐信息网址
推荐评分
所属表
t_PersonalWord
t_PersonalWord
表4-3中的kdegree为式(2.4)中的。表4-3中的grade为页面评分。该数值由表达式(2.4)计算而来。具体实现的伪代码如算法4-3。
算法4-3 个性化推荐的产生算法
///keywordkind为该keyword的分类。
Int CaculatePageGrade(string url,string keyword,int keywordkind)
{
String html=GetHtmlFromUrl(uil);
Int grade=0;
Foreach(word p in html) ///遍历html所有的分词
{
If(分词p在keywordkind分类下的分词库中存在,其权重为)
{
}
}
Return grade;
}
Static String GetHtmlFromUrl(string url)
{
Return 该url对应的html代码;
}
第五章 实验结果分析与比较
5.1 收敛性测试
5.1.1 系统收敛的精确度测试
首先,用户注册一个账户。 然后登陆刚刚注册的用户。
本项目随意定制自己的感兴趣的领域。然后浏览一些关于林书豪的新闻。接下来本项目运行分词和分类程序,对用户浏览记录进行分析。用户的浏览记录如图5-1。
图5-1 用户浏览记录
接着本项目运行分词程序,对用户的浏览记录进行分析。分词程序运行的结果如图5-2。
图5-2 分词程序运行结果
然后本项目运行用户个性化推荐程序。用户个性化推荐程序将会对图5-2中显示的用户浏览记录的分词结果进行分析,产生用户推荐信息。最后用户在web界面看到的推荐信息的推荐结果如图5-3、图5-4、图5-5。
图5-3 个性化推荐信息的第一页结果
图5-4 用户个性化推荐结果第二页
图5-5 用户个性化推荐结果第三页
测试结果分析:
根据图5-3,测试的收敛结果还是比较理想的。用户浏览6条”有关林书豪”之后系统能够较好地识别出用户对于”林书豪”;并且推荐了一些”林书豪”相关的内容给该用户。但是,访问Google,Bing,Baidu等几个搜索引擎会产生一些重复的推荐结果。因此,需要进行去重处理。具体的处理算法在3.5.4节中有详细的描述。
采用去重算法之后的推荐结果如图5-6。
图5-6去重后的个性化推荐
个性化推荐信息的第二页如图5-7。
图5-7 去重后的个性化推荐第二页
5.1.2 分词字典的无意词测试
采用3.5.4的去重算法之后系统能够较好地消去重复现象,虽然系统只处理了最简单的重复的情况,但是去重的效果还是比较明显的。图4-6中依然有一些用户不感兴趣的内容;以推荐结果的第三条” 评分:581 房价合理了 城市化就完成了”为例子,这条推荐信息的产生是因为用户浏览记录分词结果没有消去无意词。用户的部分浏览记录如表5-1。
表5-1 用户浏览记录
clickID
uID
title
22
0
林书豪左膝再次伤痛 复出无期
23
0
林书豪连失两个奖项 进步最快奖归了安德森
25
0
科林斯:不让公牛轻松投篮
表5-1分词的结果如下:
林书豪/左/膝/再次/伤痛/复出/无期/
林书豪/连/失/两个/奖项/进步/最快/奖/归/了/安德森/
/科林斯/:/不让/公牛/轻松/投篮/
分词系统分析出” /归/了/安德森/”这样的分词结果,但是并未将”归”,”了”这类词过滤掉。然后以”归”,”了”作为关键词访问搜索引擎,从而产生了第三条推荐结果:
” 评分:581 房价合理了 城市化就完成了”
因此,分词和分类算法必须在自动分词的时候识别出无意词出来。并且将检测到的无意词过滤掉。这样就不会产生这类不相干的推荐结果了。
在此,我引入接下来的测试3关键词词库算法
5.2 专有名词的分词算法
本文为了优化专有名词的分词算法,采用专有名词词库匹配算法。在常规分词时,检测文本中有没有专有名词。并且修改了一些分词规则。在没有专有词库的知识库时,人类的分词规则会把一个后面跟着数字的英文字母拆分成两个分词。实际上,大量专有名词都是英文字母后面跟有数字编号的。在没有添加专有词词库处理时,系统的分词实例如图5-8。
待分词的文本如下文本5-1:
美在阿联酋部署F-22战机 伊朗称危及地区安全(图)
F-22“猛禽”直逼伊朗 美伊较量陡升温收藏收藏
传F-22战机“缺氧” 美飞行员拒飞
F-22“猛禽”直逼伊朗 美伊较量陡升温
美国部分F-22战机飞行员要求换岗 因驾驶时感觉缺氧
文本5-1
图5-8没有专有词词库时的分词及关键词识别(关键词识别采用2.4.2中的算法)
因为分词算法不能识别作为专有名词的”F-22”,因此,关键词的识别效果并不理想。所有关键词”F-22”都未能识别出来。
同样是文本5-1,在添加专有名词词库处理之后,其分词和关键词识别结果如图5-9。
图5-9有专有词词库时的分词及关键词识别(关键词识别采用2.4.2中的算法)
本项目将图中的文字列出来,在下面进行对比:
待分词文本:
“美在阿联酋部署F-22战机 伊朗称危及地区安全(图)”
“F-22“猛禽”直逼伊朗 美伊较量陡升温收藏收藏”
“传F-22战机“缺氧” 美飞行员拒飞”
“F-22“猛禽”直逼伊朗 美伊较量陡升温”
“美国部分F-22战机飞行员要求换岗 因驾驶时感觉缺氧”
未添加专有词库时的分词效果和关键词识别:
美在/阿联酋/部署/F/-22/战机/ 伊朗/称/危及/地区/安全/(图)
关键词: 伊朗/战机
F/-22/“/猛禽/”/直/逼/伊朗 /美/伊较量/陡/升温/收藏/收藏/
关键词: 猛禽/伊朗
传/F/-22/战机/“/缺氧/”/ 美/飞行员/拒/飞/
关键词: 战机/
F/-22/“/猛禽/”/直/逼/伊朗 /美/伊较量/陡/升温/
关键词: 猛禽/
美国/部分/F/-22/战机/飞行员/要求/换岗/ 因/驾驶/时/感觉/缺氧/
关键词: 美国/战机
加入了专有词库之后的分词效果及关键词的识别:
美在/阿联酋/部署/F-22/战机/ 伊朗/称/危及/地区/安全/(图)
关键词: F-22/伊朗/战机
F-22/“/猛禽/”/直/逼/伊朗 /美/伊较量/陡/升温/收藏/收藏/
关键词: F-22/猛禽/伊朗
传/F-22/战机/“/缺氧/”/ 美/飞行员/拒/飞/
关键词: F-22/ 战机/
F-22/“/猛禽/”/直/逼/伊朗 /美/伊较量/陡/升温/
关键词: F-22/猛禽/
美国/部分/F-22/战机/飞行员/要求/换岗/ 因/驾驶/时/感觉/缺氧/
关键词: 美国/F-22/战机
5.3兴趣识别算法的测试
5.3.1 噪声词消去算法
噪声词消去算法最大的弊病在于噪声词是未知的,而且其数量十分庞大。因为任何数量的文字组合都可能是噪声词,本项目常用的中文字在数量级,这种情况的噪声词库的数量noise计算表达式如式(5.1)
这个数量的总和是十分庞大的。因此,实际上这种算法并不可取。本项目构造了一个规模较小的噪声词库,其规模为,同样测试文本5-1的运行结果如图5-10。
结果分析:
本项目以图5-10的第一个分词结果及其关键词为例说明这种算法主要存在的问题。
分词结果:美在/阿联酋/部署/F-22/战机/ 伊朗/称/危及/地区/安全/(图)
关键词:美在/阿联酋/部署/F-22/战机/ 伊朗/称/危及/地区/安全/(图)
比较两者可见,噪声词是不确定的,或者说,因为噪声词的样本空间太过庞大,给本项目试图完成一个噪声库制造了巨大障碍。因此,在本项目的噪声库不能够收集齐全的情况下,分词被认定为噪声词的几率是十分低的。因此,这时候系统识别出来的用户兴趣领域会大于用户实际的兴趣领域,这将导致推荐结果的发散。因此,我不在实际中采用这种算法。
5.3.2 固定关键词词库算法
本项目手动添加了一个名为:” sKeyWordlib.txt”的关键词词库,里面录入了常见词。中文的常见词为数量级,这个数量级的样本采集是可以实现的。本项目测试如下的文本的分词中关键词的识别:
林书豪左膝再次伤痛 复出无期
林书豪连失两个奖项 进步最快奖归了安德森
林书豪领衔中外体坛功夫秀 博阿滕展示中国功夫
科林斯:不让公牛轻松投篮
林书豪连失两个奖项 进步最快奖归了安德森:
林书豪连失两个奖项 进步最快奖归了安德森:
美在阿联酋部署F-22战机 伊朗称危及地区安全(图)
F-22“猛禽”直逼伊朗 美伊较量陡升温收藏收藏
传F-22战机“缺氧” 美飞行员拒飞
F-22“猛禽”直逼伊朗 美伊较量陡升温
美国部分F-22战机飞行员要求换岗 因驾驶时感觉缺氧
测试结果如图5-11。
图5-11 固定关键词词库算法
结论
自图灵在半个世纪前定义了图灵测试以来,无数人在为提高计算机的智能水平而努力着。本项目所做的也是为了让计算机和互联网能够更加聪明,更加了解用户,而不是靠用户的命令告诉它用户在想什么,想知道什么;它该怎么做,该做什么。反思本项目在这里所做的工作,其方法的本质仍然是属于人工智能的专家系统范畴。就人工智能未来而言,专家系统的知识库是必不可少的,没有凭空产生的知识和规则,人类的千百万年进化的积累才有了当前的文明,人类的所有知识大部分都以书籍和经验的方式相传发展。没有任何一种算法或者技术能够凭空创造出知识和规则,没有知识库和专家系统的支持,人工智能只不过是空中楼阁而已。
本文所实现的系统为了实现分析用户的浏览记录,从用户的浏览记录中发现用户的兴趣所在。用户兴趣的识别依赖于用户兴趣概念知识库。本项目已经能够较好地识别出用户的单一概念的兴趣,并且能够产生比较精确的推荐信息。本文所介绍的系统均已实现自动化运行,从测试结果来分析,单一概念的兴趣分析和信息推荐是比较理想的。当然,由于三人团队能力有限,这个项目具有许多开创性的设想还未能实现,本项目三人算是尽了抛砖引玉的作用,这些都留待以后的研究。我列出了系统的以后主要的可改进方面,便于以后的改进。
1、多概念的用户兴趣识别。很多时候用户的兴趣都不能用一个兴趣概念来描述。例如“美国什么时候解决伊朗核问题”,这个句子的分词结果是“美国/什么/时候/结果/伊朗/核问题”,但是分析用户的兴趣概念时,这个句子应该是一个整体,而不是“美国”、“伊朗”或者“核问题”。这个问题可以通过扩展用户兴趣概念知识库来解决,这时候不能对文本进行分词。
2、分词相似度部分暂时没有展开,这部分的工作量很大数据量为,为分词数量,如果中文词组为数量级的话,那么分词相似度部分的数据量应该为,尽管系统可以自动收敛到贴近真实关系的数值,但是系统学习也需要完成很大的工作量
3、启发式的关键词识别算法。真实的人看待词句,并不是孤立的看待词句中的一些分词;而是有着语言环境。句子里面的词都是有着千丝万缕的联系。研究关键词之间的联系也是很有挑战的一项工作
4、推荐结果的去重算法。我只处理了搜索结果指向同一个页面这种情况的去重问题,目前看这种处理方式也还满足系统的需求。当文章摘要技术成熟之后,这部分的工作也可以顺势进行。
5、几何级数的快开始满减少算法。用户连续几次登陆都没有浏览某个关键词相关的推荐,纳闷这个关键词的权重递减速度应该为几何级,而不仅仅是线性递减。这个的原因很显然。
参考文献
[1] Mark Michaelis.著周靖译.C#本质论第三版[M].人民邮电出版社.2010.
[2] 费尔德曼,桑格. 文本挖掘(英文版)[M] 人民邮电出版社. 2009.[第2-5章]
[3] 程显毅,朱倩. 文本挖掘原理[M] 科学出版社 2010.
[4] 章成志,白振田. 文本自动标引与自动分类研究[M] 东南大学出版社 2009.
[5] 杨涛. 个性化智能新闻信息检索系统的设计与实现[D].兰州大学2008.[19-20]
[6] (美)刘兵(Liu,B.)著,俞勇等译 Web数据挖掘[M] 清华大学出版社 2009.
[7] 周程远.中文自动分词系统的研究与实现[D]. 华东师范大学.2009.[16-23]
[8] 倪栋君.分布式关联规则挖掘若干算法研究与实现[D].浙江工商大学.2009.[9-10]
[8] 米哈尔斯基等. 机器学习与数据挖掘:方法和应用[M] 电子工业出版社 2004.
[9] 刘开瑛. 中文文本自动分词和标注[M] 商务印书馆 2000.
[10] 崔平军. 基于网络日志挖掘的个性化搜索[D] 北京工业大学 2009.
[11] 程明. 基于文本分类与用户兴趣的个性化搜索与推荐的研究与实现[D] 中山大学 2006.
[12] http://incubator.apache.org/lucene.net/ 中文分词开源项目.
[13] 罗刚. 解密搜索引擎技术实战:Lucene&Java精华版[M] 电子工业出版社 2011.
致谢
引用牛顿的话:”我之所以站得高,是因为我站在了前人的肩膀上”。这次毕业设计的内容十分庞杂,算法比较繁琐,有很多东西从头开始写代码是一项十分艰巨的任务,在此感谢无数技术大虾们为本项目开创的大道。我想没有lucene开源项目[遵守Apache许可证],我的分词算法是很难独立完成的。这里我引用了[12]开源项目里面的部分分词代码。并且为其添加了中心词词库的两种算法[开源社区本着人人为我,我为人人的原则而成立,因此这部分算法将遵守GNU通用公共许可证];这些算法在2.4节中有赘述。
我要感谢所有曾经教导过我的老师和关心过我的同学,他们在我成长过程中给予了我很大的帮助。本文能够顺利完成,要特别感谢我的导师林荣德老师,感谢各位系的老师的关心和帮助。谨以我最诚挚的心。