亚洲视频二区_亚洲欧洲日本天天堂在线观看_日韩一区二区在线观看_中文字幕不卡一区

公告:魔扣目錄網為廣大站長提供免費收錄網站服務,提交前請做好本站友鏈:【 網站目錄:http://www.430618.com 】, 免友鏈快審服務(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

利用 Milvus 搭建基于圖的推薦系統

電影推薦系統 demo 界面

推薦系統[1](Recommender System,RS)能夠根據用戶的偏好主動為用戶推薦商品或項目。它通過用戶的歷史數據來發掘用戶興趣偏好,從而將用戶可能感興趣的物品推送給用戶,一個設計出色的推薦系統能夠為企業帶來可觀的經濟效益。一個完整的推薦系統的組成必須包括三個要素:用戶模型、推薦對象模型、推薦算法。其中推薦算法是推薦系統的核心。目前,較成熟的推薦算法主要有:基于協同過濾的推薦、隱含語義模型、基于圖模型的推薦、組合推薦等。本文將為大家介紹如何利用 Milvus 搭建基于圖的推薦系統。

 

| 主要技術


基于圖的卷積神經網絡

  • PinSage

PinSage[2]是由斯坦福和 Pinterest 公司合作提出了第一個工業級別(數十億節點和數百億邊)基于 GCN(Graph Convolutional Neural,圖神經網絡) 的推薦系算法。用戶在 Pinterest 網站中將自己感興趣的內容(pins)與相關的板塊(broads)進行標記,其中包含了 20 億 pins,10 億 boards 以及 180 億邊(若 pin 在 broads 中,那么它們之間存在一條邊),由此構成的二分圖如下圖所示:

利用 Milvus 搭建基于圖的推薦系統

 

該算法的目標是利用 pins-broards 二分圖結構,生成 pins 的高質量 embeddings 用于推薦任務,如相關 pins 推薦。PinSage 的關鍵創新點主要有[3]:

  1. 動態卷積:傳統的 GCN 算法對特征矩陣與全圖進行卷積;PinSage 算法對節點周圍的鄰域進行采樣,通過動態構建計算圖來執行高效的局部卷積。
  2. 采樣構造卷積:對節點的全部鄰域上執行卷積會導致龐大的計算圖,因此需要借助采樣減小計算量。傳統的 GCN 算法檢查 K-hop 圖鄰域;而 PinSage 通過模擬隨機游走將訪問量最高的設為重要鄰域,并基于此構造卷積。
  3. 高效 MapReduce:對于局部卷積的節點通常有重復計算的問題,這是由于節點的 K-hop 鄰域之間的重疊引起的。PinSage 對每個聚合步驟,將所有節點做映射而無需重復的計算,然后將其連接并發送至相應上層節點,最后進行歸約以獲取上層節點的 embeddings。
  • DGL

Deep Graph Library(DGL)[4]是一個 Python 軟件包,用于在現有深度學習框架(例如 PyTorch,MXNet,TensorFlow 等)之上輕松搭建圖神經網絡模型。它提供了后端適配接口,可輕松移植到其他基于張量、支持自動生成的框架。本文的 PinSage 算法就是基于 DGL 和 Pytorch 對部分算法做了改進。詳見https://github.com/dmlc/dgl/tree/master/examples/pytorch/pinsage

利用 Milvus 搭建基于圖的推薦系統

 

Milvus 向量相似度搜索引擎

前面介紹了基于 DGL 運用 PinSage 模型可以輕松獲取高質量的 embeddings,那么接下來就需要對 embeddings 做相似度搜索,從而找出用戶可能感興趣的項目推薦給用戶。Milvus[5]是一款開源向量相似度搜索引擎,支持使用多種 AI 模型將非結構化數據向量化,并為向量數據提供搜索分析服務,可廣泛應用于圖像處理、機器視覺、自然語言處理、語音識別、推薦系統以及新藥發現。具體實現方式是:

  1. 通過深度學習模型將非結構化數據轉化為特征向量,并導入 Milvus 庫。
  2. 對特征向量進行存儲并建立索引。
  3. 接收到用戶的向量搜索請求后,返回與輸入向量相似的結果。
利用 Milvus 搭建基于圖的推薦系統

 

| 系統搭建

系統介紹

接下來將介紹如何利用 Milvus 搭建基于圖的推薦系統,如下圖所示,系統主要包含數據預處理、PinSage 模型、數據加載、查詢和系統推薦:

利用 Milvus 搭建基于圖的推薦系統

 

1. 數據預處理

本文搭建的推薦系統使用開放的 MovieLens[5]百萬數據集(ml-1m),包含 6,000 位用戶對 4,000 部電影的 1,000,000 條評價,由 GroupLens Research 實驗室搜集整理。原始數據中包含電影的數據信息,用戶特征信息,以及用戶對電影的評分。本文利用 MovieLens 數據集中用戶看過的電影記錄來構建一個具有分類特征的結構圖:users-movies 二分圖 g。

