专注细节
努力进步

如何牛逼地设计电影推荐系统

个性化

所谓个性化就是系统在对每个用户进行相关引导时,应该考虑改用户的特点,比如他的历史搜索行为中表现出来的特点,比如是喜欢科幻、或者喜欢文艺,在搜索相关内容时,可以根据这些潜在模式去调整内容的顺序。

精准营销和消费者分群

精准营销是通过用户的个人资料和行为数据,训练特定模型去对用户进行群体划分,这类方法使用的数据能够有效地去理解用户的行为,这类模型的算法难点在于这类数据不存在标签数据,一般采用聚类算法来进行处理。

预测模型与分析

在MovieStream中,预测模型能够使用过去的行为数据和收入数据以及内容属性,创建回归模型来预测用户对新的电影是否感冒。

另外一个例子是当仅有部分数据时,利用分类模型去自动为电影分配对应标签、关键字、类目。

机器学习类型

机器学习方法可按是否有label数据来说分为两类:

  • 监督机器学习
  • 非监督机器学习

数据驱动型机器学习系统构成

 

NewImage

数据搜集和存储

数据搜集主要包括用户行为、一些其他系统产生的数据包括网站的浏览数据以移动app的log信息以及用户浏览网站的时间与天气数据等等

数据存储方式应该兼容各种不同的数据模型,包括HDFS、Amazon S3等等文件系统,Mysql or PostgreSQL的SQL数据库,分布式的NoSQL数据库(Hbase,Cassandra,DynamoDB),基于流式数据系统Kafka、Flume、Amazon Kinesis 的Solr or Elasticsearch的搜索引擎。

数据清洗和转换

大部分机器学习模型系统的原始数据包括电影的详情页、何时看电影、何时进行电影反馈,也包括其他额外的信息,比如用户的location、IP。这些log信息中主要是文本和数字信息也包括一些图像与音频数据。

为了使用模型,需要对原始数据进行预处理:

  • 数据过滤:原始数据一般极大,需要对数据按照某些规则进行滤除
  • 处理丢失、不完整、错误数据:大部分的实时数据集原始数据多半不完整、或者丢失、或者有错误,需要进行相关处理
  • 处理潜在的异常行为、错误和数据异值点
  • 联合各种不同数据来源包括用户画像、地理数据、天气数据、经济数据等等 

当对原始数据进行初始化预处理后,我们必须对数据进行变换以保证数据能够被机器学习模型使用。数据变换主要包括以下几个方面:

  • 将categorical data例如地理位置信息或者电影的类目编码为数值表示
  • 从文本数据中提取有效特征
  • 处理图像与音频数据
  • 将数值型数据转换为category变量,例如对用户年纪进行区间划分
  • 处理数值型数据,例如对数值数据进行log转换
  • 对特征数据进行归一化和标准化处理以保证各种不同输入变量有一致的尺度,很多种机器学习方法需要输入数据标准化以保证性能精准
  • 对数据进行特征处理

在spark的SQL中有很多用来解决上述数据处理的方法,能够快速地对数据进行相关处理。

模型训练与测试

当完成对训练数据的处理后,接下来我们对模型的训练和测试过程。这段过程中,我们主要关心模型选择:为给定task选择最合适的建模方法或者为给定模型选择最合适的模型参数。

利用交叉验证方法来对模型进行训练,并对该模型,利用测试数据集来进行model的离线评估。

MLlib库:Spark的机器学习库,可以用来对各种机器学习模型进行训练、评估、交叉验证

模型部署

当经过模型训练与测试过程后,我们得到离线最优的模型,之后我们会将该模型部署到生产系统,用来进行相关预测

模型监控与反馈

在生产系统中,模型性能监控十分重要,模型性能是否在新的数据中和我们期待的一致,满足性能的需要。

模型反馈是在模型部署后,我们通过搜集用户的隐性反馈行为,包括点击率、是否点赞等等来衡量我们的模型是否有效,拿到反馈数据后,某些online model还会通过相关方法对模型进行修正。

批处理与实时处理

批处理在机器学习中,一般使用数据集中所有部分或者其中的一部分来进行模型参数训练;实时处理则不然,使用新来数据来对模型进行参数的修正,来改良模型的性能,通常用在线上系统对模型进行实时修正。

最终系统架构

NewImage

 

 

 

分享到:更多 ()