0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

TensorFlow Recommenders開源軟件包可簡化構(gòu)建、評估和應(yīng)用推薦模型

Tensorflowers ? 來源:TensorFlow ? 作者:Maciej Kula 和 James ? 2020-10-21 10:54 ? 次閱讀

文 /Maciej Kula 和 James Chen,Google Brain

推薦系統(tǒng)是機器學(xué)習(xí)的一大主要應(yīng)用,能夠根據(jù)用戶偏好推送相關(guān)內(nèi)容,比如推薦電影、餐廳、搭配時裝首飾或篩選媒體信息流等。

Google 過去幾年一直在探索新的深度學(xué)習(xí)技術(shù),力求通過結(jié)合多任務(wù)學(xué)習(xí)、強化學(xué)習(xí)、提取更好的用戶表征和構(gòu)建公平性指標(biāo)提供更好的推薦。這些努力和其他方面的進(jìn)展大幅改善了我們的推薦效果。

今天,我們榮幸地推出 TensorFlow Recommenders (TFRS),這款開源 TensorFlow 軟件包可簡化構(gòu)建、評估和應(yīng)用復(fù)雜的推薦模型。

TensorFlow Recommenders (TFRS)
https://tensorflow.google.cn/recommenders

TFRS 使用 TensorFlow 2.x 構(gòu)建,有助于:

構(gòu)建和評估靈活的Candidate Nomination Model;

將條目、用戶和上下文信息自由整合到推薦模型;

訓(xùn)練可聯(lián)合優(yōu)化多個推薦目標(biāo)的多任務(wù)模型;

用 TensorFlow Serving 高效利用生成的模型。

TFRS 基于 TensorFlow 2.x 和 Keras,十分易于上手,在采用模塊化設(shè)計的同時(您可以自定義每個層和評價指標(biāo)),仍然組成了一個強有力的整體(各個組件可以良好協(xié)作)。在 TFRS 的設(shè)計過程中,我們一直強調(diào)靈活性和易用性:合理的默認(rèn)設(shè)置、直觀易行的常見任務(wù)以及更復(fù)雜或自定義的推薦任務(wù)。

TensorFlow Recommenders 現(xiàn)已在 GitHub 上開源。我們的目標(biāo)是讓其不斷發(fā)展,能夠靈活地進(jìn)行學(xué)術(shù)研究,并以高度可擴展的方式構(gòu)建全網(wǎng)推薦系統(tǒng)。我們還計劃在多任務(wù)學(xué)習(xí)、特征交叉建模、自監(jiān)督學(xué)習(xí)和最前沿 (SOTA)近似最鄰近計算方面擴展其功能。

GitHub
https://github.com/tensorflow/recommenders

示例:構(gòu)建電影推薦工具

讓我們先用一個簡單示例展現(xiàn) TensorFlow Recommenders 的使用方法。首先,使用 pip 安裝 TFRS:

!pip install tensorflow_recommenders

然后,我們可以使用 MovieLens 數(shù)據(jù)集訓(xùn)練一個簡單的電影推薦模型。數(shù)據(jù)集所含信息包括用戶觀看了哪些電影以及用戶對該電影的評分。

我們將使用這一數(shù)據(jù)集構(gòu)建模型,預(yù)測用戶已觀看和未觀看的電影。此類任務(wù)通常選擇雙塔模型:一個具有兩個子模型的神經(jīng)網(wǎng)絡(luò),分別學(xué)習(xí) query 和 candidate 的表征。給定的query-candidate 對的得分 (score) 只是這兩個塔的輸出的點積。

這個模型架構(gòu)相當(dāng)靈活。query 塔的輸入可以是:用戶 ID、搜索關(guān)鍵詞或時間戳;對于 candidate 側(cè)則有:電影片名、描述、梗概、主演名單。

在此示例中,我們在 query 塔僅使用用戶 ID,在 candidate 塔僅使用電影片名。

我們先來準(zhǔn)備數(shù)據(jù)。數(shù)據(jù)可從 TensorFlow Datasets 獲取。

import tensorflow as tf import tensorflow_datasets as tfds import tensorflow_recommenders as tfrs

# Ratings data. ratings = tfds.load("movie_lens/100k-ratings", split="train") # Features of all the available movies. movies = tfds.load("movie_lens/100k-movies", split="train")

