《Storm技术内幕与大数据实践》一9.4 实时意图和搜索

简介:

本节书摘来异步社区《Storm技术内幕与大数据实践》一书中的第9章,第9.4节,作者: 陈敏敏 , 黄奉线 , 王新春
责编: 杨海玲,更多章节内容可以访问云栖社区“异步社区”公众号查看。

9.4 实时意图和搜索

在PC互联网时代,谷歌2005年就推出了个性化搜索服务,因为引发公众对隐私的担忧,没有太商业化,如今移动互联网时代,去哪儿、京东等电商,慢慢都推出了个性化搜索,无论消费者登录与否,通过追踪客户的搜索行为来判断其消费喜好,即便用户退出登录,也会根据Cookie、设备号等信息,给用户返回个性化的搜索内容。当然搜索引擎本身的爬虫/反爬虫等异常检测、对搜索关键字分词后进行同义词/反义词/全半角/简繁体等自动扩展以及错别字的纠正都可以在实时计算中进行数据清洗。例如,eBay应用Jetstream流处理技术,对海量的用户行为进行了实时的数据清洗。

要让个性化的搜索内容更加精准,需要打通外部用户画像和不断更新着的商家的服务、商品等。在电商的搜索系统中,为了解决搜索的并发和性能,往往有内存中的实时分布式索引和硬盘中的全量索引,热门商品信息直接从内存中读取,当内存中不存在时,才从硬盘中读全量索引。在实时流计算出来之前,初始化分布式索引对索引的切分很多时候是根据类目。不同的类目的PV和产品数不一样,根据每一个类目的PV和产品数不同,对产品的索引进行切分。有的类目PV高,产品数少,放到内存中,冗余多份数据在不同的机器上;有的类目PV少,产品数多,这种就不适合初始化进实时索引中了。当卖家更新和增加产品信息时,索引等产品信息统一更新到一个地方,然后每隔一段时间把信息一并推送到分布式索引中。当实时流计算出来之后,实时的更新分布式索引就更加方便了。

电商的搜索系统中,一般都会自己维护一套词库,以对搜索内容进行更加准确地切词,然后通过切出来的词映射到对应的类目、品牌等。电商每一个类目的专有名词比较多,仅仅应用外面通用的中文分词词库在实践中很难提高分词的准确性。在这里,想强调下,维护一个自己的属性、品牌词库,对整个网站价值很大。首先,自己的准确的词库让用户画像系统也会更加精准。网站早期很多产品属性命名的不统一,相同的属性,业务方录入很多不同的属性名称,导致一个系统的产品属性到后面往往是混乱的,画像打出来的分也因此不能准确反应出用户的偏好。有准确和健全的词汇,一来可以对属性做清洗,提高用户打分的准确性,二来可以规范业务方录入的各种产品的命名等,让业务方更好地进行品类管理。其次,对电商的比价系统也是至关重要。电商往往要识别其他竞争对手的同类产品的价格,好进行智能调价或者统计,准确的词汇,能让系统更精确的对产品的标题进行分词和特征词标注,提高抓取竞争对手网站产品的覆盖率和匹配准确率。最后,对识别用户搜索的内容也是不可或缺的,有了完善的自己的词库,对搜索的内容才能进行更加准确地切分和映射,更加精准地明白用户想要的产品、类目等,从而提高用户搜索排序的准确率,以及减少用户筛选时间。

9.4.1 用户意图预测

在电商系统中,在书籍、衣服等同一类目下用基于ItemCF的推荐计算出产品相似度,推荐同类目下其他产品,相对可解释。但是如果因为两本书所购买的人群比较相似,把人群中A用户喜欢的某茶叶推荐给B用户,显然不大好解释。所以我们应首先识别用户目前需要购物的类目,并识别出购物类目的意图,再在同一类目下通过协同过滤、内容推荐等方式给用户推荐合适的商品。目前各大电商网站都在识别用户搜索的实时意图上进行了不同程度的探索和研发,有些在用户长期画像的基础上抽出一张用户短期画像表来实现,我们认为用户对大部分的品牌和产品具有长期的偏好,偏好的更新周期相对比较长;而对于类目,用户往往根据外界环境、家庭短缺等不确定因素而购买,比如家里什么东西意外坏了需要补充,如果能实时的识别用户需要购买的类目,显然是比较有价值的。我们假设用户画像有用户基础属性(性别、年龄、职业等)和用户偏好(类目、品牌、产品等),在用户偏好的基础上抽出长期偏好和短期偏好两个表,用短期偏好和基础属性来实时预测用户购买类目,再记录各个类目的用户短期购买行为。因为基于邻域的协同过滤具有扩展性问题,计算复杂度随着用户数和产品数增加而增加,在实时推荐中,是一个亟需要解决的问题,我们这里用判别分析方法实时预测用户需要购买的类别(判别分析法实际上是一种基于模型的推荐算法)。判别分析是用户判断个体所属类别的一种统计方法,对用户的购买意图进行预测,根据已知观测对象的分类和若干表明观测对象特征的变量值,建立判别函数和判别准则,并使其错判率最小。

