閱讀188 返回首頁    go windows


數據格式規範__數據規範_開發者指南_推薦引擎-阿裏雲

推薦引擎的基礎數據模型如下:

basic_data_model

該數據模型總共包括了六張表,這些表有以下特點:

  1. 在MaxCompute(原來ODPS)中需要自己手工創建這些表;
  2. 表名沒有固定要求,可以按照自己的習慣命名;
  3. 每張表的表結構必須符合推薦引擎的要求,列名、字段類型和分區格式需要和規範中保持一致(參考下麵的表結構說明);
  4. 每張表中填充的數據,必須符合推薦引擎的要求;
  5. 每張表中是否都有記錄取決於業務場景和業務數據現狀,其中以下幾張表中必須有數據:用戶信息表、物品信息表、用戶行為表;
  6. 對於業務數據中無法提供的字段可以填NULL;
  7. 每張表都必須是分區表,以’yyyyMMdd’格式的字符型字段ds作為分區字段;
  8. 除了行為表需要每日上傳外,其他meta表如果不發生變化可以不導,推薦引擎會自動獲取最近一個有數據的分區中的meta表數據進行算法計算。將數據導入不同分區時,請遵守下麵的規則:

    • 用戶表(user_meta):每天可全量導入在一個固定分區(insert OVERWRITE TABLE user_meta PARTITION (ds=’20160501’}));
    • 物品表(item_meta):每天可全量導入在一個固定分區(insert OVERWRITE TABLE item_meta PARTITION (ds=’20160501’}));
    • 可推薦物品表(rec_item_info):每天全量導入在一個固定分區(insert OVERWRITE TABLE rec_item_info PARTITION (ds=’20160501’}));
    • 行為表(user_behavior):每天增量導入在不同的分區(insert OVERWRITE TABLE user_behavior PARTITION (ds=yyyyMMdd’}));
  9. 推薦引擎在對數據進行離線計算時,會產生數據結果數據和中間數據。其中中間數據的數據量大小取決於所使用的離線流程中的算法複雜度。例如一個標準的協同過濾算法其中間表數據量可能是原始數據輸入表數據量的5到10倍。推薦引擎默認對中間數據保留一天。

用戶表(user_meta)

字段描述

列名 數據類型 注釋 Nullable
user_id string 用戶ID,可以是AID,device id,淘寶ID等各種唯一標識用戶身份的ID。不能出現(01-03)特殊字符。以下user_id字段同此意
tags string 標簽-標簽值kv串。不同tag之間用02分隔,tag和value之間用03分隔(方括號不保存在數據庫中,以下同)。[t103v102t203v2…]
比如用戶有兩個標簽年齡和性別,tag可以取age,gender;value 取對應的值,如18、1
詳見【注釋1】

分區描述

分區名 數據類型 注釋 Nullable
ds string 日期分區 格式 ‘yyyyMMdd’

ODPS DDL示例

  1. CREATE TABLE user_meta (
  2. user_id STRING,
  3. tags STRING
  4. )
  5. PARTITIONED BY (
  6. ds STRING
  7. );

ODPS SQL示例

  1. INSERT OVERWRITE TABLE user_meta PARTITION (ds='20160101')
  2. SELECT 'u1' AS user_id
  3. , concat('age', '03', '18') AS tags
  4. FROM dual;

用戶屬性維度表 (user_meta_config)

字段描述

列名 數據類型 注釋 Nullable
config_name string config_name值為user_meta 表tags中的key,每個key一條記錄
config_value string config_value取值為mv_enum,kv_num,sv_enum,sv_num,分別代表多值枚舉型,KV數值型,單值枚舉型,單值數值型四種標簽取值類型。

ODPS DDL示例

  1. CREATE TABLE user_meta_config (
  2. config_name STRING,
  3. config_value STRING
  4. );

ODPS SQL示例

  1. INSERT OVERWRITE TABLE user_meta_config
  2. SELECT 'age' AS config_name
  3. , 'sv_enum' AS config_value
  4. FROM dual;

物品表(item_meta)

字段描述

