1. 研究目的与意义、国内外研究现状(文献综述)
1.1 课题的意义
将个性化推荐机制应用到网络平台,如电子商务网站,可以提高服务质量和为用户带来非常多的便捷。从用户角度来讲,首先,网络平台的个性化机制能够降低用户寻找自己喜欢项目的时间成本,加快用户寻找喜爱商品的速度。网络平台的个性化机制提高参与者的决策效率和决策效果。其次,个性化推荐机制犹如大型超市的导购员能够自动的为消费者推荐其可能需要的商品,同时可以让用户产生“联想”,能够挖掘消费者的潜在需求。用户并不总是能想得面面俱到,尤其是新用户接触到某一新的领域到时候,用户的选择就更需要化推荐系统的推荐。推荐系统让用户受启发买到更多的自己需要的物品,减小了用户的选择压力,提高了用户的购物舒适度。
从网络平台的角度,个性化推荐机制能提高网络平台的服务质量和用户舒适度,增加用户粘性。个性化推荐机制能够为不同网站维持用户量、提升网站的交易量,产生巨大的经济效。因此一个推荐效率高、精确度高、交互友好的推荐系统对网络服务平台的重要性不言而喻。
2. 研究的基本内容和问题
2.1 研究的目标和内容
完成一个可以让卖家通过二位码理货,采用推荐算法向买家进行智能化推荐的跳蚤市场交易平台。
一方面帮助卖家规范化低成本地理货。跳蚤市场、二手集市类型的小型短时的交易场所,采用人工的理货记账方式。不仅依靠人力核对,而且容易出错,效率不高。通过二维码可以规范化地整理记录货物的信息、买卖操作。而且应用二维码,只需要一部手机和一个app即可,比起超市收银台的电脑和激光扫描器的组合,具有便宜方便灵活的优点。
3. 研究的方法与方案
3.1 研究方法
主要采取包括:文献调研、案例分析、实践总结、实验分析、调查统计等。
3.2 技术路线与研究方案
本课题的研究内容为基于Android平台的软件设计与开发,拟采用Java语言开发,以SDK作为开发环境,考虑用免费的mysql数据库进行存储系统基础信息,以结构清晰的MVC结构进行架构。整体架构分为数据层、业务层以及表现层。
数据访问层作为系统的基础底层支柱,系统运行时产生的基础数据存储到mysql数据库中。业务逻辑层主要把系统的核心功能识别和生成二维码、搜索、智能推荐等模块进行处理,其中二维码识别和智能推荐算法的应用为技术难点。表现层则有Android移动设备进行访问。具体按照以下步骤进行:
3.2.1外围架构
1.制作UI。UI系统负责给用户展示网页并和用户交互。网站会通过日志系统将用户在UI上的各种各样的行为记录到用户行为日志中。日志可能存储在内存缓存里,也可能存储在数据库中,也可能存储在文件系统中。而推荐系统通过分析用户的行为日志,给用户生成推荐列表,最终展示到网站的界面上。
图3-1 推荐系统和其他系统之间的关系
2.数据收集和存储。个性化推荐算法依赖于用户行为数据。从规模上看,浏览网页、搜索记录的规模都很大,因为这种行为所有用户都能产生,而且平均每个用户都会产生很多这些行为。购买、收藏行为规模中等,因为只有注册用户才能产生这种行为,但购买行为又是电商网站的主要行为,所以它们相对于评论来说规模更大,但相对于网页浏览行为来说规模要小得多,最后剩下的行为是注册用户里的一小部分人才有的,所以规模不会很大。从实时存取的角度上看,购买、收藏、评论、评分、分享等行为都是需要实时存取的,因为只要用户有了这些行为,界面上就需要体现出来,比如用户购买了商品后,用户的个人购买列表中就应立即显示用户购买的商品。而有些行为,比如浏览网页的行为和搜索行为并不需要实时存取。
按照数据的规模和是否需要实时存取,不同的行为数据将被存储在不同的媒介中。一般来说,需要实时存取的数据存储在数据库和缓存中,而大规模的非实时地存取数据存储在分布式文件系统(如HDFS)中。数据能否实时存取在推荐系统中非常重要,因为推荐系统的实时性主要依赖于能否实时拿到用户的新行为。只有快速拿到大量用户的新行为,推荐系统才能够实时地适应用户当前的需求,给用户进行实时推荐。
3.2.2 推荐系统构架
当用户到来之后,推荐系统需要为用户生成特征,然后对每个特征找到和特征相关的物品,从而最终生成用户的推荐列表。因而,推荐系统的核心任务就被拆解成两部分,一个是如何为给定用户生成特征,另一个是如何根据特征找到物品。
图3-2 基于特征的推荐系统架构
如果要在一个系统中把上面提到的各种特征和任务都统筹考虑,那么系统将会非常复杂,而且很难通过配置文件方便地配置不同特征和任务的权重。因此,推荐系统需要由多个推荐引擎组成,每个推荐引擎负责一类特征和一种任务,而推荐系统的任务只是将推荐引擎的结果按照一定权重或者优先级合并、排序然后返回。
3-3 推荐系统的架构图
3.2.3推荐引擎的架构
推荐引擎架构主要包括3部分。
第一部分部分负责从数据库或者缓存中拿到用户行为数据,通过分析不同行为,生成当前用户的特征向量。不过如果是使用非行为特征,就不需要使用行为提取和分析模块了。该模块的输出是用户特征向量。
第二部分负责将用户的特征向量通过特征-物品相关矩阵转化为初始推荐物品列表。
第三部分负责对初始的推荐列表进行过滤、排名等处理,从而生成最终的推荐结果。
3-4 推荐引擎的架构图
1.生成用户特征向量
一般来说,用户的特征包括两种,一种是用户的注册信息中可以提取出来的,主要包括用户的人口统计学特征。对于使用这种特征的推荐引擎,如果内存够,可以将存储这些特征的信息直接缓存在内存中,在推荐时直接拿到用户的特征数据并生成特征向量。
另一种特征主要是从用户的行为中计算出来的。一个特征向量由特征以及特征的权重组成,在利用用户行为计算特征向量时需要考虑用户行为的种类、用户行为产生的时间、用户行为的次数、物品的热门程度等因素。
2.特征—物品相关推荐
在得到用户的特征向量后,我们可以根据离线的相关表得到初始的物品推荐列表。离线相关 表可以存储在MySQL中,其存储格式如表3-1所示。
3-1 离线相关表在MySQL中的存储格式
| src_id | dst_id | weight |
| 特征ID | 物品ID | 权重 |
在线使用的特征物品相关表一般都不止一张。物品之间的相关性可以使用协同过滤算法。基于邻域的算法是推荐系统中最基本的算法,该算法不仅在学术界得到了深入研究,而且在业界得到了广泛应用。基于邻域的算法分为两大类,一类是基于用户的协同过滤算法,另一类是基于物品的协同过滤算法。
基于用户的协同过滤算法主要包括两个步骤。
(1) 找到和目标用户兴趣相似的用户集合。
(2) 找到这个集合中的用户喜欢的,且目标用户没有听说过的物品推荐给目标用户。
步骤(1)的关键就是计算两个用户的兴趣相似度。这里,协同过滤算法主要利用行为的相似度计算兴趣的相似度。给定用户u和用户v,令N(u)表示用户u曾经有过正反馈的物品集合,令N(v)为用户v曾经有过正反馈的物品集合。那么,我们可以通过如下的Jaccard公式简单地计算u和v的兴趣相似度:
wuv=N(u)∩N(v)N(u)∪N(v)
或者通过余弦相似度计算:
wuv=N(u)∩N(v)N(u)∥N(v)
事实上,很多用户相互之间并没有对同样的物品产生过行为,即很多时候N(u)∩N(v)=0。为此,可以首先建立物品到用户的倒排表,对于每个物品都保存对该物品产生过行为的用户列表。令稀疏矩阵Cu[v]=N(u)∩N(v)。那么,假设用户u和用户v同时属于倒排表中K个物品对应的用户列表,就有C[u][v]=K。从而,可以扫描倒排表中每个物品对应的用户列表,将用户列 表中的两两用户对应的C[u][v]加1,最终就可以得到所有用户之间不为0的C[u][v]。
得到用户之间的兴趣相似度后,UserCF算法会给用户推荐和他兴趣最相似的K个用户喜欢的 物品。如下的公式度量了UserCF算法中用户u对物品i的感兴趣程度:
pu,i=v∈S(u,K)N(i)wuvrvi
其中,S(u,K)包含和用户u兴趣最接近的K个用户,N(i)是对物品i有过行为的用户集合,wuv 是用户u和用户v的兴趣相似度,rvi代表用户v对物品i的兴趣,因为使用的是单一行为的隐反馈数据,所以所有的rvi=1。
基于物品的协同过滤算法(简称ItemCF)给用户推荐那些和他们之前喜欢的物品相似的物品。ItemCF算法并不利用物品的内容属性计算物品之间的相似度,它主要通过分析用户的行为记录计算物品之间的相似度。该算法认为,物品A和物品B具有很大的相似度是因为喜欢物品A的用户大都也喜欢物品B。
基于物品的协同过滤算法主要分为两步。
(1) 计算物品之间的相似度。
(2) 根据物品的相似度和用户的历史行为给用户生成推荐列表。
我们可以用下面的公式定义物品的相似度:
wij=N(i)∩N(j)N(i)
这里,分母|N(i)|是喜欢物品i的用户数,而分子 ( ) ( ) N i N j 是同时喜欢物品i和物品j的用户 数。因此,上述公式可以理解为喜欢物品i的用户中有多少比例的用户也喜欢物品j。 上述公式虽然看起来很有道理,但是却存在一个问题。如果物品j很热门,很多人都喜欢,那么Wij就会很大,接近1。因此,该公式会造成任何物品都会和热门的物品有很大的相似度,这对于致力于挖掘长尾信息的推荐系统来说显然不是一个好的特性。为了避免推荐出热门的物品, 可以用下面的公式:
wij=N(i)∩N(j)N(i)∥N(j)
这个公式惩罚了物品j的权重,因此减轻了热门物品会和很多物品相似的可能性。和UserCF算法类似,用ItemCF算法计算物品相似度时也可以首先建立用户—物品倒排表(即对每个用户建立一个包含他喜欢的物品的列表),然后对于每个用户,将他物品列表中的物品两两在共现矩阵C中加1。
在得到物品之间的相似度后,ItemCF通过如下公式计算用户u对一个物品j的兴趣:
pu,j=i∈N(u)S(j,k)wjirui
这里N(u)是用户喜欢的物品的集合,S(j,K)是和物品j最相似的K个物品的集合,wji是物品j和i 的相似度,rui是用户u对物品i的兴趣。(对于隐反馈数据集,如果用户u对物品i有过行为,即可令 rui=1。)该公式的含义是,和用户历史上感兴趣的物品越相似的物品,越有可能在用户的推荐列表中获得比较高的排名。
3. 过滤模块
在得到初步的推荐列表后,还不能把这个列表展现给用户,首先需要按照产品需求对结果进行过滤,过滤掉那些不符合要求的物品。例如用户已经产生过行为物品、候选物品以外的物品、某些质量很差的物品等。
4. 排名模块
经过过滤后的推荐结果直接展示给用户一般也没有问题,但如果对它们进行一些排名,则可以更好地提升用户满意度。一般排名模块需要包括很多不同的子模块,例如新颖性排名、多样性、时间多样性、用户反馈等。
3.3可行性分析
3.3.1 经济可行性
主要是对项目的经济效益进行评价,本系统作为一个毕业设计,无需开发经费,于我们在经济上是可以接受的。所以本系统在经济上是可行的。
3.3.2 技术可行性
开发网上商城购物系统平台的技术以及非常成熟。首先从硬件上讲,计算机硬件速度现在已经不是问题,大容量高速度的硬盘十分普遍,同时网络的速度普遍可以达到100M。这些为电子商务的运行打下坚实的基础。从软件的角度上讲,数据库技术已经相当成熟(目前用得比较多的有SQLserver,Oracle等),并且处理能力也非常强这为海量数据的存储和处理打下了坚实的基础,同时,开发安卓app的工具也非常多,并且相当成熟。协同过滤的推荐算法也有很多案例和文献,二维码识别软件也非常多。
有了这些技术的支持,我们成功开发一个跳蚤市场购物平台没有任何技术风险。
综上所述,此系统在经济和技术等方面都可行,并且投入少,见效快。因此系统开发是完全可行的。
4. 研究创新点
1.采用物联网的思想,对跳蚤市场商品进行二维码管理操作和自动记账。解放人工,提高精度。
2.采用协同过滤算法,向用户提供个性化商品智能推荐服务。提高平台吸引力和客户粘性。
5. 研究计划与进展
1.2020年1月1日至2020年1月15日:提交开题报告;查资料,大致了解。
2.2020年1月16日至2020年2月16日:查阅文献资料,细致学习设计实现的相关方法。
3.2020年2月17日至2020年4月1日:查阅软件相关文档,了解所要开发的程序的各功能模块,搭建环境,编写用例。
