歡迎大家前往騰訊雲技術社區,獲取更多騰訊海量技術實踐干貨哦~
作者:安斌
導語: 由於信息過載,推薦系統基本成為互聯網產品的標配, 如何快速的讓自己的產品具有推薦的能力呢?稀缺專業人員投入、用戶數據積累、用戶冷啟動問題等等都是自建推薦系統必須跨越的障礙。本文介紹如何接入騰訊雲智能推薦, 快速獲得上百人專業算法團隊、二十億+用戶畫像、幾乎覆蓋全部網民的推薦系統能力。
本文介紹如何使用豆瓣圖書的openAPI抓取圖書信息,上報圖書信息、用戶瀏覽點擊行為到騰訊雲智能推薦系統,通過API獲取推薦結果。主要的步驟包括:
-
物料准備;
-
物料上報;
-
場景id申請;
-
獲取推薦結果;
-
用戶行為上報;
1. 物料准備
首先介紹下什么物料, 物料就是我們需要推薦的物品。推薦系統通過物料的屬性、用戶和場景的屬性以及用戶的歷史行為,生產推薦結果。
為了方便的獲取物料屬性,這里我們使用douban圖書API獲取圖書的基本信息。Api參考:https://developers.douban.com/wiki/?title=book_v2
其中,重要的信息包括:
-
isbn13: 可以作為圖書物料的唯一標識;
-
title/author/pubisher: 與圖書相關的重要信息;
-
rating: 用戶評分;
-
tags: 圖書的標簽;
-
price: 價格
接下來, 我們購買主機和CDB,使用python腳本遍歷豆瓣圖書api,我們將感興趣的屬性記錄到db中, 獲得原始的物料庫,如下表所示:
2. 物料上報:
步驟1我們已經獲取到了物料庫, 接下來通過騰訊雲智能推薦item上報API上報物料,API詳情參考API文檔。
物料上報協議中, 重要的字段包括:
-
item_id:物料唯一標識, 推薦結果將返回物料id, 暫時不支持中文; 圖書推薦使用圖書的唯一標號isbn13作為item_id;
-
pool_id: 自定義物料池, 物料池將物料分類,在獲取推薦結果時,可以指定在哪個物料池獲取推薦結果, 適配不同的產品場景。同一個物品可以屬於多個物料池; 本示例中, 所有物品都可以出現在任意場景下, 所以, 物料沒有指定物料池, 需要分物料池時, 可以添加物料池分類, 重新上傳物料信息。
-
tags: 物料的標簽, 是物品推薦使用的關鍵屬性,可以使用物品的標簽描述、分級類目名、品牌等等信息, 越詳細的信息, 對推薦結果越有幫助。 同時, 每個物品的描述應該具有可區分性,在給用戶推薦時,如果每個物品都具有相同的tag, 那么, 推薦系統將無法通過這個tag,區分出當前用戶對每個物品的喜好, 也就沒法產生有效的推薦,所以tag的描述盡量准確、具有區分性。本示例中,標簽使用douban提供的tags;
物料上報協議如下所示:
{ 'data_type': 1, 'tags': u'\u9c81\u8fc5,\u4e2d\u56fd\u6587\u5b66....', 'bid': 'b_teg_openrecom_xxxx, 'describe': u '\u9c81\u8fc5\u5168\u96c6(2)', 'free': 0, 'item_id': u '9787020015252', 'MD5': '8764084918781ab51493eaf43e6d0166', 'url': u 'https://book.douban.com/subject/1002055/', 'publish': 1, 'platform': 1, 'score': 9.5, 'request_id': '1488358987', 'vender': u '\u4eba\u6c11\u6587\u5b66\u51fa\u7248\u793e', 'price': 31.75 }
3. 場景id申請:
智能推薦的所有行為都是圍繞場景展開的, 首先上傳適合當前場景的物料,接下來, 拉取當前場景下對用戶的推薦結果;再上報用戶在當前場景的流量、點擊、轉換等行為數據, 修正推薦結果。 場景可以理解為產品的一個推薦位, 比如很多產品有猜你喜歡的欄目。
可以在騰訊雲官網智能推薦控制台創建場景, 獲得場景id。 本文規划兩個場景: 首頁推薦和詳情頁推薦,申請兩個場景id。
4. 獲取推薦結果:
物料庫上報以后, 就可以通過用戶id從物料庫中生成推薦結果了。這里使用請求服務接口。注意, 請求服務的地址與物料上報、行為上報地址不同。重要的字段包括:
-
scene_id: 場景id, 步驟3申請的bid;
-
pool_id: 物料池編碼, 指定在特定的物料池中選擇推薦結果; 如果不指定, 默認在全部物料中選擇;
-
cid: 當前頁面物料id, 用於詳情頁獲取推薦的場景,cid使用當前物料id。 在本示例中,在詳情頁場景使用。
推薦結果請求如下所示:
{ 'scene_id': 538659, 'request_num': 50, 'uid': '3496892xx', 'request_id': '1487861252', 'service_type': 3, 'bid': 'b_teg_openrecom_xxxx', 'uid_type': '0', 'MD5': '05bae728925ee937e760b06669089c27' }
5. 用戶行為上報:
用戶行為上報接口, 上報某個時間點、某個場景下、某個用戶發生了特定行為。 利用用戶行為可以進一步優化推薦結果。 用戶行為包括: 曝光、點擊、轉化、點贊等等; 行為上報時,需要保證事件發生的時間順序,嚴格按照先有曝光,點擊,再有轉化, 否則系統會認為用戶點擊、轉化行為行為無效。重要的字段:
Ø trace_id: 用戶一系列行為的會話id。通過trace_id, 推薦系統可以串聯用戶行為。 trace_id的生命周期從曝光開始,依次在點擊、轉化、點贊等行為中傳遞。 下一次曝光需要生成新的trace_id;
協議如下所示:
{ 'uid': '3496892xx', 'data_type': 2, 'bid': 'b_teg_openrecom_xxx', 'item_id': u '9787109061385', 'scene_id': u '538659', 'MD5': '8764084918781ab51493eaf43e6d0166', 'action_time': 1487905960, 'trace_id': u '1487905944', 'action_type': 2, 'request_id': '1487905960', 'uid_type': '0' }