丁香五月天婷婷久久婷婷色综合91|国产传媒自偷自拍|久久影院亚洲精品|国产欧美VA天堂国产美女自慰视屏|免费黄色av网站|婷婷丁香五月激情四射|日韩AV一区二区中文字幕在线观看|亚洲欧美日本性爱|日日噜噜噜夜夜噜噜噜|中文Av日韩一区二区

您正在使用IE低版瀏覽器,為了您的雷峰網(wǎng)賬號(hào)安全和更好的產(chǎn)品體驗(yàn),強(qiáng)烈建議使用更快更安全的瀏覽器
此為臨時(shí)鏈接,僅用于文章預(yù)覽,將在時(shí)失效
人工智能 正文
發(fā)私信給AI研習(xí)社-譯站
發(fā)送

0

用 Keras 實(shí)現(xiàn)圖書推薦系統(tǒng)

本文作者: AI研習(xí)社-譯站 2018-12-14 10:10
導(dǎo)語:推薦系統(tǒng)試圖依據(jù)用戶舊物品評(píng)級(jí)或偏好來預(yù)測對(duì)某一物品的評(píng)級(jí)或偏好。

用 Keras 實(shí)現(xiàn)圖書推薦系統(tǒng)

本文為 AI 研習(xí)社編譯的技術(shù)博客,原標(biāo)題 :

Building a book Recommendation System using Keras

作者 | Gilbert Tanner

翻譯 | 王逍遙、孫稚昊2、UPDATA

校對(duì) | 就2       整理 | 菠蘿妹

原文鏈接:

https://towardsdatascience.com/building-a-book-recommendation-system-using-keras-1fba34180699


用 Keras 實(shí)現(xiàn)圖書推薦系統(tǒng)

用 Keras 實(shí)現(xiàn)圖書推薦系統(tǒng)

圖 1: Photo by Brandi Redd on Unsplash

推薦系統(tǒng)試圖依據(jù)用戶舊物品評(píng)級(jí)或偏好來預(yù)測對(duì)某一物品的評(píng)級(jí)或偏好。為了提高服務(wù)質(zhì)量,幾乎每個(gè)大公司都使用推薦系統(tǒng)。

在本文中,我們將研究如何使用Embedding來創(chuàng)建圖書推薦系統(tǒng)。  

對(duì)于我們的數(shù)據(jù),我們將使用goodbooks-10k數(shù)據(jù)集,它包含1萬種不同的圖書和大約100萬個(gè)評(píng)級(jí)。它有三個(gè)特性:book_id、user_id和評(píng)級(jí)(rating)。

如果您不想自己從Kaggle下載數(shù)據(jù)集,可以從我的my Github repository中獲得本文所涉及的文件和完整代碼。  


  Embedding

嵌入是一種映射,從離散的對(duì)象(如單詞或在我們的例子里是圖書id)到連續(xù)值向量的映射。這可以用來發(fā)現(xiàn)離散對(duì)象之間的相似性,如果不使用嵌入層,模型就不會(huì)發(fā)現(xiàn)這些相似性。

嵌入向量是低維的并且在訓(xùn)練網(wǎng)絡(luò)時(shí)得到更新。下圖顯示了使用谷歌開源的高緯數(shù)據(jù)可視化 Tensorflows Embedding Projector  創(chuàng)建的嵌入示例。

用 Keras 實(shí)現(xiàn)圖書推薦系統(tǒng)

圖 2:Projector Embeddings


  獲取數(shù)據(jù)

首先使用Pandas加載數(shù)據(jù)集。之后將數(shù)據(jù)集拆分為訓(xùn)練集和測試集,我們將創(chuàng)建兩個(gè)變量,分別用來存儲(chǔ)去重后的用戶id和書籍id(并不是用戶數(shù)量)。

dataset = pd.read_csv('ratings.csv')
train, test = train_test_split(dataset, test_size=0.2, random_state=42)
n_users = len(dataset.user_id.unique())
n_books = len(dataset.book_id.unique())

用 Keras 實(shí)現(xiàn)圖書推薦系統(tǒng)

圖3:Rating-Dataset Head

數(shù)據(jù)集已經(jīng)被清洗過,所以我們無需做更多的數(shù)據(jù)清洗或者數(shù)據(jù)預(yù)處理的步驟。


  建立嵌入模型