我们保存最近一段时间有过用户行为的用户q19
最近一段时间有行为的用户} 最近一段时间有行为的用户}。

对u_i取其基础属性和短期偏好(性别、年龄、购买Cj时的地域、购买Cj时的时间、品类偏好等)组成基础属性向量q15表示用户u_i的某一个基础属性和偏好,N表示属性和偏好的具体数量。
对u_i取其发生购买某个类别Cj前的相关行为(浏览、搜索、收藏、加车、购买某个品类),组成行为向量q14,表示用户u_i在购买Cj前某项行为的次数,n表示行为总数量,m表示用户数。则我们得到购买类目Cj的用户组成的矩阵:

q12


q11
的行向量看作n维随机向量,对其进行降维,采用PCA(主成分分析)技术进行降维,然后对q10 采用信息增益技术进行特征选取,选取topN个最能判别用户购买意图的基础属性。常用的判别函数有Fisher判别法、马式距离判别法、广义平方距离判别法、最大后验概率判别法、贝叶斯判别法等,它们各自有不同的优缺点,当加入或者减少某一种条件,它们又可以互相转换。这里我们以马氏距离为例,与欧氏距离不同的是它考虑到各种特性之间的联系,马氏距离能够很好地处理多维向量各维度的量纲不一致的问题以及各维度具有相关性的问题,只需要知道总体的特征值,不需要知道总体的分布类型,方法简单,结论明确。首先根据样本矩阵q9统计购买Cj这个总体的协方差矩阵q7 和总体均值向量q6

q5

对任意用户u_i,设其降维后的行为向量为A_i ,得到用户与Cj总体的广义马氏距离为q4其中text{q_j } 为总体Cj发生的先验概率,根据用户u_i与总体Cj的距离,即可以得到用户最近一段时间内topN的意图类目,然后利用构建的场景引擎应用到相应的栏位。我们以个性化搜索为例,当用户刚上来,没有太多初始化行为的时候,默认排序根据用户的长期偏好、广告主投放等排序,当用户点击浏览了一定的商品后,利用上面的判别分析方法,实时预测出用户实时的类目,当用户再次搜索或者到达某一个推荐栏位的时候,结合得到的实时topN的意图类目,并给予一定的权重,融进原来的排序结果,给出新的排序结果,如图9-18所示。


9_18


在推荐栏位中,得到用户topN的类目再在同类目下利用协同过滤、关联规则等推荐方法,对同一类目下的产品进行相关推荐,以得到更加精准的结果;但是在搜索系统中,往往搜索词已经映射到相应的一些类目上,这个时候,对用户需要购买的产品、品牌的意图识别往往更有用,比如品牌,因为数量相对产品小很多。可以把类目的意图识别方法应用过来,然后融入实时个性化搜索中。对于海量的产品,可以根据用户前面几年购买的产品属性、天气、地域等各类标签预先作一定的关联分析,然后把天气,地域等标签融入选品中心,通过这些标签做意图识别。

9.4.2 搜索比价

一淘、帮5买、网易惠惠等都是目前比较成熟的比价搜索,通过它们能搜出各类商品在各个电商上的价格;目前不少电商也实现了自己的比价/调价系统。如何定价,是传统零售业和电商必须需要思考的问题,只有定价策略应用得当,才能在成本、销量、利润、转化率上找到一种平衡。而且电商相比其他的互联网产品,用户粘性偏弱,用户对价格敏感性更强,往往一点点的差价,就会影响用户的留存率和产品的利润,因此合理设置和竞争对手商品的价格,在利润和用户转化率上取得平衡,才能提高电商的整体竞争力。面对百万、甚至千万的SKU,通过人工来定价成本非常高,因此需要系统进行智能定价。当然系统中也会设置自己的价格底线,如果发现对手的价格偏低,那么可以及早地分析是不是对手的进货渠道不同,或者是不是他们在运营、物流、供应链上成本控制得更好,还是对手贴钱促销。及时知道热门商品竞争对手的信息,可以快速优化自己的运营和决策,可以挖掘出竞争对手新品和好的缺失品,对自己的品类分析、品类管理、价格监控等都有非常大的价值。

