技術部落格

集結國內外精選文章,掌握最新雲端技術新知與應用

iKala Cloud / AI 與機器學習 / TensorRec 框架:簡化基於 TensorFlow 所架設的推薦引擎的後勤工作

TensorRec 框架:簡化基於 TensorFlow 所架設的推薦引擎的後勤工作

在架構推薦系統時,最重要的是開發演算法、讓演算法更理解使用者和項目,而非操作資料和架設 API。

這也就是為什麼我架了 TensorRec 框架,這個框架目的在簡化基於 TensorFlow 架設的推薦引擎的後勤工作,並讓開發者專注於更有趣的內容,像是:嵌入函數、損失函數和更強大的機器學習開發。

TensorRec 是一種推薦演算法,它有簡單的 API 可用於訓練和預測,類似於 Python 中常用的機器學習工具。它還可以讓你靈活地嘗試自己的嵌入/損失函數,使你可以架設一個適合了解特定使用者和項目的推薦系統。

TensorRec 專案目前還在成長中,而在架設 TensorRec 時,共有三個目標:

  1. 建立一個能從正面/負面的反饋中學習的推薦引擎。
  2. 允許任意的將 TensorFlow graphs 用作嵌入函數和損失函數。
  3. 為嵌入函數和損失函數提供合理的預設值。

運作方式

TensorRec 透過使用者/物品特徵(ID、標籤或其他元數據)、以及架設兩個低維向量:”使用者表徵” 和 “物品表徵”,來給評分建議。 這兩個向量的內積是該使用者與該項目之間關係的得分 – 最高得分將被預測為最佳建議。

# Predict scores for all users and all items
predictions = model.predict(user_features=user_features,
item_features=item_features)

用於生成這些表徵的演算法稱為嵌入函數,可自定義為:從直接線性變換到深度神經網絡之間的任何操作都可以應用,具體取決於您需要 TensorRec 解決的問題細節以及你允許的特徵數據。此外,使用者和項目嵌入函數可以獨立定制。(嵌入函數定制的例子)

TensorRec 透過比較使用者與項目之間實際互動 (喜歡/不喜歡) 所產生的分數來進行學習,比較器稱為 “損失函數”,TensorRec 允許您自定義您自己的損失函數。(自定義損失函數的例子。)

適用於 TensorRec 模型的函數類似於其他常用機器學習工具的函數

# Fit the model for 5 epochs
model.fit(interactions, user_features, item_features,
epochs=5, verbose=True)

前言

目前已經廣泛使用 Maciej Kula 和 Lyst 開發的 LightFM,它的性能和可用性令人印象深刻。(關於使用 LightFM 的文章)

LightFM 透過運行一個因式分解的機器、為每個特徵學習線性嵌入,來生成使用者和項目的特徵。透過這兩個向量的內積,你可以得到一個沒有單位的分數,當它依分數排序時,它會告訴你這個給定的使用者和項目搭配起來的效果會有多好 (或壞)。

這種方法不僅有效、且計算效率很高,但若伴隨不一致或高度相關的特徵來使用 LightFM 的話則會遇到問題,就會需要更複雜的嵌入函數,來學習有意義地嵌入這些特徵,例如深度神經網絡。

這種嵌入函數將能夠學習使用者和項目函數之間的細微關係,並提高系統的整體資訊容量。這讓我對於探索非線性嵌入函數的選項感到好奇,於是開發了 TensorRec。

在 TensorFlow 上架設推薦系統

最初由 Google 所開發的 TensorFlow 是一款開源工具,可讓您建構、優化大型的機器學習系統。

在 TensorFlow 中,機器學習過程被表示為一個 “圖”,顯示資料如何流經系統。這些圖可以透過 TensorBoard 來看到,進而更清晰地呈現了機器學習過程。

顯示為 TensorFlow 圖的神經網絡的單個 ReLU 層。

為了建立我們的推薦系統,我們需要 TensorFlow 圖完成四項任務:

  1. 將資料輸入轉換為 feature tensors 以便於嵌入。
  2. 將使用者/項目的 feature tensors 轉換為使用者/項目特徵 (嵌入函數)。
  3. 將一對特徵轉換為預測。
  4. 將預測、真實數值轉換為損失值 (損失函數)。

TensorRec 解決了 1 和 3 問題,同時為 2 和 4 提供模組化和合理的預設值,讓您可以自由地嘗試嵌入和損失函數。您只需插入一個函數來建構您的自定義嵌入函數圖或損失函數圖 (範例)。

還缺少什麼?

許多資訊檢索領域的最新進展都來自複雜的損失函數,尤其是成對損失函數 (例如:WARP),但是這些較難以 TensorFlow 圖表示。隨著這些損失函數的實作,TensorRec 對使用者的價值將會增加。此外,TensorRec 的新功能可以處理大量的互動資料、管理模型的狀態、處理隱形的互動,對於 TensorRec 也是一大加分。如果您嘗試一下 TensorRec,歡迎到 GitHub 開始您的實作。

(原文來自合作部落格 James Kirk,GCP 專門家授權翻譯轉載。)

 

分享本文:
FacebookLineTwitter
回到頂端