王 菁,王若飞
(1.大规模流数据集成与分析技术北京市重点实验室,北京 100144;2.北方工业大学数据工程研究院,北京 100144)
在电子商务以及网页搜索领域,查询建议是一个重要的辅助功能[1]。所谓“查询建议”是指用户在搜索框输入查询词的同时,会在输入框的下面弹出一组建议查询词,例如搜索“连衣”,会弹出“连衣裙”“黑色连衣裙”“短袖连衣裙”等建议查询词供用户选择。这一方面可以减少用户输入,不需要用户输入完整的查询词即可得到所需的搜索结果,可带给用户便捷的搜索体验;另一方面也可以有效消除查询词不完全,存在同义、歧义等现象,提高信息检索的准确率。
据中国互联网络信息中心CNNIC发布的《第39次中国互联网络发展状况统计报告》[2]显示,截止2016年12月,我国网络购物用户规模达到4.67亿,占网民比例为63.8%,较2015年增长12.9%。据CNNIC调查显示:74.3%的用户习惯通过输入关键字进行检索,人们输入检索关键字的平均长度仅为2~3个字。查询建议即是在用户输入的有限、不完整的查询词与系统内待检索对象(网页、商品等)所包含的专业查询词之间建立映射,为非专业用户推荐与原始查询词相关的专业查询词,从而帮助用户快速找到所需的结果。
在基于互联网的线上购物型应用中,由于没有传统行业的导购与用户进行面对面交流,用户只能通过搜索框与系统进行实时交互,查询建议是否能快速准确地满足用户需求对电商应用的用户体验具有很重要的影响。由于电子商务领域的特性,提供合适的查询建议需要解决以下几方面的问题:
首先,如何构建合适的查询建议词库?用户输入的短关键字查询本身由于短关键字与检索系统构造的词库不一定完全匹配,容易造成信息检索不完全不准确。很多研究工作从用户搜索日志出发,而由于搜索日志的稀疏性,以及电商商品具有时效性,经常根据季节变化、时尚趋势进行变动,导致传统面向Web搜索的方法在电商领域并不完全适用。
其次,如何评价查询建议词的质量?高质量的查询建议词可以引导用户快速找到所需商品,提高用户满意度,促进电商应用的销售额增长。因此,不同于Web搜索仅考虑网页点击率,电商应用还需要考虑与用户的购物行为相关的影响因素,用于对查询建议词的质量评估,尽量为用户提供可促进商品销售的查询建议词,提高商城销量。
第三,如何保证系统响应的实时性?良好的查询建议需要用户每次输入一个单字后快速返回结果,提供良好的用户体验。而面向大规模数据的挖掘算法都需要消耗一定时间才能得到计算结果,因此需要研究合适的离线与在线相结合的计算方法,保障系统的实时响应。
针对上述电商领域的查询建议存在的问题,本文综合考虑用户的搜索行为以及购物行为,运用MapReduce技术对用户日志进行挖掘,提取查询词并计算权重,以此生成检索词词库;并通过在线计算与离线计算结合的方法,为用户提供实时查询建议。实验结果表明,本文提出的基于日志挖掘的电商查询建议方法能有效提高查询建议的准确率,并且具有良好的处理性能。
本文的组织如下:第1节为引言部分,提出本文需要解决的问题。第2节介绍查询建议技术的相关工作。第3节详细介绍了本文提出的基于日志的电商查询建议的系统架构。第4节为系统原理介绍。第5节为实验设计和验证部分。第6节对本文进行总结。
国内外的学者在优化用户查询建议方面做了大量的研究和实践工作。2008年,Google率先推出了搜索关键词建议服务。百度和雅虎也分别在2009年和2010年推出了各自的搜索关键词建议服务。在学术界,查询建议也是文档检索、Web搜索等相关领域内活跃的研究主题。
基于查询建议的目标之一是为非专业用户推荐与原始查询词相关的专业查询词,早在60年代就有学者提出了利用知识模型来为用户提供查询词扩展的方法。其基本思想是建立查询词聚类,根据查询词所映射到的聚类内包含的其他词汇进行查询扩展[3]。知识模型的构建又可分为人工构建和自动聚类两类。人工建立词汇聚类模型是个繁琐的过程,典型工作是利用WorkNet作为基础[4]。大部分工作研究根据待检索文档进行自动聚类的方法,如文献[5]提出了全局和局部分析两种方法,全局分析指对全部文档中出现的词按共同发生的频率进行聚类,而局部分析仅利用检索文档中的一个子集进行计算,可以获得更好的计算效率和检索性能。
另一类工作从用户的查询日志出发开展研究。用户查询日志是众多用户使用记录的积累,从日志中进行挖掘分析,相当于使用大量的用户相关反馈,可获取到查询词、查询词的质量以及查询词之间的关系。文献[6]对基于日志的查询建议方法进行了研究,查询建议基于用户的查询与查询推荐之间的联系的权重,以及用户对以前查询推荐的满意度。文献[7]提出一种基于用户日志挖掘的查询扩展统计模型,将用户查询中使用的词或短语与文档中出现的相应的词或短语以条件概率的形式连接,利用贝叶斯公式挑选出文档中与该查询关联最紧密的词加入原查询,以达到扩展优化的目的。文献[8]研究日志中查询词的主题聚类方法,查询词之间的主题相似度可以通过检索过程点击的文档的相关程度来度量,这种聚类技术可以揭示查询词之间潜在的关联关系,这种关系在查询推荐中也得到了应用[9]。文献[10]通过挖掘用户日志中查询词的关联关系来进行查询建议,扩展词的选取来自于以往的检索用词。文献[11]提出一个基于查询日志建立的查询流程图系统,在查询流程图中,每一个顶点代表着一个查询词条,每一条边代表着会话之中的查询转换。不同于以上基于用户查询历史的日志挖掘研究,文献[12]和文献[13]适当地加入了对用户其他行为的研究,对用户的领域相关的其他操作进行了定义分析,以改善查询词的质量。
上面所述工作大多集中于传统文档检索和Web网页检索领域,而针对电商领域应用需求的研究工作较少。从词汇模型角度,电商网站的搜索词和网站内的商品相关;从用户行为角度,电商领域内的用户行为除了搜索行为之外,还有添加购物车、下单等购物相关行为,日志中可供挖掘的信息更多。本文综合上述两种方法的优点,研究面向电商商品的查询建议算法,以提高查询建议的准确率。
由于电商应用的日志量大,查询建议时用户反馈要求实时性高,而面向大规模数据的挖掘算法都需要消耗一定时间才能得到计算结果,不能实时对日志数据进行分析。因此,本文将查询建议系统划分为在线和离线两个部分,离线部分先对系统之前产生的日志进行分析计算,将计算结果存入检索词词库,在线部分通过向检索词词库发送用户输入的检索词,获取相关检索词结果,以保证实时性。系统架构如图1所示。
Figure 1 System architecture图1 系统架构图
本文重点讨论的是离线部分,离线部分分为HDFS(Hadoop Distributed File System)文件存储、搜索日志处理、购物行为日志处理和结果统计四部分。
(1)HDFS文件存储。
由于日志文件规模较大,因此采用HDFS进行日志文件的存储。HDFS将读入的日志文件进行分块存储,可提供良好的可扩展性和可靠性。
(2)搜索日志处理。
搜索日志处理模块主要处理日志中用户搜索行为产生的关键字,将这些关键字记录作为候选的检索词。此模块对应MapReduce中的Map阶段,可在Hadoop集群中进行并行计算。
(3)购物行为日志处理。
用户的购物行为指用户浏览商品、收藏商品、添加购物车以及下订单等行为,在这部分将对这些用户行为所对应的关键字进行分析,并且给这些关键字分类并进行记录。此模块也在MapReduce中的Map阶段进行并行计算。
(4)结果统计。
结果统计模块对应MapReduce中的Reduce阶段,将搜索日志和购物行为日志处理的结果进行合并统计,最终生成检索词词库。
在线部分主要是用户部分或者全部输入关键字的同时,运用ajax异步请求将用户输入的关键字发送至服务端,服务端拿到关键字通过与检索词词库的检索词匹配,将与关键字有包含关系的检索词按照权重由高到低的顺序返回客户端,显示在输入框的下方。
本系统采用Hadoop平台的MapReduce并行计算框架对用户的历史日志进行分析,如果是用户的搜索日志,需要从日志中提取搜索词,统计搜索词出现的次数,对搜索词进行打分;如果是用户的购物行为日志,需要提取日志中四个典型事件,分别是浏览、收藏、添加购物车和下单。根据前人的研究以及商城运营的经验,为这四个事件设置权重。对出现在这四个事件中的商品,以各事件的权重进行统计。
定义1由于算法中需要对关键字在日志中以及在用户行为事件中出现的次数进行统计、计算,因此检索词词库中的每一个关键字可以定义为一个七元组:
RWT=(K,S,QC,BC,FC,AC,OC)
各属性含义如下:
(1)K表示检索词词库中的关键字;
(2)S表示该关键字最终的得分;
(3)QC表示该关键字在搜索日志中出现的次数;
(4)BC表示该关键字在浏览事件中出现的次数;
(5)FC表示该关键字在收藏事件中出现的次数;
(6)AC表示该关键字在加入购物车事件中出现的次数;
(7)OC表示该关键字在下订单事件中出现的次数。
定义2设对于每一个关键字q,其在搜索日志中出现的次数为QC,所有关键字在日志文件中出现的次数为SUMQC,则该关键字在搜索日志中的得分为:
对于搜索日志中出现的关键字、品牌名、分类名等数据,我们直接统计其出现的频率,按照关键字(包括品牌、分类等)出现一次记一分的规则,将日志中出现的关键字及其出现的次数存入表1中。
Table 1 Keywords of event
值得注意的是,输入的关键字中可能存在包含现象,比如:“Adidas”↔“Adidas Kanye West”“BURBERRY”↔“BURBERRY PRORSUM”“Yeezy”↔“Yeezy 350 Spike Black”等,对于这种情况,我们将同时给包含词和被包含词各记一分,即如果出现的关键字是“Adidas Kanye West”,我们将给关键字“Adidas Kanye West”和“Adidas”各加一分;反之,如果出现的关键字是“Adidas”,我们将只给“Adidas”加分。
定义3设B、F、A、O分别表示与购物相关的浏览行为、收藏行为、添加购物车行为、下订单行为,其对应的行为权重分别是wB、wF、wA、wO,对于某一种商品关键字q,其在某个行为中出现的频率是fEq(E分别表示B、F、A、O),则根据数据库及日志中的相关记录,其在与购物相关的各个行为中的得分为:
SEq=wB*fBq+wF*fFq+wA*fAq+wO*fOq=
对于用户查看商品详情的记录、用户将商品加入购物车的记录、用户收藏商品的记录以及用户的购买记录等数据,不能直接产生关键字与得分,我们将通过一个中间表(如表1所示)进行计算:首先,我们将与购买相关的各个操作定义成购物相关行为,这些行为包括“浏览”“收藏”“添加购物车”“下订单”。然后,通过分析日志以及相关的记录,设置各个行为的权重(各行为最优权重的计算方法将在4.2节进行说明)。最后,将关键字出现的频率与对应行为的权重相乘,得到关键字在某一类行为中的得分,再将关键字在各类行为中的得分求和,得到该关键字在所有购物相关行为中的总分。
定义4设对于每个关键字q,其最终的得分Sq为:
Sq=wL*SLq+wE*SEq
其中,SLq为q在搜索日志中的得分,wL为其对应的权重,SEq为q在购物行为中的得分,wE为其对应的权重。
通过上述计算,对于每一个q最终都会有一个最终的得分Sq与之相对应,随着用户在前端关键字的键入,程序将包含用户输入的关键字按得分由高到低返回给用户。
我们使用某电商平台的日志数据,包括用户的关键字搜索日志和用户的购物行为日志。
关键字搜索日志如下所示:
[INFO][2017/05/1023:00:41225][net.shop.controller.shop.ProductController.criteria(ProductController.java:220)]member:8222 keywords:inspire
各属性含义如下:
member:用户ID
keywords:用户搜索关键字
购物行为日志如下所示:
[INFO][2017/06/11 19:11:67210][net.shop.controller.shop.ProductController.listProductById(ProductController.java:515)]member:3785 product_sn:2017052626261
[INFO][2017/06/11 19:23:32240][net.shop.controller.shop.ProductController.favorite(ProductController.java:952)]member:9723 product_sn:2017031362898
[INFO][2017/06/11 19:42:41352][net.shop.controller.shop.CartController.add(CartController.java:86)]member:5627 product_sn:2017060182659
[INFO][2017/06/11 20:01:31250][net.shop.controller.order.OrderController.create(OrderController.java:443)]member:6245 order_sn:201706117488
各属性含义如下:
net.shop.controller.shop.ProductController.listProductById:浏览商品;
net.shop.controller.shop.ProductController.favorite:收藏商品;
net.shop.controller.shop.CartController.add:添加购物车;
net.shop.controller.order.OrderController.create:创建订单;
product_sn:商品编号;
order_sn:订单编号。
MapReduce 是目前比较流行的一个简化大规模数据处理的并行计算框架,用户通过该框架提供的一些简单的编程接口,就能方便地对大规模数据进行处理[14]。结合电商查询建议的需求,本文提出了一种查询建议QSLM(Query Suggestion based on Log Mining)算法。
QSLM算法中MapReduce的Map函数和Reduce函数的详细内容介绍如下:Map(映射)函数,用来把一组键值对映射成一组新的键值对,指定并发的Reduce(归约)函数,用来合并key值相同的键值对。在Map阶段是从日志文件中读取记录,对于关键字搜索记录,提取日志中的keywords,以keywords作为Map()方法的key,将关键字权重作为value;对于用户行为记录,提取日志中四类典型购物行为,分别是浏览、收藏、添加购物车和下单。根据前人的研究以及商城运营的经验,为这四类行为设置权重。以相关商品的名称的分词作为Map()的key,以各类行为对应的权重作为value。
在Reduce阶段,先对Map阶段传过来的键值对进行分析,根据value的值即可得知这个关键字所属的类型,将同类型的所有关键字求和,然后再与检索词词库中的历史数据求和,更新检索词词库。对检索词词库进行遍历,通过对词库中的各类型数据加权、归一化,生成关键字最后的得分。
QSLM算法的MapReduce处理流程图2所示。
Figure 2 Process of MapReduce图2 MapReduce处理流程图
算法伪代码描述如下:
算法1QSLM算法
输入:日志文件;
输出:检索词词库。
Map()函数:
1.While (读取日志中的记录)
2.Regex.matcher();∥正则匹配记录
3. If 数据是搜索记录
4.Output〈key,value〉=〈搜索词,关键字权重〉;
5. Else If数据是购物行为记录
6.names[]=segmentation(商品名称);/*对商品名称进行分词*/
7. Fori=0 tonames[].length
8.Output〈key,value〉=〈names[i],购物行为权重〉;
9. End For
10. End If
11.End while
Reduce()函数:
1.While(读入键值对列表〈key,value〉)
2.type=classify(value);/*根据value判断类型,包括Q、B、F、A、O五类*/
3.sumtype=sum(keytype);
4.newtype=sum(sumtype,oldtype);/*newtype,oldtype表示某检索词type类型的数据在检索词词库中的新统计值与旧统计值*/
5. 将newtype写入检索词词库;
6.End while
7.Fori=0 to 检索词词条数
8.S=Normalization(QC,BC,FC,AC,OC);/*归一化检索词的各个数据*/
9.将S写入检索词词库最终得分栏;
10.End For
为了验证QSLM算法是否有效,我们搭建了一套实验环境进行实验验证。实验配置为:cnetos 6.5 版本的Linux 操作系统,jdk 1.7,Hadoop 版本为 2.3.0。实验搭建的Hadoop集群为1个master结点和4个worker结点,并开启了共16个线程。本文所用实验数据来自于某电商平台从2015年1月1日~2017年6月5日所产生的日志数据。
信息检索领域最广为人知的评价指标为Precision-Recall(准确率-召回率)方法。召回率(Recall)衡量一个查询搜索到所有相关文档的能力,而准确率(Precision)衡量搜索系统排除不相关文档的能力。
MAP(Mean Average Precison)方法即平均准确率法的简称,其定义为求每个相关文档检索出后的准确率的平均值(即Average Precision)的算术平均值(Mean)。这里对准确率求了两次平均,因此称为Mean Average Precision。MAP是反映系统在全部相关文档上性能的单值指标。
实验1QSLM算法验证。
本实验以某电商购物网站2017年1月1日~2017年5月31日5个月的日志数据为实验数据,以2017年6月1日~2017年6月5日5天的日志数据为验证数据。通过QSLM算法和基于用户搜索日志的数据挖掘算法对这5天的日志数据准确率、召回率和MAP的比较,验证日志挖掘算法在查询建议系统中的科学性与实用性。实验数据如图3所示。
Figure 3 Precision and recall of algorithms图3 算法准确率与召回率
从实验的比较中可以清楚地看到,采用QSLM算法的系统的准确率和召回率比起基于搜索日志的日志挖掘算法有大幅提高,采用QSLM算法的MAP达到了0.68,比基于搜索日志的日志挖掘算法的MAP提高了6%。从而验证了QSLM算法在查询建议系统的高效性。
实验2Hadoop性能验证。
本实验将通过比较程序在与Hadoop集群节点配置完全相同的单机环境和Hadoop集群环境下,分别在4万、16万、32万、64万日志数据中,生成关键字表所用的时间,说明集群环境的性能优势。实验结果如图4所示。
Figure 4 Comparison between single machine and Hadoop图4 单机与集群性能对比
通过以上实验,我们发现,当数据量不大时,Hadoop集群环境的运算速度比单机环境下的运算速度要慢,但是当数据量成倍增长时,单机环境的运行时间几乎呈指数增长,而Hadoop集群环境的运行时间却没有太大的变化。实验结果说明了在大规模日志数据的挖掘中,使用集群并行计算的必要性。
目前,查询建议广泛应用于各种搜索引擎。本文针对电商这一特定领域,在总结前人研究的基础上,提出了一种基于日志挖掘的电商查询建议方法,综合考虑用户的搜索行为以及购物行为,运用MapReduce技术对用户日志进行挖掘,提取查询词并计算权重,以此生成检索词词库;并通过在线计算与离线计算结合的方法,为用户提供实时查询建议。实验结果表明,本文提出的基于日志挖掘的电商查询建议算法能有效提高查询建议的准确率,并且具有良好的处理性能。当然本算法还有许多需要改进的地方,后续我们将进一步考虑商品库存、商品时效性等因素,优化检索词库的检索词提取以及评分机制。
[1] Ooi J,Ma X,Qin H,et al.A survey of query expansion,query suggestion and query refinement techniques[C]∥Proc of International Conference on Software Engineering and Computer Systems,2015:112-117.
[2] China Internet Network Information Center. The 39th 《China Statistical Report on Internet Development》[EB/OL].[2017-01-22].http:∥www.cnnic.net.cn.(in Chinese)
[3] Peat H J,Willett P.The limitations of term co-occurrence data for query expansion in document retrieval systems[J].Journal of the Association for Information Science & Technology,1991,42(5):378-383.
[4] Fox E A.Lexical relations:Enhancing effectiveness of information retrieval systems[J].ACM Sigir Forum,1980,15(3):5-36.
[5] Vechtomova O, Robertson S, Jones S. Query expansion with long-span collocates[J].Information Retrieval,2003,6(2):251-273.
[6] Baeza-Yates R,Hurtado C,Mendoza M.Query recommendation using query logs in search engines[C]∥Proc of EDBT 2004,2004:588-596.
[7] Cui Hang, Wen Ji-rong, Li Min-qiang, et al.A statistical query expansion model based on query logs[J].Journal of Software,2003,14(9):1593-1599.(in Chinese)
[8] Wen J,Nie J Y,Zhang H.Query clustering using user logs[J].ACM Transactions on Information Systems,2002,20(1):59-81.
[9] Zhang Z,Nasraoui O.Mining search engine query logs for query recommendation[C]∥Proc of International Conference on World Wide Web,2006:1039-1040.
[10] Billerbeck B,Scholer F,Williams H E,et al.Query expansion using associated queries[C]∥Proc of International Conference on Information & Knowledge Management,2003:2-9.
[11] Hasan M A,Parikh N,Singh G,et al.Query suggestion for E-commerce sites[C]∥Proc of WSDM 2001,2011:765-774.
[12] Yang Q, Ling C X,Gao J.Mining web logs for actionable knowledge[M]∥Intelligent Technologies for Information Analysis.Berlin:Springer,2004:169-191.
[13] Chen Z, Yamamoto T, Tanaka K.Query suggestion for struggling search by struggling flow graph[C]∥Proc of International Conference on Web Intelligence,2017:224-231.
[14] Dean J,Ghemawat S.MapReduce:Simplified data processing on large clusters[J].Communicatons of the ACM,2008,50(1):107-113.
附中文参考文献:
[2] 中国互联网络信息中心.第39次《中国互联网络发展状况统计报告》[EB/OL].[2017-01-22].http:∥www.cnnic.net.cn.
[7] 崔航,文继荣,李敏强.基于用户日志的查询扩展统计模型[J].软件学报,2003,14(9):1593-1599.