1. 关系型深度学习的兴起背景
在传统的数据分析流程中,数据工程师和科学家们花费大量时间将关系型数据库中的数据提取、转换并加载到专门的数据仓库或数据湖中,然后进行繁琐的特征工程,最后才能应用机器学习模型。这个过程通常需要数周甚至数月的时间,而且随着业务需求的变化,整个流程往往需要推倒重来。
关系型深度学习(Relational Deep Learning, RDL)的出现彻底改变了这一局面。它允许我们直接在原始的关系型数据库上构建和训练深度学习模型,无需进行复杂的数据转换和特征工程。这种方法的核心思想是将关系型数据库视为一个图结构,其中:
- 每个表的行成为图中的节点
- 表之间的关系(外键)成为图中的边
- 节点的属性作为特征向量
这种转变带来的最直接好处是大大缩短了从数据到洞察的时间周期。以电商场景为例,传统方法可能需要:
- 从订单表、用户表、商品表等多个表中提取数据
- 进行复杂的JOIN操作
- 计算用户RFM(最近购买时间、购买频率、消费金额)等特征
- 最后才能训练模型
而使用RDL,我们可以直接在原始数据库上定义预测任务,模型会自动学习如何从原始关系中提取有用信息。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 关系型数据库到图结构的转换
2.1 数据库模式定义
要将关系型数据库转换为适合深度学习的图结构,首先需要明确定义数据库的模式。在Python中,我们可以使用relbench库来完成这项工作。以下是一个电商数据库的典型模式定义示例:
python复制from relbench.data import Database, Table
import pandas as pd
# 假设我们已经从CSV文件加载了数据
customers = pd.read_csv('customer_dim.csv')
products = pd.read_csv('item_dim.csv')
transactions = pd.read_csv('fact_table.csv')
stores = pd.read_csv('store_dim.csv')
# 定义数据库表
tables = {
'customers': Table(
df=customers,
pkey_col='customer_key',
fkey_col_to_pkey_table={},
time_col=None
),
'products': Table(
df=products,
pkey_col='item_key',
fkey_col_to_pkey_table={},
time_col=None
),
'transactions': Table(
df=transactions,
pkey_col='t_id',
fkey_col_to_pkey_table={
'customer_key': 'customers',
'item_key': 'products',
'store_key': 'stores'
},
time_col='date'
),
'stores': Table(
df=stores,
pkey_col='store_key',
fkey_col_to_pkey_table={}
)
}
database = Database(tables)
关键参数
