[TOC]
embedx 支持图模型、深度排序和深度召回模型,不同类型的模型 在 训练 或者 预测 时,需要准备不同的数据。
以下依次介绍图模型、深度排序和深度召回模型在 训练阶段使用的数据、 预测阶段使用的数据 和 两个阶段使用到的数据的 数据格式。
图模型训练时需要准备 图数据 和 训练数据。
-
图数据
-
图数据包括
节点关系数据、节点特征数据和邻居节点特征数据 -
不同的图模型使用不同的图数据
- 有些图模型如
deepwalk使用部分图数据如节点关系数据 - 有些图模型如
graphsage使用全部图数据包括节点关系数据、节点特征数据和邻居节点特征数据
- 有些图模型如
-
图数据使用总结
模型 节点关系数据 节点特征数据 邻居节点特征数据 deepwalk ✔️ node2vec ✔️ struc2vec ✔️ metapath2vec ✔️ eges ✔️ ✔️ unsup_graphsage ✔️ ✔️ ✔️ pinsage ✔️ ✔️ ✔️ sup_graphsage(多标签) ✔️ ✔️ ✔️ sup_graphsage(多分类) ✔️ ✔️ ✔️
-
-
训练数据
-
训练数据包括
随机游走生成的序列数据、随机游走生成的边数据、多分类数据和多标签数据 -
不同的图模型使用不同的训练数据
- 有些图模型如
deepwalk使用随机游走生成的序列数据 - 有些图模型如
graphsage使用随机游走生成的边数据
- 有些图模型如
-
训练数据使用总结
模型 随机游走之序列数据 随机游走之边数据 多分类数据 多标签数据 deepwalk ✔️ node2vec ✔️ struc2vec ✔️ metapath2vec ✔️ eges ✔️ unsup_graphsage ✔️ pinsage ✔️ sup_graphsage(多分类) ✔️ sup_graphsage(多标签) ✔️
-
深度排序模型训练时需要准备 训练数据。
-
训练数据
- 训练数据包括
排序样本数据
- 训练数据包括
深度召回模型训练时需要准备 物品频次数据 和 训练数据。
-
物品频次数据
-
物品频次数据包括
物品频次数据和物品编码类型配置 -
物品频次数据使用总结
模型 物品频次数据 物品编码类型配置 youtube_dnn ✔️ ✔️ dssm ✔️ ✔️
-
-
训练数据
-
图模型预测时使用
图数据和图预测数据-
图数据
- 图模型在
预测阶段与训练阶段使用的 图数据完全相同
- 图模型在
-
图预测数据
- 图模型在
预测阶段使用到的图预测数据格式是相同的。图预测数据格式
- 图模型在
-
-
深度排序模型预测时使用
排序样本数据。预测阶段与训练阶段使用的 排序样本数据完全相同
-
深度召回模型预测时使用
用户特征数据和物品特征数据
总结以上图模型、深度排序模型 与 深度召回模型 在 训练 与 预测 阶段使用到的数据,如下表格,接下来依次介绍。
- 数据总结
| 数据 | 功能 |
|---|---|
| 节点关系数据 | 图模型,提供图查询功能(采样节点,采样邻居等) |
| 节点特征数据 | 图模型,部分图模型使用节点特征 |
| 邻居节点特征数据 | 图模型,部分图模型使用的邻居节点特征 |
| 随机游走之序列数据 | 图模型,部分无监督图模型的训练数据 |
| 随机游走之边数据 | 图模型,部分无监督图模型的训练数据 |
| 多分类数据 | 图模型,有监督图模型的训练数据 |
| 多标签数据 | 图模型,有监督图模型的训练数据 |
| 图预测数据 | 图模型,预测使用的数据 |
| 排序样本数据 | 深度排序模型,训练或者预测使用 |
| 物品频次数据 | 深度召回模型,负采样的物品集合 |
| 物品编码类型配置 | 深度召回模型,指定物品编码类型 |
| 用户特征数据 | 深度召回模型,训练或者预测使用 |
| 物品特征数据 | 深度召回模型,训练或者预测使用 |
节点关系数据、节点特征数据、邻居节点特征数据、用户特征数据 和 物品特征特征数据 都是 类 libsvm 格式 数据。
首先介绍libsvm 格式,参考libsvm,以空格作为分隔符,格式是:
label id1:value1 id2:value2 ...部分图模型 训练或预测时参数 --node_graph 指的是就是节点关系数据,参考节点关系数据。
- 格式
node adj_node1:vaule1 adj_node2:value2 ...-
概述
类 libsvm 格式,区别是node取代了label、adj_node1取代了id1,adj_node2取代了id2- 其中
node adj_node1:value1, 指的是图中的边(node adj_node1),value1是边的权重 - 其中
node adj_node2:value2, 指的是图中的边(node adj_node2),value2是边的权重 node、adj_node1和adj_node2等是uint64 类型,value1、value2是浮点类型
-
示例
41 224:1.0 302:1.0 112:1.0 542:1.0
1 202:1.0
1000 50:0.3 16:0.2 27:0.5部分图模型 训练或预测时参数 --node_feature 指的就是节点特征数据,参考节点特征数据。
- 格式
node id1:value1 id2:value2 ...-
介绍
类 libsvm 格式,区别是node取代了label- 其中
id1、id2等是node的特征 id,value1和value2是特征 id对应的特征权重 node、id1和id2等是uint64 类型,value1和value2是浮点类型- 特征 id 的编码与生成方式参考特征如何编码
-
示例
41 123:1.5 456:1.0 567:0.1
1 1:1.0 40000:1.5
1000 3333:1.0 4444:1.2部分图模型 训练或者预测时参数 --neighbor_feature 指的是邻居特征数据,参考邻居节点特征数据。
它用于图卷积类模型的加速,参考邻居特征平均。
- 格式
node id1:value1 id2:value2 ...-
概述
类 libsvm 格式,区别是node取代了label- 其中
id1、id2等是node的特征 id,value1和value2是特征 id对应的特征权重 node、id1和id2等是uint64 类型,value1和value2是浮点类型- 特征 id 的编码与生成方式参考特征如何编码
-
示例
41 123:1.5 456:1.0 567:0.1
1 1:1.0 40000:1.5
1000 3333:1.0 4444:1.2部分图模型 训练时参数 --in 指的是随机游走之序列数据,参考随机游走之序列数据。
embedx 提供了随机游走工具,辅助用户生成序列数据,参考随机游走。
- 格式
node1 node2 node3-
概述
- 行间以空格分隔,以
node1为源节点随机游走得到的序列 node1、node2和node3等是uint64 类型
- 行间以空格分隔,以
-
示例
1 100 234 567
57 89 100 123
90 100 190 290部分图模型 训练时参数 --in 指的是随机游走之边数据,参考随机游走之边数据。
embedx提供了随机游走工具,可以辅助用户生成游走边数据,参考随机游走。
- 格式
node1 node2-
概述
- 行间以空格分隔,
node1指的是源顶点、node2指的是目标顶点 node1和node2均是uint64 类型
- 行间以空格分隔,
-
示例
1 100
1 57
23 56部分图模型 训练时参数 --in 指的是多分类数据,参考多分类数据。
- 格式
node label-
概述
- 行间以空格分隔,其中
node指的是节点、label指的是此节点的类别 node是uint64 类型,label是int 类型
- 行间以空格分隔,其中
-
示例
1 0
234 2
23 1部分图模型 训练时参数 --in 指的是多标签数据,参考多标签数据。
- 格式
node label1 label2 label3-
概述
- 行间以空格分隔,其中
node指的是节点、label1、label2和label3指的此节点的标签 node是uint64 类型,label1、label2和label3是int 类型
- 行间以空格分隔,其中
-
示例
1 0 1 0
234 1 0 1
90 0 1 1图模型 预测时参数 --in 指的是图预测数据,参考图预测数据。
- 格式
node-
概述
-
每行一个节点,
node是uint64 类型,指的是用户待预测的节点 -
用户在 demo 中会发现我们使用了
节点关系数据作为图预测数据。 这是因为在预测时,embedx 代码只会解析节点关系数据的第一个节点使用 -
用户可以选择复用
节点关系数据作为图预测数据,也可以按照图预测数据格式准备数据
-
-
示例
1
234
90深度排序模型 训练和预测时, 输入样本数据支持 libsvm、libsvm_ex 和 uch 多种格式, 参考样本格式.
深度召回模型 训练或者预测时参数 --in 指的是就是用户特征数据,参考用户特征数据
- 格式
node id1:value1 id2:value2 ...-
概述
类 libsvm 格式,区别是node取代了labelid1和id2是描述当前node的特征 id,value1和value2是特征 id对应的特征权重item_node、id1和id2是uint64 类型,value1和value2是浮点类型- 特征 id 的编码与生成方式参考特征如何编码
-
示例
41 224:1.0 302:1.0 112:1.0 542:1.0
1 202:1.0
1000 50:0.3 16:0.2 27:0.5深度召回模型 训练或者预测时候参数 --node_feauture 指的是就是物品特征数据,参考物品特征数据
- 格式
node id1:value1 id2:value2 ...-
概述
类 libsvm 格式,区别是node取代了label、它指的是用户输入的物品频次数据中的节点id1和id2是描述当前node的特征 id,value1和value2是特征 id对应的特征权重node、id1和id2是uint64 类型,value1和value2是浮点类型- 特征 id 的编码与生成方式参考特征如何编码
-
示例
41 224:1.0 302:1.0 112:1.0 542:1.0
1 202:1.0
1000 50:0.3 16:0.2 27:0.5深度召回模型 训练时参数 --freq_file 指的就是物品频次数据,参考物品频次数据
- 格式
node frequncy-
概述
- 每行格式为
node frequency, 以空格分隔,包含 node 和对应频次信息 node和frequncy都是 uint64 类型- 深度召回模型 使用物品频次数据进行负采样
- 负例采样的时候可以选择
均匀采样或带权采样,带权采样时会根据item 的频次进行采样
- 每行格式为
-
示例
41 20
2 15
3 10深度模型 训练时参数 --node_config 指的是 freq_file 中物品编码类型,参考物品编码类型文件
- 格式
group_name group_id-
概述
- group_name 是 string 类型用来记录 id 的意义,给一个有意义的名字即可
- group_id 是 int 类型,表明 item 编码类型
- 生成方式参考[编码](encode.md#生成 node_config 文件)
-
示例
Item 9999