From 7d989fcebe6b5abdc5f6f7d3ed2691927b1a2f7a Mon Sep 17 00:00:00 2001 From: "Chris (Caihao) Cui" Date: Sat, 1 May 2021 18:55:09 +1000 Subject: [PATCH 1/5] add QA Add learning QA of Section one --- README.md | 147 +++++++++++++++++++++++++++++++++++++++--------------- 1 file changed, 106 insertions(+), 41 deletions(-) diff --git a/README.md b/README.md index b78cd0a8..1a87375a 100644 --- a/README.md +++ b/README.md @@ -1,56 +1,121 @@ # SparrowRecSys -SparrowRecSys是一个电影推荐系统,名字SparrowRecSys(麻雀推荐系统),取自“麻雀虽小,五脏俱全”之意。项目是一个基于maven的混合语言项目,同时包含了TensorFlow,Spark,Jetty Server等推荐系统的不同模块。希望你能够利用SparrowRecSys进行推荐系统的学习,并有机会一起完善它。 -## 基于SparrowRecSys的实践课程 -受极客时间邀请开设 [深度学习推荐系统实战](http://gk.link/a/10lyE) 课程,详细讲解了SparrowRecSys的所有技术细节,覆盖了深度学习模型结构,模型训练,特征工程,模型评估,模型线上服务及推荐服务器内部逻辑等模块。 +SparrowRecSys 是一个电影推荐系统,名字 SparrowRecSys(麻雀推荐系统),取自“麻雀虽小,五脏俱全”之意。项目是一个基于 maven 的混合语言项目,同时包含了 TensorFlow,Spark,Jetty Server 等推荐系统的不同模块。希望你能够利用 SparrowRecSys 进行推荐系统的学习,并有机会一起完善它。 + +## 基于 SparrowRecSys 的实践课程 + +受极客时间邀请开设 [深度学习推荐系统实战](http://gk.link/a/10lyE) 课程,详细讲解了 SparrowRecSys 的所有技术细节,覆盖了深度学习模型结构,模型训练,特征工程,模型评估,模型线上服务及推荐服务器内部逻辑等模块。 ## 环境要求 -* Java 8 -* Scala 2.11 -* Python 3.6+ -* TensorFlow 2.0+ + +- Java 8 +- Scala 2.11 +- Python 3.6+ +- TensorFlow 2.0+ ## 快速开始 -将项目用IntelliJ打开后,找到`RecSysServer`,右键点选`Run`,然后在浏览器中输入`http://localhost:6010/`即可看到推荐系统的前端效果。 + +将项目用 IntelliJ 打开后,找到`RecSysServer`,右键点选`Run`,然后在浏览器中输入`http://localhost:6010/`即可看到推荐系统的前端效果。 ## 项目数据 -项目数据来源于开源电影数据集[MovieLens](https://grouplens.org/datasets/movielens/),项目自带数据集对MovieLens数据集进行了精简,仅保留1000部电影和相关评论、用户数据。全量数据集请到MovieLens官方网站进行下载,推荐使用MovieLens 20M Dataset。 -## SparrowRecSys技术架构 -SparrowRecSys技术架构遵循经典的工业级深度学习推荐系统架构,包括了离线数据处理、模型训练、近线的流处理、线上模型服务、前端推荐结果显示等多个模块。以下是SparrowRecSys的架构图: +项目数据来源于开源电影数据集[MovieLens](https://grouplens.org/datasets/movielens/),项目自带数据集对 MovieLens 数据集进行了精简,仅保留 1000 部电影和相关评论、用户数据。全量数据集请到 MovieLens 官方网站进行下载,推荐使用 MovieLens 20M Dataset。 + +## SparrowRecSys 技术架构 + +SparrowRecSys 技术架构遵循经典的工业级深度学习推荐系统架构,包括了离线数据处理、模型训练、近线的流处理、线上模型服务、前端推荐结果显示等多个模块。以下是 SparrowRecSys 的架构图: ![alt text](https://github.com/wzhe06/SparrowRecSys/raw/master/docs/sparrowrecsysarch.png) -## SparrowRecSys实现的深度学习模型 -* Word2vec (Item2vec) -* DeepWalk (Random Walk based Graph Embedding) -* Embedding MLP -* Wide&Deep -* Nerual CF -* Two Towers -* DeepFM -* DIN(Deep Interest Network) +## SparrowRecSys 实现的深度学习模型 + +- Word2vec (Item2vec) +- DeepWalk (Random Walk based Graph Embedding) +- Embedding MLP +- Wide&Deep +- Nerual CF +- Two Towers +- DeepFM +- DIN(Deep Interest Network) ## 相关论文 -* [[FFM] Field-aware Factorization Machines for CTR Prediction (Criteo 2016)](https://github.com/wzhe06/Ad-papers/blob/master/Classic%20CTR%20Prediction/%5BFFM%5D%20Field-aware%20Factorization%20Machines%20for%20CTR%20Prediction%20%28Criteo%202016%29.pdf)
-* [[GBDT+LR] Practical Lessons from Predicting Clicks on Ads at Facebook (Facebook 2014)](https://github.com/wzhe06/Ad-papers/blob/master/Classic%20CTR%20Prediction/%5BGBDT%2BLR%5D%20Practical%20Lessons%20from%20Predicting%20Clicks%20on%20Ads%20at%20Facebook%20%28Facebook%202014%29.pdf)
-* [[PS-PLM] Learning Piece-wise Linear Models from Large Scale Data for Ad Click Prediction (Alibaba 2017)](https://github.com/wzhe06/Ad-papers/blob/master/Classic%20CTR%20Prediction/%5BPS-PLM%5D%20Learning%20Piece-wise%20Linear%20Models%20from%20Large%20Scale%20Data%20for%20Ad%20Click%20Prediction%20%28Alibaba%202017%29.pdf)
-* [[FM] Fast Context-aware Recommendations with Factorization Machines (UKON 2011)](https://github.com/wzhe06/Ad-papers/blob/master/Classic%20CTR%20Prediction/%5BFM%5D%20Fast%20Context-aware%20Recommendations%20with%20Factorization%20Machines%20%28UKON%202011%29.pdf)
-* [[DCN] Deep & Cross Network for Ad Click Predictions (Stanford 2017)](https://github.com/wzhe06/Ad-papers/blob/master/Deep%20Learning%20CTR%20Prediction/%5BDCN%5D%20Deep%20%26%20Cross%20Network%20for%20Ad%20Click%20Predictions%20%28Stanford%202017%29.pdf)
-* [[Deep Crossing] Deep Crossing - Web-Scale Modeling without Manually Crafted Combinatorial Features (Microsoft 2016)](https://github.com/wzhe06/Ad-papers/blob/master/Deep%20Learning%20CTR%20Prediction/%5BDeep%20Crossing%5D%20Deep%20Crossing%20-%20Web-Scale%20Modeling%20without%20Manually%20Crafted%20Combinatorial%20Features%20%28Microsoft%202016%29.pdf)
-* [[PNN] Product-based Neural Networks for User Response Prediction (SJTU 2016)](https://github.com/wzhe06/Ad-papers/blob/master/Deep%20Learning%20CTR%20Prediction/%5BPNN%5D%20Product-based%20Neural%20Networks%20for%20User%20Response%20Prediction%20%28SJTU%202016%29.pdf)
-* [[DIN] Deep Interest Network for Click-Through Rate Prediction (Alibaba 2018)](https://github.com/wzhe06/Ad-papers/blob/master/Deep%20Learning%20CTR%20Prediction/%5BDIN%5D%20Deep%20Interest%20Network%20for%20Click-Through%20Rate%20Prediction%20%28Alibaba%202018%29.pdf)
-* [[ESMM] Entire Space Multi-Task Model - An Effective Approach for Estimating Post-Click Conversion Rate (Alibaba 2018)](https://github.com/wzhe06/Ad-papers/blob/master/Deep%20Learning%20CTR%20Prediction/%5BESMM%5D%20Entire%20Space%20Multi-Task%20Model%20-%20An%20Effective%20Approach%20for%20Estimating%20Post-Click%20Conversion%20Rate%20%28Alibaba%202018%29.pdf)
-* [[Wide & Deep] Wide & Deep Learning for Recommender Systems (Google 2016)](https://github.com/wzhe06/Ad-papers/blob/master/Deep%20Learning%20CTR%20Prediction/%5BWide%20%26%20Deep%5D%20Wide%20%26%20Deep%20Learning%20for%20Recommender%20Systems%20%28Google%202016%29.pdf)
-* [[xDeepFM] xDeepFM - Combining Explicit and Implicit Feature Interactions for Recommender Systems (USTC 2018)](https://github.com/wzhe06/Ad-papers/blob/master/Deep%20Learning%20CTR%20Prediction/%5BxDeepFM%5D%20xDeepFM%20-%20Combining%20Explicit%20and%20Implicit%20Feature%20Interactions%20for%20Recommender%20Systems%20%28USTC%202018%29.pdf)
-* [[Image CTR] Image Matters - Visually modeling user behaviors using Advanced Model Server (Alibaba 2018)](https://github.com/wzhe06/Ad-papers/blob/master/Deep%20Learning%20CTR%20Prediction/%5BImage%20CTR%5D%20Image%20Matters%20-%20Visually%20modeling%20user%20behaviors%20using%20Advanced%20Model%20Server%20%28Alibaba%202018%29.pdf)
-* [[AFM] Attentional Factorization Machines - Learning the Weight of Feature Interactions via Attention Networks (ZJU 2017)](https://github.com/wzhe06/Ad-papers/blob/master/Deep%20Learning%20CTR%20Prediction/%5BAFM%5D%20Attentional%20Factorization%20Machines%20-%20Learning%20the%20Weight%20of%20Feature%20Interactions%20via%20Attention%20Networks%20%28ZJU%202017%29.pdf)
-* [[DIEN] Deep Interest Evolution Network for Click-Through Rate Prediction (Alibaba 2019)](https://github.com/wzhe06/Ad-papers/blob/master/Deep%20Learning%20CTR%20Prediction/%5BDIEN%5D%20Deep%20Interest%20Evolution%20Network%20for%20Click-Through%20Rate%20Prediction%20%28Alibaba%202019%29.pdf)
-* [[DSSM] Learning Deep Structured Semantic Models for Web Search using Clickthrough Data (UIUC 2013)](https://github.com/wzhe06/Ad-papers/blob/master/Deep%20Learning%20CTR%20Prediction/%5BDSSM%5D%20Learning%20Deep%20Structured%20Semantic%20Models%20for%20Web%20Search%20using%20Clickthrough%20Data%20%28UIUC%202013%29.pdf)
-* [[FNN] Deep Learning over Multi-field Categorical Data (UCL 2016)](https://github.com/wzhe06/Ad-papers/blob/master/Deep%20Learning%20CTR%20Prediction/%5BFNN%5D%20Deep%20Learning%20over%20Multi-field%20Categorical%20Data%20%28UCL%202016%29.pdf)
-* [[DeepFM] A Factorization-Machine based Neural Network for CTR Prediction (HIT-Huawei 2017)](https://github.com/wzhe06/Ad-papers/blob/master/Deep%20Learning%20CTR%20Prediction/%5BDeepFM%5D%20A%20Factorization-Machine%20based%20Neural%20Network%20for%20CTR%20Prediction%20%28HIT-Huawei%202017%29.pdf)
-* [[NFM] Neural Factorization Machines for Sparse Predictive Analytics (NUS 2017)](https://github.com/wzhe06/Ad-papers/blob/master/Deep%20Learning%20CTR%20Prediction/%5BNFM%5D%20Neural%20Factorization%20Machines%20for%20Sparse%20Predictive%20Analytics%20%28NUS%202017%29.pdf)
+ +- [[FFM] Field-aware Factorization Machines for CTR Prediction (Criteo 2016)](https://github.com/wzhe06/Ad-papers/blob/master/Classic%20CTR%20Prediction/%5BFFM%5D%20Field-aware%20Factorization%20Machines%20for%20CTR%20Prediction%20%28Criteo%202016%29.pdf)
+- [[GBDT+LR] Practical Lessons from Predicting Clicks on Ads at Facebook (Facebook 2014)](https://github.com/wzhe06/Ad-papers/blob/master/Classic%20CTR%20Prediction/%5BGBDT%2BLR%5D%20Practical%20Lessons%20from%20Predicting%20Clicks%20on%20Ads%20at%20Facebook%20%28Facebook%202014%29.pdf)
+- [[PS-PLM] Learning Piece-wise Linear Models from Large Scale Data for Ad Click Prediction (Alibaba 2017)](https://github.com/wzhe06/Ad-papers/blob/master/Classic%20CTR%20Prediction/%5BPS-PLM%5D%20Learning%20Piece-wise%20Linear%20Models%20from%20Large%20Scale%20Data%20for%20Ad%20Click%20Prediction%20%28Alibaba%202017%29.pdf)
+- [[FM] Fast Context-aware Recommendations with Factorization Machines (UKON 2011)](https://github.com/wzhe06/Ad-papers/blob/master/Classic%20CTR%20Prediction/%5BFM%5D%20Fast%20Context-aware%20Recommendations%20with%20Factorization%20Machines%20%28UKON%202011%29.pdf)
+- [[DCN] Deep & Cross Network for Ad Click Predictions (Stanford 2017)](https://github.com/wzhe06/Ad-papers/blob/master/Deep%20Learning%20CTR%20Prediction/%5BDCN%5D%20Deep%20%26%20Cross%20Network%20for%20Ad%20Click%20Predictions%20%28Stanford%202017%29.pdf)
+- [[Deep Crossing] Deep Crossing - Web-Scale Modeling without Manually Crafted Combinatorial Features (Microsoft 2016)](https://github.com/wzhe06/Ad-papers/blob/master/Deep%20Learning%20CTR%20Prediction/%5BDeep%20Crossing%5D%20Deep%20Crossing%20-%20Web-Scale%20Modeling%20without%20Manually%20Crafted%20Combinatorial%20Features%20%28Microsoft%202016%29.pdf)
+- [[PNN] Product-based Neural Networks for User Response Prediction (SJTU 2016)](https://github.com/wzhe06/Ad-papers/blob/master/Deep%20Learning%20CTR%20Prediction/%5BPNN%5D%20Product-based%20Neural%20Networks%20for%20User%20Response%20Prediction%20%28SJTU%202016%29.pdf)
+- [[DIN] Deep Interest Network for Click-Through Rate Prediction (Alibaba 2018)](https://github.com/wzhe06/Ad-papers/blob/master/Deep%20Learning%20CTR%20Prediction/%5BDIN%5D%20Deep%20Interest%20Network%20for%20Click-Through%20Rate%20Prediction%20%28Alibaba%202018%29.pdf)
+- [[ESMM] Entire Space Multi-Task Model - An Effective Approach for Estimating Post-Click Conversion Rate (Alibaba 2018)](https://github.com/wzhe06/Ad-papers/blob/master/Deep%20Learning%20CTR%20Prediction/%5BESMM%5D%20Entire%20Space%20Multi-Task%20Model%20-%20An%20Effective%20Approach%20for%20Estimating%20Post-Click%20Conversion%20Rate%20%28Alibaba%202018%29.pdf)
+- [[Wide & Deep] Wide & Deep Learning for Recommender Systems (Google 2016)](https://github.com/wzhe06/Ad-papers/blob/master/Deep%20Learning%20CTR%20Prediction/%5BWide%20%26%20Deep%5D%20Wide%20%26%20Deep%20Learning%20for%20Recommender%20Systems%20%28Google%202016%29.pdf)
+- [[xDeepFM] xDeepFM - Combining Explicit and Implicit Feature Interactions for Recommender Systems (USTC 2018)](https://github.com/wzhe06/Ad-papers/blob/master/Deep%20Learning%20CTR%20Prediction/%5BxDeepFM%5D%20xDeepFM%20-%20Combining%20Explicit%20and%20Implicit%20Feature%20Interactions%20for%20Recommender%20Systems%20%28USTC%202018%29.pdf)
+- [[Image CTR] Image Matters - Visually modeling user behaviors using Advanced Model Server (Alibaba 2018)](https://github.com/wzhe06/Ad-papers/blob/master/Deep%20Learning%20CTR%20Prediction/%5BImage%20CTR%5D%20Image%20Matters%20-%20Visually%20modeling%20user%20behaviors%20using%20Advanced%20Model%20Server%20%28Alibaba%202018%29.pdf)
+- [[AFM] Attentional Factorization Machines - Learning the Weight of Feature Interactions via Attention Networks (ZJU 2017)](https://github.com/wzhe06/Ad-papers/blob/master/Deep%20Learning%20CTR%20Prediction/%5BAFM%5D%20Attentional%20Factorization%20Machines%20-%20Learning%20the%20Weight%20of%20Feature%20Interactions%20via%20Attention%20Networks%20%28ZJU%202017%29.pdf)
+- [[DIEN] Deep Interest Evolution Network for Click-Through Rate Prediction (Alibaba 2019)](https://github.com/wzhe06/Ad-papers/blob/master/Deep%20Learning%20CTR%20Prediction/%5BDIEN%5D%20Deep%20Interest%20Evolution%20Network%20for%20Click-Through%20Rate%20Prediction%20%28Alibaba%202019%29.pdf)
+- [[DSSM] Learning Deep Structured Semantic Models for Web Search using Clickthrough Data (UIUC 2013)](https://github.com/wzhe06/Ad-papers/blob/master/Deep%20Learning%20CTR%20Prediction/%5BDSSM%5D%20Learning%20Deep%20Structured%20Semantic%20Models%20for%20Web%20Search%20using%20Clickthrough%20Data%20%28UIUC%202013%29.pdf)
+- [[FNN] Deep Learning over Multi-field Categorical Data (UCL 2016)](https://github.com/wzhe06/Ad-papers/blob/master/Deep%20Learning%20CTR%20Prediction/%5BFNN%5D%20Deep%20Learning%20over%20Multi-field%20Categorical%20Data%20%28UCL%202016%29.pdf)
+- [[DeepFM] A Factorization-Machine based Neural Network for CTR Prediction (HIT-Huawei 2017)](https://github.com/wzhe06/Ad-papers/blob/master/Deep%20Learning%20CTR%20Prediction/%5BDeepFM%5D%20A%20Factorization-Machine%20based%20Neural%20Network%20for%20CTR%20Prediction%20%28HIT-Huawei%202017%29.pdf)
+- [[NFM] Neural Factorization Machines for Sparse Predictive Analytics (NUS 2017)](https://github.com/wzhe06/Ad-papers/blob/master/Deep%20Learning%20CTR%20Prediction/%5BNFM%5D%20Neural%20Factorization%20Machines%20for%20Sparse%20Predictive%20Analytics%20%28NUS%202017%29.pdf)
## 其他相关资源 -* [Papers on Computational Advertising](https://github.com/wzhe06/Ad-papers)
-* [Papers on Recommender System](https://github.com/wzhe06/Ad-papers)
-* [CTR Model Based on Spark](https://github.com/wzhe06/SparkCTR)
+ +- [Papers on Computational Advertising](https://github.com/wzhe06/Ad-papers)
+- [Papers on Recommender System](https://github.com/wzhe06/Ad-papers)
+- [CTR Model Based on Spark](https://github.com/wzhe06/SparkCTR)
+ +## Learning Notes + +问题 1:因为没有项目经验,想知道把 Sparrow Recys 项目 git clone 到本地之后,怎么运行这个 Maven project? + +这里我再重新描述一下整个安装和执行的过程,详细来说一共有 6 步: + +1. 安装 IDEA。到这个地址下载 IDE,安装 IDEA 后,打开 IDEA; +2. 在 IDEA 中打开项目。选择 File->Open-> 选择 git clone 到的项目根目录,就可以把项目导入到 IDEA; +3. 配置 maven project。我们在 IDEA 的项目结构树的 pom.xml 上点击右键,设置为 maven project(最新的 IDE 版本也可能不用)就可以了; +4. 配置 SDK。Sparrow Recsys 使用了 Java8,Scala2.11 的编译环境,你可以在 File->Project Structure->Project 中配置 Java SDK,并在 Global Libraries 中配置 Scala SDK; +5. 运行推荐服务器。我们找到类文件 class RecSysServer(com.wzhe.sparrowrecsys.online.RecSysServer),右键点击 -> run; +6. 打开 Sparrow Recsys 首页,在浏览器中输入 http://localhost:6010/ ,当看到 Sparrow RecSys 首页的时候,就说明你整个配置和安装成功了。 + +问题 2:在项目中没有找到“为你推荐页”,也没有看到一些项目介绍中提到的推荐算法,是我安装过程中出错了吗? + +这里我再强调说明一下,你没有安装错,Sparrow Recsys 这个项目是随着课程的进展逐渐完善起来的。所以如果在你学习的时候课程还未完结,Sparrow Recsys 中可能会缺少课程还未进行到的模块。比如为你推荐这个功能是在课程的“推荐模型篇”中加入的,所以具体的内容我也会在之后的课程中再加入。但课程已经讲解过或提到过的部分,一定会在 Sparrow Recsys 中有对应的实践代码。课程相关的知识误区除了安装问题之外,我还发现同学们在学习的过程中对某些知识点有疑惑,那下面我就帮同学们来解答一些典型的疑惑。 + +问题 3:网上资料的大部分观点认为协同过滤这样的传统方法应该是在召回层,但我们课程中把协同过滤放在了排序(精排),这是为什么呢? + +这是个好问题。我们知道,五六年前的传统推荐系统不少还在使用协同过滤作为主排序模型,但这几年它就被慢慢淘汰了,排序层变成了以深度学习推荐模型为主的复杂模型。不过,因为协同过滤类算法比较简单,线上计算过程也很高效,比如矩阵分解之后可以进行 embedding 快速召回,所以放在召回层也完全适用。在这门课程中,我们总结的推荐系统架构是一个比较经典的架构,但你也没必要认为它就是无法改变的真理。在实际应用场景之中,我希望你能根据业务特点灵活运用。 + +问题 4:像多模态或者是通过其它预训练方法得到的向量,直接加到推荐排序模型作为特征的话,感觉没什么效果,我理解是预训练学习的目标和排序学习目标并不一致。这个问题老师是怎么看的? + +首先,我觉得这是一个很好的业务实践的问题。多模态指的是在推荐系统中引入视频、图片、语音等多种不同形式的数据和特征,希望以此来提升推荐效果。在实际的业务应用里,确实存在多模态特征效果不强的问题。结合我的实践经验,我会觉得问题根源是因为,目前多模态的技术本质上还处于比较初期的阶段。比如说,我们可以用一些 CV 的技术去处理视频图像,识别出其中的汽车、树木、人物等等。但你要说这些物品对最终的推荐效果到底有没有影响,比如说视频中出现汽车到底对用户的点击率影响有多大,我觉得还是比较微弱的,它可能远不及知名演员这个要素的影响大。当然,我一直强调所有的效果都要跟业务场景紧密结合起来,所以多模态到底有没有作用,根本无法一概而论,还是跟你的使用方法和对业务的理解强关联。比如在短视频推荐中,如果你能精确识别出视频中的明星是哪位,再用它作为推荐特征,我想肯定对最终的推荐效果有正向影响。 + +问题 5:对训练数据中的某项特征进行平方或者开方,是为了改变训练数据的分布。训练数据的分布被改变后,训练出来的模型岂不是不能正确拟合训练数据了? + +这个也是一个常见的误区,如果你有这样的问题,说明你还没有弄明白特征的分布和训练数据的分布之间的关系。对训练数据中的某个特征进行开方或者平方操作,本质上是改变了特征的分布,并不是训练数据的分布。特征的分布和训练数据的分布没有本质的联系,只要你不改变训练数据 label 的分布,最终预测出的结果都应该是符合数据本身分布的。因为你要预测的是 label,并不是特征本身。而且在最终的预测过程中,这些开方、平方的特征处理操作是在模型推断过程中复现的,本质上可以看作是模型的一部分,所以不存在改变数据分布的问题。 + +问题 6:“为了使 Graph Embedding 的结果能够表达网络的‘结构性’,在随机游走的过程中,我们需要让游走的过程更倾向于 BFS(Breadth First Search,宽度优先搜索)”。这里应该是 DFS 吧? + +并且同质性是使用 BFS。这是第 7 讲中的一个知识点,这个疑问非常地常见,因为 BFS、DFS 与结构性、同质性的关系本身确实有一点反直觉。这也是我们在学习 Node2vec 模型的时候经常会有的问题,也推荐其他有疑问的同学关注一下。在这里,我需要再强调一下,课程中的描述是完全正确的,也就是为了使 Graph Embedding 的结果能够表达网络的“结构性”,在随机游走的过程中,我们需要让游走的过程更倾向于 BFS;为了表达“同质性”,需要倾向于 DFS。我们一定要厘清它们之间的正确关系。这里,我直接把 Node2vec 原论文中的论述贴在了下面,你直接参考原文,会理解得更深刻一些。 + +> We observe that BFS and DFS strategies play a key role in producing representations that reflect either of the above equivalences. In particular, the neighborhoods sampled by BFS lead to embeddings that correspond closely to structural equivalence. The opposite is true for DFS which can explore larger parts of the network as it can move further away from the source node u (with sample size k being fixed). In DFS, the sampled nodes more accurately reflect a macro-view of the neighborhood which is essential in inferring communities based on homophily. + +> 参考译文:我们观察到,BFS 和 DFS 策略在产生向量表达时发挥着关 +> 关于推荐系统的深入思考解决了一些常见的知识性的疑问,我们再来看看一些关于课程具体内容的延伸思考。我觉得这些问题都提得都很好,说明同学们学习的时候都有在认真思考,同时,我也鼓励大家都带着问题来学习,把自己的思考分享出来,这也能帮助到更多的同学。 + +问题 7:老师,我注意到 Flink 最近更新比较频繁,号称可以做到流批一体分析,甚至 ETL 领域好像也可以用起来。那我们在设计系统架构的时候直接用 Flink 取代 Spark,让 ETL 和实时部分统一到一个架构上是否可行呢? + +其实这也是大数据工程师们一直追求的批流一体的 Kappa 架构。在 Kappa 架构的实践中,工程师们遇到的困难也不少。一是一些历史遗留问题,比如当前很多公司的数据体系大部分是建立在 Spark 基础上的,直接用 Flink 完全替代肯定有风险,所以很多公司还沿用着批流混合的 Lambda 架构。另外是 Spark 和 Flink 发展的问题,Flink 在进化的同时 Spark 也在发展,比如 Spark 最近发展的 Structured Streaming 就是为了跟 Flink 竞争,而且 Spark 本身的社区成熟程度和这么多年的积累还是超过目前的 Flink 的,所以也难说 Flink 会完全替代 Spark。但毫无疑问,批流一体是未来的方向,业内的工程师们也都在往这个方向努力。但我个人觉得 Spark 和 Flink 会长期共存、共同发展。 + +问题 8:老师,请问关于大数据数据出口的那部分内容,请问实时的用户推荐请求也是会先经过大数据处理,生成可供线上推理的数据吗? + +就是针对文中大数据出口的第二点。这是第一节课的课后留言,你可以先回忆一下第一节的内容,然后再听我讲。在推荐服务器做线上推断时,实时用户请求里面包含的特征一般是直接在服务器内部提取出来的,所以肯定不需要再在数据流中走一遍。但是线上请求数据最终还是会落盘,生成日志数据。这个过程中,一些流处理和批处理的平台会对这些数据做进一步处理,生成今后可供我们使用的特征以及训练用样本。 + +问题 9:王老师,在线预测的时候,模型所需的特征是直接从数据库读取,还是在线实时组装? + +我在想如果只是用户或者物品自身的特征的话,可以从数据库读取,但如果是用户和物品的交叉特征的话,是不是必须实时组装?非常好的点。一般来说如果组合特征可以在线处理,最好能够在线处理,因为组合特征有组合爆炸问题,为了节约宝贵的存储资源,我们一般不直接存储。但对于一些不得不存储的组合特征,比如用户 x 物品的曝光、点击记录,如果线上模型需要的话,还是要存储到数据库中的,因为这些特征你没办法在线组合。 + +问题 10:为什么深度学习的结构特点不利于稀疏特征向量的处理呢? + +首先,我想说这个问题问得太好了,如果不解决这个问题,那整个 Embedding 技术的意义就没有了,所以我也希望大家都能好好思考一下这个问题。一方面,如果我们深入到神经网络的梯度下降学习过程就会发现,特征过于稀疏会导致整个网络的收敛非常慢,因为每一个样本的学习只有极少数的权重会得到更新,这在样本数量有限的情况下会导致模型不收敛。另一个方面,One-hot 类稀疏特征的维度往往非常地大,可能会达到千万甚至亿的级别,如果直接连接进入深度学习网络,那整个模型的参数数量会非常庞大,这对于一般公司的算力开销来说都是吃不消的。因此,我们往往会先通过 Embedding 把原始稀疏特征稠密化,然后再输入复杂的深度学习网络进行训练,这相当于把原始特征向量跟上层复杂深度学习网络做一个隔离。好了,这节课就到这里。 + +非常感谢前 8 节对内容有深度思考和提问的同学,你们的每个问题都很精彩。在接下来的课程中,欢迎你继续畅所欲言,把留言区这个工具好好利用起来,我们一起进步! From f0e2a35437007b1549c109101a5d64fcf7702eda Mon Sep 17 00:00:00 2001 From: "Chris (Caihao) Cui" Date: Sat, 1 May 2021 23:28:12 +1000 Subject: [PATCH 2/5] Enable Exec Python from Project-dir Add the "current_working_directory" in python to remove abs file path. Thus, enable: python TFRecModel/src/com/sparrowrecsys/offline/tensorflow/xxx.py --- .../sparrowrecsys/offline/tensorflow/DIEN.py | 282 ++++++++++-------- .../sparrowrecsys/offline/tensorflow/DIN.py | 58 ++-- .../offline/tensorflow/DeepFM.py | 65 ++-- .../offline/tensorflow/DeepFM_v2.py | 83 ++++-- .../offline/tensorflow/EmbeddingMLP.py | 24 +- .../offline/tensorflow/NeuralCF.py | 47 ++- .../offline/tensorflow/WideNDeep.py | 35 ++- 7 files changed, 374 insertions(+), 220 deletions(-) diff --git a/TFRecModel/src/com/sparrowrecsys/offline/tensorflow/DIEN.py b/TFRecModel/src/com/sparrowrecsys/offline/tensorflow/DIEN.py index 2f601f0d..c7842e55 100644 --- a/TFRecModel/src/com/sparrowrecsys/offline/tensorflow/DIEN.py +++ b/TFRecModel/src/com/sparrowrecsys/offline/tensorflow/DIEN.py @@ -16,38 +16,49 @@ import random +import pathlib +current_working_directory = pathlib.Path().absolute() +train_abs_path = current_working_directory / \ + "src/main/resources/webroot/sampledata/trainingSamples.csv" +test_abs_path = current_working_directory / \ + "src/main/resources/webroot/sampledata/testSamples.csv" +print(train_abs_path) +print(test_abs_path) + # Training samples path, change to your local path training_samples_file_path = tf.keras.utils.get_file("trainingSamples.csv", - "file:///Users/zhewang/Workspace/SparrowRecSys/src/main" - "/resources/webroot/sampledata/trainingSamples.csv") + "file://" + str(train_abs_path)) # Test samples path, change to your local path test_samples_file_path = tf.keras.utils.get_file("testSamples.csv", - "file:///Users/zhewang/Workspace/SparrowRecSys/src/main" - "/resources/webroot/sampledata/testSamples.csv") - + "file://" + str(test_abs_path)) -def get_dataset_with_negtive_movie(path,batch_size,seed_num): +def get_dataset_with_negtive_movie(path, batch_size, seed_num): tmp_df = pd.read_csv(path) - tmp_df.fillna(0,inplace=True) + tmp_df.fillna(0, inplace=True) random.seed(seed_num) - negtive_movie_df=tmp_df.loc[:,'userRatedMovie2':'userRatedMovie5'].applymap( lambda x: random.sample( set(range(0, 1001))-set([int(x)]), 1)[0] ) - negtive_movie_df.columns = ['negtive_userRatedMovie2','negtive_userRatedMovie3','negtive_userRatedMovie4','negtive_userRatedMovie5'] - tmp_df=pd.concat([tmp_df,negtive_movie_df],axis=1) + negtive_movie_df = tmp_df.loc[:, 'userRatedMovie2':'userRatedMovie5'].applymap( + lambda x: random.sample(set(range(0, 1001))-set([int(x)]), 1)[0]) + negtive_movie_df.columns = ['negtive_userRatedMovie2', 'negtive_userRatedMovie3', + 'negtive_userRatedMovie4', 'negtive_userRatedMovie5'] + tmp_df = pd.concat([tmp_df, negtive_movie_df], axis=1) for i in tmp_df.select_dtypes('O').columns: tmp_df[i] = tmp_df[i].astype('str') - - if tf.__version__<'2.3.0': - tmp_df = tmp_df.sample( n= batch_size*( len(tmp_df)//batch_size ) ,random_state=seed_num ) - - - dataset = tf.data.Dataset.from_tensor_slices( ( dict(tmp_df)) ) + + if tf.__version__ < '2.3.0': + tmp_df = tmp_df.sample( + n=batch_size*(len(tmp_df)//batch_size), random_state=seed_num) + + dataset = tf.data.Dataset.from_tensor_slices((dict(tmp_df))) dataset = dataset.batch(batch_size) return dataset -train_dataset = get_dataset_with_negtive_movie(training_samples_file_path,12,seed_num=2020) -test_dataset = get_dataset_with_negtive_movie(test_samples_file_path,12,seed_num=2021) + +train_dataset = get_dataset_with_negtive_movie( + training_samples_file_path, 12, seed_num=2020) +test_dataset = get_dataset_with_negtive_movie( + test_samples_file_path, 12, seed_num=2021) # Config RECENT_MOVIES = 5 # userRatedMovie{1-5} @@ -79,18 +90,19 @@ def get_dataset_with_negtive_movie(path,batch_size,seed_num): 'movieGenre1': tf.keras.layers.Input(name='movieGenre1', shape=(), dtype='string'), 'movieGenre2': tf.keras.layers.Input(name='movieGenre2', shape=(), dtype='string'), 'movieGenre3': tf.keras.layers.Input(name='movieGenre3', shape=(), dtype='string'), - + 'negtive_userRatedMovie2': tf.keras.layers.Input(name='negtive_userRatedMovie2', shape=(), dtype='int32'), 'negtive_userRatedMovie3': tf.keras.layers.Input(name='negtive_userRatedMovie3', shape=(), dtype='int32'), 'negtive_userRatedMovie4': tf.keras.layers.Input(name='negtive_userRatedMovie4', shape=(), dtype='int32'), - 'negtive_userRatedMovie5': tf.keras.layers.Input(name='negtive_userRatedMovie5', shape=(), dtype='int32'), - - 'label':tf.keras.layers.Input(name='label', shape=(), dtype='int32') + 'negtive_userRatedMovie5': tf.keras.layers.Input(name='negtive_userRatedMovie5', shape=(), dtype='int32'), + + 'label': tf.keras.layers.Input(name='label', shape=(), dtype='int32') } # user id embedding feature -user_col = tf.feature_column.categorical_column_with_identity(key='userId', num_buckets=30001) +user_col = tf.feature_column.categorical_column_with_identity( + key='userId', num_buckets=30001) user_emb_col = tf.feature_column.embedding_column(user_col, EMBEDDING_SIZE) # genre features vocabulary @@ -100,15 +112,17 @@ def get_dataset_with_negtive_movie(path,batch_size,seed_num): # user genre embedding feature user_genre_col = tf.feature_column.categorical_column_with_vocabulary_list(key="userGenre1", vocabulary_list=genre_vocab) -user_genre_emb_col = tf.feature_column.embedding_column(user_genre_col, EMBEDDING_SIZE) +user_genre_emb_col = tf.feature_column.embedding_column( + user_genre_col, EMBEDDING_SIZE) # item genre embedding feature item_genre_col = tf.feature_column.categorical_column_with_vocabulary_list(key="movieGenre1", vocabulary_list=genre_vocab) -item_genre_emb_col = tf.feature_column.embedding_column(item_genre_col, EMBEDDING_SIZE) +item_genre_emb_col = tf.feature_column.embedding_column( + item_genre_col, EMBEDDING_SIZE) - -candidate_movie_col = [ tf.feature_column.numeric_column(key='movieId', default_value=0), ] +candidate_movie_col = [tf.feature_column.numeric_column( + key='movieId', default_value=0), ] # user behaviors recent_rate_col = [ @@ -121,14 +135,17 @@ def get_dataset_with_negtive_movie(path,batch_size,seed_num): negtive_movie_col = [ - tf.feature_column.numeric_column(key='negtive_userRatedMovie2', default_value=0), - tf.feature_column.numeric_column(key='negtive_userRatedMovie3', default_value=0), - tf.feature_column.numeric_column(key='negtive_userRatedMovie4', default_value=0), - tf.feature_column.numeric_column(key='negtive_userRatedMovie5', default_value=0), + tf.feature_column.numeric_column( + key='negtive_userRatedMovie2', default_value=0), + tf.feature_column.numeric_column( + key='negtive_userRatedMovie3', default_value=0), + tf.feature_column.numeric_column( + key='negtive_userRatedMovie4', default_value=0), + tf.feature_column.numeric_column( + key='negtive_userRatedMovie5', default_value=0), ] - # user profile user_profile = [ user_emb_col, @@ -147,109 +164,127 @@ def get_dataset_with_negtive_movie(path,batch_size,seed_num): tf.feature_column.numeric_column('movieRatingStddev'), ] -label =[ tf.feature_column.numeric_column(key='label', default_value=0), ] +label = [tf.feature_column.numeric_column(key='label', default_value=0), ] candidate_layer = tf.keras.layers.DenseFeatures(candidate_movie_col)(inputs) user_behaviors_layer = tf.keras.layers.DenseFeatures(recent_rate_col)(inputs) negtive_movie_layer = tf.keras.layers.DenseFeatures(negtive_movie_col)(inputs) user_profile_layer = tf.keras.layers.DenseFeatures(user_profile)(inputs) -context_features_layer = tf.keras.layers.DenseFeatures(context_features)(inputs) +context_features_layer = tf.keras.layers.DenseFeatures( + context_features)(inputs) y_true = tf.keras.layers.DenseFeatures(label)(inputs) # Activation Unit -movie_emb_layer = tf.keras.layers.Embedding(input_dim=1001,output_dim=EMBEDDING_SIZE,mask_zero=True)# mask zero +movie_emb_layer = tf.keras.layers.Embedding( + input_dim=1001, output_dim=EMBEDDING_SIZE, mask_zero=True) # mask zero -user_behaviors_emb_layer = movie_emb_layer(user_behaviors_layer) -candidate_emb_layer = movie_emb_layer(candidate_layer) -negtive_movie_emb_layer = movie_emb_layer(negtive_movie_layer) +user_behaviors_emb_layer = movie_emb_layer(user_behaviors_layer) +candidate_emb_layer = movie_emb_layer(candidate_layer) +negtive_movie_emb_layer = movie_emb_layer(negtive_movie_layer) -candidate_emb_layer = tf.squeeze(candidate_emb_layer,axis=1) +candidate_emb_layer = tf.squeeze(candidate_emb_layer, axis=1) + +user_behaviors_hidden_state = tf.keras.layers.GRU( + EMBEDDING_SIZE, return_sequences=True)(user_behaviors_emb_layer) -user_behaviors_hidden_state=tf.keras.layers.GRU(EMBEDDING_SIZE, return_sequences=True)(user_behaviors_emb_layer) class attention(tf.keras.layers.Layer): def __init__(self, embedding_size=EMBEDDING_SIZE, time_length=5, ): super().__init__() - self.time_length = time_length + self.time_length = time_length self.embedding_size = embedding_size self.RepeatVector_time = tf.keras.layers.RepeatVector(self.time_length) - self.RepeatVector_emb = tf.keras.layers.RepeatVector(self.embedding_size) - self.Multiply = tf.keras.layers.Multiply() - self.Dense32 = tf.keras.layers.Dense(32,activation='sigmoid') - self.Dense1 = tf.keras.layers.Dense(1,activation='sigmoid') - self.Flatten = tf.keras.layers.Flatten() - self.Permute = tf.keras.layers.Permute((2, 1)) - + self.RepeatVector_emb = tf.keras.layers.RepeatVector( + self.embedding_size) + self.Multiply = tf.keras.layers.Multiply() + self.Dense32 = tf.keras.layers.Dense(32, activation='sigmoid') + self.Dense1 = tf.keras.layers.Dense(1, activation='sigmoid') + self.Flatten = tf.keras.layers.Flatten() + self.Permute = tf.keras.layers.Permute((2, 1)) + def build(self, input_shape): pass - + def call(self, inputs): - candidate_inputs,gru_hidden_state=inputs + candidate_inputs, gru_hidden_state = inputs repeated_candidate_layer = self.RepeatVector_time(candidate_inputs) - activation_product_layer = self.Multiply([gru_hidden_state,repeated_candidate_layer]) + activation_product_layer = self.Multiply( + [gru_hidden_state, repeated_candidate_layer]) activation_unit = self.Dense32(activation_product_layer) - activation_unit = self.Dense1(activation_unit) - Repeat_attention_s=tf.squeeze(activation_unit,axis=2) - Repeat_attention_s=self.RepeatVector_emb(Repeat_attention_s) - Repeat_attention_s=self.Permute(Repeat_attention_s) + activation_unit = self.Dense1(activation_unit) + Repeat_attention_s = tf.squeeze(activation_unit, axis=2) + Repeat_attention_s = self.RepeatVector_emb(Repeat_attention_s) + Repeat_attention_s = self.Permute(Repeat_attention_s) return Repeat_attention_s -attention_score=attention()( [candidate_emb_layer, user_behaviors_hidden_state]) +attention_score = attention()( + [candidate_emb_layer, user_behaviors_hidden_state]) class GRU_gate_parameter(tf.keras.layers.Layer): - def __init__(self,embedding_size=EMBEDDING_SIZE): + def __init__(self, embedding_size=EMBEDDING_SIZE): super().__init__() - self.embedding_size = embedding_size - self.Multiply = tf.keras.layers.Multiply() - self.Dense_sigmoid = tf.keras.layers.Dense( self.embedding_size,activation='sigmoid' ) - self.Dense_tanh =tf.keras.layers.Dense( self.embedding_size,activation='tanh' ) - + self.embedding_size = embedding_size + self.Multiply = tf.keras.layers.Multiply() + self.Dense_sigmoid = tf.keras.layers.Dense( + self.embedding_size, activation='sigmoid') + self.Dense_tanh = tf.keras.layers.Dense( + self.embedding_size, activation='tanh') + def build(self, input_shape): - self.input_w = tf.keras.layers.Dense(self.embedding_size,activation=None,use_bias=True) - self.hidden_w = tf.keras.layers.Dense(self.embedding_size,activation=None,use_bias=False) + self.input_w = tf.keras.layers.Dense( + self.embedding_size, activation=None, use_bias=True) + self.hidden_w = tf.keras.layers.Dense( + self.embedding_size, activation=None, use_bias=False) + + def call(self, inputs, Z_t_inputs=None): + gru_inputs, hidden_inputs = inputs + if Z_t_inputs == None: + return self.Dense_sigmoid(self.input_w(gru_inputs) + self.hidden_w(hidden_inputs)) + else: + return self.Dense_tanh(self.input_w(gru_inputs) + self.hidden_w(self.Multiply([hidden_inputs, Z_t_inputs]))) - def call(self, inputs,Z_t_inputs=None ): - gru_inputs,hidden_inputs = inputs - if Z_t_inputs==None: - return self.Dense_sigmoid( self.input_w(gru_inputs) + self.hidden_w(hidden_inputs) ) - else: - return self.Dense_tanh( self.input_w(gru_inputs) + self.hidden_w(self.Multiply([hidden_inputs,Z_t_inputs]) )) - class AUGRU(tf.keras.layers.Layer): - def __init__(self,embedding_size=EMBEDDING_SIZE, time_length=5): + def __init__(self, embedding_size=EMBEDDING_SIZE, time_length=5): super().__init__() self.time_length = time_length - self.embedding_size = embedding_size - self.Multiply = tf.keras.layers.Multiply() - self.Add=tf.keras.layers.Add() - + self.embedding_size = embedding_size + self.Multiply = tf.keras.layers.Multiply() + self.Add = tf.keras.layers.Add() + def build(self, input_shape): self.R_t = GRU_gate_parameter() - self.Z_t = GRU_gate_parameter() - self.H_t_next = GRU_gate_parameter() + self.Z_t = GRU_gate_parameter() + self.H_t_next = GRU_gate_parameter() - def call(self, inputs ): - gru_hidden_state_inputs,attention_s=inputs + def call(self, inputs): + gru_hidden_state_inputs, attention_s = inputs initializer = tf.keras.initializers.GlorotUniform() - AUGRU_hidden_state = tf.reshape(initializer(shape=(1,self.embedding_size )),shape=(-1,self.embedding_size )) - for t in range(self.time_length): - r_t= self.R_t( [gru_hidden_state_inputs[:,t,:], AUGRU_hidden_state] ) - z_t= self.Z_t( [gru_hidden_state_inputs[:,t,:], AUGRU_hidden_state] ) - h_t_next= self.H_t_next( [gru_hidden_state_inputs[:,t,:], AUGRU_hidden_state] , z_t ) - Rt_attention =self.Multiply([attention_s[:,t,:] , r_t]) - - AUGRU_hidden_state = self.Add( [self.Multiply([(1-Rt_attention),AUGRU_hidden_state ] ), self.Multiply([Rt_attention ,h_t_next ] )]) + AUGRU_hidden_state = tf.reshape(initializer( + shape=(1, self.embedding_size)), shape=(-1, self.embedding_size)) + for t in range(self.time_length): + r_t = self.R_t( + [gru_hidden_state_inputs[:, t, :], AUGRU_hidden_state]) + z_t = self.Z_t( + [gru_hidden_state_inputs[:, t, :], AUGRU_hidden_state]) + h_t_next = self.H_t_next( + [gru_hidden_state_inputs[:, t, :], AUGRU_hidden_state], z_t) + Rt_attention = self.Multiply([attention_s[:, t, :], r_t]) + + AUGRU_hidden_state = self.Add([self.Multiply( + [(1-Rt_attention), AUGRU_hidden_state]), self.Multiply([Rt_attention, h_t_next])]) return AUGRU_hidden_state -augru_emb=AUGRU()( [ user_behaviors_hidden_state ,attention_score ] ) -concat_layer = tf.keras.layers.concatenate([ augru_emb, candidate_emb_layer,user_profile_layer,context_features_layer]) +augru_emb = AUGRU()([user_behaviors_hidden_state, attention_score]) + +concat_layer = tf.keras.layers.concatenate( + [augru_emb, candidate_emb_layer, user_profile_layer, context_features_layer]) output_layer = tf.keras.layers.Dense(128)(concat_layer) output_layer = tf.keras.layers.PReLU()(output_layer) @@ -259,41 +294,53 @@ def call(self, inputs ): class auxiliary_loss_layer(tf.keras.layers.Layer): - def __init__(self,time_length=5 ): + def __init__(self, time_length=5): super().__init__() - self.time_len = time_length-1 - self.Dense_sigmoid_positive32 = tf.keras.layers.Dense(32,activation='sigmoid') - self.Dense_sigmoid_positive1 = tf.keras.layers.Dense(1,activation='sigmoid') - self.Dense_sigmoid_negitive32 = tf.keras.layers.Dense(32,activation='sigmoid') - self.Dense_sigmoid_negitive1 = tf.keras.layers.Dense(1,activation='sigmoid') - self.Dot = tf.keras.layers.Dot(axes=(1, 1)) - self.auc =tf.keras.metrics.AUC() - + self.time_len = time_length-1 + self.Dense_sigmoid_positive32 = tf.keras.layers.Dense( + 32, activation='sigmoid') + self.Dense_sigmoid_positive1 = tf.keras.layers.Dense( + 1, activation='sigmoid') + self.Dense_sigmoid_negitive32 = tf.keras.layers.Dense( + 32, activation='sigmoid') + self.Dense_sigmoid_negitive1 = tf.keras.layers.Dense( + 1, activation='sigmoid') + self.Dot = tf.keras.layers.Dot(axes=(1, 1)) + self.auc = tf.keras.metrics.AUC() + def build(self, input_shape): pass - - def call(self, inputs,alpha=0.5): - negtive_movie_t1,postive_movie_t0,movie_hidden_state,y_true,y_pred=inputs - #auxiliary_loss_values = [] - positive_concat_layer=tf.keras.layers.concatenate([ movie_hidden_state[:,0:4,:], postive_movie_t0[:,1:5,:] ]) - positive_concat_layer=self.Dense_sigmoid_positive32( positive_concat_layer ) + + def call(self, inputs, alpha=0.5): + negtive_movie_t1, postive_movie_t0, movie_hidden_state, y_true, y_pred = inputs + #auxiliary_loss_values = [] + positive_concat_layer = tf.keras.layers.concatenate( + [movie_hidden_state[:, 0:4, :], postive_movie_t0[:, 1:5, :]]) + positive_concat_layer = self.Dense_sigmoid_positive32( + positive_concat_layer) positive_loss = self.Dense_sigmoid_positive1(positive_concat_layer) - - negtive_concat_layer=tf.keras.layers.concatenate([ movie_hidden_state[:,0:4,:], negtive_movie_t1[:,:,:] ]) - negtive_concat_layer=self.Dense_sigmoid_negitive32( negtive_concat_layer ) - negtive_loss = self.Dense_sigmoid_negitive1(negtive_concat_layer) + + negtive_concat_layer = tf.keras.layers.concatenate( + [movie_hidden_state[:, 0:4, :], negtive_movie_t1[:, :, :]]) + negtive_concat_layer = self.Dense_sigmoid_negitive32( + negtive_concat_layer) + negtive_loss = self.Dense_sigmoid_negitive1(negtive_concat_layer) auxiliary_loss_values = positive_loss + negtive_loss - - final_loss = tf.keras.losses.binary_crossentropy( y_true, y_pred )-alpha* tf.reduce_mean( tf.reduce_sum( auxiliary_loss_values,axis=1 )) + + final_loss = tf.keras.losses.binary_crossentropy( + y_true, y_pred)-alpha * tf.reduce_mean(tf.reduce_sum(auxiliary_loss_values, axis=1)) self.add_loss(final_loss, inputs=True) - self.auc.update_state(y_true, y_pred ) - self.add_metric(self.auc.result(), aggregation="mean", name="auc_value") - - return final_loss + self.auc.update_state(y_true, y_pred) + self.add_metric(self.auc.result(), + aggregation="mean", name="auc_value") -auxiliary_loss_value=auxiliary_loss_layer()( [ negtive_movie_emb_layer,user_behaviors_emb_layer,user_behaviors_hidden_state,y_true,y_pred] ) + return final_loss -model = tf.keras.Model(inputs=inputs, outputs=[y_pred,auxiliary_loss_value]) + +auxiliary_loss_value = auxiliary_loss_layer()( + [negtive_movie_emb_layer, user_behaviors_emb_layer, user_behaviors_hidden_state, y_true, y_pred]) + +model = tf.keras.Model(inputs=inputs, outputs=[y_pred, auxiliary_loss_value]) model.compile(optimizer="adam") @@ -305,7 +352,6 @@ def call(self, inputs,alpha=0.5): print('\n\nTest Loss {}, Test ROC AUC {},'.format(test_loss, test_roc_auc)) - model.summary() # print some predict results diff --git a/TFRecModel/src/com/sparrowrecsys/offline/tensorflow/DIN.py b/TFRecModel/src/com/sparrowrecsys/offline/tensorflow/DIN.py index 79668add..63f59c78 100644 --- a/TFRecModel/src/com/sparrowrecsys/offline/tensorflow/DIN.py +++ b/TFRecModel/src/com/sparrowrecsys/offline/tensorflow/DIN.py @@ -1,16 +1,24 @@ import tensorflow as tf +import pathlib +current_working_directory = pathlib.Path().absolute() +train_abs_path = current_working_directory / \ + "src/main/resources/webroot/sampledata/trainingSamples.csv" +test_abs_path = current_working_directory / \ + "src/main/resources/webroot/sampledata/testSamples.csv" +print(train_abs_path) +print(test_abs_path) + # Training samples path, change to your local path training_samples_file_path = tf.keras.utils.get_file("trainingSamples.csv", - "file:///Users/zhewang/Workspace/SparrowRecSys/src/main" - "/resources/webroot/sampledata/trainingSamples.csv") + "file://" + str(train_abs_path)) # Test samples path, change to your local path test_samples_file_path = tf.keras.utils.get_file("testSamples.csv", - "file:///Users/zhewang/Workspace/SparrowRecSys/src/main" - "/resources/webroot/sampledata/testSamples.csv") - + "file://" + str(test_abs_path)) # load sample as tf dataset + + def get_dataset(file_path): dataset = tf.data.experimental.make_csv_dataset( file_path, @@ -63,7 +71,8 @@ def get_dataset(file_path): #movie_emb_col = tf.feature_column.embedding_column(movie_col, EMBEDDING_SIZE) # user id embedding feature -user_col = tf.feature_column.categorical_column_with_identity(key='userId', num_buckets=30001) +user_col = tf.feature_column.categorical_column_with_identity( + key='userId', num_buckets=30001) user_emb_col = tf.feature_column.embedding_column(user_col, EMBEDDING_SIZE) # genre features vocabulary @@ -73,11 +82,13 @@ def get_dataset(file_path): # user genre embedding feature user_genre_col = tf.feature_column.categorical_column_with_vocabulary_list(key="userGenre1", vocabulary_list=genre_vocab) -user_genre_emb_col = tf.feature_column.embedding_column(user_genre_col, EMBEDDING_SIZE) +user_genre_emb_col = tf.feature_column.embedding_column( + user_genre_col, EMBEDDING_SIZE) # item genre embedding feature item_genre_col = tf.feature_column.categorical_column_with_vocabulary_list(key="movieGenre1", vocabulary_list=genre_vocab) -item_genre_emb_col = tf.feature_column.embedding_column(item_genre_col, EMBEDDING_SIZE) +item_genre_emb_col = tf.feature_column.embedding_column( + item_genre_col, EMBEDDING_SIZE) ''' @@ -92,7 +103,8 @@ def get_dataset(file_path): ''' -candidate_movie_col = [ tf.feature_column.numeric_column(key='movieId', default_value=0), ] +candidate_movie_col = [tf.feature_column.numeric_column( + key='movieId', default_value=0), ] recent_rate_col = [ tf.feature_column.numeric_column(key='userRatedMovie1', default_value=0), @@ -103,7 +115,6 @@ def get_dataset(file_path): ] - # user profile user_profile = [ user_emb_col, @@ -125,18 +136,21 @@ def get_dataset(file_path): candidate_layer = tf.keras.layers.DenseFeatures(candidate_movie_col)(inputs) user_behaviors_layer = tf.keras.layers.DenseFeatures(recent_rate_col)(inputs) user_profile_layer = tf.keras.layers.DenseFeatures(user_profile)(inputs) -context_features_layer = tf.keras.layers.DenseFeatures(context_features)(inputs) +context_features_layer = tf.keras.layers.DenseFeatures( + context_features)(inputs) # Activation Unit -movie_emb_layer = tf.keras.layers.Embedding(input_dim=1001,output_dim=EMBEDDING_SIZE,mask_zero=True)# mask zero +movie_emb_layer = tf.keras.layers.Embedding( + input_dim=1001, output_dim=EMBEDDING_SIZE, mask_zero=True) # mask zero -user_behaviors_emb_layer = movie_emb_layer(user_behaviors_layer) +user_behaviors_emb_layer = movie_emb_layer(user_behaviors_layer) -candidate_emb_layer = movie_emb_layer(candidate_layer) -candidate_emb_layer = tf.squeeze(candidate_emb_layer,axis=1) +candidate_emb_layer = movie_emb_layer(candidate_layer) +candidate_emb_layer = tf.squeeze(candidate_emb_layer, axis=1) -repeated_candidate_emb_layer = tf.keras.layers.RepeatVector(RECENT_MOVIES)(candidate_emb_layer) +repeated_candidate_emb_layer = tf.keras.layers.RepeatVector( + RECENT_MOVIES)(candidate_emb_layer) activation_sub_layer = tf.keras.layers.Subtract()([user_behaviors_emb_layer, repeated_candidate_emb_layer]) # element-wise sub @@ -148,14 +162,17 @@ def get_dataset(file_path): activation_unit = tf.keras.layers.Dense(32)(activation_all) activation_unit = tf.keras.layers.PReLU()(activation_unit) -activation_unit = tf.keras.layers.Dense(1, activation='sigmoid')(activation_unit) +activation_unit = tf.keras.layers.Dense( + 1, activation='sigmoid')(activation_unit) activation_unit = tf.keras.layers.Flatten()(activation_unit) activation_unit = tf.keras.layers.RepeatVector(EMBEDDING_SIZE)(activation_unit) activation_unit = tf.keras.layers.Permute((2, 1))(activation_unit) -activation_unit = tf.keras.layers.Multiply()([user_behaviors_emb_layer, activation_unit]) +activation_unit = tf.keras.layers.Multiply()( + [user_behaviors_emb_layer, activation_unit]) # sum pooling -user_behaviors_pooled_layers = tf.keras.layers.Lambda(lambda x: tf.keras.backend.sum(x, axis=1))(activation_unit) +user_behaviors_pooled_layers = tf.keras.layers.Lambda( + lambda x: tf.keras.backend.sum(x, axis=1))(activation_unit) # fc layer concat_layer = tf.keras.layers.concatenate([user_profile_layer, user_behaviors_pooled_layers, @@ -177,7 +194,8 @@ def get_dataset(file_path): model.fit(train_dataset, epochs=5) # evaluate the model -test_loss, test_accuracy, test_roc_auc, test_pr_auc = model.evaluate(test_dataset) +test_loss, test_accuracy, test_roc_auc, test_pr_auc = model.evaluate( + test_dataset) print('\n\nTest Loss {}, Test Accuracy {}, Test ROC AUC {}, Test PR AUC {}'.format(test_loss, test_accuracy, test_roc_auc, test_pr_auc)) diff --git a/TFRecModel/src/com/sparrowrecsys/offline/tensorflow/DeepFM.py b/TFRecModel/src/com/sparrowrecsys/offline/tensorflow/DeepFM.py index 0e6bba1b..77daf12a 100644 --- a/TFRecModel/src/com/sparrowrecsys/offline/tensorflow/DeepFM.py +++ b/TFRecModel/src/com/sparrowrecsys/offline/tensorflow/DeepFM.py @@ -1,16 +1,24 @@ import tensorflow as tf +import pathlib +current_working_directory = pathlib.Path().absolute() +train_abs_path = current_working_directory / \ + "src/main/resources/webroot/sampledata/trainingSamples.csv" +test_abs_path = current_working_directory / \ + "src/main/resources/webroot/sampledata/testSamples.csv" +print(train_abs_path) +print(test_abs_path) + # Training samples path, change to your local path training_samples_file_path = tf.keras.utils.get_file("trainingSamples.csv", - "file:///Users/zhewang/Workspace/SparrowRecSys/src/main" - "/resources/webroot/sampledata/trainingSamples.csv") + "file://" + str(train_abs_path)) # Test samples path, change to your local path test_samples_file_path = tf.keras.utils.get_file("testSamples.csv", - "file:///Users/zhewang/Workspace/SparrowRecSys/src/main" - "/resources/webroot/sampledata/testSamples.csv") - + "file://" + str(test_abs_path)) # load sample as tf dataset + + def get_dataset(file_path): dataset = tf.data.experimental.make_csv_dataset( file_path, @@ -51,14 +59,18 @@ def get_dataset(file_path): } # movie id embedding feature -movie_col = tf.feature_column.categorical_column_with_identity(key='movieId', num_buckets=1001) +movie_col = tf.feature_column.categorical_column_with_identity( + key='movieId', num_buckets=1001) movie_emb_col = tf.feature_column.embedding_column(movie_col, 10) -movie_ind_col = tf.feature_column.indicator_column(movie_col) # movid id indicator columns +movie_ind_col = tf.feature_column.indicator_column( + movie_col) # movid id indicator columns # user id embedding feature -user_col = tf.feature_column.categorical_column_with_identity(key='userId', num_buckets=30001) +user_col = tf.feature_column.categorical_column_with_identity( + key='userId', num_buckets=30001) user_emb_col = tf.feature_column.embedding_column(user_col, 10) -user_ind_col = tf.feature_column.indicator_column(user_col) # user id indicator columns +user_ind_col = tf.feature_column.indicator_column( + user_col) # user id indicator columns # genre features vocabulary genre_vocab = ['Film-Noir', 'Action', 'Adventure', 'Horror', 'Romance', 'War', 'Comedy', 'Western', 'Documentary', @@ -68,15 +80,18 @@ def get_dataset(file_path): user_genre_col = tf.feature_column.categorical_column_with_vocabulary_list(key="userGenre1", vocabulary_list=genre_vocab) user_genre_emb_col = tf.feature_column.embedding_column(user_genre_col, 10) -user_genre_ind_col = tf.feature_column.indicator_column(user_genre_col) # user genre indicator columns +user_genre_ind_col = tf.feature_column.indicator_column( + user_genre_col) # user genre indicator columns # item genre embedding feature item_genre_col = tf.feature_column.categorical_column_with_vocabulary_list(key="movieGenre1", vocabulary_list=genre_vocab) item_genre_emb_col = tf.feature_column.embedding_column(item_genre_col, 10) -item_genre_ind_col = tf.feature_column.indicator_column(item_genre_col) # item genre indicator columns +item_genre_ind_col = tf.feature_column.indicator_column( + item_genre_col) # item genre indicator columns # fm first-order term columns: without embedding and concatenate to the output layer directly -fm_first_order_columns = [movie_ind_col, user_ind_col, user_genre_ind_col, item_genre_ind_col] +fm_first_order_columns = [movie_ind_col, user_ind_col, + user_genre_ind_col, item_genre_ind_col] deep_feature_columns = [tf.feature_column.numeric_column('releaseYear'), tf.feature_column.numeric_column('movieRatingCount'), @@ -90,17 +105,24 @@ def get_dataset(file_path): item_emb_layer = tf.keras.layers.DenseFeatures([movie_emb_col])(inputs) user_emb_layer = tf.keras.layers.DenseFeatures([user_emb_col])(inputs) -item_genre_emb_layer = tf.keras.layers.DenseFeatures([item_genre_emb_col])(inputs) -user_genre_emb_layer = tf.keras.layers.DenseFeatures([user_genre_emb_col])(inputs) +item_genre_emb_layer = tf.keras.layers.DenseFeatures( + [item_genre_emb_col])(inputs) +user_genre_emb_layer = tf.keras.layers.DenseFeatures( + [user_genre_emb_col])(inputs) # The first-order term in the FM layer -fm_first_order_layer = tf.keras.layers.DenseFeatures(fm_first_order_columns)(inputs) +fm_first_order_layer = tf.keras.layers.DenseFeatures( + fm_first_order_columns)(inputs) # FM part, cross different categorical feature embeddings -product_layer_item_user = tf.keras.layers.Dot(axes=1)([item_emb_layer, user_emb_layer]) -product_layer_item_genre_user_genre = tf.keras.layers.Dot(axes=1)([item_genre_emb_layer, user_genre_emb_layer]) -product_layer_item_genre_user = tf.keras.layers.Dot(axes=1)([item_genre_emb_layer, user_emb_layer]) -product_layer_user_genre_item = tf.keras.layers.Dot(axes=1)([item_emb_layer, user_genre_emb_layer]) +product_layer_item_user = tf.keras.layers.Dot( + axes=1)([item_emb_layer, user_emb_layer]) +product_layer_item_genre_user_genre = tf.keras.layers.Dot( + axes=1)([item_genre_emb_layer, user_genre_emb_layer]) +product_layer_item_genre_user = tf.keras.layers.Dot( + axes=1)([item_genre_emb_layer, user_emb_layer]) +product_layer_user_genre_item = tf.keras.layers.Dot( + axes=1)([item_emb_layer, user_genre_emb_layer]) # deep part, MLP to generalize all input features deep = tf.keras.layers.DenseFeatures(deep_feature_columns)(inputs) @@ -123,7 +145,8 @@ def get_dataset(file_path): model.fit(train_dataset, epochs=5) # evaluate the model -test_loss, test_accuracy, test_roc_auc, test_pr_auc = model.evaluate(test_dataset) +test_loss, test_accuracy, test_roc_auc, test_pr_auc = model.evaluate( + test_dataset) print('\n\nTest Loss {}, Test Accuracy {}, Test ROC AUC {}, Test PR AUC {}'.format(test_loss, test_accuracy, test_roc_auc, test_pr_auc)) @@ -132,4 +155,4 @@ def get_dataset(file_path): for prediction, goodRating in zip(predictions[:12], list(test_dataset)[0][1][:12]): print("Predicted good rating: {:.2%}".format(prediction[0]), " | Actual rating label: ", - ("Good Rating" if bool(goodRating) else "Bad Rating")) \ No newline at end of file + ("Good Rating" if bool(goodRating) else "Bad Rating")) diff --git a/TFRecModel/src/com/sparrowrecsys/offline/tensorflow/DeepFM_v2.py b/TFRecModel/src/com/sparrowrecsys/offline/tensorflow/DeepFM_v2.py index aa4af871..99b2394b 100644 --- a/TFRecModel/src/com/sparrowrecsys/offline/tensorflow/DeepFM_v2.py +++ b/TFRecModel/src/com/sparrowrecsys/offline/tensorflow/DeepFM_v2.py @@ -7,14 +7,21 @@ """ +import pathlib +current_working_directory = pathlib.Path().absolute() +train_abs_path = current_working_directory / \ + "src/main/resources/webroot/sampledata/trainingSamples.csv" +test_abs_path = current_working_directory / \ + "src/main/resources/webroot/sampledata/testSamples.csv" +print(train_abs_path) +print(test_abs_path) + # Training samples path, change to your local path training_samples_file_path = tf.keras.utils.get_file("trainingSamples.csv", - "file:///Users/zhewang/Workspace/SparrowRecSys/src/main" - "/resources/webroot/sampledata/trainingSamples.csv") + "file://" + str(train_abs_path)) # Test samples path, change to your local path test_samples_file_path = tf.keras.utils.get_file("testSamples.csv", - "file:///Users/zhewang/Workspace/SparrowRecSys/src/main" - "/resources/webroot/sampledata/testSamples.csv") + "file://" + str(test_abs_path)) # load sample as tf dataset @@ -58,14 +65,18 @@ def get_dataset(file_path): } # movie id embedding feature -movie_col = tf.feature_column.categorical_column_with_identity(key='movieId', num_buckets=1001) +movie_col = tf.feature_column.categorical_column_with_identity( + key='movieId', num_buckets=1001) movie_emb_col = tf.feature_column.embedding_column(movie_col, 10) -movie_ind_col = tf.feature_column.indicator_column(movie_col) # movid id indicator columns +movie_ind_col = tf.feature_column.indicator_column( + movie_col) # movid id indicator columns # user id embedding feature -user_col = tf.feature_column.categorical_column_with_identity(key='userId', num_buckets=30001) +user_col = tf.feature_column.categorical_column_with_identity( + key='userId', num_buckets=30001) user_emb_col = tf.feature_column.embedding_column(user_col, 10) -user_ind_col = tf.feature_column.indicator_column(user_col) # user id indicator columns +user_ind_col = tf.feature_column.indicator_column( + user_col) # user id indicator columns # genre features vocabulary genre_vocab = ['Film-Noir', 'Action', 'Adventure', 'Horror', 'Romance', 'War', 'Comedy', 'Western', 'Documentary', @@ -85,7 +96,8 @@ def get_dataset(file_path): item_genre_emb_col = tf.feature_column.embedding_column(item_genre_col, 10) # fm first-order categorical items -cat_columns = [movie_ind_col, user_ind_col, user_genre_ind_col, item_genre_ind_col] +cat_columns = [movie_ind_col, user_ind_col, + user_genre_ind_col, item_genre_ind_col] deep_columns = [tf.feature_column.numeric_column('releaseYear'), tf.feature_column.numeric_column('movieRatingCount'), @@ -96,17 +108,23 @@ def get_dataset(file_path): tf.feature_column.numeric_column('userRatingStddev')] first_order_cat_feature = tf.keras.layers.DenseFeatures(cat_columns)(inputs) -first_order_cat_feature = tf.keras.layers.Dense(1, activation=None)(first_order_cat_feature) +first_order_cat_feature = tf.keras.layers.Dense( + 1, activation=None)(first_order_cat_feature) first_order_deep_feature = tf.keras.layers.DenseFeatures(deep_columns)(inputs) -first_order_deep_feature = tf.keras.layers.Dense(1, activation=None)(first_order_deep_feature) -## first order feature +first_order_deep_feature = tf.keras.layers.Dense( + 1, activation=None)(first_order_deep_feature) +# first order feature -first_order_feature = tf.keras.layers.Add()([first_order_cat_feature, first_order_deep_feature]) +first_order_feature = tf.keras.layers.Add()( + [first_order_cat_feature, first_order_deep_feature]) second_order_cat_columns_emb = [tf.keras.layers.DenseFeatures([item_genre_emb_col])(inputs), - tf.keras.layers.DenseFeatures([movie_emb_col])(inputs), - tf.keras.layers.DenseFeatures([user_genre_emb_col])(inputs), - tf.keras.layers.DenseFeatures([user_emb_col])(inputs) + tf.keras.layers.DenseFeatures( + [movie_emb_col])(inputs), + tf.keras.layers.DenseFeatures( + [user_genre_emb_col])(inputs), + tf.keras.layers.DenseFeatures( + [user_emb_col])(inputs) ] second_order_cat_columns = [] @@ -116,11 +134,14 @@ def get_dataset(file_path): second_order_cat_columns.append(feature) second_order_deep_columns = tf.keras.layers.DenseFeatures(deep_columns)(inputs) -second_order_deep_columns = tf.keras.layers.Dense(64, activation=None)(second_order_deep_columns) -second_order_deep_columns = tf.keras.layers.Reshape((-1, 64))(second_order_deep_columns) -second_order_fm_feature = tf.keras.layers.Concatenate(axis=1)(second_order_cat_columns + [second_order_deep_columns]) - -## second_order_deep_feature +second_order_deep_columns = tf.keras.layers.Dense( + 64, activation=None)(second_order_deep_columns) +second_order_deep_columns = tf.keras.layers.Reshape( + (-1, 64))(second_order_deep_columns) +second_order_fm_feature = tf.keras.layers.Concatenate(axis=1)( + second_order_cat_columns + [second_order_deep_columns]) + +# second_order_deep_feature deep_feature = tf.keras.layers.Flatten()(second_order_fm_feature) deep_feature = tf.keras.layers.Dense(32, activation='relu')(deep_feature) deep_feature = tf.keras.layers.Dense(16, activation='relu')(deep_feature) @@ -145,14 +166,19 @@ def call(self, input, **kwargs): second_order_sum_feature = ReduceLayer(1)(second_order_fm_feature) -second_order_sum_square_feature = tf.keras.layers.multiply([second_order_sum_feature, second_order_sum_feature]) -second_order_square_feature = tf.keras.layers.multiply([second_order_fm_feature, second_order_fm_feature]) +second_order_sum_square_feature = tf.keras.layers.multiply( + [second_order_sum_feature, second_order_sum_feature]) +second_order_square_feature = tf.keras.layers.multiply( + [second_order_fm_feature, second_order_fm_feature]) second_order_square_sum_feature = ReduceLayer(1)(second_order_square_feature) -## second_order_fm_feature -second_order_fm_feature = tf.keras.layers.subtract([second_order_sum_square_feature, second_order_square_sum_feature]) +# second_order_fm_feature +second_order_fm_feature = tf.keras.layers.subtract( + [second_order_sum_square_feature, second_order_square_sum_feature]) -concatenated_outputs = tf.keras.layers.Concatenate(axis=1)([first_order_feature, second_order_fm_feature, deep_feature]) -output_layer = tf.keras.layers.Dense(1, activation='sigmoid')(concatenated_outputs) +concatenated_outputs = tf.keras.layers.Concatenate(axis=1)( + [first_order_feature, second_order_fm_feature, deep_feature]) +output_layer = tf.keras.layers.Dense( + 1, activation='sigmoid')(concatenated_outputs) model = tf.keras.Model(inputs, output_layer) # compile the model, set loss function, optimizer and evaluation metrics @@ -165,7 +191,8 @@ def call(self, input, **kwargs): model.fit(train_dataset, epochs=5) # evaluate the model -test_loss, test_accuracy, test_roc_auc, test_pr_auc = model.evaluate(test_dataset) +test_loss, test_accuracy, test_roc_auc, test_pr_auc = model.evaluate( + test_dataset) print('\n\nTest Loss {}, Test Accuracy {}, Test ROC AUC {}, Test PR AUC {}'.format(test_loss, test_accuracy, test_roc_auc, test_pr_auc)) diff --git a/TFRecModel/src/com/sparrowrecsys/offline/tensorflow/EmbeddingMLP.py b/TFRecModel/src/com/sparrowrecsys/offline/tensorflow/EmbeddingMLP.py index e040879b..ae100b95 100644 --- a/TFRecModel/src/com/sparrowrecsys/offline/tensorflow/EmbeddingMLP.py +++ b/TFRecModel/src/com/sparrowrecsys/offline/tensorflow/EmbeddingMLP.py @@ -1,13 +1,20 @@ import tensorflow as tf +import pathlib +current_working_directory = pathlib.Path().absolute() +train_abs_path = current_working_directory / \ + "src/main/resources/webroot/sampledata/trainingSamples.csv" +test_abs_path = current_working_directory / \ + "src/main/resources/webroot/sampledata/testSamples.csv" +print(train_abs_path) +print(test_abs_path) + # Training samples path, change to your local path training_samples_file_path = tf.keras.utils.get_file("trainingSamples.csv", - "file:///Users/zhewang/Workspace/SparrowRecSys/src/main" - "/resources/webroot/sampledata/trainingSamples.csv") + "file://" + str(train_abs_path)) # Test samples path, change to your local path test_samples_file_path = tf.keras.utils.get_file("testSamples.csv", - "file:///Users/zhewang/Workspace/SparrowRecSys/src/main" - "/resources/webroot/sampledata/testSamples.csv") + "file://" + str(test_abs_path)) # load sample as tf dataset @@ -50,12 +57,14 @@ def get_dataset(file_path): emb_col = tf.feature_column.embedding_column(cat_col, 10) categorical_columns.append(emb_col) # movie id embedding feature -movie_col = tf.feature_column.categorical_column_with_identity(key='movieId', num_buckets=1001) +movie_col = tf.feature_column.categorical_column_with_identity( + key='movieId', num_buckets=1001) movie_emb_col = tf.feature_column.embedding_column(movie_col, 10) categorical_columns.append(movie_emb_col) # user id embedding feature -user_col = tf.feature_column.categorical_column_with_identity(key='userId', num_buckets=30001) +user_col = tf.feature_column.categorical_column_with_identity( + key='userId', num_buckets=30001) user_emb_col = tf.feature_column.embedding_column(user_col, 10) categorical_columns.append(user_emb_col) @@ -86,7 +95,8 @@ def get_dataset(file_path): model.fit(train_dataset, epochs=5) # evaluate the model -test_loss, test_accuracy, test_roc_auc, test_pr_auc = model.evaluate(test_dataset) +test_loss, test_accuracy, test_roc_auc, test_pr_auc = model.evaluate( + test_dataset) print('\n\nTest Loss {}, Test Accuracy {}, Test ROC AUC {}, Test PR AUC {}'.format(test_loss, test_accuracy, test_roc_auc, test_pr_auc)) diff --git a/TFRecModel/src/com/sparrowrecsys/offline/tensorflow/NeuralCF.py b/TFRecModel/src/com/sparrowrecsys/offline/tensorflow/NeuralCF.py index 4f762112..1331ac47 100644 --- a/TFRecModel/src/com/sparrowrecsys/offline/tensorflow/NeuralCF.py +++ b/TFRecModel/src/com/sparrowrecsys/offline/tensorflow/NeuralCF.py @@ -1,13 +1,19 @@ import tensorflow as tf +import pathlib +current_working_directory = pathlib.Path().absolute() +train_abs_path = current_working_directory / \ + "src/main/resources/webroot/sampledata/trainingSamples.csv" +test_abs_path = current_working_directory / \ + "src/main/resources/webroot/sampledata/testSamples.csv" +print(train_abs_path) +print(test_abs_path) # Training samples path, change to your local path training_samples_file_path = tf.keras.utils.get_file("trainingSamples.csv", - "file:///Users/zhewang/Workspace/SparrowRecSys/src/main" - "/resources/webroot/sampledata/trainingSamples.csv") + "file://" + str(train_abs_path)) # Test samples path, change to your local path test_samples_file_path = tf.keras.utils.get_file("testSamples.csv", - "file:///Users/zhewang/Workspace/SparrowRecSys/src/main" - "/resources/webroot/sampledata/testSamples.csv") + "file://" + str(test_abs_path)) # load sample as tf dataset @@ -27,11 +33,13 @@ def get_dataset(file_path): test_dataset = get_dataset(test_samples_file_path) # movie id embedding feature -movie_col = tf.feature_column.categorical_column_with_identity(key='movieId', num_buckets=1001) +movie_col = tf.feature_column.categorical_column_with_identity( + key='movieId', num_buckets=1001) movie_emb_col = tf.feature_column.embedding_column(movie_col, 10) # user id embedding feature -user_col = tf.feature_column.categorical_column_with_identity(key='userId', num_buckets=30001) +user_col = tf.feature_column.categorical_column_with_identity( + key='userId', num_buckets=30001) user_emb_col = tf.feature_column.embedding_column(user_col, 10) # define input for keras model @@ -43,25 +51,33 @@ def get_dataset(file_path): # neural cf model arch two. only embedding in each tower, then MLP as the interaction layers def neural_cf_model_1(feature_inputs, item_feature_columns, user_feature_columns, hidden_units): - item_tower = tf.keras.layers.DenseFeatures(item_feature_columns)(feature_inputs) - user_tower = tf.keras.layers.DenseFeatures(user_feature_columns)(feature_inputs) + item_tower = tf.keras.layers.DenseFeatures( + item_feature_columns)(feature_inputs) + user_tower = tf.keras.layers.DenseFeatures( + user_feature_columns)(feature_inputs) interact_layer = tf.keras.layers.concatenate([item_tower, user_tower]) for num_nodes in hidden_units: - interact_layer = tf.keras.layers.Dense(num_nodes, activation='relu')(interact_layer) - output_layer = tf.keras.layers.Dense(1, activation='sigmoid')(interact_layer) + interact_layer = tf.keras.layers.Dense( + num_nodes, activation='relu')(interact_layer) + output_layer = tf.keras.layers.Dense( + 1, activation='sigmoid')(interact_layer) neural_cf_model = tf.keras.Model(feature_inputs, output_layer) return neural_cf_model # neural cf model arch one. embedding+MLP in each tower, then dot product layer as the output def neural_cf_model_2(feature_inputs, item_feature_columns, user_feature_columns, hidden_units): - item_tower = tf.keras.layers.DenseFeatures(item_feature_columns)(feature_inputs) + item_tower = tf.keras.layers.DenseFeatures( + item_feature_columns)(feature_inputs) for num_nodes in hidden_units: - item_tower = tf.keras.layers.Dense(num_nodes, activation='relu')(item_tower) + item_tower = tf.keras.layers.Dense( + num_nodes, activation='relu')(item_tower) - user_tower = tf.keras.layers.DenseFeatures(user_feature_columns)(feature_inputs) + user_tower = tf.keras.layers.DenseFeatures( + user_feature_columns)(feature_inputs) for num_nodes in hidden_units: - user_tower = tf.keras.layers.Dense(num_nodes, activation='relu')(user_tower) + user_tower = tf.keras.layers.Dense( + num_nodes, activation='relu')(user_tower) output = tf.keras.layers.Dot(axes=1)([item_tower, user_tower]) output = tf.keras.layers.Dense(1, activation='sigmoid')(output) @@ -83,7 +99,8 @@ def neural_cf_model_2(feature_inputs, item_feature_columns, user_feature_columns model.fit(train_dataset, epochs=5) # evaluate the model -test_loss, test_accuracy, test_roc_auc, test_pr_auc = model.evaluate(test_dataset) +test_loss, test_accuracy, test_roc_auc, test_pr_auc = model.evaluate( + test_dataset) print('\n\nTest Loss {}, Test Accuracy {}, Test ROC AUC {}, Test PR AUC {}'.format(test_loss, test_accuracy, test_roc_auc, test_pr_auc)) diff --git a/TFRecModel/src/com/sparrowrecsys/offline/tensorflow/WideNDeep.py b/TFRecModel/src/com/sparrowrecsys/offline/tensorflow/WideNDeep.py index 4c6cecec..fb08dfde 100644 --- a/TFRecModel/src/com/sparrowrecsys/offline/tensorflow/WideNDeep.py +++ b/TFRecModel/src/com/sparrowrecsys/offline/tensorflow/WideNDeep.py @@ -1,16 +1,23 @@ import tensorflow as tf +import pathlib +current_working_directory = pathlib.Path().absolute() +train_abs_path = current_working_directory / \ + "src/main/resources/webroot/sampledata/trainingSamples.csv" +test_abs_path = current_working_directory / \ + "src/main/resources/webroot/sampledata/testSamples.csv" +print(train_abs_path) +print(test_abs_path) # Training samples path, change to your local path training_samples_file_path = tf.keras.utils.get_file("trainingSamples.csv", - "file:///Users/zhewang/Workspace/SparrowRecSys/src/main" - "/resources/webroot/sampledata/trainingSamples.csv") + "file://" + str(train_abs_path)) # Test samples path, change to your local path test_samples_file_path = tf.keras.utils.get_file("testSamples.csv", - "file:///Users/zhewang/Workspace/SparrowRecSys/src/main" - "/resources/webroot/sampledata/testSamples.csv") - + "file://" + str(test_abs_path)) # load sample as tf dataset + + def get_dataset(file_path): dataset = tf.data.experimental.make_csv_dataset( file_path, @@ -50,12 +57,14 @@ def get_dataset(file_path): emb_col = tf.feature_column.embedding_column(cat_col, 10) categorical_columns.append(emb_col) # movie id embedding feature -movie_col = tf.feature_column.categorical_column_with_identity(key='movieId', num_buckets=1001) +movie_col = tf.feature_column.categorical_column_with_identity( + key='movieId', num_buckets=1001) movie_emb_col = tf.feature_column.embedding_column(movie_col, 10) categorical_columns.append(movie_emb_col) # user id embedding feature -user_col = tf.feature_column.categorical_column_with_identity(key='userId', num_buckets=30001) +user_col = tf.feature_column.categorical_column_with_identity( + key='userId', num_buckets=30001) user_emb_col = tf.feature_column.embedding_column(user_col, 10) categorical_columns.append(user_emb_col) @@ -69,8 +78,10 @@ def get_dataset(file_path): tf.feature_column.numeric_column('userRatingStddev')] # cross feature between current movie and user historical movie -rated_movie = tf.feature_column.categorical_column_with_identity(key='userRatedMovie1', num_buckets=1001) -crossed_feature = tf.feature_column.indicator_column(tf.feature_column.crossed_column([movie_col, rated_movie], 10000)) +rated_movie = tf.feature_column.categorical_column_with_identity( + key='userRatedMovie1', num_buckets=1001) +crossed_feature = tf.feature_column.indicator_column( + tf.feature_column.crossed_column([movie_col, rated_movie], 10000)) # define input for keras model inputs = { @@ -98,7 +109,8 @@ def get_dataset(file_path): # wide and deep model architecture # deep part for all input features -deep = tf.keras.layers.DenseFeatures(numerical_columns + categorical_columns)(inputs) +deep = tf.keras.layers.DenseFeatures( + numerical_columns + categorical_columns)(inputs) deep = tf.keras.layers.Dense(128, activation='relu')(deep) deep = tf.keras.layers.Dense(128, activation='relu')(deep) # wide part for cross feature @@ -117,7 +129,8 @@ def get_dataset(file_path): model.fit(train_dataset, epochs=5) # evaluate the model -test_loss, test_accuracy, test_roc_auc, test_pr_auc = model.evaluate(test_dataset) +test_loss, test_accuracy, test_roc_auc, test_pr_auc = model.evaluate( + test_dataset) print('\n\nTest Loss {}, Test Accuracy {}, Test ROC AUC {}, Test PR AUC {}'.format(test_loss, test_accuracy, test_roc_auc, test_pr_auc)) From 0ea92df48db38cae05342fcec44ec5b231da0f25 Mon Sep 17 00:00:00 2001 From: "Chris (Caihao) Cui" Date: Thu, 30 Jun 2022 08:27:18 +1000 Subject: [PATCH 3/5] add english version readme init. --- README.CHS.md | 122 ++++++++++++++++++++++++++++++++++++++++++++++++++ README.md | 4 +- 2 files changed, 124 insertions(+), 2 deletions(-) create mode 100644 README.CHS.md diff --git a/README.CHS.md b/README.CHS.md new file mode 100644 index 00000000..b119b7db --- /dev/null +++ b/README.CHS.md @@ -0,0 +1,122 @@ +# Sparrow Recommender System + + +SparrowRecSys 是一个电影推荐系统,名字 SparrowRecSys(麻雀推荐系统),取自“麻雀虽小,五脏俱全”之意。项目是一个基于 maven 的混合语言项目,同时包含了 TensorFlow,Spark,Jetty Server 等推荐系统的不同模块。希望你能够利用 SparrowRecSys 进行推荐系统的学习,并有机会一起完善它。 + +## 基于 SparrowRecSys 的实践课程 + +受极客时间邀请开设 [深度学习推荐系统实战](http://gk.link/a/10lyE) 课程,详细讲解了 SparrowRecSys 的所有技术细节,覆盖了深度学习模型结构,模型训练,特征工程,模型评估,模型线上服务及推荐服务器内部逻辑等模块。 + +## 环境要求 + +- Java 8 +- Scala 2.11 +- Python 3.6+ +- TensorFlow 2.0+ + +## 快速开始 + +将项目用 IntelliJ 打开后,找到`RecSysServer`,右键点选`Run`,然后在浏览器中输入`http://localhost:6010/`即可看到推荐系统的前端效果。 + +## 项目数据 + +项目数据来源于开源电影数据集[MovieLens](https://grouplens.org/datasets/movielens/),项目自带数据集对 MovieLens 数据集进行了精简,仅保留 1000 部电影和相关评论、用户数据。全量数据集请到 MovieLens 官方网站进行下载,推荐使用 MovieLens 20M Dataset。 + +## SparrowRecSys 技术架构 + +SparrowRecSys 技术架构遵循经典的工业级深度学习推荐系统架构,包括了离线数据处理、模型训练、近线的流处理、线上模型服务、前端推荐结果显示等多个模块。以下是 SparrowRecSys 的架构图: +![alt text](https://github.com/wzhe06/SparrowRecSys/raw/master/docs/sparrowrecsysarch.png) + +## SparrowRecSys 实现的深度学习模型 + +- Word2vec (Item2vec) +- DeepWalk (Random Walk based Graph Embedding) +- Embedding MLP +- Wide&Deep +- Nerual CF +- Two Towers +- DeepFM +- DIN(Deep Interest Network) + +## 相关论文 + +- [[FFM] Field-aware Factorization Machines for CTR Prediction (Criteo 2016)](https://github.com/wzhe06/Ad-papers/blob/master/Classic%20CTR%20Prediction/%5BFFM%5D%20Field-aware%20Factorization%20Machines%20for%20CTR%20Prediction%20%28Criteo%202016%29.pdf)
+- [[GBDT+LR] Practical Lessons from Predicting Clicks on Ads at Facebook (Facebook 2014)](https://github.com/wzhe06/Ad-papers/blob/master/Classic%20CTR%20Prediction/%5BGBDT%2BLR%5D%20Practical%20Lessons%20from%20Predicting%20Clicks%20on%20Ads%20at%20Facebook%20%28Facebook%202014%29.pdf)
+- [[PS-PLM] Learning Piece-wise Linear Models from Large Scale Data for Ad Click Prediction (Alibaba 2017)](https://github.com/wzhe06/Ad-papers/blob/master/Classic%20CTR%20Prediction/%5BPS-PLM%5D%20Learning%20Piece-wise%20Linear%20Models%20from%20Large%20Scale%20Data%20for%20Ad%20Click%20Prediction%20%28Alibaba%202017%29.pdf)
+- [[FM] Fast Context-aware Recommendations with Factorization Machines (UKON 2011)](https://github.com/wzhe06/Ad-papers/blob/master/Classic%20CTR%20Prediction/%5BFM%5D%20Fast%20Context-aware%20Recommendations%20with%20Factorization%20Machines%20%28UKON%202011%29.pdf)
+- [[DCN] Deep & Cross Network for Ad Click Predictions (Stanford 2017)](https://github.com/wzhe06/Ad-papers/blob/master/Deep%20Learning%20CTR%20Prediction/%5BDCN%5D%20Deep%20%26%20Cross%20Network%20for%20Ad%20Click%20Predictions%20%28Stanford%202017%29.pdf)
+- [[Deep Crossing] Deep Crossing - Web-Scale Modeling without Manually Crafted Combinatorial Features (Microsoft 2016)](https://github.com/wzhe06/Ad-papers/blob/master/Deep%20Learning%20CTR%20Prediction/%5BDeep%20Crossing%5D%20Deep%20Crossing%20-%20Web-Scale%20Modeling%20without%20Manually%20Crafted%20Combinatorial%20Features%20%28Microsoft%202016%29.pdf)
+- [[PNN] Product-based Neural Networks for User Response Prediction (SJTU 2016)](https://github.com/wzhe06/Ad-papers/blob/master/Deep%20Learning%20CTR%20Prediction/%5BPNN%5D%20Product-based%20Neural%20Networks%20for%20User%20Response%20Prediction%20%28SJTU%202016%29.pdf)
+- [[DIN] Deep Interest Network for Click-Through Rate Prediction (Alibaba 2018)](https://github.com/wzhe06/Ad-papers/blob/master/Deep%20Learning%20CTR%20Prediction/%5BDIN%5D%20Deep%20Interest%20Network%20for%20Click-Through%20Rate%20Prediction%20%28Alibaba%202018%29.pdf)
+- [[ESMM] Entire Space Multi-Task Model - An Effective Approach for Estimating Post-Click Conversion Rate (Alibaba 2018)](https://github.com/wzhe06/Ad-papers/blob/master/Deep%20Learning%20CTR%20Prediction/%5BESMM%5D%20Entire%20Space%20Multi-Task%20Model%20-%20An%20Effective%20Approach%20for%20Estimating%20Post-Click%20Conversion%20Rate%20%28Alibaba%202018%29.pdf)
+- [[Wide & Deep] Wide & Deep Learning for Recommender Systems (Google 2016)](https://github.com/wzhe06/Ad-papers/blob/master/Deep%20Learning%20CTR%20Prediction/%5BWide%20%26%20Deep%5D%20Wide%20%26%20Deep%20Learning%20for%20Recommender%20Systems%20%28Google%202016%29.pdf)
+- [[xDeepFM] xDeepFM - Combining Explicit and Implicit Feature Interactions for Recommender Systems (USTC 2018)](https://github.com/wzhe06/Ad-papers/blob/master/Deep%20Learning%20CTR%20Prediction/%5BxDeepFM%5D%20xDeepFM%20-%20Combining%20Explicit%20and%20Implicit%20Feature%20Interactions%20for%20Recommender%20Systems%20%28USTC%202018%29.pdf)
+- [[Image CTR] Image Matters - Visually modeling user behaviors using Advanced Model Server (Alibaba 2018)](https://github.com/wzhe06/Ad-papers/blob/master/Deep%20Learning%20CTR%20Prediction/%5BImage%20CTR%5D%20Image%20Matters%20-%20Visually%20modeling%20user%20behaviors%20using%20Advanced%20Model%20Server%20%28Alibaba%202018%29.pdf)
+- [[AFM] Attentional Factorization Machines - Learning the Weight of Feature Interactions via Attention Networks (ZJU 2017)](https://github.com/wzhe06/Ad-papers/blob/master/Deep%20Learning%20CTR%20Prediction/%5BAFM%5D%20Attentional%20Factorization%20Machines%20-%20Learning%20the%20Weight%20of%20Feature%20Interactions%20via%20Attention%20Networks%20%28ZJU%202017%29.pdf)
+- [[DIEN] Deep Interest Evolution Network for Click-Through Rate Prediction (Alibaba 2019)](https://github.com/wzhe06/Ad-papers/blob/master/Deep%20Learning%20CTR%20Prediction/%5BDIEN%5D%20Deep%20Interest%20Evolution%20Network%20for%20Click-Through%20Rate%20Prediction%20%28Alibaba%202019%29.pdf)
+- [[DSSM] Learning Deep Structured Semantic Models for Web Search using Clickthrough Data (UIUC 2013)](https://github.com/wzhe06/Ad-papers/blob/master/Deep%20Learning%20CTR%20Prediction/%5BDSSM%5D%20Learning%20Deep%20Structured%20Semantic%20Models%20for%20Web%20Search%20using%20Clickthrough%20Data%20%28UIUC%202013%29.pdf)
+- [[FNN] Deep Learning over Multi-field Categorical Data (UCL 2016)](https://github.com/wzhe06/Ad-papers/blob/master/Deep%20Learning%20CTR%20Prediction/%5BFNN%5D%20Deep%20Learning%20over%20Multi-field%20Categorical%20Data%20%28UCL%202016%29.pdf)
+- [[DeepFM] A Factorization-Machine based Neural Network for CTR Prediction (HIT-Huawei 2017)](https://github.com/wzhe06/Ad-papers/blob/master/Deep%20Learning%20CTR%20Prediction/%5BDeepFM%5D%20A%20Factorization-Machine%20based%20Neural%20Network%20for%20CTR%20Prediction%20%28HIT-Huawei%202017%29.pdf)
+- [[NFM] Neural Factorization Machines for Sparse Predictive Analytics (NUS 2017)](https://github.com/wzhe06/Ad-papers/blob/master/Deep%20Learning%20CTR%20Prediction/%5BNFM%5D%20Neural%20Factorization%20Machines%20for%20Sparse%20Predictive%20Analytics%20%28NUS%202017%29.pdf)
+ +## 其他相关资源 + +- [Papers on Computational Advertising](https://github.com/wzhe06/Ad-papers)
+- [Papers on Recommender System](https://github.com/wzhe06/Ad-papers)
+- [CTR Model Based on Spark](https://github.com/wzhe06/SparkCTR)
+ +## Learning Notes + +问题 1:因为没有项目经验,想知道把 Sparrow Recys 项目 git clone 到本地之后,怎么运行这个 Maven project? + +这里我再重新描述一下整个安装和执行的过程,详细来说一共有 6 步: + +1. 安装 IDEA。到这个地址下载 IDE,安装 IDEA 后,打开 IDEA; +2. 在 IDEA 中打开项目。选择 File->Open-> 选择 git clone 到的项目根目录,就可以把项目导入到 IDEA; +3. 配置 maven project。我们在 IDEA 的项目结构树的 pom.xml 上点击右键,设置为 maven project(最新的 IDE 版本也可能不用)就可以了; +4. 配置 SDK。Sparrow Recsys 使用了 Java8,Scala2.11 的编译环境,你可以在 File->Project Structure->Project 中配置 Java SDK,并在 Global Libraries 中配置 Scala SDK; +5. 运行推荐服务器。我们找到类文件 class RecSysServer(com.wzhe.sparrowrecsys.online.RecSysServer),右键点击 -> run; +6. 打开 Sparrow Recsys 首页,在浏览器中输入 http://localhost:6010/ ,当看到 Sparrow RecSys 首页的时候,就说明你整个配置和安装成功了。 + +问题 2:在项目中没有找到“为你推荐页”,也没有看到一些项目介绍中提到的推荐算法,是我安装过程中出错了吗? + +这里我再强调说明一下,你没有安装错,Sparrow Recsys 这个项目是随着课程的进展逐渐完善起来的。所以如果在你学习的时候课程还未完结,Sparrow Recsys 中可能会缺少课程还未进行到的模块。比如为你推荐这个功能是在课程的“推荐模型篇”中加入的,所以具体的内容我也会在之后的课程中再加入。但课程已经讲解过或提到过的部分,一定会在 Sparrow Recsys 中有对应的实践代码。课程相关的知识误区除了安装问题之外,我还发现同学们在学习的过程中对某些知识点有疑惑,那下面我就帮同学们来解答一些典型的疑惑。 + +问题 3:网上资料的大部分观点认为协同过滤这样的传统方法应该是在召回层,但我们课程中把协同过滤放在了排序(精排),这是为什么呢? + +这是个好问题。我们知道,五六年前的传统推荐系统不少还在使用协同过滤作为主排序模型,但这几年它就被慢慢淘汰了,排序层变成了以深度学习推荐模型为主的复杂模型。不过,因为协同过滤类算法比较简单,线上计算过程也很高效,比如矩阵分解之后可以进行 embedding 快速召回,所以放在召回层也完全适用。在这门课程中,我们总结的推荐系统架构是一个比较经典的架构,但你也没必要认为它就是无法改变的真理。在实际应用场景之中,我希望你能根据业务特点灵活运用。 + +问题 4:像多模态或者是通过其它预训练方法得到的向量,直接加到推荐排序模型作为特征的话,感觉没什么效果,我理解是预训练学习的目标和排序学习目标并不一致。这个问题老师是怎么看的? + +首先,我觉得这是一个很好的业务实践的问题。多模态指的是在推荐系统中引入视频、图片、语音等多种不同形式的数据和特征,希望以此来提升推荐效果。在实际的业务应用里,确实存在多模态特征效果不强的问题。结合我的实践经验,我会觉得问题根源是因为,目前多模态的技术本质上还处于比较初期的阶段。比如说,我们可以用一些 CV 的技术去处理视频图像,识别出其中的汽车、树木、人物等等。但你要说这些物品对最终的推荐效果到底有没有影响,比如说视频中出现汽车到底对用户的点击率影响有多大,我觉得还是比较微弱的,它可能远不及知名演员这个要素的影响大。当然,我一直强调所有的效果都要跟业务场景紧密结合起来,所以多模态到底有没有作用,根本无法一概而论,还是跟你的使用方法和对业务的理解强关联。比如在短视频推荐中,如果你能精确识别出视频中的明星是哪位,再用它作为推荐特征,我想肯定对最终的推荐效果有正向影响。 + +问题 5:对训练数据中的某项特征进行平方或者开方,是为了改变训练数据的分布。训练数据的分布被改变后,训练出来的模型岂不是不能正确拟合训练数据了? + +这个也是一个常见的误区,如果你有这样的问题,说明你还没有弄明白特征的分布和训练数据的分布之间的关系。对训练数据中的某个特征进行开方或者平方操作,本质上是改变了特征的分布,并不是训练数据的分布。特征的分布和训练数据的分布没有本质的联系,只要你不改变训练数据 label 的分布,最终预测出的结果都应该是符合数据本身分布的。因为你要预测的是 label,并不是特征本身。而且在最终的预测过程中,这些开方、平方的特征处理操作是在模型推断过程中复现的,本质上可以看作是模型的一部分,所以不存在改变数据分布的问题。 + +问题 6:“为了使 Graph Embedding 的结果能够表达网络的‘结构性’,在随机游走的过程中,我们需要让游走的过程更倾向于 BFS(Breadth First Search,宽度优先搜索)”。这里应该是 DFS 吧? + +并且同质性是使用 BFS。这是第 7 讲中的一个知识点,这个疑问非常地常见,因为 BFS、DFS 与结构性、同质性的关系本身确实有一点反直觉。这也是我们在学习 Node2vec 模型的时候经常会有的问题,也推荐其他有疑问的同学关注一下。在这里,我需要再强调一下,课程中的描述是完全正确的,也就是为了使 Graph Embedding 的结果能够表达网络的“结构性”,在随机游走的过程中,我们需要让游走的过程更倾向于 BFS;为了表达“同质性”,需要倾向于 DFS。我们一定要厘清它们之间的正确关系。这里,我直接把 Node2vec 原论文中的论述贴在了下面,你直接参考原文,会理解得更深刻一些。 + +> We observe that BFS and DFS strategies play a key role in producing representations that reflect either of the above equivalences. In particular, the neighborhoods sampled by BFS lead to embeddings that correspond closely to structural equivalence. The opposite is true for DFS which can explore larger parts of the network as it can move further away from the source node u (with sample size k being fixed). In DFS, the sampled nodes more accurately reflect a macro-view of the neighborhood which is essential in inferring communities based on homophily. + +> 参考译文:我们观察到,BFS 和 DFS 策略在产生向量表达时发挥着关 +> 关于推荐系统的深入思考解决了一些常见的知识性的疑问,我们再来看看一些关于课程具体内容的延伸思考。我觉得这些问题都提得都很好,说明同学们学习的时候都有在认真思考,同时,我也鼓励大家都带着问题来学习,把自己的思考分享出来,这也能帮助到更多的同学。 + +问题 7:老师,我注意到 Flink 最近更新比较频繁,号称可以做到流批一体分析,甚至 ETL 领域好像也可以用起来。那我们在设计系统架构的时候直接用 Flink 取代 Spark,让 ETL 和实时部分统一到一个架构上是否可行呢? + +其实这也是大数据工程师们一直追求的批流一体的 Kappa 架构。在 Kappa 架构的实践中,工程师们遇到的困难也不少。一是一些历史遗留问题,比如当前很多公司的数据体系大部分是建立在 Spark 基础上的,直接用 Flink 完全替代肯定有风险,所以很多公司还沿用着批流混合的 Lambda 架构。另外是 Spark 和 Flink 发展的问题,Flink 在进化的同时 Spark 也在发展,比如 Spark 最近发展的 Structured Streaming 就是为了跟 Flink 竞争,而且 Spark 本身的社区成熟程度和这么多年的积累还是超过目前的 Flink 的,所以也难说 Flink 会完全替代 Spark。但毫无疑问,批流一体是未来的方向,业内的工程师们也都在往这个方向努力。但我个人觉得 Spark 和 Flink 会长期共存、共同发展。 + +问题 8:老师,请问关于大数据数据出口的那部分内容,请问实时的用户推荐请求也是会先经过大数据处理,生成可供线上推理的数据吗? + +就是针对文中大数据出口的第二点。这是第一节课的课后留言,你可以先回忆一下第一节的内容,然后再听我讲。在推荐服务器做线上推断时,实时用户请求里面包含的特征一般是直接在服务器内部提取出来的,所以肯定不需要再在数据流中走一遍。但是线上请求数据最终还是会落盘,生成日志数据。这个过程中,一些流处理和批处理的平台会对这些数据做进一步处理,生成今后可供我们使用的特征以及训练用样本。 + +问题 9:王老师,在线预测的时候,模型所需的特征是直接从数据库读取,还是在线实时组装? + +我在想如果只是用户或者物品自身的特征的话,可以从数据库读取,但如果是用户和物品的交叉特征的话,是不是必须实时组装?非常好的点。一般来说如果组合特征可以在线处理,最好能够在线处理,因为组合特征有组合爆炸问题,为了节约宝贵的存储资源,我们一般不直接存储。但对于一些不得不存储的组合特征,比如用户 x 物品的曝光、点击记录,如果线上模型需要的话,还是要存储到数据库中的,因为这些特征你没办法在线组合。 + +问题 10:为什么深度学习的结构特点不利于稀疏特征向量的处理呢? + +首先,我想说这个问题问得太好了,如果不解决这个问题,那整个 Embedding 技术的意义就没有了,所以我也希望大家都能好好思考一下这个问题。一方面,如果我们深入到神经网络的梯度下降学习过程就会发现,特征过于稀疏会导致整个网络的收敛非常慢,因为每一个样本的学习只有极少数的权重会得到更新,这在样本数量有限的情况下会导致模型不收敛。另一个方面,One-hot 类稀疏特征的维度往往非常地大,可能会达到千万甚至亿的级别,如果直接连接进入深度学习网络,那整个模型的参数数量会非常庞大,这对于一般公司的算力开销来说都是吃不消的。因此,我们往往会先通过 Embedding 把原始稀疏特征稠密化,然后再输入复杂的深度学习网络进行训练,这相当于把原始特征向量跟上层复杂深度学习网络做一个隔离。好了,这节课就到这里。 + +非常感谢前 8 节对内容有深度思考和提问的同学,你们的每个问题都很精彩。在接下来的课程中,欢迎你继续畅所欲言,把留言区这个工具好好利用起来,我们一起进步! diff --git a/README.md b/README.md index 1a87375a..eb473b37 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ -# SparrowRecSys +# Sparrow Recommender System -SparrowRecSys 是一个电影推荐系统,名字 SparrowRecSys(麻雀推荐系统),取自“麻雀虽小,五脏俱全”之意。项目是一个基于 maven 的混合语言项目,同时包含了 TensorFlow,Spark,Jetty Server 等推荐系统的不同模块。希望你能够利用 SparrowRecSys 进行推荐系统的学习,并有机会一起完善它。 +Sparrow Recommender System (SparrowRecSys) 是一个电影推荐系统,名字 SparrowRecSys(麻雀推荐系统),取自“麻雀虽小,五脏俱全”之意。项目是一个基于 maven 的混合语言项目,同时包含了 TensorFlow,Spark,Jetty Server 等推荐系统的不同模块。希望你能够利用 SparrowRecSys 进行推荐系统的学习,并有机会一起完善它。 ## 基于 SparrowRecSys 的实践课程 From b0fd5148c21ed39dda7f419583cb7ec69fa74019 Mon Sep 17 00:00:00 2001 From: "Chris (Caihao) Cui" Date: Thu, 30 Jun 2022 09:57:08 +1000 Subject: [PATCH 4/5] Update English Readme --- README.CHS.md | 3 +- README.md | 88 +++++++++++---------------------------------------- 2 files changed, 19 insertions(+), 72 deletions(-) diff --git a/README.CHS.md b/README.CHS.md index b119b7db..f09e1b03 100644 --- a/README.CHS.md +++ b/README.CHS.md @@ -1,6 +1,5 @@ # Sparrow Recommender System - SparrowRecSys 是一个电影推荐系统,名字 SparrowRecSys(麻雀推荐系统),取自“麻雀虽小,五脏俱全”之意。项目是一个基于 maven 的混合语言项目,同时包含了 TensorFlow,Spark,Jetty Server 等推荐系统的不同模块。希望你能够利用 SparrowRecSys 进行推荐系统的学习,并有机会一起完善它。 ## 基于 SparrowRecSys 的实践课程 @@ -76,7 +75,7 @@ SparrowRecSys 技术架构遵循经典的工业级深度学习推荐系统架构 3. 配置 maven project。我们在 IDEA 的项目结构树的 pom.xml 上点击右键,设置为 maven project(最新的 IDE 版本也可能不用)就可以了; 4. 配置 SDK。Sparrow Recsys 使用了 Java8,Scala2.11 的编译环境,你可以在 File->Project Structure->Project 中配置 Java SDK,并在 Global Libraries 中配置 Scala SDK; 5. 运行推荐服务器。我们找到类文件 class RecSysServer(com.wzhe.sparrowrecsys.online.RecSysServer),右键点击 -> run; -6. 打开 Sparrow Recsys 首页,在浏览器中输入 http://localhost:6010/ ,当看到 Sparrow RecSys 首页的时候,就说明你整个配置和安装成功了。 +6. 打开 Sparrow Recsys 首页,在浏览器中输入 ,当看到 Sparrow RecSys 首页的时候,就说明你整个配置和安装成功了。 问题 2:在项目中没有找到“为你推荐页”,也没有看到一些项目介绍中提到的推荐算法,是我安装过程中出错了吗? diff --git a/README.md b/README.md index eb473b37..6addaf11 100644 --- a/README.md +++ b/README.md @@ -1,32 +1,34 @@ -# Sparrow Recommender System +# Sparrow Recommender System (English Version) -Sparrow Recommender System (SparrowRecSys) 是一个电影推荐系统,名字 SparrowRecSys(麻雀推荐系统),取自“麻雀虽小,五脏俱全”之意。项目是一个基于 maven 的混合语言项目,同时包含了 TensorFlow,Spark,Jetty Server 等推荐系统的不同模块。希望你能够利用 SparrowRecSys 进行推荐系统的学习,并有机会一起完善它。 +## Introduction of SparrowRecSys -## 基于 SparrowRecSys 的实践课程 +Sparrow Recommender System (SparrowRecSys) is a movie recommender system, the name SparrowRecSys, is taken from the meaning of "one sparrow is small, but has all the internal organs". The project is a maven-based mixed language project, which also includes different modules of recommendation systems such as TensorFlow, Spark, and Jetty Server. I hope readers can use SparrowRecSys to learn about recommender systems and have the opportunity to improve it together. -受极客时间邀请开设 [深度学习推荐系统实战](http://gk.link/a/10lyE) 课程,详细讲解了 SparrowRecSys 的所有技术细节,覆盖了深度学习模型结构,模型训练,特征工程,模型评估,模型线上服务及推荐服务器内部逻辑等模块。 +## Practical Lessons based on SparrowRecSys (Original Version) -## 环境要求 +Invited by Geek Time to offer the [Deep Learning Recommendation System Combat](http://gk.link/a/10lyE) course, which explains all the technical details of SparrowRecSys in detail, covering deep learning model structure, model training, feature engineering, Modules such as model evaluation, model online service and recommendation server internal logic. + +## Environment Setup and Dependencies - Java 8 - Scala 2.11 - Python 3.6+ - TensorFlow 2.0+ -## 快速开始 +## Quick Start -将项目用 IntelliJ 打开后,找到`RecSysServer`,右键点选`Run`,然后在浏览器中输入`http://localhost:6010/`即可看到推荐系统的前端效果。 +After opening the project with `IntelliJ IDEA`, find `RecSysServer`, right-click `Run`, and then enter `http://localhost:6010/` in the browser to see the front-end effect of the recommendation system. -## 项目数据 +## Project Data Source -项目数据来源于开源电影数据集[MovieLens](https://grouplens.org/datasets/movielens/),项目自带数据集对 MovieLens 数据集进行了精简,仅保留 1000 部电影和相关评论、用户数据。全量数据集请到 MovieLens 官方网站进行下载,推荐使用 MovieLens 20M Dataset。 +The project data comes from the open-source movie dataset [MovieLens](https://grouplens.org/datasets/movielens/). The MovieLens dataset is simplified by the project's own dataset, and only 1000 movies and related comments and user data are retained. . Please download the full dataset from the official MovieLens website. MovieLens 20M Dataset is recommended. -## SparrowRecSys 技术架构 +## SparrowRecSys Technical Architecture -SparrowRecSys 技术架构遵循经典的工业级深度学习推荐系统架构,包括了离线数据处理、模型训练、近线的流处理、线上模型服务、前端推荐结果显示等多个模块。以下是 SparrowRecSys 的架构图: -![alt text](https://github.com/wzhe06/SparrowRecSys/raw/master/docs/sparrowrecsysarch.png) +The technical architecture of SparrowRecSys follows the classic industrial-level deep learning recommendation system architecture, including multiple modules such as offline data processing, model training, near-line stream processing, online model service, and front-end recommendation result display. The following is the architecture diagram of SparrowRecSys: +![English Version of SparowRecSys](https://github.com/cuicaihao/Sparrow-Recommender-System/blob/master/docs/sparrowrecsysarch.png?raw=true) -## SparrowRecSys 实现的深度学习模型 +## SparrowRecSys Deep Learning Model(s) - Word2vec (Item2vec) - DeepWalk (Random Walk based Graph Embedding) @@ -37,7 +39,7 @@ SparrowRecSys 技术架构遵循经典的工业级深度学习推荐系统架构 - DeepFM - DIN(Deep Interest Network) -## 相关论文 +## References - [[FFM] Field-aware Factorization Machines for CTR Prediction (Criteo 2016)](https://github.com/wzhe06/Ad-papers/blob/master/Classic%20CTR%20Prediction/%5BFFM%5D%20Field-aware%20Factorization%20Machines%20for%20CTR%20Prediction%20%28Criteo%202016%29.pdf)
- [[GBDT+LR] Practical Lessons from Predicting Clicks on Ads at Facebook (Facebook 2014)](https://github.com/wzhe06/Ad-papers/blob/master/Classic%20CTR%20Prediction/%5BGBDT%2BLR%5D%20Practical%20Lessons%20from%20Predicting%20Clicks%20on%20Ads%20at%20Facebook%20%28Facebook%202014%29.pdf)
@@ -58,64 +60,10 @@ SparrowRecSys 技术架构遵循经典的工业级深度学习推荐系统架构 - [[DeepFM] A Factorization-Machine based Neural Network for CTR Prediction (HIT-Huawei 2017)](https://github.com/wzhe06/Ad-papers/blob/master/Deep%20Learning%20CTR%20Prediction/%5BDeepFM%5D%20A%20Factorization-Machine%20based%20Neural%20Network%20for%20CTR%20Prediction%20%28HIT-Huawei%202017%29.pdf)
- [[NFM] Neural Factorization Machines for Sparse Predictive Analytics (NUS 2017)](https://github.com/wzhe06/Ad-papers/blob/master/Deep%20Learning%20CTR%20Prediction/%5BNFM%5D%20Neural%20Factorization%20Machines%20for%20Sparse%20Predictive%20Analytics%20%28NUS%202017%29.pdf)
-## 其他相关资源 +## Extra Resources - [Papers on Computational Advertising](https://github.com/wzhe06/Ad-papers)
- [Papers on Recommender System](https://github.com/wzhe06/Ad-papers)
- [CTR Model Based on Spark](https://github.com/wzhe06/SparkCTR)
-## Learning Notes - -问题 1:因为没有项目经验,想知道把 Sparrow Recys 项目 git clone 到本地之后,怎么运行这个 Maven project? - -这里我再重新描述一下整个安装和执行的过程,详细来说一共有 6 步: - -1. 安装 IDEA。到这个地址下载 IDE,安装 IDEA 后,打开 IDEA; -2. 在 IDEA 中打开项目。选择 File->Open-> 选择 git clone 到的项目根目录,就可以把项目导入到 IDEA; -3. 配置 maven project。我们在 IDEA 的项目结构树的 pom.xml 上点击右键,设置为 maven project(最新的 IDE 版本也可能不用)就可以了; -4. 配置 SDK。Sparrow Recsys 使用了 Java8,Scala2.11 的编译环境,你可以在 File->Project Structure->Project 中配置 Java SDK,并在 Global Libraries 中配置 Scala SDK; -5. 运行推荐服务器。我们找到类文件 class RecSysServer(com.wzhe.sparrowrecsys.online.RecSysServer),右键点击 -> run; -6. 打开 Sparrow Recsys 首页,在浏览器中输入 http://localhost:6010/ ,当看到 Sparrow RecSys 首页的时候,就说明你整个配置和安装成功了。 - -问题 2:在项目中没有找到“为你推荐页”,也没有看到一些项目介绍中提到的推荐算法,是我安装过程中出错了吗? - -这里我再强调说明一下,你没有安装错,Sparrow Recsys 这个项目是随着课程的进展逐渐完善起来的。所以如果在你学习的时候课程还未完结,Sparrow Recsys 中可能会缺少课程还未进行到的模块。比如为你推荐这个功能是在课程的“推荐模型篇”中加入的,所以具体的内容我也会在之后的课程中再加入。但课程已经讲解过或提到过的部分,一定会在 Sparrow Recsys 中有对应的实践代码。课程相关的知识误区除了安装问题之外,我还发现同学们在学习的过程中对某些知识点有疑惑,那下面我就帮同学们来解答一些典型的疑惑。 - -问题 3:网上资料的大部分观点认为协同过滤这样的传统方法应该是在召回层,但我们课程中把协同过滤放在了排序(精排),这是为什么呢? - -这是个好问题。我们知道,五六年前的传统推荐系统不少还在使用协同过滤作为主排序模型,但这几年它就被慢慢淘汰了,排序层变成了以深度学习推荐模型为主的复杂模型。不过,因为协同过滤类算法比较简单,线上计算过程也很高效,比如矩阵分解之后可以进行 embedding 快速召回,所以放在召回层也完全适用。在这门课程中,我们总结的推荐系统架构是一个比较经典的架构,但你也没必要认为它就是无法改变的真理。在实际应用场景之中,我希望你能根据业务特点灵活运用。 - -问题 4:像多模态或者是通过其它预训练方法得到的向量,直接加到推荐排序模型作为特征的话,感觉没什么效果,我理解是预训练学习的目标和排序学习目标并不一致。这个问题老师是怎么看的? - -首先,我觉得这是一个很好的业务实践的问题。多模态指的是在推荐系统中引入视频、图片、语音等多种不同形式的数据和特征,希望以此来提升推荐效果。在实际的业务应用里,确实存在多模态特征效果不强的问题。结合我的实践经验,我会觉得问题根源是因为,目前多模态的技术本质上还处于比较初期的阶段。比如说,我们可以用一些 CV 的技术去处理视频图像,识别出其中的汽车、树木、人物等等。但你要说这些物品对最终的推荐效果到底有没有影响,比如说视频中出现汽车到底对用户的点击率影响有多大,我觉得还是比较微弱的,它可能远不及知名演员这个要素的影响大。当然,我一直强调所有的效果都要跟业务场景紧密结合起来,所以多模态到底有没有作用,根本无法一概而论,还是跟你的使用方法和对业务的理解强关联。比如在短视频推荐中,如果你能精确识别出视频中的明星是哪位,再用它作为推荐特征,我想肯定对最终的推荐效果有正向影响。 - -问题 5:对训练数据中的某项特征进行平方或者开方,是为了改变训练数据的分布。训练数据的分布被改变后,训练出来的模型岂不是不能正确拟合训练数据了? - -这个也是一个常见的误区,如果你有这样的问题,说明你还没有弄明白特征的分布和训练数据的分布之间的关系。对训练数据中的某个特征进行开方或者平方操作,本质上是改变了特征的分布,并不是训练数据的分布。特征的分布和训练数据的分布没有本质的联系,只要你不改变训练数据 label 的分布,最终预测出的结果都应该是符合数据本身分布的。因为你要预测的是 label,并不是特征本身。而且在最终的预测过程中,这些开方、平方的特征处理操作是在模型推断过程中复现的,本质上可以看作是模型的一部分,所以不存在改变数据分布的问题。 - -问题 6:“为了使 Graph Embedding 的结果能够表达网络的‘结构性’,在随机游走的过程中,我们需要让游走的过程更倾向于 BFS(Breadth First Search,宽度优先搜索)”。这里应该是 DFS 吧? - -并且同质性是使用 BFS。这是第 7 讲中的一个知识点,这个疑问非常地常见,因为 BFS、DFS 与结构性、同质性的关系本身确实有一点反直觉。这也是我们在学习 Node2vec 模型的时候经常会有的问题,也推荐其他有疑问的同学关注一下。在这里,我需要再强调一下,课程中的描述是完全正确的,也就是为了使 Graph Embedding 的结果能够表达网络的“结构性”,在随机游走的过程中,我们需要让游走的过程更倾向于 BFS;为了表达“同质性”,需要倾向于 DFS。我们一定要厘清它们之间的正确关系。这里,我直接把 Node2vec 原论文中的论述贴在了下面,你直接参考原文,会理解得更深刻一些。 - -> We observe that BFS and DFS strategies play a key role in producing representations that reflect either of the above equivalences. In particular, the neighborhoods sampled by BFS lead to embeddings that correspond closely to structural equivalence. The opposite is true for DFS which can explore larger parts of the network as it can move further away from the source node u (with sample size k being fixed). In DFS, the sampled nodes more accurately reflect a macro-view of the neighborhood which is essential in inferring communities based on homophily. - -> 参考译文:我们观察到,BFS 和 DFS 策略在产生向量表达时发挥着关 -> 关于推荐系统的深入思考解决了一些常见的知识性的疑问,我们再来看看一些关于课程具体内容的延伸思考。我觉得这些问题都提得都很好,说明同学们学习的时候都有在认真思考,同时,我也鼓励大家都带着问题来学习,把自己的思考分享出来,这也能帮助到更多的同学。 - -问题 7:老师,我注意到 Flink 最近更新比较频繁,号称可以做到流批一体分析,甚至 ETL 领域好像也可以用起来。那我们在设计系统架构的时候直接用 Flink 取代 Spark,让 ETL 和实时部分统一到一个架构上是否可行呢? - -其实这也是大数据工程师们一直追求的批流一体的 Kappa 架构。在 Kappa 架构的实践中,工程师们遇到的困难也不少。一是一些历史遗留问题,比如当前很多公司的数据体系大部分是建立在 Spark 基础上的,直接用 Flink 完全替代肯定有风险,所以很多公司还沿用着批流混合的 Lambda 架构。另外是 Spark 和 Flink 发展的问题,Flink 在进化的同时 Spark 也在发展,比如 Spark 最近发展的 Structured Streaming 就是为了跟 Flink 竞争,而且 Spark 本身的社区成熟程度和这么多年的积累还是超过目前的 Flink 的,所以也难说 Flink 会完全替代 Spark。但毫无疑问,批流一体是未来的方向,业内的工程师们也都在往这个方向努力。但我个人觉得 Spark 和 Flink 会长期共存、共同发展。 - -问题 8:老师,请问关于大数据数据出口的那部分内容,请问实时的用户推荐请求也是会先经过大数据处理,生成可供线上推理的数据吗? - -就是针对文中大数据出口的第二点。这是第一节课的课后留言,你可以先回忆一下第一节的内容,然后再听我讲。在推荐服务器做线上推断时,实时用户请求里面包含的特征一般是直接在服务器内部提取出来的,所以肯定不需要再在数据流中走一遍。但是线上请求数据最终还是会落盘,生成日志数据。这个过程中,一些流处理和批处理的平台会对这些数据做进一步处理,生成今后可供我们使用的特征以及训练用样本。 - -问题 9:王老师,在线预测的时候,模型所需的特征是直接从数据库读取,还是在线实时组装? - -我在想如果只是用户或者物品自身的特征的话,可以从数据库读取,但如果是用户和物品的交叉特征的话,是不是必须实时组装?非常好的点。一般来说如果组合特征可以在线处理,最好能够在线处理,因为组合特征有组合爆炸问题,为了节约宝贵的存储资源,我们一般不直接存储。但对于一些不得不存储的组合特征,比如用户 x 物品的曝光、点击记录,如果线上模型需要的话,还是要存储到数据库中的,因为这些特征你没办法在线组合。 - -问题 10:为什么深度学习的结构特点不利于稀疏特征向量的处理呢? - -首先,我想说这个问题问得太好了,如果不解决这个问题,那整个 Embedding 技术的意义就没有了,所以我也希望大家都能好好思考一下这个问题。一方面,如果我们深入到神经网络的梯度下降学习过程就会发现,特征过于稀疏会导致整个网络的收敛非常慢,因为每一个样本的学习只有极少数的权重会得到更新,这在样本数量有限的情况下会导致模型不收敛。另一个方面,One-hot 类稀疏特征的维度往往非常地大,可能会达到千万甚至亿的级别,如果直接连接进入深度学习网络,那整个模型的参数数量会非常庞大,这对于一般公司的算力开销来说都是吃不消的。因此,我们往往会先通过 Embedding 把原始稀疏特征稠密化,然后再输入复杂的深度学习网络进行训练,这相当于把原始特征向量跟上层复杂深度学习网络做一个隔离。好了,这节课就到这里。 - -非常感谢前 8 节对内容有深度思考和提问的同学,你们的每个问题都很精彩。在接下来的课程中,欢迎你继续畅所欲言,把留言区这个工具好好利用起来,我们一起进步! +END From d613fe0bf8472b35b4db98049971447639cecc89 Mon Sep 17 00:00:00 2001 From: "Chris (Caihao) Cui" Date: Thu, 30 Jun 2022 11:07:38 +1000 Subject: [PATCH 5/5] =?UTF-8?q?=F0=9F=93=9D=20Add=20arch=20image=20in=20En?= =?UTF-8?q?glish?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 +- docs/sparrowrecsysarch_en.jpg | Bin 0 -> 402496 bytes 2 files changed, 1 insertion(+), 1 deletion(-) create mode 100644 docs/sparrowrecsysarch_en.jpg diff --git a/README.md b/README.md index 6addaf11..14eb136d 100644 --- a/README.md +++ b/README.md @@ -26,7 +26,7 @@ The project data comes from the open-source movie dataset [MovieLens](https://gr ## SparrowRecSys Technical Architecture The technical architecture of SparrowRecSys follows the classic industrial-level deep learning recommendation system architecture, including multiple modules such as offline data processing, model training, near-line stream processing, online model service, and front-end recommendation result display. The following is the architecture diagram of SparrowRecSys: -![English Version of SparowRecSys](https://github.com/cuicaihao/Sparrow-Recommender-System/blob/master/docs/sparrowrecsysarch.png?raw=true) +![English Version of SparowRecSys](https://github.com/cuicaihao/Sparrow-Recommender-System/blob/master/docs/sparrowrecsysarch_en.jpg?raw=true) ## SparrowRecSys Deep Learning Model(s) diff --git a/docs/sparrowrecsysarch_en.jpg b/docs/sparrowrecsysarch_en.jpg new file mode 100644 index 0000000000000000000000000000000000000000..2960c91cc3e1e8945b8acc868310c7d86c27b357 GIT binary patch literal 402496 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%0A&><6>onEg^W>Y;qMaJ$#94C|o>4RD^ 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%0A40+FWb^gz9(zOf^0TZU73CJ3-9y zrqztG7kpzrSnnq)lz|xm&G%5`J2<&kRhST@T|s#;%;!!-f9iH9itEBEZF%Mx%NT!l zQ%K^+9LH%C#RxmQ# zRahl8l)fWKt1D9M=mTkxbbAiIBMS0con9g2z!N(khuiO!_-|mx(LD;9#VtC)p+!^w%()=z|Xa>64z{vFlQDaNeKvw1)3exK`g;ME0d4V*3CxnxpoXx zrql(#oxW)7{_fn?RO63cVvY;dTQtoT55Hk$fydyR88Xe{o~IwaHgLR2B2j9)z0Wc8 zi)5t^F6j`i4+>pqo|$249IYnBbQP}d@GCyBIrLJ5LcisT z*j^z*S8;tr{=$%!dLQu4CC{pLhXUbAF<*62cMG3gQ@P~mOH$%{_%f@7V3}!O z@hIc0&W`|<y(Ml=z;hVk7q<)hM^z7a%ICC zjU4vZP{AX2`8ca%{p^BPpZXVa7c@FJzu_s@TK^L7xU!m&e<0q$L_jsw5Ximyj7H}f z0zRx=3@&O<(kOZtOuW#kqO4pvaoE@n?W#D~q~82QZ0KW%s>+4@czN!-4Y#wex_5bG zDn;dhBGt<;ndkSPRIs5J%z$WtlOb#ZD9b>Rij+d!j`sk)w~X86KXs(1H4^Wsm;04o zxt`cDXPI_0;!2+Ok%3i{#a+9v>{!NuSd@gtQvm-7yuWRBnc8`}2T)n^O(NNmBT`+X z-OEmef#Dy^yW9$!9_LjiMB2(!8K;SUGv$hUo^k*>fcHR$Vl?5Cz^IUiP4nr+I&04{wsAZRl#Zq90jF=yh&hwA41tznqWFUh| z>aELF0+JRNYvuJimQH9oYb2*wU$e=nrDjwTI+lk# zYYf3`u?UB1aKzmh0frJ#e?0`tlTiVB_*4jnNKD42eKBN)_IZeo#2T zV|TUETD7&{o;yx$dir4n-F^66{=neLgZ7vAhp=adU*C=ednHJb!oOY&PBB)8*VlW= zyBYpJO(=Q2udc;Z$HG16S@J_H#fP&___s~&R<$xuj$@TMk$2PLU+l>`V=`J)wlgjA z4QZ5y#$NgBbyikUMlbls_6b)(r73iezN1LYagYutVyH}xA+ z-RQ@~>+im|sQC#mXuVU6u=gY$crI?_-Yx^YJU-$JJMZin?Zq#Y_tFb$P|exd*&pEV zuXMOM_4Z7qZugGuPMo;EEGnwgeeu23aB>Q~iaFgVxb!#z_PCQ&hlN!>GlY0)?#v3t zemba=)tu8oIIZnW8dXZ+`jJ;yq_HBbQTAf^w1sb{Y(s5}n1T46W3kbnjhpLYX65jq z5PVDztoV>3Oxtj#e!D))+(U`}4yVhxf3YibzfGIbi)W!ySB#acK>^8nLgDWbuKba| zTaY1!#AQGv;tAIQA`xJtuxe|}EzESJy9wZ+HKdA!-bNFST1g4yQJ*eaP7+!dggP32 z?6vxm`s1eZ(Dx)=jW7MCRY4z=7ICbdg58C=fh?|4s-xBS4{4S8p;4aFe9yj9*QPIv`=i|7cr z-kI$(H#d)kqn+pEZ%LS*NgjS>`LgeB7F(0dT@FkH>l;*@IWteU@_*cL^(de@i4nd6 zYxuh@OFA@gJ3A~~Z~bx7%QI=`L-x|}AeRq#9VShmSswbP;dIilwx8H(qBz^J9K8BXVhyyX+no=aifR2+WiL!@p zdFEAwU3~jC50j|X;xV#iBxE9ulZ#XQRs$xUfnq*}ZW5#M1zD^nh>wAAK3ezG=*sB# z92@Jy1etuFIHAaXZCT0%~CbSRC7`&s& z0D8oZA;x?gq|W>3w(1F$5q-Zf*T83Wimf}^4;zYyI$X=%ku7x0?BtqFM3uq9!od0Z zMXg2DMQTzFo`P;;@S|#mIl35|F+zG-CvyT&F6H_}#%hhgR>} zuIyAA(gx;sOE`EYcl?PoFA8xcfsEf|7)+tpiY&U^(TSHU$|84+k3!E{G%ExWp6T}ipvk7$DS|Jr(uVK`bXRPxxt`Q=m#@roJV7JGD}7Z@7xTFEJG6J zZZsr59}{XW+j{vK>1oJ80alU_Uo@NGHlLoBN;mP;P=;q;p z2M8}K$SX|GC&NuzWq2QlJ-(Z(KBVFL8&`_UgC0#JTPvqCS4PoM1qYr=4PgEX5u~j7RGTpF^RWi0x3V zk}Ymf-wzTQz^PVDrkOZNC+|=T2mA@6x5(P))7I{m4@p=3X6Ujt@Xhw?MxJ zMVKGinNAU>g|-i%D5*IV!+`50ej2A7iV_?i-%iZ0QxQIG-pJtJdNL=b-<4*_OoeXX zL(>6GcGE~b1s@hV*xT6dAz!BKt@C|Bt>mzg62FlC*9kVZgKR=e?m|JacCpVN zf6Lc?z!(d~JZLxj+38*)&vJh9u=mUoy-S>IKNqb@J}GflNdLF3 z9JkD?0}VCC(ibe2N;^$NngpNv*mw|cEs8X>^-a+Hf%Y()C94%GM1W}iQ9hL!uhDXTE=n9{ndd#Yx{~XS=hh37=PZ>cuis|rz79787fMe z(W9%f1|eQGVkojmB=qy63gjEq+e}BNk|guZO7F;VLY_U|zy07E^C4Wp9c%nex-W=> z0*&<6As$>csg7ZvB-&EmhGyudUFloRZyCFCa#!fSMSI_bJW=k_7o}5%+PxX=7ER)d zR%QV&bAx%o1GU4$@)k3<=$oNh014QUKmt>H8ej+x(B)}3#yM3StDVNH1=?dVEstn! zi$CZoejcj@_hNV+v$$%&dLZXB-zpp<_2;6>VnqSDJH12|7wT;*KQVJyWs zrY{%i#tWlwQfzb%tiDCh5@*HdtK4has zM}XD}KO*605sz#n$_ z^=r38DBc;6W@pZr(rp-4l$FmYf^-c;c>-tGeyrP?6wFMAoPX$}k6b&WUGDlYEjYhi z!&>wO>Bn`8AvM!WuLTE;%#Grm=H&OH%g1t1Q?|3w^58sF^c)3=e zoI8dexGnzNUzkw&O4W^y549{1eBeE1Fj@&Eg7!b&1^Vj` z*oeTmN*tr8-gj-eEC#7b3eGxFuw!9iTZ{{}z=b!#JZxJ3=N--MSs>NS?qWzF3jJm+ zsE#AZ`(Vk6^9r~SV(u?xhZTNjC_9ZQzbVC+1yF1ss$!J}&o_u!&y*Lx=e~!U`sIq6 znGs8>ecUuvir>t{^*o(yM>K8d&bW%+H=Hl~VAVYNvYXy+?N!rPv#5s83~;;jEui)L z8>YJ#U-UV8rh>@LQ0VKCx-qU5b!WsRHj;vAk(!J?X1GJX5_-M7+nBR?+QctyX-Dv7 z$Pr;N1)6Vx@-O~TXY;?~GmQS9I^gq2~Ynu zz}~KqcK1*HFv^)}cv1myJH{scTBCA#bR_FLf*<;*ZT%`3J4-|Kt>yM6(B4UxK3*yA z@v0w4OAsIPjwF#nIHzPW;=dFZ762!~0G2hG#CkT4JEHN~XqzsfMs6-Kv*5|tt*^IY zYn!i?m{`*+`uc#>YXqJYjaa$@Ef9Ow*;Y~djMKlCq9@ow1=7$&7RWW4*O+(HsvMcF zApg+mB?qrCbX}k&esG6EEXPs6)$}`OAj$i1uyi<67{Mr6#ug7;Akp2Y2&|PR)NTui@*$A(j0Gd8d=?D8I@V)emem>&(Bn?iHb)?P z%GTKyXEA%%*>(}I%q@5Z2lO0XX9M*7Kvi7=`4iMV$ME3UEmXz84}s9s$U2)I2=A1c z=ykS)W%?#P#I!ZEO2h90!*(}eg`ilQ@n0FxAD@Jnaq7v1ix~d$QqCHayBkOtBGD{G+H6 zRV)NsfUX=5)GWmUvEyHmqUGC}T{uYY>qJ!Km}Z8nTaY9F57XxC+DOONued;~+zR?H zzTx&okly@$dAc$Kx5{rMHr{a*GOH?NCLzbQ zz?pcudDZ4nq_a9Vw!q=j#QoZ~UFjGr=cx{+$usDqI&pOY%VL(mrp$XEK*aoXoo!_n zUyHx=4yR97hYnHk)0HNx6g)*0<{U%Qww8m$3SUQwY*PJ?aJ z;0ueX+@JxvUC?RDd@Z`)h^$&~B6KY`H!*2s_LRBrEvajuZ@FJ4Xl~4u?MEJ)my6=jPX3Vm(OYb~W6Mn;S!Kq*t$G7>v(UfvRCcb!eL)xl!&Xalq=fBZ8uuw)6>nmktj{nDE_zY~lY zjYQkCmt}WaX`wMmAVn^Xar^I}p8g}(WPqgfei(j?7XmA14h3-8L!p={ixCt23{sm6Fs88HU%ngIJLpw`^x|KZ%V&c{J>Cuw-@=& znw$|Vh!Z_pQRoDZ+VY#xyYMstI?n$f@5{#;-;rf`n_3pcpAuLi(E%MQH=n1 zinJidtO|o-Pzkj3CfHd|sM&wIktGZ}lUgmvB2n`KChbc`mT0t!{kOhXp+;H~_AfSl z-;sJhdBw`m8XMP{c|88oWOh@zOp$wK-04&`YUYC~3Hag#YHy6Xc(C-Dj#q&xEiIXR zbvsNW3yw&!ZN|TF4&`wZ8ETR6=SVL(_r>mHR9nf7 zomcMJ#G}+%-w^pRwaEVaby08qcM_~xuTn2f-I>eSTh^_GCii|h$v~)BA#Rad8JuHg~fn(*$X)N{W@iC6)R*sBmSiwt8!q? zV!Ra-9|YWOoOce?TMnIN^y7{kf_q=D1PQUGFEUVR;H9h>oe7BunVKRr5{w4=g+*=6 z77TtUX1!~YNo8Y?GlqC=#F%+Vx0o375=cyZR3!4Y5?WwNgb)>-k~yTyQIzqZmtXyj zLF&mpviQVf$K>N%JspmvBG?Vh>owwi+pULNS>fM3+qlP%u?~^EzU(*FYaLp66Cdd} zAE2aa^Lb^r9&`vrF+@dTi%dWn$79wJl&qqvWa03JVS)AvA(f1GR<33Zw?k-C3ko^4 zLXUR1=WB(1^ZKpvpcgXp>d#uT?Zfo#ORU{W*+1Kks=v6J=X11d*%`MrAbLw zy*^I+L!4W*=7`&qs6`f>nOpB2?8u+k*t`ta*-m9V{A~ME zU98(qm}dNDolV%>I(GaDeEuybw^`1OnZdpLWoBNcL^x}y&Gx6Ssijo~F`w$_5Pqq! z7obD%PUVvOMo->vyn4Cny<})-PF!_CrY>oBvRN|>S8iBa>%Sw?w8SCVnFMh|ax#@DS~;PH1bQE(GcX+n#8 ztcn>|k9l9~KJ@f`Z)SM>%0!?{nX*-I?4)geq;=3vrNbFQGfrOKO@&1%g?5PX_~7Gm zDMN@prVvAq^&LwwLlAVy6Au}|^z*O<+3yiUmLyd9$%NZkOprPtlWdJ$J5iA%wOh0` zc;E8?c`287tG|6-&ZGZuZ6}gugnjH}lQLjrlX|wRdqy1@8|3vra zvhy^T&j3lFcRSVTS0~7VnvTP?rm8aWcoGPX3Pon7$uSXC>J-OthWeYUuEMuqze|Ch z`8i^4R-1L;Zr;?dzVEb3+pev%-Rx#uY@>M7KEd4}*5+ij4@)wmF$#K=%zBM7*^Jil zOyvi6?taSOHR~~-LgoMS_iSXInfioh)Mv8L|Mz^ob zZE-K^x0l|Yk#yjdIJn?tECF$zs>;|ENDFGmJF4=wfJW)IAiXZNT#eDw1uwqj4Or@G zi6eA=v#hhO{UCFz^lKnCo4p{sF!G}F&^+_X;(l`C&LZc=7q3NY8M(yg!%f-8WZhFM zeUY9OS^zdX0jl*Ta5`BmNWBxIOwbQFkT$H9ogzN%y7g)CVDJa4+xIRZR-L}(jXvqa zb(tW7jNt%ELG|(Q2IRxFp~Occm5PHyLsJ&<2h7`b8%4jIAC$O@AC}n^rw1uOl5%iA z6-86)hU{Vh8olQD@(FgMd}{~Xd5-=9Lpq*Gi+Ki6}c?0{p=wuj+wx%#>L z6ka*vW^S1%9A+q4btzQxtzGSFT)irM%ylIE9&3Bhe%O%i6tu5XSq<@!B~0xOO^AM- zS+6|zHZ*rm#r*IMwx+Qb*WJeb1a6K-G7oPIl1)d9)sCfjtA+-hpavS0^b|&kSMQqE zKVPYrJnZ_|R`Y?u10l~i1B7#PT>3Eyu}jWHZMiuBJS|q5sPZCJ@?BZP1&ad1_e3k3 z$!tHQc@-ZR02+{bBgNE^{Qma=dP8s~=N0AU^DgyG*;a#-9o!el$ip(99*G5&D?WIj zo$~z5;7861=2M823&7~a0Tfw=xD9fI5DnS>ahe&a$~sfc^CpR8(Nf3zvlr@Rt6K!k z?6-3Zu?e8U@g;3D@$?fxr$BZQ4z}MQ!;eoqSZbRASN5>hH~$#j&reu$m-W$lc#f*D zO~tsvX{3f%?19_6hC3w;!Ge(q(4o7JqF6$GC5?#fh04e}LUc)%O&_W?b3otCL%Ew2 zYHp%z;oCPSd*QqRPxMn})KPn!?}xKr^YX?M&Rd8YpX}EvFUsmQ@>W?vTCrPjmoOz+^EFZk)*H_r?lvg|Ik>$W|pHOQMW~Nt!L!JXSQuhK2gK1;GS_e6VnS(F5>&pG?8xQpks6+|ApSu zJ?OMWQU@t4kUq+%x$`^Wv(lMJ@1ilT-1~)bJQ$52Q;Oex7B5uO29SKW@u6jUN#U~< z7L;*X@Kq%){vnmO3(MHyD_ZvCz4Co^4fGaQ`A*z36HOe)Ooj(0 z;LOxvmv%#9g7xy*-c@X$-wclK%4&g%+a7pSxYG~%H?}qSn)4s9aNXX-(OU4S`BCnK z!FY@(r?dU0kDlju>e#~ffFZ;JL+Hp*Euv~ysl(~6j<-g5JfNK}<_?YU(1%PH%bO7j z9QfzQ)A#bIou#~QyykI@rGaUHwjo{H;9!jex&_$Smga&8$mvztWNo|_2 z3V3T+9lH0@;)lJ39OgRqJARC{{@U!cAJanQz<^F=%_+PaA_mFFK;HZ?ohk-Ddhblo zPWqlv+ppZcOmCBMA!U6TG4+dirm$z%?);ZrO2tctI@nvDt%rP0ywud&f7UFD5NCdt z(WHfppU!CeDNg$h1Q+%(19f$4F%LnCD0-57GQH6Got3CVVR_Nvkc(eKMx^6iuZMbO zh=#E9@6>jrfe<~U1~7pl?TL@(DUPE__2t$_>w9J%``mPO_Is!P+LKF!$9YSW!1eoi zeVSV&KaJyeW5gz}^3Ifi#ma$c_d{(h{B(Ojni4mGVzuNyx>4*}A9Mai!lTU}CS}bg zqOYD|QE{f=rM`u9z~7fbG9!!dgiJE#u`QV>6{JU%%31rCoo&_N=V>ZKu>Bh0n-gi{ z%toJ;Z+#-jp?EOD+pie=aMIyQR(`aUqGHB)NkEERE z?UyH?#&cC^1Q`|=Qf0Fhhp+Tm4o#UjSryJY?`RUg*A(^4U=ybY4@Q91jM+wsnE^#k zj`Pg214u_#!GcbP5M^P)rsIJ76H!vCk*mA@mq&*RWxNec1w=1zy0d+?lf^YjMUUzO zquU?0^0|ti8NI9;MZiWc8__GR8W*NCGM1&s^VKvz6+iEmzUe-7CHzSNw(@For2T4{ zrLXl)37wl)pI(*}98-)cKWli^TF~bXUP+p+3?HSR4cf+ht;3)B85NQ$pHGz!m6U~M zx#d*e|Jd>6!!v&ASM>I>aEV)AaN%lLSQ%mnXw@gBa&|D}sVd6mD`dHJspn}|t@>;p zKX-^DU45UpU%7pD^hi*|qM{Nh;ecT5>QMlih=zITW13b~b&mFYQN0 zU?%OVg^_;l5+0IX%l|*@y=PQYYt$}^TTuZOrS~XRKtOsY+d>zR-a)0;2uPEVC`fMt z0s=xrq)C$!kQ(XIrFT*gk)BXOAZ4Gmzkm1M?~XIhIe*S~#`(d3F-Wpj-ZkI(&hk9Z zto_9boDa+zUcf^DmNY623I)L0C%CkD4SqZtll^5;GzZIkZAI$cT%luMU!|i;x~moM zZj!-1>(|3{w*I@!$0yDsIlXX_s56CioW|HpaP9*m_jhCoE;e}Ow4+_4o!}1Zo`gGh zYs$-&^+g(o{p5y*Q^v1Me2xoHM+8*i4@}!$hA$G;f)dRuch=ZG*DS>;%g8mG=z93I z6^aq;X$;%sCxAKL?39D5ljeXWoF|B-X^DohKAu^dqF7?uRu;b+S`90ds=KCKfjJ%P zYh;B9GaY`7L{fRYKmf~Nv<5b#R<>hQM#`s2hon7eEf`A@DVVlFx+eZjSk{pAlNprb zuNxZC^4HQ?qWqvl65;@|HSIFo?Gwd^luoc)THEhht61`C#`~Nb`}D~ny=CK2TF^t= zEmgav;QZRieOW{puy~!`N}vXr-Ab}FaJ$YFjw?=}j01F!ljyhe{x61)!UaQ2yIj09 zF~cv!xprh5KW-_G>_;rr)Q%i_KFj7%(!grqnPZRLN zQBVNfcb&N#o~EUlI@LRI2NF#x9VZ#rOP{f6<64zuEHF)LMq8{ z;Ldwz--?q%f%m(inM-`I%)bZc0g)fbR&!q*2&-X$+C%2&gZ$0?LXP zoFgXSW%^R={2cvvZ1k&bv=yd|h@R;#g<-^mkwA$heZERQS2;|1{6uV`iM`WY^KsFX zvqCRDuVfx@&gz=RN8!d(#%|KpVJyU2075_=36vwE-$aV3|Dp&ciz36IpT3 zFZj-Es5Oi5^#R4aZvWztjECRDbS$H(<9R3*IOY`^Z$W)PTqc>q@tMR#0+yiLAHkGF zwX-)bWzx*!GxEC<7@j@*bK!%bl2WW3WkKk?(0LkzIDr`um?WTapaG)?7|?4ZDy~p- zE`xWRnigsd1xYI=IOtvq6;mA{#v{|?dmLPf-r?` zXY#-;F{NF%U)&0rC~uD*Pn^8DEvn2c34gEpU9xZn)-NHKf^0>P43O`)f0?Kr=e%Z@ zQocH#Re8KRTko?Hy1KEi+iyaWI-#(TG2mV@A{qcPb&4<6G(S~s>ab^$9KFwEYaMGV zhK#a_mW0-P+4=E3mM%K2Ne1k_zpy$*3~HfPuMsRuHhS`nRFA!a+peFyWzuWt=>A@> z*Qa+Y{qeUa7Bv`cxCk8oh&dj_2D=99ZoTxnot=Dn6>2!8Vd^6_TZYq@smcw;KHraX z%bV4?A@NKhxsH)@I>VisOS=G@Ml~QPEK@`@p1B_pw^-H#zp%v-v<$oyeKJaxg0(qn(*{vqsf;oBqR5%puT~rk;>pEca2rnq~E46v9+me50VPT zbO33ofeD>qv34cYB5{N4Kgs(iB|9G;_%sURpHjo29{97)ftB_3?F%fgZWK1JfdO3y z8bbsgWHs4n!bh>HD_pZ~Y(~BDQkt{-Qc^w1Aedp*5bKr}c)g1&LFsMCliw&60Bi}G zA0`I;1Y=fLtSwvdu~`vcNDbKEEx43bpu)QNZV?bk6wcypHAF90`#tG~;7AYl-YKc-nb8lX`{}k(I&a0b&Hid} zr;`;PF3}e~o|vD^R=@iJ%N(HEgYfcd%HM9CGxTYp@&LI^Eq-k+r>9y7H`lG{4#4DB zJN%oiIEg8(;>G?de;$a_+uB^TqPMwt!TL9f!fDv2C5E@Aupn^g1PX8YikDhebyN1! zw)$L5q2^h^r>2GLmC_b(pNC&aJwAX?c$urW>}n}2dt?1)=E8Q6M8yc7U~m^JSE&RT z6Q~YTJSwAbuF*_632C&B7qwJ1+i4v>a>25y3x4y5jkXvYZ#sah2I^s}OhDvb_>+jmXcD^uRo*W?~ts z2}@8@*% z#a^j1j^Tl-;y#Vx9^n#>4Rq}VJkfM<*>UKr{i-)l@NvqU3}u%94F*0#+H$|bN$rL% zu6nhC0Js}@@_E`I=SdES06VE{jn$=Qkjd97O7l_ommPIxq(UMyZ}HXS^4d*x8e=e- zlQw(?$k$xLL0)0-AxWP%R~hlJk}sY*OnO+_Sj(iJQy34Y_BDjUJ!h}s3W=rHH`mpk zo3-y(M!YOc<>gMyV&~y&D!Z&a8alEJ@#ASK2%e@2k&uK+Eckm`Y+hPFI9cFkJy3N# zDt~yQma_c%sf90n7q|47o`ofSK|CYFP0$8Va|Hwm=-*QTXXFJ?cH{cc=V8NO4mQ%H zx}>}dV_(E)$I&L*Qg~BD{6{(d`~;i%&XEk+Jj%y*V5x;8bc3Rf)d=;mfx)< zHG8ab{3h@I#iDCz6+ljFr;FPED?1-&KF9i(Iu8{|#kYRdezBwVeY#23oxrRE+8#b7xx9?=?i*Z51o|LEzSmtP*@~zA zkMPH$>iy8sYaZ@-$jqI+@pmZi@kB7I0^%CHODf-hz)|K4OdSg|3Jzjlt{@&~DH!24 zu4rJE(9bhNLivsrsjRdaR5SBV1^GJ3Y^ooOWKOQ4NcxoPP1yDc4h94V4#}-rB3t#< zV}2|T#aIgkaI;g!VRMKBDR`F{ct;GVs!`A1uf0QBB3R=fDR2zNIbroq3keiKzSrDy zm1oN2r-q93(M*rSp#asK%><*o3&>#+b!WA%dc&CKFloJuAFM+f2Ff>cShe{& z1N+#xWS5Xb@|2N5Q8kG*vP6yD^t7Kp3jBk3utukE^X2If+A#5muL!yO=g(CDZY(9{WRs&T6`cxyGm`r z6XVE?hWPLuUR?q_T0{GbP1vV?*Mk}tRCs9dkFw17R{|;pn6oWB{9t_l9@<(OKo)gj zAJ{Spq<>`qO9M)baNAu)%T7ZJTK;ZKMu zNyG*!;#nfvZ1zHkmiz?mm)%TavhMS^Pfm*;&mIOYr3usyy_pw_ zF|!qTd6NU!&F#5K-5SRS2ReC52!N3yZU2dj;b6_>P|rqiPvRqVR`RM{mV|lK$)>u@ zzL?ud2kYsn^Vx%#ZLB4AY?}u|3^38+tQ5|uW`UaI9v|hIn%(1aX!d7X{QIWRg zSEQ2F-Gv;v@Y@v~txXfjh#+S{iVn3C?B@JNK&A-~>65wP5Ej0-K~_+UEh<4TZOVu} zx~jk1mrjSbA75m?ka#wt#eobR*12XtWvjx&Pbnvec6I2A>1UhY0p|_{WhaGp-ZDlP?z76I;-UPLX6xg_Y zJF3M^8Bycl?uJHctFwpQ_+=wD&ooIR73rb7Hm^lh0l`#z9rwq>=iCoS1?0&8eRQYKC_aJ)xA07a1g6aXo+9}W`VJh)%7bi|I= z@W^}SIa3tdJ^jw!sMBg@ZzsDjZ690&y^6h435p$&f3(JATqSh7TWj`4UfLap-*a*y ztskW44iE*PhJn}S7Nj16Ar}2w=9rlos#4$C*wis`G(1@SX}V_Dbd4!U*k2@D<^4#v zQe@HRO{Zf5E7o}ji%0$Ke4SKm(sA&+P|`5$Nqa|j_@1ar>g@@4k%F{)4jVg6pB$Db zm$ek9Q@6+2y+iXpkGxz*3{j!=J=;!|1VE~=dsn%a2)_yqE?w}>VYO>2P2aM9>6le7 z>@Rp}WX8YxnH)>6M6rC&07v2`{o_Zn~6wrc=1^aDYO)KM{euP0{ z@q8=|BO#nj1~o!?^#w0wKiu3N9eNk;7tGafn)t@IaWiDh-QkoefE_Fxo$Ub)!{(-Wrr$O;+9vTi`2AI9jd47#myVW$2;#NoIcWZp;C?8k0 z=ciJ4L>#8_;$-SS6?2*zONXXpZ4ONuv-l|r7mVxTuSH`~SHqNzCpCoJUr<#ASswT= ztZ?PXU0+J#UwCFOe7M?PX-%>P4UF?{<>kDAv5=;4^mDPc3P~M?Jt4}<9C-Cl4yPCO zMDKlLuzY``Q1@ePk>oJ|(yk;wg#ne9OF(ME0f|R*Y4BoE>|xElFURALBbBY^?(FzW z6>hB;HS6fF>-=bJjuzr}z>rDHpd1Z<(I&ybymkA2BZGrTC$bo9W0kbh`}Id))kWL; zSsY)K_omCZ&3~1!Rda!Z?aX4@L|kDP!@$^_C=GT(KJA7h9J`SK<;3j@eD^l(!|B!B z%#zw0{?5fyun&1k03xlL&55=vB4`j%5qLWnl{<= zN^A=j|Nba`sZeqeV5`Fu&O8Qcmzvi+`i(9gs8c1$&xU*QTz~!$NvKw^S9#m+kCN0C zJ{T2zt9PrOflKjsAqOF}8^R2mMW4r#)^JQ9rZA`RJ}(>-)zG}aZ}+k1WBt&-)SJ08 zHlJAXkFObWzqTp7naW^nmgwbV=5J+~r?0$Z&z|maFa%YsENo@-nttaYTx6`U*<-6i`W|D& zwc)Q%eqo+gdeNr8_iOy*$^DHZc66UjvhlTQJ^_{v!^U6xs!Dr1S^LzvvfRT$=5<@E@HYb+ z;r-_sH@o^jgg-wjW-H=U9h&vtUlc~4nEe50Q_PC|K3HW63moT^h2=LUKWZfP5dw$1 z@)TrOAN}T6H?c7;x+6U{qH)~Vmima#Z$OjobOPlLi7GEa8-1g@k`c@_a_%2G`1U;1 za19-6x8DU?FeG}DY;h?vy=C7!S!OgmaG51e4_?t>Fa$6yJNfI}dUX>M zfY2nJR(acrb&X#)`6Q%Y?r4|KtKi%|XZ_i}`%+7W_CSYUAJ>Sh>^!vXs-6C#I8rn} zGsI}SvfjjLgZYiEfUbR9gVycQuL@u8jeW+I7_&SsyG+*k_`xpG?A@B@LPW(2-PaVE zsWQ@FQ5fXAmSV^B9z`A-$>L}*uAfK5K5P6&5GV=`<;=Ev+y`&S7>vc~$tgShZUeK> zMzxsQXEnqzX|Z)^FPJdFBcaie=}~*MX`8Lo2C6+#UZU>(uIxZZk4v%#@+AkVoWe$m zsn$YbOkRK8dKr>M-yG|A9N!-L<>?|hyN%!VSDz{0gd11}>PY;A zHew((A13CFVr@6XJ09(GhspGW77F6uq^wDq^xiE9SWhylOWE1WR+%5v{KJUJ*0z2w z*CKFiVBG0nVhD2MK)v`(>psamsjf81+n%PZF(sAd;4La#R033I-c%=LDMHZ7gSVYB zy(ivTDwMQZ{Uk@z7+;hB)+HOjR?JE2hTrs|AiNyIi}@8}m;Bz)Kh=@9{4bpe|D_J) z+X=}j)C0+S@?`CIqvv%UNtI9fr*NFRkaBR0hSEmv(LZ!_o3E0VvdrWVp5~Gtl%)dv zd$MZTNTGQ7en99C2?S8IftOAtQs_jQgm>oE2y2(t0El?RDCDvGn$*`Htio=;v@exJ zaPF!Sdb+@Da8DCXphrj>1!Lp7chzav;q>;sN=rS(o-TgVge#b;6WRKHbXXso_e;jZ zY|V09P)Q}c?NfWL>*Qfh$3ezcq_z{Ed36?E7;)z*)Jn~ILcf1c>WKKF+DNnGEO14j zj7$$3U4-l^lYL0)Sha;>5-(PPV^wml2()EqALuf%6aVY_RM9urr^w>wftR%L?E`1p zl#E}J&~$@=>3?wU}s|PT+M!z zYju7r%;qU=a@M51u$p@IQW)mb2fcqdvUDT2#8ZDUZz=oTi_+?;m6Ne~mKGpYO7A^kC{%iV%M#!s zLfLZ1B?rVn^$M2#{>p|GF}?~C-wfbxD=!ynr%#iJ(1j6yf+~y5Kixe4a!aACG^1&5KbJU1V|}o1C2F+u<9Y@#2Ry zlLAU9HZqVLO1HZzxtbc^FW^W$MZKtqB*h1DJZ)csgh1>MU ze=or+PR|jdX$)jS8txK>!x;+*6B_DFA9=QOVj!27NibT!SDB-kVQ!{{rKgJx4@a8v z#IMFbXh~?p zQhdb|C;bo4JVO|i{NB<_Qh6qftTT>~$y;tO+(K&da}=it)${V=lXL#EhvRvkS;g$6Jh`RR_KqB1NHUD2pU5P znI7syO@Yb6CP3Fa#k}n_sX2Wpp5?GiT_b6)^=u}6kJfi0Ke8`diY%%9(wUULciPH& zwxBI;mD##~#;z+>Y}9Sqfm><|^&7NpUZ%w0%P6dexTY-NCSnP-yVM$I&t`!O1m!5! z9@))q+k7+f-{hMv!bWt_LxPvMSvh_|+dn|h;oE2ofGN_u0v^Q|P??6j0-kN2mJr^! z1E1Ni_93sJFn3KpP-H?ZHzY&jgZz$ms^+$E;S+7C>#E~NhuVrx_L@!P>`CNz=KNm+MT%!B z+K(y?tW7E=bY+V5yC2*2DIjU?`KXXZMw%xDK$%@=2Npbr)`v!dQovp^Bw$NYNRzzJ4`>4`nU+Nj$4 z2B&12L#Hs{q?CYX2SAg|tAl!IKoSjT*-mvAUL`qy^1k66L<;H}6wcwy)Zq>fU1>b^ z{ZTW=a$(szJnF?W_s*fwuwLcM`s!GW&7{L&UPE9uRe7hjUbi2F_uJTMuBLEO zV?{^+8s@T*OcG3P>uT+agQILj&eYlpf6n_IefV8&f6D~ng#Pea)i@$h7mBK*eTO$% z_o9H(WS4R+lyeOfhhkFe%!_QCRM@oyX9lL^B>vk^yi?HIf2-BQz?uV{!_7| z>gvbjGXxNI;Em8EF~}}2zLFSEDj6;H6y2#C?M@L|{YO zqV(;J$!?>KUn}E0vz>3tN10@`ai8krfJ3EA9!R0n5>R!3J8S3x)dS5_Di9I$=H1~L zF<;&c9F|Jr*CB5G)=X1){Nr!^cSEheR4f)uSu4W(B1 z3gL#De2&WEd;E=i^;Mz)d~b7Scn7a$n^`_vd|^1ne0jd;@V5QQh=L|bK=5lZY=C-+`~Dt`-{vV4OND6 z1e|7)b0nAqOFqI|_3m2$!!X{N+av@x!yl;rIugz>*0>Ha*5cS>=d#Rb0~y4ya!YeoN#@_=jz z0|a*+Wk|QjzvrjD1|vOEwD?Kp+LO}`_bw(&M{l>rw8^}ko4gZv`J+Q4s`cJs%tbzI z=Go^@@i>v|)tT5WRsVMxMxv8mp0$4(kA6}(NxQ((G?Snl#re>bW|`TUTqrv%|YhN*Vq^4s|m9E5=rf`-cV^?gF7 zI*yGc25S~U<6>R=03w&dCP^%%*0tXtKLfUg8B`nFrp_G8qKJ;w;KqU!7DZ^5v*Cqi zy?*H|Cdc&+3Z8Q1mmz=r6D7nHtX!F<#=G+EeEC+Al@x~Dd&716UTsQ_>E%EoiwL0;0RDEO4k9foM;C>BWJfuqD`232PLwe7MtlRodz+X~@}wiooL zaVW#VL$J?1jI818O-^14BIX*Lg(xG8JWYbM-xTA6E z_xPuq09^;ukn^Vd%(`3h5s-m6dXJ`k*MVmlVo|Xmyw%lEr+hO)PHHD_n7+HVb-vDo z^s(0m(dWFoa*NN^-BL9rH<(Zh9yF#RmlsWWAYjDAQj)@V79f2X6&YxyMm<7QBC2`f zD6GItFE;|u880dcj_jEQ1&8a;oATA1e+fy=eMVmgytaWD1~0O=5!q<+fxnyCRrd>l}xv7xAT0lpce6*3Fcf%bN!s z!xaNJe|G|Ct*ClnV1Vvx_!Ce92;cOO^+Dw(Cy#$FL|S?Di$k$gdAxw(=Wm%pS(i<` zkM|dJiBAaDJ4pQ4_IGor&KxEDPVzyQa{QwB?5g#h-qK#%rUt(H_7RoSkc=RM0iqQC zQhcY>J;KJ?=yTZyX{job$nI{HRd4*2j-c-I9wJcdsO^v`_%ZgDh zg*oAH)vCR!s&~-U?N1)HRx#n26~-5*ZVFSsbCjiyLPPzX3_WIwH-HcbP&d-L4gEKa zv=5W-LU28t*lt?XIM7h$K77(#h|~AO`5s((uHn;2UH03xu{<*(IMejU>i(f~+NDY! zx_6pr^=TMOhb2g=HcLunExiQQghj^MK-=cESF}q)*V&=~aw{9TfwTi$A(r-Yk$D$5 z#pvm$Yc+201Gs1`M^-rIcitW=TcA%r4bTy9_*F2-v(&{6z4A67s|(Bub;OSq6L=p? z(ilDc2g{)kW{+wa?b%gMkrCy)%bD|+a|gvgy6eWnLadsSS5BKN#mSW z5-yEx+v!%5+Q(^^Hp`iPk+ubi9#$RhD{U~dd;LCtAoD;Db&1gS9oz_x>(rvn72d|v zDmbG=vQHjNXeeIoYR)vxP)d-lDQ#sO_@N7zP`F3#=0goPQk=wY^*;-GzvgrMi)ltv z>!P~X@7d0>-39CTa3$;S$Ur{cazfTqMNzD4nYF%_U-jiS?XAVct?{UTfu0wNsBJ(m z2f^Wu0LU{Q<9~T|YT$*f=R(!49;vM~t&m+CS>l3wE+9fM zW@0cr7dwE|`C#F~X`EcmRjKV{u@qtjyeb6F3C8dJt9}Wg^6nJ?6j$jin&KHfFsy;$ z903T+@kaaCp|?nH?`UumtnCOR=<5p0KbmJ3BaZ>nqk2TblOJJ)lk$AAtOpG5Ul{`t zgWfx9V`lL#EMEa*$ZxBcgDXHmM&rX_QbX0cS*lxNkOf-7kMVh9lbP{{n|rN}f8e~z zps!#GyP-*Ll^aQ>46UI1^jjmrD5^^w)W?NU+4XnMBnng?$yics{Zt#5_-n4jJ!0b%0>e`+bp1J1@*L|CTpNtnCuM(?2xslPZWx;( ziAHU{jrHKMAlylehBaP@m@rq{sfhlAVAcr6M9K|KXmAl$x50~dx9;tUNWqI2R_qra z32}__1^wlqWb*}sP(u(m^Kh45LsJ+#XNvIA+D z_?DDL$oVdyi7%cfZ97Ij<+QGESAO0iJn<*Z#mN#cndFf|>Nukk0X|Y?*y|1JUdFAbs&v$%qdOCCPNqZlzm{`ZryJ zl8^dcM#lBj@=*e)AGNrk%%msJ1a3|vbCHz~)OTKiU6 z{%PK8F*rHnPKK@*q|=&NQZT%JP*VPa<>REc(B;Y)f~+^lDPflW4`>dQOokNu3%@d$WoayQu?rDT5p|#d*?FaTnR>?V&TBH0cPy=q{X$$ zyp{rHK#eHmt5oMXlMG(;9rCkXg!-#UFSs1nj={O1|B`hPOXIdbQQqqI;7g8SoF-Gr zdGcG?Ctk#s;_zMD&+$9Y>XtRWU6QbsUqnqDw5tyw8aQ|62{L zxB}sd@2k$2FVMBHW!63v%$*?fJ_Pkj=1^0C-E$d$r#5;3`3bqp9Y|^~{9zJ6;ffjb zKhXvz7Oq%Lz75HY2wvA&Q%?+!;~Ir~t8IL*jRH`W{5jp@EF|>@(@@#c_oJn0L1jzB zPtV1(n@F$x?9G30z0KkYYic7@5#Y@kVuqc-T|m#)6UOHEP)B+!rEFeFX0aqimR z86cPtual$zr}LI1TLkYCq?p$>N3}cOS#(bF_0J@%9JcI?4{+{xULac&oT{;iOGdyzF;l`rwTHh~Bh8JGjgvFJ$?tCp=dkqd zzlB+-oPO2WXY#15M-r*bqTJgB3Roip2TGp7)~?f*)lz31QTHi8@~OJG@#tIX@4F*0 zxaV8k#+QHm_@QxQu@smJ+VE!C@kgD`w_#PrVvS&}V@j+Ssy-(MjLAUb?e||JnBlG| z<`z@XON3~n4&-d3dSz2fqHc_+lObi~3++)|w#dxP*Cm^3LwpZ0q7gX#cHmtPv{b{| zh?R3lTNn$Jb2cqjLlK*zwp+dXJ4-l^qaZOk1-CpZbVYAeLi!&%>AR({noem*$lTH| z?}nFYCr-mB?PE&6r?f|5K7JmH8{6;!(31Tc9B>s4Ao_pko&q~+*j0mR4Z*l&*IB`r zjjc%;tx}6F(r?IeSkg_8E{yac@}QDYF^D=fS{E800O^v6US%f;R0C5qwtMWxim~4m zBeGj_43XJA7Ph|WOXr_GN)y~QJ@}#Q)+|dKmGJ48U0>flYw-QjVb{4ZYvt`{chZzT zp|xVN;X-3P4?I~rYPmD9Es4g^3~ZtA_<}M(m-qprNv#i0)M>WeeKpCq=UkJyG9G%l zWhLHvdR;gDYbPs#142?ACz|7f#|I!c!Vuq4oC+(VLZNW%sL~+MufIQZ_9hOSWE&-o z3Fdw{jPXB)V^$rN=6V5*4b*Nrz#AbHle!_?)z#zgm5uz^=JJy3ZwCFa6?uI54>aqD zooYUd6t2+HW+N}-x*u1jmJ;NvZ?`B9ecJhy>E$)ESv@{(LK5`=5??F;ZpkR9$rpa!W zk*|mVyOEi4gBcUII|{5Ca4zHwfR`@yb_&fQBZG{-)#InHJ2xtI@=y7dWpi0A-eGqS zF_(|KC}(rEty!M^F5YOcO$y8&_&mHx^t1R>iXzY;UpcjIlXe=1%lx2a0DHU`CD0y0 zmVx!4SYTj^jM6ranaN8k{F(pSVG&Eh4cLpJJua7iZD>*%6gZavHqQ%cBG?0-3a>wo zjVTXH>t`t5a#A9D4_sj=UG5gZR!{0%U;RcYGUR)~PVxc7_$^7rYqcb0UScXKlwfX^ zZ<~*uEh#4jndEuMDTLguPOi8dGR&5$FT8+gjj?!go4uIq?XbKA@4AD+AaquB($w~2 zf*R8iN2Z&WJPZ*XkTY(}Q4!M!w_r{qbuo8@W^)6j3EVhT;svaFv_UrKjj`E1mv=hY zM3t@T=q{qh+<_2aeo9mX#gS|YOh)>T5EXTmRBMKJ%SoW|lyo91yjV_^5eu@T6{A5H zAkmG>cb*CANyeQ}L*QdBP_wlpV7)xCwI4TuPA}A&IfkNJ=CIl^ zVr^CLu&9ICUw>0)BD(&}(oyIIBcRv6xe(+%Lsa*6KNj3FoF~7{k%TU8`V!G4|0{b+hy9S>cAvS4n=ru)aRf z*BlC41ZD(<*Z+qu(Jm(*#z)bc!Tr?m!AeGl5wmeyVb$1g=HXY|()LH<@5u?>w}uTe zPT5%D5cbY~T8C;M?injO__kQIIJdXdMmXv$ex~ft4x9uzzlHn6W=aP9T5IOpL7FOIZW)35$rj1xH_sm{mc72GcANw!L(aKLGd%$Q2h!angOiHUrdG^oW(ktZz*eVcCAF8NN} zEg{)~8v53CA%BIZ7uhaBO=F(iJm}oMTfMG5+GqQ+8g+iC=>1ere--s}o_<7TYlh!a z_=}gJbyT}0Zw}5(BR?;Vz(M~mH;X4D$>BY8VJbV`>u?0;t^o?Ki&}tSsAU5PlJLfW zW{@6f0du;u-gpan$0knyB|(ld{#n0Z0te$o2)&_IfgCc~sOQneR#>0^sCKpo3i?yGKQ)-^6Yo zwCNb=SExh$=G;;8WbUTvqwS@H-8*|i+4k;Caze45^U1Hi^F`@u%q-GmP?$0}5c<-= zyEIYHR^*9aso9EtL3V_>9x(gns@OC#@>%e=LTA}YRndnjLQ6?S5b?ohH*B&skdZ*S zp1y`!Cqg;~3~-rbf^Q%~;mXd`FSU*Kni4b4z6ck@;I}LWz9_MXh;SV>z3(R%E$PJs ztY3_-=No_UuF}@By)U6J2J=}Fi3pvl+1SzTTQMZ=Mgt=DkTMEr>L|C9aoFnx)Fmiz zB8gP<*YL0S^Ln*Wt5zY!!K$_21{s-Tzq3=yD9=dBA8DgNcNsMAOnixdltRtKf-bIZ znu6LkBJ*YmJXZY5df(e#)+rw9#-N^EhC_g9QDVEAcsNch;W!e6?ReK3QihX~(QEOs znstr6Z8o{+K}TCR9NJO)b@iLCnsuF#=t@>?b3rnyaqGTWvR8}#c=ni`*pHIpCN$nT zomyz)&B0Uh1?`nN5OjXSH~sDl6$~ahdQ@xcV6q?7=xp$I;H|PcJ-5cW%q^c&G3p1D z$1cFV^8;3pf-l=iBP(v@6`*<`Nw6#5X7&|)hO@sVs#fDruH@wg;cRYQ-`1+Cwy%0M z=EO(TOa%~0#(7{o35}fFEw0@3=-9|dB^CQ zp8FmnG2O1_bePlTv%5U0+M#dv!3%bh+rPXRQK58Njm+DOG})0$q}@Y38DGfnMbrWF zspuRTHkfUY@@-O@t7tqyBy(I7xq%U|nD^1?@Bfzes#!-}zGebj4Hy=v?L z<6C1}{YP(lM(O=3^-A$|TfHYQc}VTG3z7baW|YV=vev(;GiNvGSX!EhSl~)?@sE&n z_BoVvTAbei2C{&cihG@#i0P4QX$!?YN^ir=hBkMtO$ir2eqAvh>~gI`+9wD-ijG!D z&*qEKSYsw`0VkY$m=F;&qoGL<-RR?Ke%&5{jR>NTtt&PN`P2ZB_+ij|#okA#e@!Ff zuH-lpL=qI+;dQG9&UzR8w%%;JP~~@~B?nKt(a{feDt}y_jW=#|gzKQlB2Y(?`@wiA z^ggxdSHiiT#qB(&w#)y}1&Dw>pJ-lrGPl|27L_V)JtTWA(_UQH@kIl4(hTLuasV!r z7~sP1rFz}7GzsPQDs6V!aqye6qKqSeuqjF#-t~y0c3?|-K&+S^EnI8Zm2=9K-OoiJ zipr(Hm^cIy)yvdxvUrJ@H;3fqe3AaK!KdOpyXvOmcWt4%#pmID!JP6?w<*^M``RRM zqlWgiyU-gOeDKcfo-s!N+MZfL7ZNQYq)9b3_#C9-*eA1dXuENk4WN#0&io`is~#TnUmFE z^Dp_MNMcw}9OXP&E$luvz1Feny1~%%z!k|~+v{P$;+D0J zs_M<57drn81)biOv53^<8){4T`uTC%vf53QcB&(L+Je%7ViWZ4G z94jd~-0`>Fl4?ZT>7x^C7IjFt$lKQ~xd~!)=O+H9JBPP~Ui8fP^3D;MBTHPp?1%aN ztLhZ>5Fj^&mn{Nb@bCYnANWn@X2@%bIT>JKb@>JZX(sVKNu-JrNHWAZGcVfwF)Z1P zwsjOd;PS(%M42onWZ0Cx&^P!?nyE;-3^cdPUM=wwr(;JOb3X)f4M(39KYc+dkZ@eLc3$kq3 zhl)=h#+}B%Dqv%%OR&2@M2-&t0l3mM9@LxQN)Wvd{MwGxo#3T>2Hcdt^nK5^qSW=w z!Eo!Lw{nu%^t@^B*3PbdYRneg8hlYVXehRh(DkonlR-CY2gdv`uvs?YXjM@KmX;ypm@yM1wlYIG0wGK$MvD^eZ64NY$UsE zt=rJdOf_lwON&{St{rOtLRl`vcy%kuYAa9o0E~|?r#8WTP{4f2ZqO10XVL{{4?B2WES7%Z179k#9U_kc*N8f29GweMJio}*{8n5h_>&91MTdEG^I zG*WF*HOy^Z`P}*vG?cT;3t00K9B%-8XX_+5<|8ob?$T=yQVD(v_o2`ui6T+1hR< zlSxzBL;ca%Uw#l7)r%pqioTpfQDtYTpK6!N{KHoMp|k&xCRuSwB(4U_ptM*Y0)bf( zDSkg`5R?as1SAD%U_c8{NM?XJmZz_=Q;gI>knC$5jE8MiT&LU*~OLnESxdU@k>wl1ekSxu49;=)($_1oktLQ;iZLuat9j z!q4z}$4?UxH}$Ds(!9T&RM`QfVh?7ZAC!m&pmtkj5caD> zC_Qw)f4$iU|6na`SBxAn;Krlwbs5-2yM=i30SnuMRE>+$8 z)o8s=;<{p0+qB-Ke1!!&Rn^pFo5vf8M16LnW_qV|7e5aC?IqH&H>b3z+`d8p_PmJEU_LQo19;`X>Y4IZio(wvaQRLHKSQ5Gor2I2zy=h+5eGfXol; zcWy9AE1jVP`%!ZuE5cH{e0Lg2j&XTQCmOfDE!HZ0eIphsOfN^92jHHNMH$S%P7qm& z@_+>TWKVfWK=1t2?nh$hr^bz(m~vg(TT|Je+qorrE-Iv$L(}#8tOLJ*wxttio~inN ztV-qn1vK_-5>w5*gmoGsG~w4`BZ1m{0=KHw|!6rffV6$BeRLr23zwwkT* zTWb4B8d5IT@{4q8O5LRteAz>oQ9u;yBgW@;OYqKX%)qoE00LUS z-#30G%-m+WT^vgVSteP`R{MJ7o79C1wlg+!-j2PU#PPUjp2fzcyb}CXxeG{iuL8?B zM4NSHgE|9_-vB=zzc#6pS-EO6N}qC?!U|ug;lB{%H!!;1;L-u3nd&w{+nY8a{Wx3K z$XeuYGJt!~ah?+x2zR{=g)z=2NR#4fAjo@F0{^3_;$73)R)gKZa#L4XCJsm zu2kq-m5luQy&krJ4EsD&xVaEsJ^mUF4EMf{@{&mb;h&>`);?{L#+>v0s@ zN7%2L1;HdwkqTm%v#U$-1q(5*L7dl`?{|8)e<~4 zY<|5hADD?dbnoRIk(yakrzv}RsQdx>3LQeiaZf1BbpVDue#xxjN_?7?CwiLgtNqyS z@$HD#hK&Hzx}(#AZd7CuJy z6`9#UUfls{11FIKB+@>n&rVwnXX@8Ti?^qCm`avLI@{rTp4ac#bEkf8?dxgGzMuPp zx_Ck}vY(~Vek3{e?|jL1?>TvzI8#5$3OzNDc6^8Ei6WuNFP1RCO_~QMEXtBKdB>4f!u~ z*S2BOc%ET|mkk*ZbEy;@ytLqh0n_Qp{e|)5NooEdq3EVBDwYoJHMh(YwZ4~MXpcGe zYWl3hTk#Yv*Bc#gQYR?1TV68-*Z!u z-ojLbtyp%%RtnwFdCkWkwMy=l#QltGa}J`t>@N=QZ}O!y&uvJ2^5a&u^nR(piBIoz z+yK!oA|y)Vp9UGb98ECZo^=V?$xiXI8cJ_cyinl3f-z)pP;dBn%v^luyeq!-o9;T9 z?F~8GA4#RXd^&7k#>7Y07rCV%WN+OQFP#H4FIhX9$e0%>3`Ln6Kla>RprtpL+WdN0 zcxR@l`&c+z_fJmN+w!dwd0vOvFW(Hys?E*0)i zcu2&lbZYj@Yc`fB`q9aJ+zYZZ!|J3o1GTyPo_<2cm*l^J&;KwnYr*kC~8-i0L2 zf`nOi;|gZ^K{mPn6r%XsMgx6x5`AJhi7~r{LIr1nFQ5v)0@@vRk`n%-J|s3A*mk79 zbS7aV5}~JWY4j<|KYk4H=zTRxp)YccV~A{*!nc`z;0wK z`y(_8%BH}1!%7DY)GIFVHTeHnPy;7LZQXykiTNMZc>gnf7Losjz94_mZDD3DxB}`l z7sHtrGgUQ2=JDdA-%A>55rmh_stT2^`J9}xp3!>Nq`*hnZeCWl%WC+?w#ynnvePBp zUlkgl`ZF$#iq{2FeXIHsTzxv;rOeh8_T?JL_Tj{FS6X`44HZqb10mFgOBu?vn(D%X zc0Ytr5PaPFpgmdzg3$x6J) zMA{4Dh3WCy{XwZ(g~^E?g&8R#DMZtjATXC_(8hdf7?yrKnBXf>NR_D(DVJ$C@R~Nc z<90i!PHOO?Z(RzchU3>&Moz-1tX&=s=thoPS?x7uI3WqGD>s;N4^Hn^#U~uoyLZLqrB;8UMe*8d$-I;da zY%@l<*iSn_2k4FrHR_X?F7=&lh(nA-=HfTGiVxAp1E* z8_+A-z1aO&G*idlJ~?oow~v|Yj=iHCkFUJq9eaA+{9NX#P@OC#*!0~^stM31T#(xu}IG^|H@|z$9 z%s>8RDGy<*NdeG?GOQOrVlhGLkRc+--ghGu@XPTBdLFC$c`GHH9q#IIvq z4rjGd0QU9gk_xjkI&H=?&9`jb_4&``n%xP8T#A`7h)x)~u@6*@&knYr!Uut{%Ytw^ z|7tAY-U_Dm!744i-x=V7)eA3!^xaJf;6Io{t@+4q5TejHxq=z7zzw!j>4wV7>Lfn` zd}17n1Y4&v??NwN++r^UStdNd?Z*v{K=d=zWo2j+M1S9oTiOu@dtyNWD;i9#A|bo) zwxB1;?G*SfAgydfLsAFL&@CnUE0`Uv|HdQpl8_3t6kz5g!&$pA`Ts4m&|jSduInb~ z20ZRPg@7!h0AS8kXhT0gA^@|hOa)Z{BSC+i8s!Y=7XRlZ(MJw~%3E82jsPJnV8u)^|$u|!^5v;(fsTs z3PXdE$dGms(G+0!QY0!1~7aizC?)U>B>Hw^*-%X6I{kuET z$7f-=7`7z7l8ngQ4MX*kSO;-mu#*MQ(n2|tconMp47Of8Wx*N+#gT(1Z=pFo>|f?Z z0CE4n+z8!z2n;TF1(ReCUs%CBb^@#YIUlmqU-D(&BLiq9W}xK@{xAC`>9>x%IW}ZquW?LOHY2k|Al@xH6k#C{(8gT>|=I3 zc8vdTdHDZT#NYDpk8=LEJp6q={Cz(Bw{!3RZh4?=hG@f}=}plT4_zDGP{)WIimAXq zqVglyAxC9&%WTfXvb=x(v@S|*=~9IOCFQmv0~4<^jKWUI@Suc^LjU?q1fko%&8y#< zM1PxC|6r&68|Kj8=GFhB?uH1mjh#%fbM6&n>7zm*<4J2cY${BCno19wC@dlM03^R* zzPw2`f$(y)ys5jtAm^0?GZt}UKPwkR_P|>~F#Hv}1oROUqBlp;RxrHd5IuufmwY4o z_Bc}nB?jzi^E9RJI373Z9$xtF`_#ob19ErTe0ux&F~OjnM+fT&_^PwFkD}9z2}(*fTb0f3?|p`-Y52`|-=17;};>q}Iy0)F{BMttoz)}~?=P@0V24!8-g?9kF&V|VdVq#s}BM;y9I zIC>ZGQA4Ss@{fFz!uWG@U-@h*xZ=Z~;&|p&qUr8ay`Z1UevbyRSLJ0tjSO52o#`K0 z*lrMtARH!Y{x#4{kRSp8rDz2+1)M>S3HSt2740nF<6C8MI+vZ$z?XSw8bOE?oxS_o zzI@tjd2?EC=~deNVXSQ{p}DB41=eDr8_7c?=^H2?9Cu}y>{qC}o%FeFaRnpc;hjG% zJw+;MydBY0sB&_>f$$dBnBB!{Y=I*>8v9b3@-o6dCx$;CHOFuBIq0LX)ZX?HxnpzApvdf-qbfz9?#`{RHCt;Y8d^78lNa#W?iJp?uJfVp$2VnR z!?U$5>(D0BI#4!q1TpeVqR;x=ebD4;;&1~Q_e*(dq?#fq<9f@)?{ocI1OxZeoO>;4 z?vJ4x1b=0ngsqIiaJ$U$5LayE{(|x+wt*$rrX4d>iZxZ&Onx)_0U<*CD0d`F8mc&e zsJ(H(=8qM-O1~d^+1q#Y>)kjrN=Jd#*|ZNn{rf9p&RX>dx^i;l?IwkRZG(k1K_&Mh z%f!pQ4P@Y2b|YqVO5J@{#{CnK!~NpO$t7S8^&UU$-uy#BeF+MHdU^#1#^9LvM})TsJ3=UoiQw*RF7bd~>S zfL*K$cv&lSb$Rp|^USc~vV8hfNy^)2xflD?zEkW!${ttW#pQHz0gQ`4!BrF2FWE6Aex1E-ptAqA4Js zX*GaXRL5>>Ve1c2&ZSp?JWmON@@KZYAAsG=_0fS9Oxr3WOv8g8fAh+qN%RZHToQ}f zd|*X#a{f7brvJA?W8D(9LzU83$}9sX#tUK_mZMyV__epF5`;N{u6~STY2$NSGYVv( z>3)SvM)PO3bO}^9HL9Nuc#SbDhN?<{K2ISmJh0vY^uGzfWrw32nAMF;cyZ_nBOuFY0=gN2U20T(V&sCEgbLlJa6fhkCRpBmS-mj2?q#m zZeAKJXJRFG6UDh{T@}Pf)VkRl;URhA8?L~4;m|=mKuR4h)s|j14EAFWRfySd3_bL; z`9jhABe8yVUy2JC2qUgTE}vPu9!T3M+Iu#4&HpN#fueC!Y}NrUB0CLn7p)@nbX8i! z1iQW5XTh@}I76Xs&5!3p3N|h44a_&YtFaGyfhqYo5c?_FRAh_E&=*pEQO(kE0&)Hm4uwT2%xLg1*Yy)*61+Bu^{S!ani)kn-#RcYwGTC%rs=@DO)j zRDS#Aix)^3(Py9@e3P!dR9?|J19Bq?)^tG6{$fDrC`eK`)NN)`doW5yD8B^MBn0rb zR}3nezWSb8uap&2iLPK067-qkAOM#^y!+>)SQrV1>pm@WO|Mqg6YA+L!=tY|%am9; zUdmzB)>3WGQP*-0rhF^(ES|e0e9x4^M-ewy8q#V|AWynbUMPbK-KkO5bz(h4HztD| zI&cC2@SM{cIq$&FUk@zY!14|4fh;#>$cK6<=DW1EhQXjw8-uOZ8_v`o+l#@uP@MR? z$uwtB<;b*S$WNuRj`iYk0XhZ}>l2zHwEMIJFY0Kh=bnt%<9eJXEGK@lAvgEHF610L zm#BrdQ*)?KDA&pG_83Hv-@1>%RU;uDj0!r7)rh332MmUA@9-HNzL->$Fc`6Mi+fe} z(h>EUX9v9~tV=+zUj)^dpu(8{Q-~#VJ9uSI#4i+KFYzHNw)U=(LrsEKJ1$!_b8Umu z-fk<|h_HP%#p}mH4~xBM9pUzaZW6kS{$PkRSv{F@ou`-R+Lgp@FypnC1YL*3hi>cn zdHdrS<&Hfr_Q$!RqCG8pCxeT}Y@21e(`L3j4S)DxXXGC>m}e=pC@TFd!3WC2B0^k4 zg)ywdh!Q)|d6bTZ4{0v&IP>2uQ7?I`8nn~@>yk2W8(sjJmC3%YnAgxF->_QXI-NQQ zsK>&lLE084ft}-}XTwe_=VfU4%jM^MKWjzk5AL(nG=C@u$X1igZf`s;mwm@N4y3k- zA>d{COoHMS(9v=$h&me#lLN5paCVMY2@($AAPLRSOWJB;b|T19`+=r7wRvu|K+n#s zAtP7xLLWA6s9Y0Vewo;gE0`kD&y#%BQK1emoI69gIzgnPj2}wxX|%D)#J@4P;~~&C zPK-;J&5FVJsrdk8WUrYwyD$^e*N#_Q!l& zAR(`)x@7~LP-jk`O4yMdX7C~S{5fN#&V`iEp&Ku~hw}BDG8l>9xu3FuSJ@kG}SW9mVQ9m+(Vs^)`g!W?hQ-za2b$#lCbM> zSTsQKgy=e~3hmGXUu@Lw6^4~e!oll0C@n`GWP(^nPUo)tfM z?VB=3?12+4PexpFNrn3b!uDPEdQ%QGT8@_;7`_V}&a&`2+@?wiEf-@yMY&*gZ9|9$ z4zO;&8)7|N(}kC2J;4oK(cG-Z`|y2T^wC_e2!R?e7IQKiZef9DP(FWOHP>>@k8v@PW}mI)KxQd)X2BEd%CsvmxIZz_Gh62}F0*E?K3 z^aP@1kaC>?TdG-&wJbxg=0_FZG5yx-4C$bOt@gI+o#Dsl^&KVZ1dnbqbyko`=djhi z!9|5~ejp-PW;G1n1V<`6yL_8RUClCAkghD+%%9PHqgmlmGFavO^A@Ztu-2 zQUi)hKg7Rz+Siy?AvE=7m$*{r;HeWS_rl_EHnYCif`BUU#sOKq5=(Z~sJ+9$SCK`K zb6*Px;;`M3R#g+%*LwD@lKPt>Q@{7fhaajY+&nqt-@j=z=rrbY11_cIF|Y3hNqhv|iF$ z1fm1l)VRU&97b^6ZI7bkoeSv>WS;R>`|yjp0jYcwj@CEo9dZfEW1rXY4wbP`o*pps z?d(LH4Mp0ElO0>m0aNv04bfU}OXH%B@|_<3^~zHS&M}q8i__oM!DTKk?B!d@%?kBr zn`DXgpkM1WV!&u#72qDa`xIcLJvNy76tK(149evbCBMC4I7KX9wf^EaGJorIfLAN$ zHf@#dW(~Bb`+q>R0!RSe2O9675G3!a6W7X$HQhFhu04KejaE{oHQ*Ox3h6}w7H$+UGsfZ=jYWR4S{1H z{2PQ{^S1*A5VKkWycb)G?7DAiVn4Zk)iFGe&z0(rrA`~Nu0a(ya93x0E};M#kfhuq1*k(?_S6&rr~cE+ z1tZD*!B4_1@u5SzVwcSm^_6$OmAZB1$1@GHDXx(64aA-pD*YDo5nYt&mfcaN%?Rc9 zMWx!`w4bWKlCGy#kolUDw*kGBV|Azmzc#UV=mbv%c}(yuypHZX%#R36Oft>cet=Cw z_aHtDqCf4^A0msvlqw&!cJeI|Ew^2_$mIC3*tyZ9y9I?sp&K{E?Dn+}d`Nr>jtCb3 z+1zaD4X!28@lfxvL2|XW^LkLrRAxoDp}> zXN3r&Ygj(T0W6rtbYmvkD=h}zs2;HeC!w>Q-c>{7q?^WNdYy%fhAes14iFkSWE$J^ z8)H}s5wymw6@d}L*LpL8x6JFFW@noXldJi`TR;T+m~UW+?q1iMM{FtAr2BORl_^U5 zX)>g4!#8F9$1YCYCe(ZG>DH5(J|`Ozcf%$W%N%CE@WRr7Ep&*C2p2J5vR@#02ARfR z*Rp0@;AV-$Pn>B?`~hE#R4)VC2cfR_aEI zGhP_1i3a3Md15UD*YOqkUT1Xq6J=lvF(qP`oo(r~dQoBFwZ1x)WRsI?FTZ;_@*!Lu zZkbAC9Rt^S1D*FCx3Pc(EBu&BX9!kMcu}l1;if$eA7D}Lx9PQ7x|OIq4>)Gj)o6dnafpQMC-hwdogU;)5;4FP0EDH{8%J4}po*gq?Kvr@4XRMqac0RP`i$A? zmNixroznbWWm>5`WUdK1!OFYRU1<>su#- z*oVNXB@nB1g;pD88jWciWcyF16NEExsd$8XX@6+3>?VrCX zb5v~4SI?BF{RhIzgR<8A!XbjGD7P8wf(K}xxfO^*#a^5vAy8Tj9(BJnsLlxRE%P1} zbDU28cI8o!k*%Bk4Wlx5u~4(K$-;9>du5F%FDSWqL`VbWUe*5xVeg^YUK{2;c7_)x z4d74SZ1^k1ZfU_tX~tR)KE>oE`W;Gb zOyeBRY7klyF$S0vWnr~TrAxxns!7Df2Q^5e$}5=flod>BDL4BYxsvi{hju2#n*tuT ziJXR$W=OJ`VK9z42JYc)zeF=$#rFQ^|JE%1CWju{|J!u?+OZYPtjQAbB=a`4GHkH} zAlcUTAO1%VHKWZ=Pp%?!U^}`){gx}3Z$xhP5V?Zd*M*t@!QcSfqy#L%J4E>G_jgXv zvGc}yw{Afz{}hcX{{eeqIR6GJ8lp}e0h52sF2>Eg1RY2tZnBdz9lQ)%i6?1|kgqZW z6wuKdPOR^H{uKG(TIaef}-dzJJH> z8=M?zWknHf;~e3qQnp$?YpCMDz9Wwrf>y-GK#8~ACjt)~%)HG8!sKXV_le5sbkXRy4G@tzGfgGUd;|DXjao{O_3e+W+$Z@Q-THK%ohN2|R-mbFe8{T@x3G7OTa| z&nHnT_Lm`U5qqC~ip(X6*n3fA76(K@0;VmN^EjTI z*Ta;fgrS?{@U}+LQNQHnc2lPhoS!*{3oy>c)+I}?tah8HTn>EV$#dX<6b9oJfyZ#)v&qw5R(SL5w_B6K1vwLdxw;03t;krGqseS@as%Fa%3oMijw>N zW}BgKtaq?+K`FFGN2WXFKaCa+w{4qs39Tpt@chz&^-4y*G^o>tQz zGiIH&B_TQpqtRWtkY(Z*(y!SX0^$+|+e5IHFY1lEj%WQEBBNSX7ElF%TWHy#k3en_ z?a&EmTwcP)KDZTtdVfQ3OEM8F82=bx zx4ppqXlDYzibC8C0Qu)o6);08zF_CaSt<~fA`CGaCZWL=68$26`6NGjH6Dm+1jxkw z(-V^Z{`;Thz&P+JfdiP7;i~~$`Z-*$4GsGV ze4;{>$K^aAd?(K2;fIf@Qns*@P=P~AS+?xy#v{9LMRPg79PJ;Y-P*9GGjzvCbC;T= zrZ01s($^W7W^PpN&nFr!7TJtD|EH>kiP0KJ1ufV2o6f~9{W75gbrEWaN)XUZATUJ2 z_e7#>IQ?HDgnYmS;MxbZq)q|oj)+`X!PF^c{#BX%MkR$_GMiVP9FgwZ4({oO<3~@9 z{QF*93H7ha4EGm>`Y%&B^7jn>>yef8_dEE<)Bkt7XlaInO$)O7MS4Z}tLplz%LV7fm4)l%~t0D>qCjIY0Pp-jVg*v;D*{uM}_&4+*i zRkV7KNqozH^{f78|H%)^zk0z0q5um`zsV|Qa1ec^xD>`t1{pnCglr9V2ac^jOdhW+ z*U(tO+$S~8>F4>QLQqx)KxgKSDk(wE@Sz8&5sp^G4k@B6pKxHAlZWC^e(M!XBz~1N z-o|kj4Uc{2bY24&4;p{${DDa7u|VmYAzG#FlkT<+4{?V&Q$SedY+Z80uzo8heb#SAB# z_*RX>qOQ9)s~m1IAw0v<@c`F!Mns31p6nN@py^MxvOi+<9#P9LEsJjOK2RZJS$Lpn z*Mo;e(ABs*0)kNk_YyS632j`+7Ce9wfhoGoP6SMA(vmQN<>g^l-RoRs_z`zLdU@D{ zj%O;BwD9G9ET5$0RAs+B`cNaJF4Wa@_InZW$3hDOz=^=5=3v1ZtYhS*Y-;!O{0V0pzl>kCYj_igv`<+Yyk<+;P(|Ywj|gX2*}dk5mqh!{?0MMu zmPOAOSDwf>_T|PQk2ncL^=C)8V$l>F?G-r0oo4{d%Yo1PMxni>i0R7K4~2<%>CjD! z(qhvVEullH@XWTk7jZ zE%~EvLCLr}{!qe3-1Qc}*rM9m(2~U>e=qsh$u2h~;s6C!*6JiXuEy*=Y{ z%)SbUuPoB>ta(|1W17lsEpjCuKA41Z`$DXPh%mjYLb*qBSO~QCElz=Ro2}eWe^nmn zIv;R~gfEUdJ*2YXNe}Jv#tJzjXe)_sOzL?IRftn)0*OK~->AS_1p0}r$up&9OMXoJU?W1PLjLr0?$cUr^cs25LXd2Jj1R{d`wNUV` zVM6Ggtxmtrw=ZgU7IzYBgpoJ9WU0{#*=0x0oDq6NXbXX)sC4^TM9`V(KnEcr+AO@w zDNZ^S?A`;_>dR=ry;=7-Z0^q2^oQAwVvdF5^G-THy27TezqO21sti(iFRMs*XD+V7 zS>PRMQ~pb;IFa#Noc0gxn3$&UrcfQX@=w9<`=5@whyved(0S?DEZE9#eE~S1&dq*J z247%JOY|&@0gb-~xb8${K_YT;ImuUT1>-_SHxf^ypJ*$Xv!t1z=r_LXqfp6ii{%51 zZEyZmmj9>k>wXuJD32z`{u${Uzd1LroHNhnFQ-9Ef#AG_m^3i;MqPL{IH3q04a>|T zZw3EoqH!1Oj?*!2zx=!a8pGiY-hCxhaTuBb`9k9nGo^F0Lpc1Lu6_vadm;+PpZpn( z26tiNza0JVA*Yn*R38XX=JXAt<92A$ETJO`+V$s*+u}QvikQavLnv6r@c2JqQUkk* z3m|f^arx(J=)mlENw>_1-{IgEUr||a;|k#67Mp>2P!^(Bts+7t37|Ra(Pk3e90%{l zPVc98q1=g#NK@cvA&NLLD-V-T1YVmi|3}w*9bdIoF}sJa@_lRf++X_Q42|F_5|X%a z!EQ+Zm$@FKNyr9l0%RsI;C!w_6?$Y{2`>@GnUBMi9g8&UBHgWB#;=l1 zTT7Gs#P;$W6R9(Q80lIqO}R+9LhTy{_^}YM9JCnD6#xqF>>6CbJXOPTOxT$EXl`BH zs0Ozf4{=FBigWx-uuFUf&?+h&Kl?O69Nx<4 zbi6ld&WQGjMg4m>y>dHA9*(_UvmX7Bv>lOLWO724)=iTgc^7picCYzcjl!{sTg zJr=NQEr~~0{-SwdlBgfL4PbBGy&@B~iX@x2XHbger z&&aOXe*Q^#Fkf?0IHNfVJQ?7XI9mzoW5jY0`vj1>g(UY|T3CANd_$CXc%+*|%qofY zD9J=0zg5fe*l^ErMP;i`oB4mX1tFE-k*-h$h$UPnz`MLjPcw)D;mKlR+|{+ONkMW2c>{_pj^kKJY7ghuD=!muDxr7Vvt+i)aUECxGiVW9q>&^de>q z{A5Tn#AI-`rvF@@QLERHHwjK9THC36?kJ_L(I>TYs2)dj>w4t!> z)Zx@=NgB1M^ddd18Xw>e30&Lap<&J-1%MRKe9~s^;RX>`@saSyDd9HPpIms^;UfNU z8}{QjvpGu|1n>D#Gf9OtW2#BH#MD8`6EiGtTouE^x}_?8a8%JgE8e>E>*O45>3!0R zFQoC5hFjs5jUzU**j_<&6E`~s%7}9G3r__ z8R!4O&-7xq@STvLh6YQQYz($c)ok<-XqjQg+}%Z?#l;pO!rB$?C0V8PmZN8t2lMiI z(ke8ILp!Di2JCkj?>5*iz#DgJ^Td}F1K1Ea8oo&oEupX+%iyZ^maL?1Q43oG-<+$g zoUiG$kTObI`t_wga5Q2<-OXQbZp8K|&z8}ppo&1Qg;SB{;_W(o%x1`u3MT< zS;&D1i^4cRq1-E9g_1iYz##>;}i@$N-{$GkTn=y=lAd;c_R0QzSzMdeuRhW`{zwHwgl*UVJPY7>5dORjlfAhEgloiQcJ88UpgsO(nHM{e8Rd z_{%*QRvns}(Ja*_MNsHB<&i|+PaqRelEH<>7!ukzy#`qdDDXh@x~7iMt*e;#*)e5@ z0NYBP??QdnUZs4%IsScMDthABp3JfSM%6mk98J4zcg3X4S{F3#@%58NfwXgutfA0G zDFW%dzC*aR(0JY{^1=xFZ8^Us`jwjJUX6XI;Ua77Fx?ao(DG_;exN$l2L}*IiMn1^qY@6)ShvbYDttACyn&OF}oaf_DO(Dxaqw{?s~L zfoRoFH>_Z91@lHhlkS+e#@YS6j^@`2?+QMy`z&w1cI~}kd7KK`NTEBXA_6$331j9Z z!?2RVzmuU6c-Oq9DTMmO`Ny|&;xSQoZkj8ZKcgk->@j|5yZxcsrAC+H=pVG`5Y`U3 zj|t?@_n@xKI3#fE%*!l~#f&oBJ2z+oY5Ko{KE&^%7}e_M`jL~G$qN$oq*!%kgXR$nm{%~gZ*fg6e#&Up{)gx4(DwGcl!xD z+)g`f&yemgw0UTG`rAot=qBALmK_URQUTl~+6!D^S8XGySD6_P19xeo#?!39!lJmd zV4GwV>EB4)A$=ibWM4=c=5v^Qxx+Nn>&(2!CgE<89|JpT4LJE)c+6o+Wo)EubWJxOwn)BS5&^gAU0GvR@+>T`_fFjwANwyC%N9ay9nLz2uuf@Uq0T5LmcxF zJE~079efouveAwE(UeZGu8l6*6S8B&j9s|re)5+iS3(Px+t2m)sMvp88>EoD?YBuI ztQvwZ1+JoS1@kQAmIkyomhPKJL>=LO;C6D%0C5F?ca{e|5J`j6!I34huwfY zJOc{LpSTS%YXkVW&q2r+RrgY6$Wi?Z94;=}D`%gBb|e#d>^yTwC3@)664pjV^;uA3j-nAIDd!jkpi-pXU%d6jht z&2hV^`}^Oppn@Z(rcO(jq7YT+^K1tTSGhVH3U| zL5mL(z0*EsC3)N0zx%#+W5iJJfXCpy>ypXaMVqc#7>z_6#y!KW^_V@iTA8;#o7hhh zRNcc4s3vUfGbw65GMBZe%zG-{la-;kyq8TuWzo8QP(`*yLQ*Qh9#1=jAG{ay*5kVB zjUaq5_bAdOi#D0wf#=bmPW$Diu z9p|i{sH`(Dd|k5N^g-q+E1OdqDwY;AAHugNO`l&(GUQYb!p0rBPD0 z1lh`LJKA!^kfEi6(mC&)L(44IE;YQ8gaP)9XPMvS;jw_rj~&-F4hyY;-RUm;8@&|4 z01Chj_UAkI#$L>DK9A+~?JI z4_qCAe*4#y9F6+8{fI`j@+SEpHGV|+VL>5cT#a}09D6J6nn5@OzaNyGfMX|i9sQkPczvhU1 z5SyP(CJGY!bd|vjb>ssn_T=8GL8lm&hDUIf#2(;k+t3YXMDQbOkJX#6c_!U7 zqOBj^+@^nuJ;Q*eJXu;E^Gp&wY&vF$vdKGr2>(cR@}vB*PTejyY|pLPs5TF@IU+MZ zu2Ww!`ALuKT==8Mgzj0U3%<9N;^apEfmo^2XOSItmMqXB=n*n_hY96*Qf*f-78;%j z_?Lb6G+*)%_400UCLy}+jBTN!&D^po|YnSl3Cpk*?{e zwsD~}UWMnQI?Lqc^?<3Eq^2z|C9cf#WoPPumg;=F`@O^^Zw&yUcpa8P?qf;7&dB%dXn zV-v|)x2)RgS*ilL?}hu|=U=%7?W%UsihyPNJ0`0To;P1)+(7;N6(23#r`nqFlw*6 z8BumlCa+Zg>1MNaU!ZYArVm&zOJWtNKy=!GhVRoK)(5}jm&+jzjkN z^`!*@dK|4aDmB`oYtP>rdEctES5aIWvIn(*PXP<7!V;W@qZN? zwQ%rI6LVfZUhb($GGDZ8{sXV*?>)ypjI3Ka$$swSm<2XjE7aRO)M9+F4A0#RXpEdgX1?F0>nMR$T7r!d<~*&<+y)sG~e{E1endklN!BJm?hVkbGjZtorgR z)3e`unm^gdIiJ(A%8S;L9f`E|dkr+M0FL(3T9i(zAqOOEg>Obni^JcUVMF~A?dK?k z*~RK6l7VG`i64&K;HbN&RF?SZ(ycWP6JcR17-2-4#YL`#8zoJu%h+I8MZHlmXM(8 zKXjZOpQ&7C$vDwDXr6OtP&_m~x$d@MzRkt6MoltAku+|g2ff50 zdh)KTts?%*M{?WV zw(HbVG~V2xz>ee_TV0>vrCE+pcnox6jX8gTGX zsp2CvEZw8l(0RT6955c0Y$6sYablCTZQXV2i_?Y`+Tph$i2?6%{_<1a!b>)(2*@b& z4J+SQD_08nP`GZ%p-vI7m)+6EiH}pnFk=D<*c5Ot-Z)(xRy)Hmx@Y6&s<_<8cE`tSo;jvGW>Yv9z}GM27E)jOnG?L2PddBJfYUeXLh3W8I-%H z;_-d}4HR~9y+=F149utxpMbuGIF{I?1e3IpJ(Edqw=7_6jM6s|iQRwqkng^oMg9%} z(K7?@nlDPEr?hnSD$W@WIwK;p=*G$6Sz-PF-9wB+vz0BvJ{+;~VGB!TIM*#Yn7K=9 zZf)|Yi+|NMQSL{+K~!i1F3(_Gx0)nRzQ7SzhaFA4@9wJ{6v#MKk=5&VMa{$DKfT=i7qK=&4OehZc-C8J`C2T+Uh#Kz9i|24az81uw{1am3!Z?+>%ln8 zw+^n#9|6Ec^xH*9;;$i4+5yD7y~B_A)eL+=q?7=Eyf;i)_zEp7Uiou4YbSL1HuMhv zOV7~w2%3oN7gq8Xho7y+$o@NjYhW-DE`6whTNl7a-+{oqU;mO|Xx4O> zjkx7!_E8H3o}Mw?OK1S~HV&zV`Y5d1VA`W3uRo+6G{D*N3pLpYL}(2td;mE3Tf-7o zB}EHIi;>o#*HwYY8tAd&FoX-4DX)106YB<}Q=mIJBXf?9syscm-r?!mj(YMp-`hOJ z;DxC%(3WK=d``z69pz_`**o_Dt%_aDa4)%+a%FdmqpPz*gMsAx?a#xGEqCP- zuincCs!GTVa6Z&c7qIrB9p&199iW}Y|D=|ZiO6-1(0>F?`^9&F2BE2fje=F>Lt+uP zbX550s!!(FGbe6%lrqQJF$fRK#>0}y$<*~G(m%G(J74x zcJ2V@%XqY1iqBD+v#iW;w_wqu&)|C1KdxWB2hg+t2oU^N)g@>~`d`?L8beUta>C15 zIt6(O&WJwhvLWsqK)2}lu0Mjbzl)dtN9u<7>+yYkD9;7fY6iz4U0Hi*9Z>@|L%uP7}b|x%Anb_BE497S~YAF?9+B=#}AXxiCAwj%O&l}EZ#euu51$X z^xLt(oH*yEZ(S)+1vo@*g3@peL}=EsUH6d3k0G;wGA;Tl6#7&-Kl7&Y)C0maK{$}` z<$+s|lRz(zM{(IIFa%Ws+6Svs+PDO z;Jq^`#bT}F%-&h2(TMXJ>qc}f>gU&*sxFyQ4gmu?1uFP84bX2+pk;h7m*H6U9!b@} zSX7#J!%hLO?Wf3n3j@(WyQ0p_%stnAJf-SwM@lx1T%41=zN-?Wu#U9=Xac@v{D17d zc{tSV-#@GN_LMT&~keKXQn!(s25wfp? zlyycLpUh`I*Y9*)-{+6t-E}|rb07D89KZW`p65CaSKHBaIzONDd~dI1qUW~4l^4$? zjHfITZ#q0av9fdOaw=j;bt4Tmv%YZxF;3KhK9*=FemCUQ2>ei+=AxcnXD)@`V+U+A z=v=XNFV_0l+wv8Ch|ke@@)J|($^3<9uXWOW0j^D%eUDJ554?s@ps?Tu6!O7sU{;K# zVPkDtAqVdO;d+|M7x>tl;To?Y$)Iz$VivOEFWYs*TlszT=lTORml26ruAm0<|0dj8 za*B{ckQ2f`!&Ik%&%OBoaR2}jmb=39|Oi4kvj32M6#=j z(2DYwy3D(%xVv1V0ulF}^td@&VWrQo|HM)VMWz$K-*t`*Wwf0s39|0#Qh4O)IT>L| z_Y!jr54>V<_|)agyj&X^xo}t5z66kOUME9)pw8O_SJXB$$2U-BySviqZk3##GUZ%= z5xBCu&Lh@RYjN5A;++i&TaQ(JYtLJWKVduk&pf+PfU=Q-mK zGp^U^b-KuCzA{-TTvU5$Wb34gvpGRixqb{XIZe1k9Un_u*96j;r%iMSLQ8Z~XpIrm zg7vCbixegDeNd&^eafwWl6^}1f`hT?sfyiyv~Ib}FaIs@AtuY_Uw%vfGin#{8L9-L z@C~~eF9wk&c_VkH2WZr%nk^Rjh`-K1$FQ#d(NdIOyzfr#$xuh0Nd;lI&irZAPzQ3> zZ4$!?r|bqf1@5QD{U~QID;G3rQ~=yXJ%svJMr_(7pbB7%ofdYHza4F_@wqRPls1kj zv$3;n)lqocEb z=O~`x=#rlzy$wECuLaJ@IG9AB4X?}405t760OPJ9AZLJY!sH}oO#?gV^Cy=OSitgS zg0=S{z_5F^c(7NA#QC%p6QE>($Op-zoB?#E& zaw@WXf1Dv2QHgBVBd^LE-@Qw{JR-Koe00C#4r!mwEeH|B91e;4m-ONcrwjP0O%=Y8 zxM5S^Tz|iWI^_^iZxN!icM)F%QqZOJ^XrNCe+v)Y3R=J&1(I|-KoVc)?cFh0LErq` zFW-4o0D4Y0ovSv(I8-Id%r2@JeLb}2&N%#W^Cm)(Dj^O%Uja>(V(WjU0L&X^yX;`ns8#)(PZJApWuZT$w6wzR!sGG62@e} zFZWn2kzr99BH+&mLj)Sx`aq)8s?MF;nz5Li0fkP|5^UYvHV$hwmX(#Y9sMQRO1Wa1 z#jPSdK74}*25Nh4(D6H!t z*HvxpLm&1ZoBG@+*m}0uc;FyS=4X?b*Tsd;{6iU-j~cAI;9?jg)ZK->*hW|3Z4fV0 z)}FZ(RpY4G7q)UtZDCi<*5Rwh2lWoNWQfO0eI}-9UysnyowyYD8TmpeMZw#_G2{t_ zXcI&Ue9xE|?3Rs%QXHvW-4~dAOo~vY3APxob-f7tqQ8?#X5PP!h zedSK{$>SZJmPCJ%~e-3*fd2qooQ( znOA0%UrO?Ka|yo?5_>w;?46U6V#gP1Suct1)&Xhcvs^1XKd^V?5DOi9j)N+DGrNJW zlJz4M(=5&=fkw?AQ1e82KG>gTrcz+dL9Hq%%9!~c9{f^u%^XSebZ7ZJ^WM*FE|PtD z@BsQ=&wQHF%>jfk27tzclB{Y@2EnD8W6Szp?go6`#Y-v}l;S<*63Oa&p2!^N1iU>3+VyEC+wLGsMh-Y!@G|IchC~?1BwL5>)F7lOPU%_t!5%>wKY?G@`Bpx= zxmRgv*C`TdTSN%o-Im@M=}XBf=BFSKB{rQY??u$@@gGRQk&$~0q_UE#e6efYhK~(j zI;VXw*SPdW_Q1*9VX-YH*Dj=>H&$anXsi>%-1Zz&lx##ZEInhZ0>A4x`Qx-92l;P< zTf8dt4M*mt>$)x=#ReAwOj$J*n<(xUkWns+r=$hsPE1x?t$`Im%!2ULh4CHLeclB z#X!pg<*V)6+2pz4E@5WU6D^{+GV0h9v?JYeHoz<(-%z~a9_Wt#Z`Pl3KzNyT58`H< z`kK}7vkf3+17=gS&-D(wx1orF+JP$)H{D}uX=+ki`HpO)3a)1bbv0;VMACJYAhJGJ z!HB^Zz|bf3G>B$52CwRuOz2jIVZO^aPGUyoWs}T`0`E8ZigRQyT$Vmu-8c}D^(6&< zJcp@hURXc&t9|ac^>#owqv;21QLAp@0{!Z zve}J=s+T*!AT^-2SVKd#sm}{bGF=}RG(P_s{lUxAYuhq;d-$2+^afGo6?Ow6$>@lw z(G8eDNq_IHq9o+iv-*;(-exzJH5?KmZ;xw{-XXR9(A%A{WiSc<1ziM&)zGfkl3aX0 z_U(#Q6_`GBc>AhRcH*>D6?@WUBX4mQ$r+LgZw}6QH&z}N{IKVM%-BHP*J87i<@uE} z*AMI~boFOpTyhJQCz>0u+^{`EIEHC7@hV5S1e9D`uh0lNW46zlkJZfX*l}lrH1Ff% zI~m7!MlQI0v!LWI|6N~$+~_*ULe3HvI)JE48vs<_wOTa%hprQe?zyU-s$cyGWHp|q zT>w*rxdqVF@I0p<{J;g6mw2S^o4oNf%~kl9~F`foian=#Q9Z2aLvW8-bGH)drj zFmmskSVjf_kN*Smoa(F$L{Ei5Rry38#;!SI)*ieqa3+ZA=Z?1%hQS>bh)uw}J&fs5 zVrOKNr*#m)Fz{ee;P;>4JH{%O=GlK$`}#G8FPtR-`glHFXpIx?qYY{)H_{$$zq1!V zYNZlx zGq9yg3kb$pgKgq!`5+8d?vOKk@r`=3B(}S?*jz&Zv6da0Mr+(Xj_zz1heyF*x{VnJ zeX26^c_X$5(v0RtxMuHL>Z74H`b?Lex%ihSR)@@8E7r{3S&!5?6O(-o3_m@xlO@jC z1vrIxwYl}is>Z}|&CG0jGPz_m zFbY!ZzzBR3{s5=Y6XSpu_8k=@MfM)O9=vLE^7I}s+WICxpC;=D24D$i)3e)?8cWL+HZE|VT`-6cW%RBr%dG5a5 z5Zf~F>~#`XZaWvg$JV~heF7g=`h>{hF#C0B+lO&=&0Xx%hzlupeGWPNuAz=2IJPnD}bmNbe5c* z-}aHx+_9q12A9BBd1M6C^xy=ORoH-|0gf<`1k6XyB_jgh8o90m+7&;=d-7QxRB%y` zr;Z70VxkEQ3ly|Zr(S(qo1TnkWGOjx@YrzDoBX3E0w(6Z-E#@;4 zv|E3m*c$L@&ifU0NQZ34SPlM@>!!H?G&CVrg^9RMqC5WNL=VQi(XhK36;)Owsyh2V zI;1A=V8}t`N`tl-sqp;tNgRxNBl=xLisU-r8xa_Cg->nV++)8?QxOwcCr zg6+%!8J9m$0aRK5HuH%q zTFB4ef6N_(HM;_X=NU*sXoONMfI3bR8!&^|27nz}8Z2Ku(Oq+4BF09l?`(0@g`;<# zR78sgzj+X=H*GxavP<}59V=%c3~c-OAhzGXj>L;U3=4PR+?f(~lB^&zSwu8XUCUOv znsztCUJxpDc$a4Gr}xY0kmiEMS#&#Y|MP5oBLo5sPXH$cInu^HWJ+J~Yyi%=7i+pb zaf&R{{7aJYE`;mLp_!D=@E6RrDBqy@scFXP)19bsOaqm1VQEmFWzGSy(v3WDcN`mG zUSEKrFD-2IaiOb6G|F9=Xxr4QCAMp0p~#elLUvT>!4tb*NIRL&N;c`MKqU+vMEEr4 z3H7F#PV?YWM9p5j2-ZB;?2VmZ+jE=c!#}$`79Hik#tkZXCcCO_%y|7!d4;MN8}`cplA1(SShY;YC*}+0Eq0mh>utw9+MX=@;;b5f^!)W! zYaIfEfbbOoiS6B-S9n2uuT!(!VWv(LWs|SA`NnUD+^otq485}tyf;P$cfAdnPLd+0 z?;X_%za4vQqF?tgFEflmnACyA+vpXrNCF)Ti{s4)C!4D7zhs0pp$FEmVTnn${@-kD zrEa-Zeh^a9scjU?Q#rG%Y4}4W#vB*GwnfGOWCc4!WZmY3P~>3OFO-enkUfy%3-~Nk zB7fo$%b#Oz`9(!y5zs>DH$;;Rt%HIE6mOwI1lgI48H7)Ry%RpT{;oq{+~xiPA~tQq zVW5zF?ULMCNy#L$H-@^VE^7UXw&E3+Mx3N*LzQ(NemwZYASMyU)2fUDab9f9H#s5B zb3k=C$q1{*@O-C;l|V#Be#3zilh&&Da?=NuW%E&Qt3GLOBIv6tad0osOgeC_Z9{~p zoR`$w#0YTpD=j={XaMLkITv@O5;CJdSE8-qGw;-?-rdwxqh4ykjsDHN3g-fzK3WD7493 z(D#OICHoxNDa*y|!F8RO_)!N*2mU`|7i9GtEw3VhggRsJ=7*4qS7EUqlNBLUXKFM^ zXUBqIvk4)EZ-cl|R8N5>W9Ol^eb>7OuC^%bak_ZXP}aBk;_+k2h@ckR0E8kCQ{in< zboE98AMSJsWbvkPQ^9j$1X*ROM<}bpN~Eb?&^g{Ho^IThg;5jfH*VN3iismZdsabT z@jemSPpT*OSJ*%W%*^wUKeMgwLEGps&Z5Ll*TO&Zm8-^{oD5|%FHMOktx|UvrKj0% z$D^Owx_60hPqg41{$Z}niQk1Jw$zV0^1gt2X@|23)K%=rgf^05b=%Df)gNjE@MKQ zZ6(inpX#zd`E{xTDQUAUa~8bE)?vESD*y_VFoZ<}4l*YZ0VQS*>pFy)#1OUdvJkJM z`wQPY9TUP~d&<1MU)S*&)-ZWM-`V){Nc(nT@(=F3`n`i-a%zNe!1im(OKvRc1VA(F^%t z@BZXMK4Jk*Zb76F-(xSuTqROaP(_oaAfVu4H_XnxqLHrzTesRZFS%6&>G)1+g%2!IO-I*v^b1a4!eLW7@ex59uL$Kd>Th9+t;MG8Ng8|@I%ix_)Kj?f zeKPuteBi>f!dl|a$1gSn5*OI4BY?xE#PZ;z=^bROPh1;Rjp!8-_ly@oZru2wSkou< zNy4z{0jJYRcV0@I5LJI#yPNC40p6K6XvPU@znh`?z^m@sB|1uY0BJk={AgYMTjsqnAD?;lYy>$B(IB_aw?bfYiZrOE6>0s}lO6Q{p?3_g=0)@R}9 zR%{f;jSTHIf<b(!S;s z<`4BO7(`Y%_~kD6E~iBO=W|1)zM9J!ASOZ&7U>fMw-*b&m4Bu73L1mu)0K>Bz2uc~ z>B)?0)-BE(7-T)0E8rX8Ao!Ak^)+w4i;MZ%T$-1W}N_p#w2nF&<-Kq~b7G9D9QE9Cu|BEsQ%5KX;0`T2B^rM$E$t zHLuT!CD5*YYCn`|q+BnlR&SiWKX?19e zSuig&3XwHQ9hyIvVBndxdj!|#&`C~Vcc`7V+$(>vol^kbgBH~M2PPOyg5^siU6@k! zTCyzu6G4Qc4(meMlkEo06h0=3=DySI4Ax3O?i1vf$GRcfEF*EZ`i^d}^MK78LfyNy z=EkKMYT44l51>AqU+*%}u@$OlJSylWw@lYx~}%8RUQv6(XB|@ zy3ux1Yw)EtS=M^eW#I-0UYL1LChz#z{CB49g`i2LhWw%D{x(o%e!pR!{qS6$iqy#a zC!an`^*CBe+(&DG|3r^tl2DMM)x0~Cy8bDR->D2UV#F^hWWpBm&1sa={Cwqu*S@}+ z6$z(J%;npKE!XsCaTDn?9R9iGF`(fB60Qz#c?J6VS~WkIiGjU*nCA4bMmxN@h;MU~ zPH%*R+RHmWd>N+q{CLhE-|^9F>6(nuP?ZYseg_1e#l?V!9+E^jrVg z-1;MSZN{IA2rDWXz=7)Tum2(QuH~?W8PFUDz*nRJD?<2Ad9X&IoafYl7D*EYR6YG5 z&U17+E?A7?Lkz&}Mq(Heew`xDPlCFIeG(WnT_Sf^tvja&Dg#WK0>KH*RvMH<;=6h^@tASvN?rL1-jymSw1#Nxd~a4eHYDTTJo~0!UV<- zSX~qT!}u%pb77=QspkATeDDOQD>s1}?d6XNCqzig6S3%90?Ee^cz;DXWN>{Z0Ee9z z$|2;ly#nKY*(>0Zr({?jMN3Yu(0KE8mVec_!czP7w%ey}YHW{dIzpbqM|zy~IE$!J z$D_s=9-a%JwB`X%EHK6v=_ASNS&YY6(a!hJvR(}tyr-r^loug4bd|anCTly|*`vC* zs9-JQbahBUXF(CH%mZ>^0D5;xY~@6O=v-ZD`b+-@qY9N(<*~+#^oXse+}+h8uAN`p zB6j1Y7DxJmk;Z#k%IM6*(mV(rJYglBnDK};9az+p^_g_8H;t`xxwvQP9>2Zy?$jlV zN@`hUY5Z5dwDxkB>v5*_T!{w^)Ui|Go*Vyyf>e^{`@S z>3_wQ5u;BXe+@v?R^bHTZ>L0PB*uwk|B|Un4IrGrGR(#XJL<6&sQDv|4ps^yvB!tE;lYl4*MpfJ+ErP6 zyWdyfCtkiY**cTUwX&Pyc{G7lL^Q>}VI7)!pN4lD>bYR(JM-e-J+7pDm!p={?5p2w z7D}zkb&B*PC4Rh!-*^47_`Q4AE+;;D+FO7DBI%iSaq>z864rl?pd=!T~*`TG`3bF_f0{azq?M5o~ zjxuA61?sLR&B*YdT&riPE6rLsK!PMx;y(WzMgbqN2lnyc&bz`s2tH%RX%T$XdES2# zk|sA&`-1>#k9~(Q0&dZ6g)eLqn_eh61CFapTED+0!Li6u0DFAX=kF{N{IhlSW6NP< z;G~)H0>v>)arTLSLM*x&Kyg2fHoGCypbZ44{IG(z`!H-g2Q>hUh%E(gsbKEOo8V=d z6?He2WwcGXYVWa~_v>9I@I=8%MPxu}yN&G^m_zuLz;%$tiG zL_}hHOs@GWQ}LhAOU$=~npMAK-}c#x%WO+kyipxZz{{xt?R}??2zv};sRU}J2YqT?jDXY*$)?gQSY~P9CKZ7su5VuoDA|kJHR%8d?rXchJ8Iu z_H-#Sh2z{_9}7+pJET=|wQ*O-vqtF~a$RTC@ZXw2){OpIN#CJ!0kB!c`&c6&H+NBw zB%$zPZZfg&^N*S^4S@9ZV}i>!on#%+M!9E>RtFMp^}aeh$(j0GdR_0=tr}%|bNvq4 z@l{wfpXJuK2)hF*IM$s%xk6_0M`u?7k*Lbz@&PZSz<>0Nf&J-FS^OYpP-->E_Ey=V7vOVz$WO=D?T zz}SGdnm3Rb7HPzA(%YH(p(QDB&l%AQoUq9aV<^6EJq-zx)2k7F_eJ@N%18EJji0L~ z8J0YG6JJ{$WW=UUQYUp9QJdilAShV7A*zgy2+B5`^5-&hY31)&z8dvxPIaS>XhX}Z z*`*8blP1qs1RnM|RQaS)ZRDXECzFE(%oJ>YGwTc|?zXoOh6UtFC#YP_`H4C+2Hn?+ zxq;0_(B|hE+y5_kef)5nB?-;)M? zh6;y{q)yH=bJF&GXrtJsmu`R`0L}n)D-O*_U_qRRl>M;5dl}C#SYuL_V{1`;({I!J z=Si6_%``)9Sl;KC(Qvp_)WikYY}w%H1p$BB_%X@bS_E!*D?~!a>RId|z8btuIP!x?vbz5)*prWX}e;eFXUc@Q#{P zNQ(rVH4*|m@A^!liHKe)lNvc4s`F!-!6|(4K_t#fp+PM=xjOcek=o=#4SVi!Vknhg zU(>gnrPrmW!9I)AB}jftu2P40AH_U`1@&we3cA{z+dT8lZ$&oUOWAP9u1FUiC<(of z`QFH&jyKb&!I(`r3|k-4Jr|+3Z=yh^?|4a3;;A@JV3&A>@rW^vTjt?_l*irP8uf89 zyp6^Z=Au!CHZWnC!X-nCK-v)MQjbhEc(l=73FEeN|=b8fN36((8`epXU=iR%TqJ zwK(loM4Ub+9nS^tVUi;Bt|*_&WgM zAUJ~&77!Er&cLvwIk9@&sKzwv!>u%?ZNsSSyPg+a^NZ>{odsDw7Q=@!!sQQYkDiV2 ztKiv2O#O+8L09z6uNN$1F7R+4Zq}-laWDLy>CjqZ zY-1?@_>v6UlXZ#{Pq;ROhO{x}QH>PYP7ghe0-RDMQ$1WusUqU*(dq${yT@qf1_-5t zBOcai_rIlTT^bbQ+Q0^~Gv~+pv+ykpWMma1axWhn>?2~LsjpD!R8juKP-7@DM!_&~ zO5^nBtTUlTULlqWPBZEQ+=$?MkD`K8O#z8jeG(@{U!{M}UfE0D)+IT~r|NR!V1uB} zKnN^>_z4I;2`>rW6dA(P$82PvjDdR=X}|*E7iVkYy!gEsC5`r~%+T zvmZ4fHF?iCTFnyQ>6SPr?>e4H4yXfzUe+j$Q#V4&EPLoZBj2o|8&Pw?NZk{{)c4&# zsA3g5keM=7A-ZS#i5VmJ<>-e)$FFWXjxGjPhp>b^!e7EhL(Pp;6vlZe^1hr@A1ops zTvbleDj2Td(>nD-)lw{yS4UmJFW|9XbhzN*%RIzrEQ<|^Gj6a7pr7nB@F~u#z6(%5 z285|Qs)vmw67=+)zGY8Cub}*GE zKgFpNe+r?`1f5T$S0#OPy+{*nEt%c7p(qCK8fyC_&Ziqrp3#^P4*?C?n}q14iBQdS zzZp^E*WB;05+^rL_Dq&Pu=>6Vi_3z{DjnGduD|@gbODBWh-RA2@$x=7DSpT`dx?=(t{P%?BJQR=}o*_ zaK$iB<-_(~%e3IwJ=TLe2QG>pqMOJHL^eFa?)SAqg!#Y`I}C7e=iW0(M$kgWo{)*W z>w%En2|qV~%6-RZgBw~^cEcY14Sric)GCY%z()Z)C%KkX3Iv=C5dONCfZtI7o8+K^ z%nF8WTty-#-c^@$-+K3G%Cf~hSs*@oO5((`$W?bIFwfwplOf#)g75w7Qyp8sk8PG` zp1ok=CTqYU?-=VB{hp~@mTfHSTEvrgSw4}63)H7YMzEME>mXQSq_6Tt=IXrXWVN|; zzjJqX`HMK(vFtBd@f%zAlvl+{f4;i8|LZYgS$RU~WCL})bW93SLOQ4nQ%nq2nzF^s zN^S?!JZy#gZjP&E7JtFl9~pKn#`1@+AK5XtOhx#=PrT=zsDQUuu-zb3t@inEYpP2j zHS&4wj?RI5Wfo0!kI30Ya&76*dt*HNsX33_X$~D$Le96bPZ0Wx2`d>gTx&xJe*qKK zM3uyhKPPQK_QNJUj=g$@bZi(!`iqw7ua-k2_IBSpO*P36H_zO^b(lK=00PUc7FOA4 z@Wl0NHn=c#SoO>=#K6+$CvR1h=;0Vmgj(8~c^Qqm43EU_s5@+uQt`AV1 zJ+Z{M6IiA-@_^`-?+Pb?U3v?k z+pNarTGHaQ?7h3~X+Dk@Uw^aIKCNEl%>7fDbpm`w9U#O5BP`itc+UY_;O82#SfhSp zPj=pSfIzD$>Dg5pEc8P)yGO)a#nt#?XVc`}{WEvD@R^(>svCM>hV=zH;>bRZZ$tJ3 zHKuRvx%I9h=zQS57n^OZ4z|W@|Gqu8g z(NMk3!|;L!+8;MJoK*eb-mWsb$2$SDw(W-t~AS2v+Rp z@?(cqVTzsuBWYAU@uR)Q^89vN6rIgWx_x|y&8P+OJZfHJVg@jESOQQETL(&JQ5c>L z?P}(s_FJj%y0x$(b}GHv7wm>qZZk8lHj6wZX=@qqdC9-Mq%v%kgl_=|RxGqfa$$hE z4-v+$OqE~(>yYS`iz^0KLYIT^x)?HGy+}vQd zp?%m|APn2r=qZJC0F*M-S)B(Kgtis<@;0yOArj0T$q_caYjo=f$F3LKj%OG?$uNFf z=oij);2fYs5eBXP*54iA5aAniFvKYJY1Bn+aYOhb>+NjKQ+pR}gJm-OlJW%%xzm#4 z^(ZZRO{X?J+aGB34HJlSoEQtIZ0XY937sUAxg1?cq+~iCIZganUKMjQru?0yT}$o6 zL;06neak7J61oXVGueo6J}0B*GBclcln|-FaC(S4;*)hEZz%iA`}ZU51;MAi#2!6q zEn2*EU3g?F_79_QeNYg~ZSQp=sqMc7Z`0V?4~L2lU0 z>FVGZjZ!b>FZTgm&VS?UB*(scS4x)8AHqW1p9sq7$DJAmsr$>jr__ga(3nPEMnStiIe>#;U6NJ`)2JR2?d@$Qq zF}Vm%4B$kA5Ow-n7jZHg0Xo)wr{_Y7keLU(Ft4me!JD{ymw6O#Uq5Ad?=`08`cPdRxn?id zIN5HoLSIiA4OUbVb5@MX>zP4hTC~ud#J!;O<61P$;~$>Pg}^Z?cRLdmn#+4 zWGcbi_hliSN6W@&9gu=gojRCX%FvD7ldp!huVDCx&iZbiyijvVxpevRWXx4m(uv-O zm<)3fD1k;1W^h)c^y~=k*)BFWMeXeEN6);q9jX&e@&kGqmrk8G)!51;=gaqZ^VxVUy_NF=@h5erGdg zdSMN43==s;Ai#~dcF@gX2{!$n4f1G9o{tlQP)pQKo6z;KsKk^iZBg^)HGoz6PxIa` z49-J>^foZqwIl(YGH9eSfQ1kX^d(^X|w4xsk`jHmr~D=d~Dw ziHh~P)TW1=a)b|->vHI2T@hekDp5J4TLIIk^& zqB`!qx(VUC3g_wnuTuB_C6zkBA}NssQuE_J^F{1S@J&uJPCeg^vXj}|G&kh`{MO9X z^wE38p*_?@m+QMK9%WP*Ivy|9EVSIaJXLrWpr0|&o+SX9-H(~)xU+TfoqZ3QQeO4D zNmMPwX1*{ND$jKBcP`#tbJ2WLz1q~ecJjI2!#l@`)NkZv&{&_(iv|T^B9y`&Q_R$dFqxVF9Lq z^I?!SHlWi$5%0vgF}rE$d*26~P{BBU@U}ZQV-(cTWF*nMw6Xt%Z!rBx)Ul3KuAPfd z{JfErpHHeJ!c(h#AE}H>E~eXF4e$H3kJAN>5O32TVxE%+%n`nqjJZiGc4-u?u-o2|9;;A)`(%e1Oyu0{=^iIZ^JUJTs2uRs^@uKhn zP6n*Zwm`bZBq{Ppr@abDDp2bEGCi{`k3kf7nCt8)7TM>-~Vmxenfu1of-G{3qvk(hGMt)l16S>IfnS8 zD8-p5as9zN^5i`4k6(;QM5u?8s4s)GQY8u3k15g38zK-%+?DwDPa*nbcU4Ld%k*== zb5*(ajF9ZO3%7h?PseMXZ+JU~&7zi8%%d3otQ=0rPZXpy)3C$Tx`c5nJM;UXLUQW8 zPNTf2fP>?{DL3Q!9fZ&F*E}`e`D{az{wN61I+{z6VqdM02Jit^W?K!-B0KeWL)#{# z^(0@|YBg5$7pf?hyICmG1JXYF)gRfFk)$y4>7$q3G7#%Vgqpz>DolX({m}!wv(JqI z9Da~2>L_ZSG!KTRQDlwQWj$br;oG!SdV8qp;}7he&&SdHFc=^N`omI?8QTwM27Vp} z-L>e=VUio&mCd@e+>}$m7E5Wqdl|Z?JjT7t@xHZKrQZ}!!oy6i2h9s%Y!z6aQ%=2w zl|ouc;+|SU7#c;V2$(}M+)p1RKTUUj6=S>qh;#pqvVeU6Eu-t)p zEM`zcz!Yc@eYRWkn|yg`X&E!I^uP(8Gve~Gn%x^Sc0Uxq#Kl!BMRtPfKm+0@ju(o` z!R=!z1?eBanKP0bsKGY(*0htE!X37!nTm_gy}XXmPWa!Q+WSQQ>c`v*H#kF2{+RW` zc5V{e0OG`YL<_o4aO?olzSQ#};Wla`d=5&-@AEadBokXik1+*^XBlE-hDzFkw^OR9 z+(<_B@rxVy4#XE!zMWjYJ9#dVy&n)Q!7-&0HrJeBAO7BFzl%YhU&=A}V@fvMwH~&y zF}eE+t5 zSynRyaMkQ2)O&IvpXEfswAW=R8Y=<-J!8&{mNQ?vD)06o?4_Q(T~}TG16G_-S7gfh~eF1jYTYx!JW}2CN^z^hjnM zP<~xKoVqf0%+UPNnm8%~ZAqvT2c?oIri92zSO5jF$wlh9xnC`iBpVNm%lScGym=M} z

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 literal 0 HcmV?d00001