在數(shù)據(jù)集的所有可用特征中,最實用的是用戶 ID 和電影片名。雖然 TFRS 有多種可選特征,但為簡單起見,我們只使用這兩項。

ratings = ratings.map(lambda x: { "movie_title": x["movie_title"], "user_id": x["user_id"], }) movies = movies.map(lambda x: x["movie_title"])

只使用用戶 ID 和電影片名時,我們簡單的雙塔模型與典型的矩陣分解模型非常相似。我們需要使用以下內(nèi)容進(jìn)行構(gòu)建:

一個用戶塔,將用戶 ID 轉(zhuǎn)換為用戶 embedding 向量(高維向量表示)。

一個電影塔,將電影片名轉(zhuǎn)換為電影 embedding 向量。

一個損失函數(shù),對于觀看行為,最大化預(yù)測用戶與電影的匹配度,而未觀看的行為進(jìn)行最小化。

TFRS 和 Keras 為實現(xiàn)這一目標(biāo)提供了大量基本模塊。我們可以從創(chuàng)建模型類開始。在__init__方法中,我們設(shè)置一些超參數(shù)以及模型的主要組件。

class TwoTowerMovielensModel(tfrs.Model): """MovieLens prediction model.""" def __init__(self): # The `__init__` method sets up the model architecture. super().__init__() # How large the representation vectors are for inputs: larger vectors make # for a more expressive model but may cause over-fitting. embedding_dim = 32 num_unique_users = 1000 num_unique_movies = 1700 eval_batch_size = 128

第一個主要組件是用戶模型:一組描述如何將原始用戶特征轉(zhuǎn)換為數(shù)字化用戶表征的層。我們在這里使用 Keras 預(yù)處理層將用戶 ID 轉(zhuǎn)換為整數(shù)索引,然后將其映射到學(xué)習(xí)的 embedding 向量:

# Set up user and movie representations. self.user_model = tf.keras.Sequential([ # We first turn the raw user ids into contiguous integers by looking them # up in a vocabulary. tf.keras.layers.experimental.preprocessing.StringLookup( max_tokens=num_unique_users), # We then map the result into embedding vectors. tf.keras.layers.Embedding(num_unique_users, embedding_dim) ])

電影模型看起來很相似,能夠?qū)㈦娪捌D(zhuǎn)換為 embedding 向量:

self.movie_model = tf.keras.Sequential([ tf.keras.layers.experimental.preprocessing.StringLookup( max_tokens=num_unique_movies), tf.keras.layers.Embedding(num_unique_movies, embedding_dim) ])

得到用戶和電影模型后,就需要定義我們的目標(biāo)和它的評估指標(biāo)了。在 TFRS 中,可以通過 Retrieval任務(wù)完成這一點(使用 in-batch softmax loss):

# The `Task` objects has two purposes: (1) it computes the loss and (2) # keeps track of metrics. self.task = tfrs.tasks.Retrieval( # In this case, our metrics are top-k metrics: given a user and a known # watched movie, how highly would the model rank the true movie out of # all possible movies? metrics=tfrs.metrics.FactorizedTopK( candidates=movies.batch(eval_batch_size).map(self.movie_model) ) )

我們使用 compute_loss方法查看模型的訓(xùn)練過程:

def compute_loss(self, features, training=False): # The `compute_loss` method determines how loss is computed. # Compute user and item embeddings. user_embeddings = self.user_model(features["user_id"]) movie_embeddings = self.movie_model(features["movie_title"]) # Pass them into the task to get the resulting loss. The lower the loss is, the # better the model is at telling apart true watches from watches that did # not happen in the training data. return self.task(user_embeddings, movie_embeddings)

我們可以調(diào)用 Keras 的 fit 擬合此模型:

model = MovielensModel() model.compile(optimizer=tf.keras.optimizers.Adagrad(0.1)) model.fit(ratings.batch(4096), verbose=False)

要對模型的推薦進(jìn)行 Sanity-Check(合理性檢驗),我們可以使用 TFRS BruteForce 層。BruteForce 層以預(yù)先計算好的 candidate 的表征進(jìn)行排序,允許我們對所有可能的 candidate 計算其所在 query-candidate 對的得分,并返回排名最靠前的電影 (query):

index = tfrs.layers.ann.BruteForce(model.user_model) index.index(movies.batch(100).map(model.movie_model), movies) # Get recommendations. _, titles = index(tf.constant(["42"])) print(f"Recommendations for user 42: {titles[0, :3]}")

