【发明内容】
基于此,有必要提供一种实现简单、能提高运行性能的个性化搜索方法。
一种个性化搜索方法,包括以下步骤:获取用户发表的文档,对文档进行分类,得到文档的分类信息;根据文档的分类信息构建用户模型和文档模型;根据用户输入的检索词进行检索,得到检索结果;根据所述用户模型和文档模型计算所述检索结果的排序权值;根据所述排序权值对所述检索结果进行排序。
优选的,所述根据文档的分类信息构建用户模型和文档模型的步骤为:获取用户发表的文档的分类概率及检索词的分类概率;构建个人模型,所述个人模型为由用户发表的文档的分类概率组成的向量,构建大众模型,所述大众模型为由检索词的分类概率组成的向量,将所述个人模型与大众模型进行线性叠加,得到用户模型;构建文档模型,所述文档模型为由文档属于各分类的概率组成的向量。
优选的,采用如下公式构建所述用户模型:
P(people_social)=a×P(query)+(1-a)P(people),0≤a≤1
其中,P(people_social)为用户模型,P(query)为大众模型,P(people)为个人模型,a为用户活跃度指数;
所述用户活跃度指数的计算公式为:
其中,N为一个用户发表的文档总数,N1为所有用户平均发表的文档数。
优选的,所述根据用户模型和文档模型计算排序权值的步骤为:获取登录用户的用户模型和检索结果中每个文档的文档模型;计算所述登录用户的用户模型和所述文档模型的第一相似度;获取检索结果中每个文档的作者的用户模型,计算所述作者的用户模型与所述登录用户的用户模型的第二相似度;将所述第一相似度与第二相似度进行线性叠加,得到所述排序权值。
优选的,所述方法还包括对用户模型进行更新的步骤,具体是:设置线性衰减函数、统计周期和统计时间段;在所述统计时间段内统计每个统计周期内用户发表的各类文档数;根据所述线性衰减函数,获取折算后的统计时间段内用户发表的各类文档数;根据所述折算后的用户发表的各类文档数构建用户模型。
此外,还有必要提供一种实现简单、能提高运行性能的个性化搜索系统。
一种个性化搜索系统,包括:文档分类模块,用于获取用户发表的文档,并对文档进行分类,得到文档的分类信息;用户模型构建模块,用于获取所述文档分类信息,根据所述文档分类信息构建用户模型;文档模型构建模块,用于获取所述文档分类信息,根据所述文档分类信息构建文档模型;检索模块,用于根据用户输入的检索词进行检索,得到检索结果;排序权值计算模块,用于根据所述用户模型和文档模型计算所述检索结果的排序权值;排序模块,用于根据所述排序权值对所述检索结果进行排序。
优选的,所述用户模型构建模块用于获取用户发表的文档的分类概率及检索词的分类概率,构建个人模型,所述个人模型为由用户发表的文档的分类概率组成的向量,构建大众模型,所述大众模型为由检索词的分类概率组成的向量,将所述个人模型与大众模型进行线性叠加,得到用户模型;所述文档模型构建模块用于构建所述文档模型,所述文档模型为由文档属于各分类的概率组成的向量。
优选的,所述用户模型构建模块按如下公式构建所述用户模型:
P(people_social)=a×P(query)+(1-a)P(people),0≤a≤1
其中,P(people_social)为用户模型,P(query)为大众模型,P(people)为个人模型,a为用户活跃度指数;
所述系统还包括用户活跃度指数计算模块,所述用户活跃度指数计算模块计算所述用户活跃度指数的计算公式为:
其中,N为一个用户发表的文档总数,N1为所有用户平均发表的文档数。
优选的,所述排序权值计算模块包括:查询单元,用于获取登录用户的用户模型;相似度计算单元,用于获取检索结果中每个文档的文档模型及每个文档的作者的用户模型,计算所述登录用户的用户模型和所述文档模型的第一相似度,以及计算所述作者的用户模型与所述登录用户的用户模型的第二相似度;线性叠加单元,用于将所述第一相似度和第二相似度进行线性叠加,得到排序权值。
优选的,所述用户模型构建模块包括更新模块,所述更新模块具体包括:设置单元,用于设置线性衰减函数、统计周期和统计时间段;统计单元,用于在所述统计时间段内统计每个统计周期内用户发表的各类文档数;折算单元,用于根据所述线性衰减函数,获取折算后的统计时间段内用户发表的各类文档数;用户模型构建单元,用于根据所述折算后的用户发表的各类文档数构建用户模型。
上述个性化搜索方法和系统,根据文档分类构建用户模型和文档模型,再根据构建的用户模型和文档模型计算检索结果的排序权值,按照排序权值对检索结果进行重新排序。由于分类维度通常在十几维以内,因此构建的用户模型和文档模型的维度较低,实现起来简单,从而能够提高运行性能。
【具体实施方式】
如图1所示,一种个性化搜索方法,包括以下步骤:
步骤S102,获取用户发表的文档,对文档进行分类,得到文档的分类信息。
用户发表的文档包括用户通过网络社区发表的各种日志、博客、评论等。用户通过网络社区发表的文档最能展示用户的兴趣,根据这些文档构建的用户模型更准确。可采用传统的文本自动分类方法对用户发表的文档进行分类。用户发表的文档及对这些文档的分类信息存储在搜索引擎数据库中。
步骤S104,根据文档的分类信息构建用户模型和文档模型。
在一个实施例中,根据文档的分类信息构建的用户模型为个人模型和大众模型的线性叠加。其中,个人模型为由用户发表的文档的分类概率组成的向量。如有n个分类,那么个人模型就是一个n维的向量,其向量的各个元素为用户发表的文档的分类概率。例如,个人模型可以表示为:
P(people)=(y1,y2,…,yn)
其中,yi为用户发表的一类文档的分类概率。如设置两个类别,体育类文档和数码科技类文档。用户共发布体育类文档20篇,发表数码科技类文档80篇。则用户的个人模型为P(people)=(0.2,0.8)。
由于部分用户发表的文档可能很少,其个人模型的可信度并不高,并且在个性化搜索实施初期,很多用户需要一个初步接受的过程,因此需要设置大众模型。大众模型为由检索词的分类概率组成的向量。由于检索词很短,可采用传统的贝叶斯自动分类方法估算其分类概率。例如,大众模型可以表示为:
P(query)=(x1,x2,…,xn)
其中,xi为检索词属于文档各分类的概率。如设置了体育和数码科技两个类别,检索词“苹果”是体育类的概率为0.2,是数码科技类的概率为0.8,则用户的大众模型为P(query)=(0.2,0.8)。
该实施例中,根据个人模型和大众模型构建的用户模型可表示为:
P(people_social)=a×P(query)+(1-a)P(people),0≤a≤1
其中,P(people_social)为用户模型,P(query)为大众模型,P(people)为个人模型,a为用户活跃度指数。
用户活跃度指数用来判断个人模型的可信度。有的用户仅发表几篇文档,而有的用户发表上千篇文档,用户活跃度指数能够用来综合考虑大众兴趣和个人兴趣。用户发表的文档总数太少,则其兴趣主要以大众兴趣为主,用户发表的文档总数很多,则增加个人模型的权重,因此用户活跃度指数影响个人模型和大众模型的线性叠加参数。
在一个优选的实施例中,所述用户活跃度指数的计算公式为:
其中,N为一个用户发表的文档总数,N1为所有用户平均发表的文档数。即:如果一个用户发表的文档数超过用户平均发表文档数的2倍,则用户活跃度指数为1,认为其个人模型是可信的。如果小于用户平均发表文档数的2倍,则计算用户发表的文档数与2倍的用户平均发表文档数的比值,作为个人模型和大众模型进行线性叠加计算的参数,计算用户模型。
在一个实施例中,构建文档模型,该文档模型为由文档属于各分类的概率组成的向量。如有n个分类,则文档模型就是一个n维的向量,其向量的各个元素为文档属于各个分类的概率。例如可以表示为:
P(page)=(z1,z2,…,zn)
其中,zi为文档属于各分类的概率。对于长文本(如博客等),可采用传统的支持向量机中的逻辑回归方法估算文档的分类概率,对于短文本(如微博等),可采用传统的贝叶斯自动分类方法估算其分类概率。
步骤S106,根据用户输入的检索词进行检索,得到检索结果。
步骤S108,根据用户模型和文档模型计算检索结果的排序权值。
步骤S110,根据排序权值对检索结果进行排序。
根据排序权值对检索结果进行排序后,排序靠前的检索结果更能反映用户的兴趣,所提供的个性化搜索结果更能满足用户的需求。由于根据文档分类来构建用户模型和文档模型,分类维度较低,使得构建的用户模型和文档模型的维度也较低,实现起来简单,能够提高运行性能。
此外,基于分类方法来构建用户模型和文档模型,容易设置多级分类,易于扩展,也不会因为分类的增加而降低运行性能。并且,根据分类概率构建的用户模型能更好的体现用户兴趣的多样性和变化,重新排序后的检索结果更能满足用户需求。用户模型和个人模型为分类概率所组成的向量,所构建的模型提供的仅仅是维度很低的数字,涉及宏观上的兴趣类别,不会涉及到用户的隐私信息,易于被用户所接受。
在一个实施例中,如图2所示,步骤S108的具体过程为:
步骤S202,获取登录用户的用户模型和检索结果中每个文档的文档模型。
根据登录用户的标识号可查找到登录用户的用户模型。根据用户输入的检索词进行检索,获取得到的检索结果中每个文档的文档模型。
步骤S204,计算登录用户的用户模型和文档模型的第一相似度。
该实施例中,计算第一相似度即计算用户的用户模型与文档模型的余弦距离,计算公式为:rank1=sim(P(people),P(page))=cos<P(people),P(page)>。
步骤S206,获取检索结果中每个文档的作者的用户模型,计算作者的用户模型与登录用户的用户模型的第二相似度。
根据检索结果中每个文档的作者的标识获取到对应的用户模型。计算第二相似度即计算每个文档的作者的用户模型与登录用户的用户模型之间的余弦距离,计算公式为:rank2=sim(P(user),P(author))=cos<P(user),P(author)>,其中,P(user)为登录用户的用户模型,P(author)为每个文档的作者的用户模型。
在一个优选的实施例中,步骤S206还包括计算专家指数的步骤。专家指数用于第二相似度的计算中,其计算公式为:
其中,M为用户发表的某类文档的总数,M1为发表该类别文档最多的用户发布的该类文档的数目。
在一个实施例中,计算专家指数后,每个文档的作者的用户模型与登录用户的用户模型的第二相似度的计算公式则为:
rank2=cos<P(user),P(author)>*exp(M)
也可以采用其他方式修正第二相似度的计算,例如,利用专家指数对第二相似度进行加权处理等。
步骤S208,将第一相似度与第二相似度进行线性叠加,得到排序权值。
该实施例中,按照如下公式计算排序权值:
rank=b×rank1+(1-b)rank2,0≤b≤1
其中,b为经验参数。
在另一个实施例中,上述个性化搜索方法还包括对用户模型进行更新的步骤。由于文档本身的分类变化较少,因此文本模型通常不需要更新。而用户的兴趣会随着时间变化,因此在一定时间周期内需要对用户模型进行更新。
该实施例中,如图3所示,对用户模型进行更新的具体过程如下:
步骤S302中,设置线性衰减函数、统计周期和统计时间段。
由于用户模型是按照其发表文档的分类概率构建的,将各时段发表的文档的篇数按照距离当前的时间进行衰减,然后统一计算衰减后的各类别的文档数,根据衰减后的各类别的文档数构建用户模型,则完成了用户模型的更新。
步骤S304中,在统计时间段内统计每个统计周期内用户发表的各类文档数。
步骤S306中,根据线性衰减函数,获取折算后的统计时间段内用户发表的各类文档数。
在一个优选的实施例中,设置衰减函数为f(t)=t,表示用户兴趣随时间线性衰减。设置统计周期为月,12个月为一个统计时间段。统计12个月每个月发表的各类文档数,按照距当前的时间进行折算,计算折算后的用户发表的各类文档数。
该实施例中,采用如下公式进行折算:
其中,Z表示折算后作者发表的某个类别的文档数,t表示文档发表日期距离当前的时间,zt表示t时段作者发表的某个类别的文档数,f(t)为衰减函数。
例如,一个用户在统计时间段内,第一个月发表体育类文档数z1,第二个月发表体育类文档数z2,...,当前的月份,也就是第12个月发表体育文档数为z12,则该用户发布的体育类文档折算后的数目为
步骤S308中,根据折算后的用户发表的各类文档数构建当前的用户模型。
如图4所示,一种个性化搜索系统,包括文档分类模块100、搜索引擎数据库200、用户模型构建模块300、文档模型构建模块400、检索模块500、排序权值计算模块600和排序模块700,其中:
文档分类模块100用于获取用户发表的文档,并对文档进行分类,得到文档的分类信息。
用户发表的文档包括用户通过网络社区发表的各种日志、博客、评论等。用户通过网络社区发表的文档最能展示用户的兴趣,根据这些文档构建的用户模型更准确。可采用传统的文本自动分类方法对用户发表的文档进行分类。用户发表的文档及对这些文档的分类信息可存储在搜索引擎数据库200中。
搜索引擎数据库200用于存储用户发表的文档和文档分类信息。
用户模型构建模块300用于获取文档分类信息,根据文档分类信息构建用户模型。
在一个实施例中,根据文档的分类信息构建的用户模型为个人模型和大众模型的线性叠加。其中,个人模型为由用户发表的文档的分类概率组成的向量。如有n个分类,那么个人模型就是一个n维的向量,其向量的各个元素为用户发表的文档的分类概率。例如,个人模型可以表示为:
P(people)=(y1,y2,…,yn)
其中,yi为用户发表的一类文档的分类概率。如设置两个类别,体育类文档和数码科技类文档。用户共发布体育类文档20篇,发表数码科技类文档80篇。则用户的个人模型为P(people)=(0.2,0.8)。
由于部分用户发表的文档可能很少,其个人模型的可信度并不高,并且在个性化搜索实施初期,很多用户需要一个初步接受的过程,因此需要设置大众模型。大众模型为由检索词的分类概率组成的向量。由于检索词很短,可采用传统的贝叶斯自动分类方法估算其分类概率。例如,大众模型可以表示为:
P(query)=(x1,x2,…,xn)
其中,xi为检索词属于文档各分类的概率。如设置了体育和数码科技两个类别,检索词“苹果”是体育类的概率为0.2,是数码科技类的概率为0.8,则用户的大众模型为P(query)=(0.2,0.8)。
该实施例中,用户模型构建模块300根据个人模型和大众模型构建的用户模型可表示为:
P(people_social)=a×P(query)+(1-a)P(people),0≤a≤1
其中,P(people_social)为用户模型,P(query)为大众模型,P(people)为个人模型,a为用户活跃度指数。
该实施例中,上述系统还包括用户活跃度指数计算模块(图中未示出)。用户活跃度指数用来判断个人模型的可信度。有的用户仅发表几篇文档,而有的用户发表上千篇文档,用户活跃度指数能够用来综合考虑大众兴趣和个人兴趣。用户发表的文档总数太少,则其兴趣主要以大众兴趣为主,用户发表的文档总数很多,则增加个人模型的权重,因此用户活跃度指数影响个人模型和大众模型的线性叠加参数。
在一个优选的实施例中,用户活跃度指数计算模块计算用户活跃度指数的计算公式为:
其中,N为一个用户发表的文档总数,N1为所有用户平均发表的文档数。即:如果一个用户发表的文档数超过用户平均发表文档数的2倍,则用户活跃度指数为1,认为其个人模型是可信的。如果小于用户平均发表文档数的2倍,则计算用户发表的文档数与2倍的用户平均发表文档数的比值,作为个人模型和大众模型进行线性叠加计算的参数,计算用户模型。
文档模型构建模块400用于获取文档分类信息,根据文档分类信息构建文档模型。
在一个实施例中,文档模型构建模块400构建的文档模型为由文档属于各分类的概率组成的向量。如有n个分类,则文档模型就是一个n维的向量,其向量的各个元素为文档属于各个分类的概率。例如可以表示为:
P(page)=(z1,z2,…,zn)
其中,zi为文档属于各分类的概率。对于长文本(如博客等),可采用传统的支持向量机中的逻辑回归方法估算文档的分类概率,对于短文本(如微博等),可采用传统的贝叶斯自动分类方法估算其分类概率。
检索模块500用于根据用户输入的检索词进行检索,得到检索结果。
排序权值计算模块600用于根据用户模型和文档模型计算检索结果的排序权值。
排序模块700用于根据排序权值对检索结果进行排序。
在一个实施例中,如图5所示,排序权值计算模块600包括查询单元610、相似度计算单元620和线性叠加单元630,其中:
查询单元610用于获取登录用户的用户模型。查询单元610根据登录用户的标识号可查找到登录用户的用户模型。
相似度计算单元620用于获取检索结果中每个文档的文档模型及每个文档的作者的用户模型,计算登录用户的用户模型和文档模型的第一相似度,以及计算作者的用户模型与登录用户的用户模型的第二相似度。
该实施例中,计算第一相似度即计算用户的用户模型与文档模型的余弦距离,计算公式为:rank1=sim(P(people),P(page))=cos<P(people),P(page)>。根据检索结果中每个文档的作者的标识获取到对应的用户模型。计算第二相似度即计算每个文档的作者的用户模型与登录用户的用户模型之间的余弦距离,计算公式为:rank2=sim(P(user),P(author))=cos<P(user),P(author)>,其中,P(user)为登录用户的用户模型,P(author)为每个文档的作者的用户模型。
在一个优选的实施例中,上述系统还包括专家指数计算模块(图中未示出)专家指数用于第二相似度的计算中,其计算公式为:
其中,M为用户发表的某类文档的总数,M1为发表该类别文档最多的用户发布的该类文档的数目。
在一个实施例中,计算专家指数后,每个文档的作者的用户模型与登录用户的用户模型的第二相似度的计算公式则为:
rank2=cos<P(user),P(author)>*exp(M)
也可以采用其他方式修正第二相似度的计算,例如,利用专家指数对第二相似度进行加权处理等。
线性叠加单元630用于将第一相似度和第二相似度进行线性叠加,得到排序权值。
该实施例中,线性叠加单元630按照如下公式计算排序权值:
rank=b×rank1+(1-b)rank2,0≤b≤1
其中,b为经验参数。
在另一个实施例中,用户模型构建模块300包括更新模块310,如图6所示,更新模块310包括设置单元311、统计单元312、折算单元313和用户模型构建单元314,其中:
设置单元311用于设置线性衰减函数、统计周期和统计时间段。
由于用户模型是按照其发表文档的分类概率构建的,将各时段发表的文档的篇数按照距离当前的时间进行衰减,然后统一计算衰减后的各类别的文档数,根据衰减后的各类别的文档数构建用户模型,则完成了用户模型的更新。
统计单元312用于在统计时间段内统计每个统计周期内用户发表的各类文档数。
折算单元313用于根据线性衰减函数,获取折算后的统计时间段内用户发表的各类文档数。
在一个优选的实施例中,设置单元311设置衰减函数为f(t)=t,表示用户兴趣随时间线性衰减。设置统计周期为月,12个月为一个统计时间段。统计单元312统计12个月每个月发表的各类文档数,折算单元313按照距当前的时间进行折算,计算折算后的用户发表的各类文档数。
该实施例中,折算单元313采用如下公式进行折算:
其中,Z表示折算后作者发表的某个类别的文档数,t表示文档发表日期距离当前的时间,zt表示t时段作者发表的某个类别的文档数,f(t)为衰减函数。
例如,一个用户在统计时间段内,第一个月发表体育类文档数z1,第二个月发表体育类文档数z2,...,当前的月份,也就是第12个月发表体育文档数为z12,则该用户发布的体育类文档折算后的数目为
用户模型构建单元314用于根据折算后的用户发表的各类文档数构建用户模型。
以上所述实施例仅表达了本发明的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对本发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变形和改进,这些都属于本发明的保护范围。因此,本发明专利的保护范围应以所附权利要求为准。