一个比价系统通常包括爬虫系统、匹配系统、数据分析系统、智能决策系统(优化品类、自动调价、促销策略等)。爬虫系统用来抓取竞争对手的商品信息,Java的爬虫一般应用httpclient和Jsoup库来实现,通过httpclient发起HTTP请求,通过Jsoup解析请求回来的页面的元素。但是有些电商网站商品页的价格、库存、评论数等值,在页面的源代码里面是无法获取到的,它们往往是页面里面有另外的Ajax请求去获取价格、库存等值,然后通过JavaScript填充到页面的相关div或者span等位置,通过Java的方式抓取脚本通常都是要发起多个请求才能完成一次完整信息的抓取,失败率也特别高,抓取脚本相当复杂,去开发一个Java的JavaScript解析引擎时间成本又过高。而Python有pyqt4这个类库,它有内置的webkit浏览器引擎,通过它来请求URL,返回的HTML源码是渲染好的网页,价格、库存等信息已经填充在了相应的HTML元素中,不用多次请求。如果用Java的Runtime的方式去调用Python脚本,显然性能存在一定的损耗,但Storm支持Python等多种语言,这样可以不受语言限制,充分运用各类优秀的开源库,更低成本地实现爬虫系统。Python有解析HTML元素成熟的beautifulSoup库(类似Java的Jsoup库),结合Python的urllib2或者Requests库,可以更好地完成这个任务。

有了爬虫系统,要得到同一款商品竞争对手的信息,那么匹配系统运用而生,假设不考虑商品详情页中价格、商品介绍、商品图片等因素,仅对商品详情页的标题做匹配,一般把标题切成特征词(品牌词、规格、货号、成份、品类词),然后不同类目下给每种特征词不同的权重,计算出哪些商品是同一商品,从而结合调价系统,进行自动调价。

9.4.3 搜索排序

有诸多的因子决定电商搜索产品的排序,常见的包括:是否自营、销售额、销量、收藏数、点击数,曝光数、毛利率、用户评价数、好评率、是否促销、退款率、投诉率、发货速度等。如果是商城或者店铺,商品的排序因子主要如表9-6所示,分为推广量、服务、店铺优化、店铺等级等。同时商家为了提高商品排名,会出现不同程度的作弊,有的通过虚假交易进行刷单;有的在商品标题中加入竞争对手品牌;有的用低价引流,实际上是将一个低价产品和一个正常产品组成套餐;有的过一阵偷偷更换标题和商品,把一个销量比较好的商品变成另外一个新商品,这些不同的作弊方式也是一个排序因子,用来惩罚违规的商家。


b6

影响排序因子又分为静态因子和动态因子,如表9-7所示。动态因子中对搜索关键字和标题相关性的计算需要对标题进行切词,前面比价系统中的匹配模块也需要对标题进行切词,两者的切词算法可以用一套,关键是对各个商家和品牌的一些词汇需要人工整理,这个一般会耗费一定的成本。


b7

可以看到,影响搜索排序的因子数目繁多,并且不同的因子(比如销售额、送货速度、好评率等)量纲不同,首先需要对各个因子归一化,不同的因子需要设计不同的归一化公式。归一化后,根据各因子对结果的贡献不同,要设置不同的权重,可以通过SVM等机器学习算法来训练各因子的系数。检测训练出来的模型是否靠谱,通常使用已知目标值的样本作为输入,观察其准确率。对于电商而言,转化率是一个不错的选择,转化率的分子可以是商品的销售量、销售额、加入购物车的数目等,分母可以用商品的曝光率。训练得到各因子系数,并且模型经过验证后,搜索的基本排序公式应运而生,实际的系统中还会加入人工规则和广告竞价排序的因素。