使用Keras 的深度學(xué)習(xí)框架可以很容易地創(chuàng)建神經(jīng)網(wǎng)絡(luò)嵌入模型,以及處理多個(gè)輸入和輸出層。

我們的模型有以下的結(jié)構(gòu):

    1. 輸入:包括書和用戶

    2. 嵌入層:書和用戶的嵌入

    3.點(diǎn)乘:使用點(diǎn)乘來合并各個(gè)嵌入向量

在一個(gè)嵌入模型中,嵌入的權(quán)重要在訓(xùn)練中學(xué)習(xí)得到。這些嵌入不僅能用來從數(shù)據(jù)中提取信息,他們本身也可以被提取或者可視化。

為了簡單起見,我不在模型最后加上全連接層,雖然加上可以提高不少準(zhǔn)確率。如果你想要更精確的模型,你可以加上試試。

下面是創(chuàng)建模型的代碼:

from keras.layers import Input, Embedding, Flatten, Dot, Dense
from keras.models import Model
book_input = Input(shape=[1], name="Book-Input")
book_embedding = Embedding(n_books, 5, name="Book-Embedding")(book_input)
book_vec = Flatten(name="Flatten-Books")(book_embedding)


user_input = Input(shape=[1], name="User-Input")
user_embedding = Embedding(n_users, 5, name="User-Embedding")(user_input)
user_vec = Flatten(name="Flatten-Users")(user_embedding)


prod = Dot(name="Dot-Product", axes=1)([book_vec, user_vec])
model = Model([user_input, book_input], prod)
model.compile('adam', 'mean_squared_error')


  訓(xùn)練模型

現(xiàn)在我們已經(jīng)建好了模型,準(zhǔn)備訓(xùn)練模型。由于模型包含兩個(gè)輸入層(一個(gè)是書籍輸入,一個(gè)是用戶輸入),我們需要將訓(xùn)練集組合成一個(gè)數(shù)組作為 x 輸入。在本文中, 我對(duì)模型訓(xùn)練了 10 epochs,如果想得到更好的結(jié)果,你可以訓(xùn)練更長的時(shí)間。

下面是訓(xùn)練代碼:

history = model.fit([train.user_id, train.book_id], train.rating, epochs=10, verbose=1)
model.save('regression_model.h5')


  將嵌入可視化

嵌入可以被用來可視化一些概念,比如不同書之間的關(guān)系。為了可視化這些概念,我們需要減少向量維讀,通過一些降維的技術(shù),比如 主成分分析 (PCA),或者t-分布領(lǐng)域嵌入算法(t-SNE)。

從10000維開始 (每一維是一本書),我們通過嵌入模型把它減少到5維,再通過PCA 或t-SNE 把它減少到2維。

首先,我們用 get_layer 函數(shù)來提取嵌入:

# Extract embeddings
book_em = model.get_layer('Book-Embedding')
book_em_weights = book_em.get_weights()[0]

現(xiàn)在我們用PCA來把嵌入轉(zhuǎn)化為2維向量,并且用Seaborn把結(jié)果畫成散點(diǎn)圖:

from sklearn.decomposition import PCA
import seaborn as sns


pca = PCA(n_components=2)
pca_result = pca.fit_transform(book_em_weights)
sns.scatterplot(x=pca_result[:,0], y=pca_result[:,1])

用 Keras 實(shí)現(xiàn)圖書推薦系統(tǒng)

圖4:Visualizing embeddings with PCA

同樣的事也可以用t-SNE:

from sklearn.manifold import TSNE


tsne = TSNE(n_components=2, verbose=1, perplexity=40, n_iter=300)
tnse_results = tsne.fit_transform(book_em_weights)
sns.scatterplot(x=tnse_results[:,0], y=tnse_results[:,1])

用 Keras 實(shí)現(xiàn)圖書推薦系統(tǒng)

  圖5:Visualizing embeddings with TSNE


  進(jìn)行推薦

使用我們訓(xùn)練的模型進(jìn)行推薦很簡單。我們只需要輸入一個(gè)用戶和所有圖書,然后選擇對(duì)該特定用戶具有最高預(yù)測評(píng)級(jí)的圖書。

下面的代碼顯示了對(duì)特定用戶進(jìn)行預(yù)測的過程:

# Creating dataset for making recommendations for the first user
book_data = np.array(list(set(dataset.book_id)))
user = np.array([1 for i in range(len(book_data))])
predictions = model.predict([user, book_data])
predictions = np.array([a[0] for a in predictions])
recommended_book_ids = (-predictions).argsort()[:5]
print(recommended_book_ids)
print(predictions[recommended_book_ids])

這段代碼輸出:

array([4942, 7638, 8853, 9079, 9841], dtype=int64)
array([5.341809 , 5.159592 , 4.9970446, 4.9722786, 4.903894 ], dtype=float32)

導(dǎo)入圖書 csv ,得到更多的信息:

books = pd.read_csv(‘books.csv’)
books.head()

用 Keras 實(shí)現(xiàn)圖書推薦系統(tǒng)

print(books[books[‘id’].isin(recommended_book_ids)])

用 Keras 實(shí)現(xiàn)圖書推薦系統(tǒng)


  結(jié)論

嵌入是一種把離散的物體,比如單詞,轉(zhuǎn)化為連續(xù)值向量的方法。嵌入對(duì)尋找物體相似度,可視化等目標(biāo)很有幫助,并且可以用來做另一個(gè)機(jī)器學(xué)習(xí)模型的輸入。

這個(gè)例子肯定不是完美的,有很多方法可以被嘗試來提高準(zhǔn)確率。但對(duì)于高級(jí)的問題,用嵌入來學(xué)習(xí)輸入是一個(gè)好的出發(fā)帶你。

下面的方法可以得到更好的結(jié)果:

  • 在點(diǎn)乘后加入全連接層

  • 訓(xùn)練更多輪

  • 對(duì)評(píng)分列做歸一化

  • 等等

如果你喜歡這篇文章,可以訂閱我的youtube頻道,并且在社交網(wǎng)絡(luò)上關(guān)注我。

如果有任何問題,可以到我的twitter 上評(píng)論。

感謝Dipanjan (DJ) Sarkar.


想要繼續(xù)查看該篇文章相關(guān)鏈接和參考文獻(xiàn)?

長按鏈接點(diǎn)擊打開或點(diǎn)擊【用 Keras 實(shí)現(xiàn)圖書推薦系統(tǒng)】:

https://ai.yanxishe.com/page/TextTranslation/1300


AI研習(xí)社每日更新精彩內(nèi)容,觀看更多精彩內(nèi)容:雷鋒網(wǎng)雷鋒網(wǎng)雷鋒網(wǎng)

五個(gè)很厲害的 CNN 架構(gòu)

一文帶你讀懂計(jì)算機(jī)視覺

用Pytorch做深度學(xué)習(xí)(第一部分)

Python高級(jí)技巧:用一行代碼減少一半內(nèi)存占用


等你來譯:

(Python)3D人臉處理工具face3d

25個(gè)能放到數(shù)據(jù)湖中的語音研究數(shù)據(jù)集

如何在數(shù)據(jù)科學(xué)面試中脫穎而出 

Apache Spark SQL以及DataFrame的基本概念,架構(gòu)以及使用案例

 

用 Keras 實(shí)現(xiàn)圖書推薦系統(tǒng)

雷峰網(wǎng)原創(chuàng)文章,未經(jīng)授權(quán)禁止轉(zhuǎn)載。詳情見轉(zhuǎn)載須知。

用 Keras 實(shí)現(xiàn)圖書推薦系統(tǒng)

分享:
相關(guān)文章

知情人士

AI研習(xí)社(yanxishe.com)譯站頻道,傳播前沿人工智能知識(shí),讓語言不再成為學(xué)習(xí)知識(shí)的門檻。(原雷鋒字幕組)
當(dāng)月熱門文章
最新文章
請?zhí)顚懮暾埲速Y料
姓名
電話
郵箱
微信號(hào)
作品鏈接
個(gè)人簡介
為了您的賬戶安全,請驗(yàn)證郵箱
您的郵箱還未驗(yàn)證,完成可獲20積分喲!
請驗(yàn)證您的郵箱
立即驗(yàn)證
完善賬號(hào)信息
您的賬號(hào)已經(jīng)綁定,現(xiàn)在您可以設(shè)置密碼以方便用郵箱登錄
立即設(shè)置 以后再說