# Build graph
graph_builder = PandasGraphBuilder()
graph_builder.add_entities(users, 'user_id', 'user')
graph_builder.add_entities(movies_categorical, 'movie_id', 'movie')
graph_builder.add_binary_relations(ratings, 'user_id', 'movie_id', 'watched')
graph_builder.add_binary_relations(ratings, 'movie_id', 'user_id', 'watched-by')
g = graph_builder.build()

2. PinSage 模型處理

利用 PinSage 模型獲取 pins 的 embeddings,本文主要是獲取電影數據的特征向量。首先根據構建的二分圖 g 和自定義的電影特征向量維度(默認 256 維)生成 PinSage 模型,再利用 PyTorch 訓練該模型,然后通過訓練好的模型生成 4000 條電影數據的特征向量 h_item。

# Define the model
model = PinSAGEModel(g, item_ntype, textset, args.hidden_dims, args.num_layers).to(device)
opt = torch.optim.Adam(model.parameters(), lr=args.lr)
# Get the item embeddings
for blocks in dataloader_test:
 for i in range(len(blocks)):
 blocks[i] = blocks[i].to(device)
 h_item_batches.Append(model.get_repr(blocks))
h_item = torch.cat(h_item_batches, 0)

3. 數據加載

將 PinSage 模型生成的電影特征向量 h_item 導入 Milvus 并返回對應的 ID;將電影的 ID 和對應的電影數據信息導入 MySQL 結構化數據庫。

# Load data to Milvus and MySQL
status, ids = milvus.insert(milvus_table, h_item)
load_movies_to_mysql(milvus_table, ids_info)

4. 查詢

根據用戶偏好的電影 ID 在 Milvus 中獲取對應的特征向量( embeddings ),然后利用返回的特征向量在 Milvus 中進行相似度檢索,根據返回的相似結果 ID 在 MySQL 數據庫中查找對應的電影信息。

# Get embeddings that users like
_, user_like_vectors = milvus.get_entity_by_id(milvus_table, ids)# Get the information with similar movies_, ids = milvus.search(param = {milvus_table, user_like_vectors, top_k})sql = "select * from " + movies_table + " where milvus_id=" + ids + ";"
results = cursor.execute(sql).fetchall()

5. 系統推薦

最終,根據查詢的結果為用戶提供相似電影的推薦。綜上就是推薦系統的主要流程,具體搭建步驟參考 Milvus-Bootcamp:https://github.com/milvus-io/bootcamp/tree/0.10.0/solutions/graph_based_recommend

 

| 系統展示

該項目也提供了 FastAPI 接口和前端展示,通過模擬用戶登錄電影視頻 APP 并勾選自己喜歡的電影,從而推薦用戶可能感興趣的電影。

利用 Milvus 搭建基于圖的推薦系統

 

| 總結

基于圖的卷積神經網絡 PinSage 通過 pins-broards 二分圖結構生成 pins 的高質量 embeddings 用于推薦任務。而本文利用 MovieLens 數據集構建 users-movies 二分圖,再利用 DGL 開源包結合 PinSage 模型生成電影的特征向量,再將此特征向量加載至 Milvus 特征向量相似度搜索引擎,之后根據用戶偏好在 Milvus 中檢索,得出相似的特征向量以實現向用戶推薦電影的功能。

本文使用的 Milvus 特征向量相似度搜索引擎可以對接各種深度學習平臺,并運用于眾多 AI 領域。Milvus 充分利用現代處理器的并行計算能力,可以在單臺通用服務器上完成對十億級數據的毫秒級搜索,助力用戶高效完成非結構化數據檢索。

 

參考資料

  1. https://patentimages.storage.googleapis.com/0e/96/31/98058cb476cd77/CN105913296A.pdf
  2. Graph Convolutional Neural Networks for Web-Scale Recommender Systems, arxiv: 1806.01973
  3. https://medium.com/pinterest-engineering/pinsage-a-new-graph-convolutional-neural-network-for-web-scale-recommender-systems-88795a107f48
  4. https://docs.dgl.ai/en/latest/
  5. http://files.grouplens.org/datasets/movielens/ml-1m.zip

分享到:
標簽:推薦 系統
用戶無頭像

網友整理

注冊時間:

網站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網站吧!
最新入駐小程序

數獨大挑戰2018-06-03

數獨一種數學游戲,玩家需要根據9

答題星2018-06-03

您可以通過答題星輕松地創建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學四六

運動步數有氧達人2018-06-03

記錄運動步數,積累氧氣值。還可偷

每日養生app2018-06-03

每日養生,天天健康

體育訓練成績評定2018-06-03

通用課目體育訓練成績評定