相关实践学习
简单用户画像分析
本场景主要介绍基于海量日志数据进行简单用户画像分析为背景,如何通过使用DataWorks完成数据采集 、加工数据、配置数据质量监控和数据可视化展现等任务。
SaaS 模式云数据仓库必修课
本课程由阿里云开发者社区和阿里云大数据团队共同出品,是SaaS模式云原生数据仓库领导者MaxCompute核心课程。本课程由阿里云资深产品和技术专家们从概念到方法,从场景到实践,体系化的将阿里巴巴飞天大数据平台10多年的经过验证的方法与实践深入浅出的讲给开发者们。帮助大数据开发者快速了解并掌握SaaS模式的云原生的数据仓库,助力开发者学习了解先进的技术栈,并能在实际业务中敏捷的进行大数据分析,赋能企业业务。 通过本课程可以了解SaaS模式云原生数据仓库领导者MaxCompute核心功能及典型适用场景,可应用MaxCompute实现数仓搭建,快速进行大数据分析。适合大数据工程师、大数据分析师 大量数据需要处理、存储和管理,需要搭建数据仓库?学它! 没有足够人员和经验来运维大数据平台,不想自建IDC买机器,需要免运维的大数据平台?会SQL就等于会大数据?学它! 想知道大数据用得对不对,想用更少的钱得到持续演进的数仓能力?获得极致弹性的计算资源和更好的性能,以及持续保护数据安全的生产环境?学它! 想要获得灵活的分析能力,快速洞察数据规律特征?想要兼得数据湖的灵活性与数据仓库的成长性?学它! 出品人:阿里云大数据产品及研发团队专家 产品 MaxCompute 官网 https://www.aliyun.com/product/odps 
相关文章
|
3天前
|
消息中间件 分布式计算 大数据
大数据组件之storm简介
大数据组件之storm简介
22 2
|
9天前
|
监控 大数据 数据处理
大数据组件之Storm简介
【5月更文挑战第2天】Apache Storm是用于实时大数据处理的分布式系统,提供容错和高可用的实时计算。核心概念包括Topology(由Spouts和Bolts构成的DAG)、Spouts(数据源)和Bolts(数据处理器)。Storm通过acker机制确保数据完整性。常见问题包括数据丢失、性能瓶颈和容错理解不足。避免这些问题的方法包括深入学习架构、监控日志、性能调优和编写健壮逻辑。示例展示了实现单词计数的简单Topology。进阶话题涵盖数据延迟、倾斜的处理,以及Trident状态管理和高级实践,强调调试、性能优化和数据安全性。
22 4
|
7月前
|
前端开发 JavaScript 大数据
24jqGrid -搜索大数据
24jqGrid -搜索大数据
33 0
|
12月前
|
存储 数据采集 XML
大数据数据采集的数据来源的日志数据之搜索类数据
在大数据领域,数据采集是一个非常重要的环节。日志数据已经成为了大数据应用中不可或缺的一部分,尤其是搜索类数据。本文将介绍搜索类日志数据作为数据来源的特点以及其采集流程。
136 0
|
大数据
阿里云产品体系分为6大分类——大数据——大数据的5种模块——大数据搜索与分析
阿里云产品体系分为6大分类——大数据——大数据的5种模块——大数据搜索与分析自制脑图
195 1
|
存储 运维 分布式计算
大数据组件-实时大数据处理框架Storm安装部署
大数据组件-实时大数据处理框架Storm安装部署
大数据组件-实时大数据处理框架Storm安装部署
|
消息中间件 Java 大数据
【大数据】Linux下Storm(0.9版本以上)的环境配置和小Demo
在storm发布到0.9.x以后,配置storm将会变得简单很多,也就是只需要配置zookeeper和storm即可,而不再需要配置zeromq和jzmq,由于网上面的storm配置绝大部分都是0.9以前的storm版本,所以有很多工作是不需要进行的,下面就storm的0.9.5版本在linux环境下进行配置进行详细解析。   由于配置storm只需要两个步骤,大大简化了配置,也是storm团队做了很大的努力,让程序员们专注于程序,让storm配置进行异常简单,好了,废话说了不少,下面正式开始讲解。
219 0
【大数据】Linux下Storm(0.9版本以上)的环境配置和小Demo
|
前端开发 Java 大数据
select2,利用ajax高效查询大数据列表2(可搜索、可分页)
select2,利用ajax高效查询大数据列表(可搜索、可分页)
155 0
|
前端开发 JavaScript 搜索推荐
select2,利用ajax高效查询大数据列表 1(可搜索、可分页)
select2,利用ajax高效查询大数据列表(可搜索、可分页)
412 0
select2,利用ajax高效查询大数据列表 1(可搜索、可分页)
|
存储 分布式计算 自然语言处理
基于MaxCompute+开放搜索的电商、零售行业搜索开发实践
搜索一直是电商行业流量来源的核心入口之一,如何搭建电商行业搜索并提升搜索效果,一直是电商行业开发者努力攻克的难题。基于传统数据库或开源引擎虽然能够搭建基础搜索服务,但随着商品数据的增多和业务流量的增长,难免会遇到性能瓶颈和效果瓶颈。另一方面,随着电商、直播、云计算等技术的不断发展,越来越多的传统零售企业正在进行互联网云上转型,特别是受近两年疫情等因素的影响,APP、小程序已经成为零售企业重要的业务增长来源。在此背景下,如何快速搭建高效搜索服务成为零售行业上云及转型的难题。
1127 0
基于MaxCompute+开放搜索的电商、零售行业搜索开发实践

热门文章

最新文章