发明内容
本发明所要解决的技术问题是:电子商务网站的用户中新用户的比例很高,很多新用户是在下单购买时才注册登录,一个电子商务网站的新用户既没有历史行为信息数据,如历史评分,浏览,购买等行为,大部分情况也没有人口统计信息数据,如年龄,性别,职业等,所以传统的推荐方法难以满足这个特殊场景的需要。
本发明的技术方案为:一种基于关键字的电子商务网站商品推荐方法,用户在搜索引擎搜索产品,由搜索链接进入电子商务网站,电子商务网站通过脚本采集搜索引擎链接带入的关键字和相关产品信息,所述相关产品包括用户浏览产品和下单产品,所述关键字和相关产品信息作为历史数据保存为服务器上的日志;由关键字之间的关联度得到关键字关联表,由关键字和相关产品之间的索引关系,得到索引数据库,将关键字关联表和索引数据库作为推荐基础;当一个从搜索引擎过来的新用户访问电子商务网站时,解析用户referrer取得关键字,并通过查询关键字关联表获得拓展关键字,通过查找索引数据库得到关键字和拓展关键字对应的商品列表,根据商品权重,推荐权重最高的N件商品。
本发明具体步骤如下:
1)取得原始浏览数据:对日志进行处理,将指定日期范围D内,相同会话下间隔时间不大于时长T的商品页面访问视为一次浏览,日期范围D和时长T由电子商务网站设定,将一次浏览中初次访问的referrer URL中的关键词参数作为关键字字符串Q,处理完日志后,将获得关键字字符串数据作为原始浏览数据;
2)生成关键字-商品索引:对一次浏览记录中的关键字字符串Q进行处理,得到关键字集合K,具体处理方法如下:将关键字字符串Q按照空格分割,并根据预先定义的无用词列表L去除无用词,即:
将一次浏览记录中所有被浏览过的商品记做商品集合P,将(Ki,Pj,Wj i)写入索引数据库Index(K,P,W),其中:
Ki∈K,Pj∈P
权重Wj i的计算中,C(Ki)表示关键字Ki在所有关键字字符串中的出现次数;C(Ki,Pj)表示关键字Ki和商品Pj在所有浏览记录中同时出现的次数;
3)生成关键字关联表:针对步骤2)中生成的所有关键字,根据jaccard公式计算两两之间的关联度,如下:
A(Km,Kn)表示关键字Km和关键字Kn之间的关联度,C(Km)为Km在历史记录中的出现次数,C(Kn)为Kn在历史记录中的出现次数,C(Km,Kn)为关键字Km和Kn共同出现在一条记录中的次数,当A(Km,Kn)大于预先设定的阀值AT时,将(Km,Kn,A(Km,Kn))写入关键字关联表Assoc(K,K,A);
4)取得关键词集合:当新用户访问网站时,通过脚本尝试采集其搜索引擎带入的关键字K
S,方法同步骤2),记取得的关键字集合为
如果无法取得关键字,则该用户不属于推荐目标;
5)扩展关键字:根据关键字关联表生成扩展关键字集合
方法如下:
Expand(Km)=∪{Kn|(Km,Kn,A(m,n))∈Assoc(K,K,A)}
k′为扩展的关键字;
6)计算商品权重:由索引数据库Index(K,P,W)构造二部图G(V,E),其中:
V=K∪P
E=∪{(Ki,Pj)|(Ki,Pj,Wj i)∈(K,P,W)}
根据E’计算商品的权重:
其中α(K
i)是由电子商务网站设定的、用于区别来自
和
不同关键字的调整参数,
7)排序:将步骤6)中计算得到的W(Pj)按降序排列,推荐权重最高的N个商品。
所述脚本为JavaScript脚本。
本发明方法着力解决的问题便是针对新用户的问题。新用户不存在任何行为记录,难以刻画其特征进行购买预测和商品推荐。所以传统的个性化推荐方法很难对这个问题进行直接应用。本发明方法通过搜集新用户每次进入网站时的带入关键字,并利用技术扩展得到关键字集合,以此为基础数据计算商品权重并排序(ranking),完成了向第一次进入网站的新用户的个性化商品推荐。解决了传统推荐方法无法对新用户尤其是未注册用户进行个性化推荐的弊端。
具体实施方式
本发明通过采集新用户的搜索引擎带入关键字来解决新用户没有任何数据的问题,并结合由历史数据训练得到关键字与商品集的索引关系,根据商品出现频度等信息计算出商品权重,推荐权重最高的N件产品。用户在搜索引擎搜索产品,由搜索链接进入电子商务网站,电子商务网站通过脚本采集搜索引擎链接带入的关键字和相关产品信息,所述相关产品包括用户浏览产品和下单产品,所述关键字和相关产品信息作为历史数据保存为服务器上的日志;根据历史数据计算关键字与关键字之间的关联集合,得到关键字关联表,由关键字和相关产品之间的索引关系,得到索引数据库,将关键字关联表和索引数据库作为推荐基础;当一个从搜索引擎过来的新用户访问电子商务网站时,解析用户referrer取得关键字,并通过查询关键字关联表获得拓展关键字,通过查找索引数据库得到关键字和拓展关键字对应的商品列表,根据商品权重,推荐权重最高的N件商品。如图1,其具体步骤如下:
1)通过JavaScript脚本采集用户搜索引擎带入关键字和商品浏览信息,建立历史数据库。搜索引擎带入关键字包括用户在搜索引擎,如google、bing、baidu等中所输入的信息,商品浏览信息包括用户浏览的各个商品的uri等;历史数据保存得到日志,对日志进行预处理,将指定日期范围D内,相同会话下间隔时间不大于T的页面访问视为一次浏览,将一次浏览的初次页面访问的referrer作为潜在关键字字符串,将这部分数据作为原始浏览数据;
以google和yahoo !为例,搜索引擎带入关键字可以通过以下JavaScript脚本采集得到:
1.ref=document.referrer;
2.if(ref.indexOf(′?′)==-1)return;
3.qs=ref.substr(ref.indexOf(′?′)+1);
4.qsa=qs.split(′&′);
5.for(i=0;i<qsa.length;i++){
6.qsip=qsa[i].split(′=′);
7.if(qsip.length==1)continue;
8.if(qsip[0]==′q′||qsip[0]==′p′)//q=for Google,p=for Yahoo
9.words=unescape(decodeURIComponent(qsip[1]replace(/\+/g,″))).split(/\s+/);
10.}
商品浏览信息可以通过追踪当前用户的点击流得到。
2)对日志中,搜索引擎带入关键字和相关商品信息进行预处理;对原始浏览数据进行预处理:把每一次浏览记录中的潜在关键字字符串按照空格分为单个关键字,并去除无用词,得到关键字的集合K,对所述无用词,预先设计一个无用词列表,所述无用词由设定的无用词列表得到,无用词列表包括如“if”、“the”等;由相关产品得到商品的集合P,将关键词集合K中的每一个关键词和商品集合P中的每一种商品的每一个组合作为对应关系,连同一个基本权重Wj i写入索引数据库,Wj i的计算如下:
把一次浏览记录中的关键字字符串进行处理,得到关键字集合K,具体处理方法为:将关键字字符串Q按照空格分割,并根据预先定义的无用词列表L去除无用词,即:
将一次浏览记录中所有被浏览过的商品记做商品集合P,将(Ki,Pj,Wj i)写入索引数据库Index(K,P,W),其中:
Ki∈K,Pj∈P
权重W
j i的计算中,C(K
i)表示关键字K
i在所有关键字字符串中的出现次数,
是为了降低热门关键字(即高频关键字)的影响,突出冷僻关键字;C(K
i,P
j)表示关键字K
i和商品P
j在所有浏览记录中同时出现的次数。
索引数据库实际上是一个由(K,P,W)组成的二部图(Bipartite Graph)G(V,E),构造方式如下:
V=K∪P
E=∪{(Ki,Pj)|(Ki,Pj,Wj i)∈(K,P,W)}
生成的二部图可参考图2。
本实施例中,假设预处理后历史数据库中的一条记录如下
搜索引擎带入关键字集合:{k1,k2,k3}
相关商品集合:{p1,p2,p3,p4}
将每个关键字和每个商品关联,基本权重假设计算得到均为2,以(关键字,商品,权重)的格式写入“索引数据库”中,共12个条目:{(k1,p1,2),(k1,p2,2),(k1,p4,2),(k1,p3,2),(k2,p1,2),(k2,p2,2),(k2,p4,2),(k2,p3,2),(k3,p1,2),(k3,p2,2),(k3,p4,2),(k3,p3,2)}。
3)对历史数据库中的所有搜索引擎带入关键字进行聚类计算,将现有的关键字字符串拆分为单词,利用Jaccard系数分析单词之间的联系:
具体的计算方法如下:
设将数据中的所有关键字拆分后得到关键字集合{A,B,C,D,E},将他们两两组合,计算Jaccard系数,公式如下:
A(Km,Kn)表示关键字Km和关键字Kn之间的关联度,C(Km)为Km在历史记录中的出现次数,C(Kn)为Kn在历史记录中的出现次数,C(Km,Kn)为关键字Km和Kn共同出现在一条记录中的次数,当A(Km,Kn)大于预先设定的阀值AT时,将(Km,Kn,A(Km,Kn))写入关键字关联表Assoc(K,K,A);比如A(A,B)>AT,A(D,E)>AT,则将(A,B),(B,A),(D,E),(E,D)四个条目写入关键字关联表。
4)当一个新用户访问网站时,通过JavaScript脚本得到该用户的搜索引擎带入关键字,记取得的关键字集合为
如果无法取得关键字,该用户不属于本推荐方法的目标。
5)将步骤4)中采集到的关键字拆分,如用户在refer页面中输入了“k1 k2”作为搜索关键字,可从索引数据库中找出每个关键字的对应列表:
“k1”:{p1,p2,p5…}
“k2”:{p1,p6,p7,p4…}
再从“相关关键词数据库”中找出同“k
1”、“k
2”相关的关键字,比如有“k
3”和“k
4”,扩展关键字:根据关键字关联表生成扩展关键字集合
,方法如下:
Expand(Km)=∪{Kn|(Km,Kn,A(m,n))∈Assoc(K,K,A)}
k′为扩展的关键字;
每个扩展关键字对应列表有:
“k3”:{p4,p8,p3,p9…}
“k4”:{p10,p11,p1…}
则设假设从索引数据库中得到基本权重W
j i均为2,
计算每个商品的权重:从索引数据库,也就是由(K,P,W)组成的二部图中取出所有和
相关的边E′:
根据E计算商品的权重:
其中α(K
i)是人为设定的、用于区别来自
和
不同关键字的调整参数,一般
这里调整参数的设定为本领域技术人员掌握的现有技术,不在详述。
以p1、p4、p2为例,计算如下:
W(p1)=1*2+1*2+0.5*2=5
W(p4)=1*2+0.5*2=3
W(p2)=1*2=2
最后对所有商品按权重从大到小排序,推荐最终权重最高的N个商品,比如N=2,推荐(p1,p4)。
本发明针对新用户,通过搜集新用户每次进入网站时的带入关键字,完成了向第一次进入网站的新用户的个性化商品推荐。