列名 數據類型 注釋 Nullable
item_id string 物品ID,唯一標識
category string 物品所屬類目,最好以ID的形式給出
keywords string 關鍵詞串。關鍵詞可以有權重(需要歸一化到0-1之間),也可以沒有權重,沒有權重時所有詞的權重都是1。Keywords之間用02分隔,keyword和score之間用03分隔(如果score存在)[kw103s102kw203s202…] 是,不過category,keywords,properties,description,bizinfo五者不能都為空
description string 用於描述這個物品C的一段文本
properties string 屬性-屬性值kv串。不同key之間用02分隔,key和value之間用03分隔。不同property的key最好以ID的形式給出【注釋1】[k103v102k203v2…]
比如電影作為item,那麼properties中的key可以是演員、風格、製片人等
bizinfo string 物品的業務信息,KV格式。不同KV之間以02分隔,key和value之間以03分隔。可以留NULL。bizinfo和properties的區別在bizinfo不參與特征提取的計算

分區描述

分區名 數據類型 注釋 Nullable
ds string 日期分區格式 ‘yyyyMMdd’

ODPS DDL示例

  1. CREATE TABLE item_meta (
  2. item_id STRING,
  3. category STRING,
  4. keywords STRING,
  5. description STRING,
  6. properties STRING,
  7. bizinfo STRING
  8. )
  9. PARTITIONED BY (
  10. ds STRING
  11. );

ODPS SQL示例

  1. INSERT OVERWRITE TABLE item_meta PARTITION (ds='20160101')
  2. SELECT 'i1' AS item_id
  3. , '16' AS category
  4. , concat('hello', '02', 'word') AS keywords
  5. , '' AS description
  6. , NULL AS properties
  7. , NULL AS bizinfo
  8. FROM dual

物品屬性維度表 (item_meta_config)

字段描述

列名 數據類型 注釋 Nullable
config_name string config_name值為item_meta表properties中的key,每個key一條記錄
config_value string config_value取值為mv_enum,kv_num,sv_enum,sv_num,分別代表多值枚舉型,KV數值型,單值枚舉型,單值數值型四種標簽取值類型。多值用04 隔開

ODPS DDL示例

  1. CREATE TABLE item_meta_config (
  2. config_name STRING,
  3. config_value STRING
  4. );

ODPS SQL示例

  1. INSERT OVERWRITE TABLE item_meta_config
  2. SELECT 'singer' AS config_name
  3. , 'sv_enum' AS config_value
  4. FROM dual;

行為表(user_behavior)

字段描述

列名 數據類型 注釋 Nullable
user_id string 用戶ID
item_id string 物品ID
bhv_type string 行為類型:
view:物品曝光
click:用戶點擊物品
collect:用戶收藏了某個物品
uncollect:用戶取消收藏某個物品
search_click:用戶點擊搜索結果中的物品
comment:用戶對物品的評論
share: 分享
like:點讚
dislike:點衰
grade:評分
consume:消費
use:觀看視頻/聽音樂/閱讀
行為表記錄的用戶行為用於用戶偏好建模
bhv_amt double 用戶對物品的評分、消費、觀看時長等。
bhv_cnt double 行為次數,默認為1,消費可以埋購買件數
bhv_datetime datetime 行為發生的時間,UTC格式。
content string 用戶對物品的評價文本
media_type string 如果bhv_type=share,該字段記錄分享到目標媒體。短信:sms,郵件:email,微博:sina_wb,微信好友:wechat_friend,微信朋友圈:wechat_circle,QQ空間:qq_zone,來往好友:laiwang_friend,來往動態:laiwang_circle
pos_type string 行為發生的位置類型,和下麵position字段聯合使用,有三種取值:
ll:經緯度格式的位置信息
gh:geohash格式的位置信息
poi:poi格式的位置信息
position string 行為發生的位置,根據pos_type有不同的取值格式:
如果pos_type=ll,position格式[longitude:latitude]
如果pos_type=gh,position格式[geohashcode]
如果pos_type=poi,position格式[poi_string]
env string JSON String
{
“IP”:””,
“network”:””,
“device”:””
}
IP: IP地址。行為發生時用戶的IP地址。IPv4為點分十進製格式;IPv6為冒號分隔的標準6段格式(不使用IPv6嵌套IPv4的格式)
network: 網絡製式。行為發生時用戶所使用的接入網絡,取值為solid,2G,3G,4G,WIFI。分別表示固網,2G,3G,4G和WIFI接入方式
device: 發生行為所使用的設備,包括mobile,pad,pc等,可添加
其他自定義環境變量也可以添加到JSON中
trace_id string 返回的推薦列表用於跟蹤效果。如果對item_id 的行為不是來自推薦引導,則為NULL