當(dāng)然,BruteForce 層只適用于非常小的數(shù)據(jù)集。有關(guān)將 TFRS 與近似最鄰近庫 Annoy 結(jié)合使用的示例,請參閱我們的完整教程。

完整教程
https://tensorflow.google.cn/recommenders/examples/basic_retrieval#building_a_candidate_ann_index

我們希望這能讓您對 TensorFlow Recommenders 的功能有所了解。要了解更多信息,請查看我們的教程或 API 參考。如果您想?yún)⑴c,一同推動 TensorFlow 推薦系統(tǒng)發(fā)展,請考慮貢獻(xiàn)您的一份力量!我們還將在近期宣布成立 TensorFlow Recommendations 特殊興趣小組 (SIG),歡迎大家就嵌入向量學(xué)習(xí)和分布式訓(xùn)練與應(yīng)用等主題開展合作和做出貢獻(xiàn)。敬請期待!

教程
https://tensorflow.google.cn/recommenders/examples/quickstart

API 參考
https://tensorflow.google.cn/recommenders/api_docs/python/tfrs/all_symbols

貢獻(xiàn)您的一份力量
https://github.com/tensorflow/recommenders/

致謝

TensorFlow Recommenders 是 Google 以及其他組織的人員共同努力的成果。我們要感謝 Tiansheng Yao、Xinyang Yi、Ji Yang 對庫的核心貢獻(xiàn),感謝 Lichan Hong 和 Ed Chi 的領(lǐng)導(dǎo)與指導(dǎo)。我們也要感謝 Zhe Zhao、Derek Cheng、Sagar Jain、Alexandre Passos、Francois Chollet、Sandeep Gupta、Eric Ni 等人對項目的建議和支持。

責(zé)任編輯:xj

原文標(biāo)題:TensorFlow Recommenders 現(xiàn)已開源,讓推薦系統(tǒng)更上一層樓!

文章出處:【微信公眾號:TensorFlow】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 機器學(xué)習(xí)
    +關(guān)注

    關(guān)注

    66

    文章

    8423

    瀏覽量

    132744
  • 推薦系統(tǒng)
    +關(guān)注

    關(guān)注

    1

    文章

    43

    瀏覽量

    10085
  • tensorflow
    +關(guān)注

    關(guān)注

    13

    文章

    329

    瀏覽量

    60538

原文標(biāo)題:TensorFlow Recommenders 現(xiàn)已開源,讓推薦系統(tǒng)更上一層樓!

