【毕业学位论文】(Word原稿)研究Mahout中关于推荐的部分并基于Mahout的taste引擎设计并实现了一个推荐系统_第1页
【毕业学位论文】(Word原稿)研究Mahout中关于推荐的部分并基于Mahout的taste引擎设计并实现了一个推荐系统_第2页
【毕业学位论文】(Word原稿)研究Mahout中关于推荐的部分并基于Mahout的taste引擎设计并实现了一个推荐系统_第3页
【毕业学位论文】(Word原稿)研究Mahout中关于推荐的部分并基于Mahout的taste引擎设计并实现了一个推荐系统_第4页
【毕业学位论文】(Word原稿)研究Mahout中关于推荐的部分并基于Mahout的taste引擎设计并实现了一个推荐系统_第5页
已阅读5页,还剩51页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1 第一章 绪 论 本章将重点论述论文工作的选题背景和研究意义,并且对国内外的研究现状进行分析,在此基础上简单介绍论文的主要研究内容和文章的组织结构。 究背景 随着信息技术 的 迅猛发展, 每个人都可 以很容易的发布并分享信息,网络上充斥着大量的博客、图片、视频等 。 互联网上的信息迅速膨胀 , 信息 爆炸 使人们从 信息匮乏 时代 步 入了信息过载时代 1, 目前我们面临着 数据量急剧膨胀但是利用率 却不 高 的问题 。 以门户网站 网 易 新闻 为例,其 每天新发布的新闻 数量约为 10 万篇,但是有点击量的文章不到 10%大 量的文章成为长尾 沉没 而 得不到展示的机会 2。 总之 , 信息爆炸使得信息的利用率反而降低, 如何让人们在海量的数据中 找到他们需要的信息将变得越来 越 困难 。 在大数据时代 , 不 论是寻找信息的普通用户 还是 推送信息的商家 都遇 到了非常大的挑战:作为 普通用户 ,如何从 浩瀚的 信息 海洋 中找出对 自己有用的 信息 将 变得 越来越困难 ;作为推送信息的商家 ,如何让自己的信息别出心裁 受到大众的关注也 是一个挑战3。为解决信息过载 问题,学术界及业界都提出了许多方案。其中最典型的方案 是分类目录和搜索引擎。 分类目录通过有 经验的技术人员 对网站进行筛选评估,并根据网站主题和面向受众等 相关准则 对网站进行分类。 目前著名的分类目录有雅虎、 。 虽然 分类目录在一定程度上方便用户查阅 信息,但 在信息 过载 时代其涵盖的 信息 也只占很少的一部分 , 仍然不能满足用户需求 , 搜索引擎 应运而生, 成为 我们快速 发现有效 信息的 途径 之一 。 但 其 仍 不能完全满足用户需求 , 原因之一是 在很多情况下 用户 并不能准确 概括出自己的需求并使用合适的关键字进行搜索 。原因 之 二是基于关键词的信息检索在很多情况下 仍然 是不够的 , 例如 目前的 搜索 引擎 对不同用户的同一搜索请求呈现的内容是完全一致的 , 并没有 针对不同用户的兴趣爱好 做区分并 提供 个性化的 服务 。 而 推荐引擎转变了人们获取信息的方式: 它 可以通 过 上下文主动向用户推送信息。这种信息推送方式 更 加 符合人们的生活习惯。 本 质上 推荐 系统 是帮助用户快速发掘 信息的工具 , 其出发点与分类目录和搜索引擎是相似的, 但其与 前两 类方式不同的是 不需要用户提供明确的需求, 而是运用一定的算法 主动为用户推荐他们 可能 感兴趣的信息 , 因此 推荐系统 具 备一定的智能性 。 2 另 外 由于长尾效应 的存在 4, 在电 子 商 务 领域那些 销量一般的冷门商品 因基 数巨 大 其 累加起来的利润也 非常 可观 , 很 有可能超过热门商品。 在互联网 环境 下长尾效应尤为显著 。 例如 著名电子商务网站 5%来自个性化推荐 , 而且大部分是长尾物品 5, 6。 在电 子 商 务 时代 由于货架成本低廉,电子商务与传统零售业相比 往往能够容纳更多的商品,虽然 这些长尾商品 不是很热门但 由于 基数巨大, 通过挖掘长尾商品仍然能够带来巨大的 商业 利益 。 目前各个电商都开始关注用户的个性化需求 , 提供个性化的推荐 以 增进用户 黏性 , 为 电子商务领域带来巨大的商业利益 。 这也进 一 步说明了在信息爆炸时代我们需要更加符合我们生活习惯并且 更 加智能的信息发掘机制。 目前推荐 系统已经在电 子 商 务 ( 如 亚马逊 , 豆瓣)和一些社交网络( 如 得巨大的成功 。 再者 从并行计算的角度来看 : 随着云 计算 时代的到来, 个性化推荐系统面临着存储空间的扩展性与分析计算的 扩展性 等问题 。 仅仅提高大型服务器的存储空间与计算能力已不能很好的解决这些问题 。 现代的互联网应用 需要新的处理模式来 应 对 大规模数据快速处理的需求 。 虽然有各种高效的算法不断提出 , 但是 随着 用户 规模、商品数量的快速增加其 对算法的快速响应能力 也 提出 了新的挑战。 推荐系统的意义之一 就 在于 对大数据的处理,即当 信息 量大到用户自身无法筛选 时, 它 仍然可以推荐出 相对 好的内容。 目前多数的推荐 算法研究大都集中在算法本身效率的提升 ,但由于在互联网环境 下用户数量与商品数量的快速增加, 通过改进算法提升计算速度的方式其应用价值有限,而且提升空间也越来越小。 再者 这种 单机 大型服务机 运行模式 很容易受到 硬件性能的制约如 处理器 计算 速度、 硬盘 存储容量等 , 在这 种 情况下 对数据 规模 进行 分割 , 然后对其 进行 分布式 并行处理便是一个重要 而且 有效的手段之一 , 因此如果我们能对这些算法 或者其中的一部分 实现分布式 并行 计算将会大大缩短计 算所需时间。分布式实质上是将一个问 题的规模由大变小,将大的问题化简成许多相同性质但规模较小的问题并提交给不同的 节点 去计算 的一种模式 。 需要指出的是 分布式 并 不能提高 物理 资源的利用率 如 内存 的利用率 7, 相反 它相对于 传统的大型服务器处理模式 需 要消耗更多的 物理 资源。比如 , 在很多机器 上 传输数据需 要消耗网络带宽 , 这实质上是使用 物理资源换取计算时间 的 减少, 是一种空间与时间的权衡, 但 这种做法 仍然可以为 推荐系统在处理大规模数据时提供一种途径,这是单机处理方案无法具备的。 因为分布式可以整合更多的计算与存储资源 , 从而在计算能力上超过专用机器。 目前计算机早已进入多核架构,利用分布式并行计算让算法并行运行在多台计算机上可以提升传统算法的的速度和效率。 3 本文正是基于上述背景展开 工作,对推荐系统、分布式并行计算做了 研究,并将两者 进行结合 思考 , 利用云计算的优势来解决传统协同过滤推荐算法所遭受到的 扩展性 等 问题 。 究 现状 推荐系统的研究 始 于 90 年代初 , 推荐系统的本质是通过一定的方式将人和物联系起来,而不同的推荐系统使用了不同的方式 , 从 算法的观点来看 推荐方式一般 划分为 二种 : 一 种 是 基于内容的推荐( 8;一种是 基于协同过滤的推荐( 9。基于内容的推荐主要分析被 推荐物品 属性之间 的关系, 其 根据物品或内容的元数据 基于 物品属性的 特征推荐 具有相似属性的项目。 换句 话说 基于内容的推荐方式 是基于物品的特征 或者属性进行 推荐。这种方法在信息检索和信息过滤方面 就 有 着 深厚的 渊源 。 实际 上前面提到的人工分类目录就是一种基于内容的推荐,只不过其是通过人工 进行 属性特征 相似性判断。而协同过滤推荐正好相反, 其 并不基于物品的特征或者属性进行判断,而是充分利用用户的行为数据对其建模 分析 来计算 相似性并以此 来推荐物品。 在实际使用中 两种方法经常一起使用 ,且 两种方式各有优缺 : 协同过滤存在冷启动的问题其 需要大量用 户 评分 信息才能准确推荐 ,而 基于内容的方 法 只需 要 很少的信息就能 启动 ,但是使用范围有 一定的 局限 性 , 例如 , 它 只能推荐与原始种子相似的条目 。 协同过滤算法是 由 人 提出 随后 被 用于 邮件过滤 10。这也是最早 的个性化推荐系统的雏形。 为了发现 用户 喜欢的 一方面 你可以 去寻找有相 似 兴趣的人 , 这就是基于用户的协同过滤 ( F) 最直接的思想。 另一方面, 我们 也 可以 从 其他 用户 的 行为数据中 计算出类似 该用户 喜欢的 其他 这就是基于项目的协同过滤 ( F) 。 F 是 在 1992 年 提出并被 应用于邮件过滤系统, 随后又被 用于新闻过滤 11。在此 之后直到 2000 年,该算法都是推荐领域 著名的算法 之一 。 F 是在 2001 年由 人提出并 且 从 论文和专利发表之后开始流行 12, 13。 在业界推荐系统 已经 广泛应用于电子商务 领域 、 视频网站、 新闻 网站 等,比如,音乐推荐有 豆瓣电台 , 书籍 推荐有 频的推荐有 等 。 其 中 应用 最典型的 领域 就是电子商务领域 , 如在线零售商 于项目 相似度的协同过滤算法为用户推荐书籍及物品为 其 贡献了 35%的销售额 5, 6。国外视频网站 曾开出 100 万美元的奖金给能够把他们的推荐系统准确率提高 10%的团队 14。还有门户网站的新闻报道推荐( 。4 一个广泛使用的基于内容的推荐系统,该系统为用户播放相似特征的音乐 15。 另外 , 近年来 随着云计算等新型计算理念的涌出,科学家开始研究在分布式环境下的推荐系统 ,在推荐系统的可扩展性方面也进行了大量的研究 。例如 出了一个整合记忆和模型两种方式的混合分布式协同过滤算法来提供对 个性化推荐服务 16。然而 这些方法实质上是在推荐质量与计算速度上做了权衡,通过丢弃一些推荐质量而换取时间上的提升。 其论文 支持多核之上的机器学习的 指出 某些算法并行运算的可能性 并 阐述了 某些机器学习算法 可以 转换成某种和 的形式 而这种形式特别适合在类似 并行计算框架中运行17, 从而为 某些机器学习 算法并行 化 提供了理论基础 。 究内容 本文 研究了 关于推荐的部分,设计并实现了一个推荐系统并在此基础上做了诸多改进,具体包括如下四方面的内容: 1. 分析 推荐领域的经典算法及 相 关技术并阐述了 其 各自的应用 范围 。 2. 研究了 关于推荐的 部分 并 基于 擎 设计并 实现了一个 推荐系统 。 3. 由于相似度计算是推荐模块计算量最大的部分为了加快计算速度 ,本文 引入 程框架实现离线并行计算相似度并基于 供的 储空间的可扩展性。 4. 最后设计并实现了评估模块对各种参数进行评估并使用 形库可视化评估结果 , 以帮助研究人员灵活方便的分析数据并选择合适的算法与参数 。 文组织结构 第一章:绪论 。 论述了本文的研究 背景、 国内外研究现状 , 分析 推荐领域的经典算法及 相 关技术并阐述 其 各自的应用范围 。 第二章: 相关技术概述 。 介绍了本论文中使用的相关技术。 包括 协同过滤推荐算法 , 推荐引擎 分布式开源计算、存储框架 用于桌面应用程序开发的 术 , 用于可视化数据的 。 5 第三章 : 推荐系统框架 。 描述了系统的功能 需求 并 对整体框架进行分析设计 。 第四章 : 推荐系统的研究与实现 。主要包括 三 方面的内容 : 一是 基于 擎 实现了一个协同过滤推荐系统。 二是 基于 算框架实现 相似度的 离线并行计算以提高 系统的后台计算能力并基于 现对数据的存储以提高系统存储的可扩展性 , 并在此基础上对群做了优化以进一步加快计算速度 。三是实现评估模块对各种参数进行评估并使用 视化评估 结果以帮助研究 人员灵活方便的分析数据并选择合适的算法与参数,并简要解释和分析了各种评估曲线的意义。 第五章 : 总结与展望 。 对当前工作进行 总结、 分析 当前系统的不足并对未来 做 了展望 。 6 第二章 相关技术概述 本章 主要阐述 协同过滤推荐的相关技术 : 具体 包括基于 协同过滤和基于 协同过滤 并 阐述 各自的优缺点及适用范围;介绍本 论 文中使用的相关技术包括 本原理,以及 用程序、 图等工具。 同过滤 推荐 技术 协 同过滤技术 是 目 前使用较为广泛的推荐技术之一,因其可以处理复杂对象如电影、歌曲并 且推荐效果也不错,受到各大企业的青睐。 协同过滤 技术 实质上 是对 用户的历史数据进行建模分析从而为用户推荐合适的产品 。 协同过滤具体包括 很多算法, 学术界 、业界 对其进行了深入的研究并提出了很多方法。其中 比较常见的有基于邻域的算法 ( 矩阵分解算法, 隐语义模型( 基于图的随机游走算法 ( on 18 。而 在这些方法中 最著名的并且 在业界得到 广泛应用的是基于邻域的 算法 ,而基于邻域的方法 又 主要包含两种 基本 算法( 。基于用户的协同过滤算法给用户推荐 与其 兴趣相似的其他用户喜欢 而该用户还 没有评分的 物品。基于 项目 的协同过滤算法给用户推荐和他之前喜欢的物品相似的物品 。 协同 过滤的一个优点就是 其 不依赖于机器分析 的内容, 其不 需要 分析推荐对象的任何属性作为输入数据 , 因此该方法有能力准确推荐复杂的项目 如电影 等 。 换句话说机器不需要理解 物品 本身就能推荐。 于 基于 协同过滤是 通过对用户的历史数据进行建模 分析 从而 给用户推荐与其行为相似的其它用户感兴趣的物品。其基本思想非常直观与现实生活中的通过朋友推荐非常相似。物以类聚,人以群分,每个人在社会上都不是孤立的而是相互联系的,如果某些用户对一些事务的评价相似,有理由相信他们有共同的兴趣爱好。 因此基于 协同过滤的一般步骤 可参见 图 2大体步骤 为采用 某 些 度量 方式 找到与目标用户行为相 近 的用户即该用户的若干邻居。 然 后将 其邻居评价过的或者喜欢的但该用户 还 没有评价 的 且预测评分较高的物品推荐给该用7 户 。 所以 首先要进行相似邻居的搜索,而 搜索 相似 邻居 的 关键步骤就是 计算两两 用户 之间 的相似度。 如果 要 计算 两个用户之间的 相似度,则需要先获取这两个用户的所有评 分 项, 然后 按照一定 的相似性度量 计算 产生相似性 数据。 目前常用的相似 性 度量有 欧几里德相似度( 、 皮尔森相关系数( 、 基于余弦的相似度( 及 调整过的余弦相似度( 。 得出两两用户的相似性矩阵 之 后可计算每一个用户的相似邻居。 如图 2户 1 的相似邻居为用户2、 用户 、 用户 和 用户 。最后遍历这些用户评价过的物品将 该用户没有评价过的 具预测评分较高的 物品 推荐给用户 。 图 2近邻居示意图 图 28 于 基于 项目 的协同过滤算法给用户推荐和他之前喜欢的物品相似的物品 ,其基本思想就是买 x 的人也会买 y, 这 种算法广泛应用 于 物系统中 。它的基本假设就是用户会喜欢跟自己之前喜欢的物品类似的物品。 可以由其他用户 的明显偏好计算出类似 该用户 喜欢的 其他 因此在用基于 品集合,该数据 可以通过遍历其历史行为数据得到。其次从其 还 未评论的物品 集合中 出找出与其喜欢的物品相似的物品推荐给 该用户 。实质上 这个算法的核心仍然是计算两个物品之间的相似度。目前比较常用的相似性度量有 皮尔逊相关系数 、余弦相似度等。 在实际应用中 基于 项目 的协 同过滤算法因其实现简单、扩展性好、推荐效率 不错等优点被广泛应用。如 使用了这种算法。 种算法各自的 适用 场景 在实际应用中 两种方法 各有其适用场景 。 从技术考量的角度来看 基于用户的 协同过滤适 用于用户规模较 小 的情况,而基于项目的协同过滤适用于 物品规模较 小 的情况。 由于基于用户的协同过滤的计算量会随着用户数量的不断增加而线性增加 ,而在电 子 商 务 领域用户数量不论从总体规模上还是增长速度上都比物品要快的多,而对于基于 应用 响应速度又是影响用户体验的重要因素,因此在电 子 商 务 领域多采用基于项目 的 协同过滤算法 。 这也限制了基于用户协同过滤在实际商务系统中的应用。 与此相反基于用户的协同过滤更适合用于 新闻、 博客或者微博等以内容为主的推荐系统,在这里 情况正好相反 物品的数量相对于用户的数量是海量的同时也是更新频繁的。 从用户的需求来看在 以内容为主的网站中用户的兴趣不是特别细化 也即 这种个性化是粗粒度的。例如绝大多数的用户都喜欢看热门新闻,虽然各个用户之间的兴趣点不同 但 很少有用户只 浏览 某个话题的新闻,因为不能保证这个话题每天都有内容更新。 所以这类网站更加强调抓住热点, 由其是一个小圈子中的热点 , 而个性化 则 相对处于次要位置。这也 是 新闻推荐中使用 但是在图书、电子商务网站中用户的兴趣是比较固定和持久的,一个喜欢 程序员很可能一直在购买 关的书籍他并不 关心 这本书是否热门。所以在这类系统中的用户大都不太需要流行度来辅助他们判断一个物品的好坏 而是 通过自己专业 领域的知识自己判断物品的质量。因此这些网 站中个性化推荐的任务是帮助用户发现和他研究领域相关的物品。因此 为了这些网站的首选算法。 从推荐解释的角度来看 在非社交网络环境下 基于项目的协同过滤算法 便于为推荐做出解释 。 系统 可以 利用用户的历史行为 数据 给推荐结果提供合理的推荐解释,比如给用户推荐天龙八部的解释可以是因为用户之前喜欢射雕英雄传 。在一个非社交网络的网站中给某个用户推荐一本书 同时给出的解释是某某 和你有相似兴趣的人也看了这本书 这很难让用户信服,因为 该 用户可能根本不认识那个人;但如果解释说是因为这本书和你以前看的某本书相似,用户可能就觉得合理而采纳了此推荐 。 目前多数系统都采用基于项目的协 同过滤如豆瓣都采用这种方法 。 由其随着亚马逊的成功 这种方法也快速流行起来。但 在现今很流行的社交网络站点中 F 也 许是一个更不错的选择,F 加上社 交 网络信息可以增加用户对推荐解释的信服程度 ,因为我们每个人也都更相信朋友 的推荐 。 顶级开源项目 21,最初基于 Ng et 的文章 17,由 生而来。 其创建的 初衷 就是为 程序员 提供高效的算法实 例 并且这些算法 具备一定的 伸缩 性 。 其主要包括三 部分 : 推荐,聚类,分类。 写 的 高效的推荐引擎。 其涵盖的推荐算法主要有基于 协同过滤和基于 协同过滤。 同时 提供了接口用于定制化的推荐算法的开发 。这使得其在可扩展性、灵活性、实用性方面都有很大的优势。 构图 参见 图 2 主要 包含下面几个 组件: 是对用户评分信息的封装 以便 行处理。其 支 持从不同的存储环境中提取数据如关系型数据库、本地文件系统等。 用于计算相似度 。 分别是 基 于用户的和基于项目的。 是对推荐的抽象封装 , 用于 在实际应用中 产生 具体 的 推荐列表 。 10 一个分布式 的 计算和存储平台其 由 金会开发 22。 它简化了分布式应用程序 的开发,即使不怎么熟悉分 布式的用户也可以快速开发出高效的 并行 程序。而且还 可以利用 群在存储与计算方面的 可扩展性。核心组件是 3, 24. 图 211 一个分布式文件系统 。 专门用于设计部署在性能 一般 的机器上 因此其容错性能 良好 。 并且其 一次写入多次读取 的 数据处理方式非常适合大数据量的传输 。 另外 多机架存放副本的策略使用户不用担心因为某个 户 文件不完整 从而 确保 用户数据的 实时可用 。 基本思想 源自函数式 编程 , 其包括 两个 最基本 步骤: 射) 和 简) 。 如果要采 用 并行处理大规模的数据集。则该 数据集必须具备 如下 的特点: 涉及的数据规模通常很大而且可以划分成较小的数据规模并 且 各个子 数据集都可以 相互独立的 并行 的 处理 , 相互 之间不需要额外的通信。 质上通过计算模型的限制,来简化分布式 程序 设计和实现的难度,在分布式框架下数据是互相隔离的,因此通过 唯一性来联接数据之间的联系。数据隔离的另一个巨大优势是不 需要 修改程序就可以通过简单增加节点数量来提高集群性能。 在 其通过 并行程序进行调度,只要按照 形式实现 的程序都可以快速并行化执行。 图 2 2 架 介绍 在 程中 基本上 每一个 务都将 包括两个阶段: 两个阶段分别用两个函数表示 即 数和 数。 数 的输入由输入类解析成 形式的键值对,通过 自定义的 数处理 并产生另一个 形式的键值对的中间 结果。 数 的输入也同样类似于 ,并且根据 数对每个 合进行处 理,每个 般会产生 0 个 或 1 个输出, 输出也是 形式的键值对,其原理图如 图 2 图 213 要 在大规模集群之上 完成一个并行计算需要做很多 工作 , 如 任务调试、本地计算、洗牌 等 过程。 而 化了编程模式自动处理了一些底层的细节。程序员主要完成 方法, 方法的 设计以及 任务属性的配置。再复杂一点的 程序需要配置 入 类型 、 输出 类型 等参数。 下面以经典例子 要介绍 编程框架。 其效果就是统计 每个 单词在所有文件中 的 词频。 1. 输入 输入 类 主要 负责 将文件拆分成 将各个 照 行分割形成键值对。 默认情况下 每行在文件中位置为 行内容为 然可以根据自己的需求自定义输入类的工作方式。 2. 理 图 2 图 2程模型示意图 14 将 分割好的键值对交给用户定义的 法进行处理, 该方法使用一个用于分词的类 输入的每行内容进行分词。每得到一个单词就输出 形式的键值对, 单词, 整型的一 种封装 可以 理解为 的整型 。 3. 并阶段 如果在 段产生大量的中间结果键值对 将导致网络数据通信量大幅增加, 这样既 增加了网络通信开销 又降低了程序执行速度。为了提供一个基本的减小键值对数量的手段, 计并提供了 在每个 点上合并 产生的中间结果键值对。 其实质上就是 的本地 在 序中 对每个 出的键值对进行排序 并将 本结点上 具有相同 行合并 即 将 相同的 累加 , 这样可以减少 输出数量。 对于产生大量中间结果又需要合并的程序 其 性 能提升明显。 4. 牌阶段 图 2 图 2程示例图 3 15 洗牌的意义在于划分哪些键值对由这 一 个 行,哪些键值对由另 一个 的 行。以便保证具有相同 键值对由同一个 行。 在序中, 决定 点的输出将被分区到哪个 其默认是 5. 段 段 先对 从 收的数据进行排序,再交由用户 定义的 相同 行累加 并作为 最后 输出结果。 客户端平台是基于 件开发的一种应用框架 25,通过 以快速构建桌面应用程序。插件机制是 台的核心内容 , 但这些插件的运行都要依赖于 台的存在 而程序员在开发桌面应用时往往要摆脱对 依赖,并希望使用最小的运行环境来运行系统,所以在 后的版本中逐步将插件的运行从 行平台中剥离出来从而形成了 以说 质上是 插件,但运行时却能够脱离 台而独立存在,所以开发 用程序时可以利用 台的 观和框架快速地进行 迭代 开发与 部署。 一个 形库 26,对于图形化的操作系统来说 重要的组成部分。随着操作系统向图形化方向的发展,各种编程语言也随之纷纷实现 口 并 支持 程。 由 最初的目的是 创建一套图 2程示例图 4 16 替代 司的 图形库。 有面向对象、跨平台等优势并且 其 直接调用了操作系统的图形库,所以其界面风格与本地操作系统风格一致。由于其对本地图形库的直 接调用 从而大幅度的提高了基于 用程序的运行速度。 因此 程序员 将其 广泛应用于图形界面开发。 对 扩展 27,其原本是为更加方便地使用 编写的一组 从使用方式上来说其 加易于使用,但功能却没 接。当初其主要开发目的是为了开发 境,后来 织意识到开发独立应用程序时的重要作用。所以从 本后 , 经变成了和 样的完整独立的开发包。 了大量的抽象,例如的 中为此类构件提供了 式的 编程方法,这种方法使显示与数据分开 使其 更加易于开发与维护,本论文中就使用了 台上的一个开放的图表绘制类库 28。 生成 拆线图、 饼图、柱状图、散点图、时序图、甘特图等等多种图表 并且可以产生 式。 有易于使用、绘制的图形美观 、坐标刻度自适用 等特点。 本 论 文将使用 制评估曲线并将其嵌入到 发的图形用户 界面中。 17 第三章 推荐系统 框架 前 一章介绍 了 本文设计并实现推荐系统 时 需要 使用到的相关技术 和 一些 推荐算法。 本章 将 描述 系统的功能需求并对整体框架进行分析设计 : 首先 从 外围架构 上进行详细说明, 并对架构中每个模块的设计进行深入讨论 。 求分析 任何一个系统在设计之初,必须 要 明确系统的设计目标与任务 , 明确了其需求后才能进行具体的功能设计。 一个友好易用的推荐系统至少 包含 如下 几方面 的需求。 1. 友好的人机接口 推荐系统要发挥强大的作用,除了推荐系统本身,主要还依赖于两个条件 界面展示和用户行为数据 。 用户界面 主要提供友好并且易于使用的人机接口 。其 主要 负责系统与用户 之间 的交互 。 包括用户登录、 用户 注册,响应用户推荐请求 以及 推荐结果的展示等。 2. 数据 的收集和存储 个性化推荐算法依赖于用户行为数据,而在任何一个网站中都存在着各种各样的用户行为数据。 推荐系统的本质就是 从海量数据中挖掘有效信息所以一方面系统需要存储各种用户数据如用户 登录、 注册 信息数据、 用户历史行为数据、 推荐相关的数据、评测相关数据等。 另一方面 随着用户数量与物品数 量 的增加 , 数据的存储需求也越来越大,因此推荐系统的存储机制 也 需 要具备一定的可扩展性以保证 增量 存储的需求。按照 数据的规模和是否需要实时存取,不同的行为数据将被存储在不同的媒介中。一般来说,需要实时存取的数据存储在数据库和缓存中,而大规模的非实时存取 的 数据存储在分布式文件系统(如 。 3. 推荐 引擎的设计 推荐引擎使用一种或几种用户特征,按照一种 推荐策略生成推荐列表 。 应该说 推荐引擎 是推荐系统中 的 重要组成部分 , 其质量直接 决定 了推荐系统的推荐效果。其主要任务是对 用户或者物品的数据进行建模 分析 并对其 进行预测计算 , 为 不同的用户推荐不同的物品 。 18 另外随着数据量的增加其计算量也线性增加因此要兼顾计算的 扩展性。 4. 评估模块 及参数的调整 从算法的角度来看推荐系统的推荐质量受多个参数的影响如近邻个数、评分阈值、推荐列表长度等。在实际使用中需要多次测试调整才能使其达到较好的性能。因此有必要 在系统上线 之 前 评估这些参数下的推荐指标如准确率、召回率、平均绝对误差等。另一方面为 了更好的展示各种参数对于推荐 效果 的影响将评估结果可视化将帮助研究人员灵活 方便 的分析数据并选择合适的算法与参数。 能总体设计 从逻辑功能上划分主要包括 业务层、 存储层和 算法层 ,参见 图 3 1. 业务层 业务层 主要完成推荐结果展示 ( 包括两部分内容:一是罗列出该用户已经评分的物品及其相关信息,二是展示经过推荐模块计算得出的推荐结果 及其相关信息 ) 、 请求后台数据 处理 、用户登录、收集用户信息 、评估参数设置、评估结果曲线绘制 等功能 并且 提供 友好易用的人机接口 。 2. 算法层 算法层 主要包括 2 个模块:推荐模块和评估模块。推荐模块 用于封装 推荐相关的代码。 具体 包括 将 评分 数据 封装 处理成 以识别的数据模型 ; 各种相似度的计算 具体包括 欧几里德相似度( 皮尔森相关系数(余弦相似性( ; 推荐算法的具体实现,包括 基于 协同过滤和基于 协同过滤 ; 以及与存储层、业务层的交互等。 另外为了 兼顾计算 的扩展性拟采用 架 并行计算相似度 以 进一步提高后台处理能力 。 评估模块用于 封装 评 估 相关的代码 。具体用于计算 当前参数 下的各种推荐指标 并将评估结果返还给评估界面绘制评估曲线。本 系统 评估的指标有准确率 、召回率、 平均 绝对 误差等。 准确率 (于 评估 用户对一个 推荐产品感兴趣的可能性 。 召回率 (于 评估 一个用户喜欢的产品被推荐系统推荐的概率 。 平均绝对误差 (于评估实际值与预测值之间的差距 。 3. 存储层 存储层 采用多种存储方式如 形式 。 因关系型数据库仍然是目前主流的存储系统并且目前 很多系统都不能方便的识别 件系统所19 以这里采用 存储方式。 般用于 结构化数据的 存储如 网站上统计的用户信息 , 包括用户信息、评分矩阵等。 方面 用于 支持 大规模并行 计 算另一方面为系统 提供可扩展的存储。 对于一些不需要频繁修改但要多次读取的信息可存储在 。 再者 在计算相似度的环节中可以 利用 下计算相似度后 再 将计算结果纳入关系型数据库,以便其它系统能够利用关系型数据库结构化数据的存储和处理能力 。 图 3总体框架图 20 第四章 推荐系统的研究与 实现 本章 在需求分析和功能设计的基础上 开展 如下三部分的工作:一是 基于 擎实现 一个推荐系统。二是由于相似度计算是推荐模块计算量最大的部分为了加快计算速度 , 本章引入 程框架实现离线并行计算相似度并基于 供的 现对用户数据的存储以提高系统存储空间的可扩展性,并在此基础上对 群做了优化以进一步加快计算速度。三是实现评估模块对各种参数进行评估,并使用 形库可视化评估结果将评估曲线显示在 面上以帮助研究人员灵活方便的分析数据并选择合适的算法与参数,并对绘制的曲线图进行了简要的解释与 分析。 于 荐引擎 的 研究 与 实现 个性化推荐 系统 的 设计 一般 包括 以下几个 步骤 : 建立 用户 数据 模型 , 计算相似度 , 根据相似性表产生推荐 。因为 身 对用户数据的格式进行了封装,所以 产生 推荐的流程是 首先 要 将 用户 数据组织成 持的 式, 然后 在此基础上计算 相似度 ,之后把 相似性表、用户数据 转给口 计算 得到相应的推荐结果 。 据建模 方法 本章 使用的数据集来自于 供的 电影 数据 评分 集, 该数据集包含 6000 多用户对 4000 多部电影的 100 万条评分 记录 。该数据集是一个评分数据集,用户可以给电影评 5 个不同等级的分数( 1 5 分) 。 由于 大部分网站的数据都 存储 在数据库里 ,因此首先需要设计 数据库 表 以存储用户、物品信息 以及用户对物品的评分 信息 。 数据库 表 的设计如下 : : 主要存储电影相关的信息如电影的 编号、 电影 名称、 发行时间 、 影片 类型等。 其中 主键 。 表 4电影信息表 列名 数据类型 长度 是否主键 是否外键 备注 id 1 Y Y 电影编号 00 N N 电影名称 21 N N 发行时间 00 N N 影片类型 :存储用户相关的信息 包含用户的基本信息:编号、姓名、邮件 、性别、年龄、职业信息 等等 。 其中 id(主键 。 表 4用户信息表 列名 类型 长度 是否主键 是否外键 备注 id 1 Y Y 用户 编号 0 N N 用户姓名 00 N N 邮件 00 N N 性别 1 N N 年龄 ( 以年龄段划分 ) 00 N N 职业 : 用于存储用户对电影的评分信息 也是推荐系统经常读取的数据表 。主要 包含用户编号、电影编号、用户的评分以及 当时 评分的时间。 其中 主键。 外键 , 其 对应 的外键 , 其 对应 的 表 4评分信息表 列名 类型 长度 是否主键 是否外键 备注 1 Y Y 用户编号 1 Y Y 电影编号 1 N N 评分值 1 Y N 时间戳 : 用于 存储 两两电影之间的相似度。 两个电影的相似度可以通过 用户对电影的历史评分 计算得到。 其中 因在 适合 基于 推荐 场景 中 , 项 目之间的相似度一般比较稳定,没有很强的时间要求可以在线下提前完成,这样对于数据数量和算法复杂度限制更小 。所以这里专门设计一个 数据库 表用于存储两个项目之间的相似度。 表 4电影 相似性表 列名 类型 长度 是否主键 是否外键 备注 1 Y Y 电影 1 编号 22 1 Y Y 电影 2 编号 1 N N 相似度 用自己实现的 据模型: 对 用户 评分信息的抽象 ,其有很多种具体实现支持从任意类型的数据源抽取用户喜好信息。具体实现包括内存版的 持文件读取的 支持数据库读取的 本文中大部分数 据都是存在数据库里的 ,而 要求的数据 模型 的格式是 中间需要经历一个转换 的过程 需要 扩展 数据库的读取类。 于 实现 基 于用户的 协同过滤算法 是 给用户推荐和该用户 兴趣相似的其他用户喜欢的物品 。 因此基于用户的协同过滤的一般步骤为 采用某种 相似性 度量找到 若干与目标用户行为相似的用户即该用户的最近邻居 , 然后将 其邻居评价过的或者喜欢的但该用户 还未评分的 且预测评分较高的物品推荐给该用户 。 所以其关键步骤 分为 两步: 一是 找到目标用户 的最近邻居集合 , 二是 将邻居们的喜好 通过一定的方式 组织成一个有 序的列表 ,也即 找到这个集合中 目标 用户喜欢的 且目标用户没有 评价 过 的物品推荐给该 用户。 1. 计算用户之间的相似度 我们又怎么找到与目标用户兴趣相似的用户 呢? 一般认为如果两个 用户对物品的评分 大体一致则认为这两个用户兴趣相似 , 所以查找最近邻的 关键就是计算两个用户的相似度。 关于相似 性的度量目前最常 用 的方法都是 以 向量 计算为主的 ,实质上就是 通过一定的方式 计算两个向量

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论