使用BigQuery ML构建推荐系统

是否曾经好奇过Netflix是如何了解选择并展示感兴趣的电影的?或者有没有想过亚马逊是如何根据搜索项向推荐产品的?这些技术背后的魔法被称为“推荐引擎”。本文将带了解如何使用Google Cloud Platform(GCP)构建这样一个系统。

什么是BigQuery ML?

Google BigQuery是一个无服务器、成本效益高、高度可扩展的数据仓库系统。BigQuery ML允许仅使用标准的SQL查询在BigQuery中创建和执行机器学习模型。BigQuery ML使得数据科学家、机器学习工程师和数据工程师能够直接使用SQL快速构建和分析机器学习模型。

BigQuery ML支持哪些模型?

BigQuery ML支持多种模型,包括回归模型(线性回归、二元逻辑回归、多类逻辑回归)、聚类(K-means聚类)、矩阵分解(用于创建推荐系统)、时间序列模型(用于预测)以及提升树模型(XGBoost,分类和回归)和深度神经网络(DNN,分类和回归)。

BigQuery在幕后做了什么?

BigQuery利用其处理能力构建模型,自动调整学习率,自动将数据分割为训练和测试集,进行L1/L2正则化,以及数据分割训练/测试分割(随机、顺序、自定义),设置学习率。

如何在GCP BigQuery ML中设置?

登录GCP账户,导航到BigQuery,接受条款和条件,然后点击完成。有两种选项来创建和加载数据集:使用UI创建和加载数据集,或者使用简单的BigQuery命令来创建和加载数据集。本文将只展示第二种方法,因为它更受偏好。

加载数据集

运行以下命令创建一个名为movies的BigQuery数据集:

bq --location=EU mk --dataset movies

这里选择了一个位置并创建了一个数据集。接下来,运行以下命令以CSV格式加载数据集,也可以上传自己的数据集来构建模型,但本文将使用BigQuery提供的数据集。

bq load --source_format=CSV --location=EU --autodetect movies.movielens_ratings gs://dataeng-movielens/ratings.csv bq load --source_format=CSV --location=EU --autodetect movies.movielens_movies_raw gs://dataeng-movielens/movies.csv

在GCP控制台运行所有命令后,应该能看到电影数据。

探索数据集(EDA)

让快速查看一下数据集。可以看到有一个名为“movies”的文件夹,其中包含“movielens_movies”和“movielens_ratings”,暂时忽略“movielens_movies_raw”。检查“movielens_movies”数据集,有“movieId”、“title”和“genres”,这些将用于模型构建部分。

查看“movielens_ratings”数据集,其中包含“userId”、“movieId”、“rating”和时间戳。

检查数据大小

在BigQuery查询编辑器中编写此查询并执行:

SELECT COUNT(DISTINCT userId) numUsers, COUNT(DISTINCT movieId) numMovies, COUNT(*) totalRatings FROM movies.movielens_ratings

检查评分低于3的电影:

SELECT * FROM movies.movielens_movies_raw WHERE movieId < 3

还可以利用Google Data Studio可视化评分,点击“探索数据”然后“在Data Studio上可视化”。

检查评分低于5的电影:

SELECT * FROM movies.movielens_movies_raw WHERE movieId < 5

如所见,“genres”列有一个格式化的字符串,因此让将其分割(|)并保存到新表中。

CREATE OR REPLACE TABLE movies.movielens_movies AS SELECT * REPLACE(SPLIT(genres, "|") AS genres) FROM movies.movielens_movies_raw

还可以进行其他额外的数据预处理来优化模型。

协同过滤模型创建(矩阵分解)

要在BigQueryML中构建推荐系统,需要传递model_type,并确定哪些列对于协同过滤是重要的。

CREATE OR REPLACE MODEL movies.movie_recommender OPTIONS (model_type='matrix_factorization', user_col='userId', item_col='movieId', rating_col='rating', l2_reg=0.2, num_factors=16) AS SELECT userId, movieId, rating FROM movies.movielens_ratings

要查看训练好的模型,运行此查询到BigQuery编辑器:

SELECT * FROM ML.EVALUATE(MODEL `path_to_your_model.movies.movie_recommender`)

让为用户ID 102找到最好的浪漫电影。

SELECT * FROM ML.PREDICT(MODEL `path_to_your_model.movie_recommender`, (SELECT movieId, title, 102 AS userId FROM `movies.movielens_movies`, UNNEST(genres) g WHERE g = "Romance")) ORDER BY predicted_rating DESC LIMIT 5 SELECT * FROM ML.PREDICT(MODEL `path_to_your_model.movie_recommender`, (SELECT movieId, title, 402 AS userId FROM `movies.movielens_movies`, UNNEST(genres) g WHERE g = "Comedy")) ORDER BY predicted_rating DESC LIMIT 5
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485