文章出處:【微信號:tensorflowers,微信公眾號:Tensorflowers】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    如何使用Python構(gòu)建LSTM神經(jīng)網(wǎng)絡(luò)模型

    : NumPy:用于數(shù)學(xué)運算。 TensorFlow:一個開源機器學(xué)習(xí)庫,Keras是其高級API。 Keras:用于構(gòu)建和訓(xùn)練深度學(xué)習(xí)模型。 你可以使用pip來安裝這些庫: pip
    的頭像 發(fā)表于 11-13 10:10 ?427次閱讀

    蘋果推出全新開源Swift軟件包

    七月三十一日,蘋果企業(yè)總部對外正式發(fā)表公告,宣布昨日(即七月二十九日)成功推出全新的開源 Swift 軟件包—— (喚名為 swift-homomorphic-encryption)。此舉旨在為 Swift 編程語言帶來應(yīng)用便利的同態(tài)加密功能。
    的頭像 發(fā)表于 07-31 15:17 ?396次閱讀

    TensorFlow是什么?TensorFlow怎么用?

    TensorFlow是由Google開發(fā)的一個開源深度學(xué)習(xí)框架,它允許開發(fā)者方便地構(gòu)建、訓(xùn)練和部署各種復(fù)雜的機器學(xué)習(xí)模型。TensorFlow
    的頭像 發(fā)表于 07-12 16:38 ?728次閱讀

    使用TensorFlow進(jìn)行神經(jīng)網(wǎng)絡(luò)模型更新

    使用TensorFlow進(jìn)行神經(jīng)網(wǎng)絡(luò)模型的更新是一個涉及多個步驟的過程,包括模型定義、訓(xùn)練、評估以及根據(jù)新數(shù)據(jù)或需求進(jìn)行模型微調(diào)(Fine-
    的頭像 發(fā)表于 07-12 11:51 ?438次閱讀

    tensorflow簡單的模型訓(xùn)練

    在本文中,我們將詳細(xì)介紹如何使用TensorFlow進(jìn)行簡單的模型訓(xùn)練。TensorFlow是一個開源的機器學(xué)習(xí)庫,廣泛用于各種機器學(xué)習(xí)任務(wù),包括圖像識別、自然語言處理等。我們將從安裝
    的頭像 發(fā)表于 07-05 09:38 ?705次閱讀

    keras模型轉(zhuǎn)tensorflow session

    和訓(xùn)練深度學(xué)習(xí)模型。Keras是基于TensorFlow、Theano或CNTK等底層計算框架構(gòu)建的。TensorFlow是一個開源的機器學(xué)
    的頭像 發(fā)表于 07-05 09:36 ?558次閱讀

    如何使用Tensorflow保存或加載模型

    TensorFlow是一個廣泛使用的開源機器學(xué)習(xí)庫,它提供了豐富的API來構(gòu)建和訓(xùn)練各種深度學(xué)習(xí)模型。在模型訓(xùn)練完成后,保存
    的頭像 發(fā)表于 07-04 13:07 ?1583次閱讀

    如何在TensorFlow構(gòu)建并訓(xùn)練CNN模型

    TensorFlow構(gòu)建并訓(xùn)練一個卷積神經(jīng)網(wǎng)絡(luò)(CNN)模型是一個涉及多個步驟的過程,包括數(shù)據(jù)預(yù)處理、模型設(shè)計、編譯、訓(xùn)練以及評估。下面
    的頭像 發(fā)表于 07-04 11:47 ?976次閱讀

    TensorFlow的定義和使用方法

    數(shù)據(jù)流圖,從而簡化機器學(xué)習(xí)模型構(gòu)建、訓(xùn)練和部署。自2015年11月開源以來,TensorFlow迅速成為數(shù)據(jù)科學(xué)家、
    的頭像 發(fā)表于 07-02 14:14 ?802次閱讀

    艾體寶方案 | 管理開源軟件包更新,提升開源安全性

    文章介紹了Mend.io如何通過其Smart Merge Control功能增強開源軟件的安全性?,F(xiàn)代應(yīng)用程序高度依賴開源軟件,但這也增加了潛在的安全漏洞。Mend SCA的增強功能允
    的頭像 發(fā)表于 05-31 17:03 ?329次閱讀

    谷歌模型框架是什么軟件?谷歌模型框架怎么用?

    谷歌模型框架通常指的是谷歌開發(fā)的用于機器學(xué)習(xí)和人工智能的軟件框架,其中最著名的是TensorFlow。TensorFlow是一個開源的機器學(xué)
    的頭像 發(fā)表于 03-01 16:25 ?900次閱讀

    RT-Thread Studio添加軟件包報錯怎么解決?

    RT-Thread Studio添加軟件包報錯ImportError: No module named psutil
    發(fā)表于 03-01 08:41

    RZ/G柔性軟件包v2.0.1發(fā)布說明

    電子發(fā)燒友網(wǎng)站提供《RZ/G柔性軟件包v2.0.1發(fā)布說明.pdf》資料免費下載
    發(fā)表于 02-21 10:48 ?0次下載
    RZ/G柔性<b class='flag-5'>軟件包</b>v2.0.1發(fā)布說明

    RL78系列 Data Flash Library Type04軟件包3.0版發(fā)布說明

    電子發(fā)燒友網(wǎng)站提供《RL78系列 Data Flash Library Type04軟件包3.0版發(fā)布說明.pdf》資料免費下載
    發(fā)表于 02-19 10:06 ?0次下載
    RL78系列 Data Flash Library Type04<b class='flag-5'>軟件包</b>3.0版發(fā)布說明

    如何使用TensorFlow構(gòu)建機器學(xué)習(xí)模型

    在這篇文章中,我將逐步講解如何使用 TensorFlow 創(chuàng)建一個簡單的機器學(xué)習(xí)模型。
    的頭像 發(fā)表于 01-08 09:25 ?1009次閱讀
    如何使用<b class='flag-5'>TensorFlow</b><b class='flag-5'>構(gòu)建</b>機器學(xué)習(xí)<b class='flag-5'>模型</b>