分區描述

分區名 數據類型 注釋 Nullable
ds string 日期分區

ODPS DDL示例

  1. CREATE TABLE user_behavior (
  2. user_id STRING,
  3. item_id STRING,
  4. bhv_type STRING,
  5. bhv_amt DOUBLE,
  6. bhv_cnt DOUBLE,
  7. bhv_datetime DATETIME,
  8. content STRING,
  9. media_type STRING,
  10. pos_type STRING,
  11. position STRING,
  12. env STRING,
  13. trace_id STRING
  14. )
  15. PARTITIONED BY (
  16. ds STRING
  17. );

ODPS SQL示例

  1. INSERT OVERWRITE TABLE user_behavior PARTITION (ds='20160101')
  2. SELECT 'u1' AS user_id
  3. , 'i1' AS item_id
  4. , 'click' AS bhv_type
  5. , 0 AS bhv_amt
  6. , 1 AS bhv_cnt
  7. , getdate() AS bhv_datetime
  8. , NULL AS content
  9. , NULL AS media_type
  10. , 'll' AS pos_type
  11. , concat('74', '02', '56') AS position
  12. , NULL AS env
  13. , NULL AS trace_id
  14. FROM dual;

可推薦物品表(rec_item_info)

字段描述

列名 數據類型 注釋 Nullable
item_id string 物品ID,唯一標識。本表中的物品都是允許被推薦的物品
item_info string 如果業務方希望RecEng在返回推薦物品時同時返回物品的其他信息,保存在這裏。RecEng不需要了解item_info的內部格式,原樣返回給業務方。

分區描述

分區名 數據類型 注釋 Nullable
ds string 日期分區

ODPS DDL示例

  1. CREATE TABLE rec_item_info (
  2. item_id STRING,
  3. item_info STRING
  4. )
  5. PARTITIONED BY (
  6. ds STRING
  7. );

ODPS SQL示例

  1. INSERT OVERWRITE TABLE rec_item_info PARTITION (ds='20160101')
  2. SELECT 'i1'
  3. , NULL
  4. FROM dual;

注釋1

  1. 特征的數值類型分為mv_enum,kv_num,sv_enum,sv_num,分別代表多值枚舉型,KV數值型,單值枚舉型,單值數值型四種標簽取值類型
  2. 舉例:
  3. 單值數值型,如信用,隻能取一個值,但這個值是不可枚舉的
  4. 單值枚舉型,如性別,隻能取一個值,但這個值是可以枚舉的(男,女)
  5. KV數值型,如用戶的類目偏好,用戶對某幾個類目有偏好分,如3298:0.89,3456:0.98..這裏3298和3456是類目id,0.89和0.98是偏好分
  6. 多值枚舉型,如用戶的標簽,美包控、準媽媽等可以枚舉,但是每個用戶可以取多個
  7. 在特征串中,不同key之間用02分隔,key和value之間用03分隔,多值key的value之間用04連接。以上述4個例子為例,如果把它們串起來,則形式為
  8. 信用 03 98
  9. 02
  10. 性別 03 男
  11. 02
  12. 類目偏好 03 3298 04 0.89 03 3456 04 0.98
  13. 02
  14. 標簽 03 美包控 03 準媽媽

注釋2

  1. 文中提到 02 03 等指的是ASCII碼為整型2,3的特殊字符,每種編程語言有不同的表示方法,ODPS SQL 及 JAVA可以直接使用 '02'

最後更新:2016-11-23 16:04:08

  上一篇:go 實時修正算法開發手冊__算法規範_開發者指南_推薦引擎-阿裏雲
  下一篇:go 日誌埋點規範__數據規範_開發者指南_推薦引擎-阿裏雲