🤖
Tensorflow-Recommenders のチュートリアルをやってみた
Tensorflow-Recommenders のチュートリアル はデータセットを tensorflow_datasets から用意していますが、csv から用意しても処理が回るか試してみたのでまとめます。
なお、データセットは MovieLens の ml-latest-small を使っています。
おおむねTensorflow-Recommenders のチュートリアルどおりなので、修正箇所のみ記載します。
詳細なコードはこちら
データセットの作成
Pandas で CSV を読み込んで前処理してやります。
カラム名は別に変えなくても良いのですが、チュートリアルと合わせています。
ratings = pd.read_csv("ml-latest-small/ratings.csv")
movies = pd.read_csv("ml-latest-small/movies.csv")
# 前処理
ratings = pd.merge(ratings, movies, on="movieId", how="left")[["title", "userId"]]
ratings.columns = ["movie_title", "user_id"]
ratings["user_id"] = ratings["user_id"].astype(str)
movies = movies[["title"]]
movies.columns = ["movie_title"]
tf.data.Dataset.from_tensor_slices を使って Tensorflow-Recommenders 向けに型変換します。
ratings = tf.data.Dataset.from_tensor_slices(ratings.to_dict(orient='list'))
movies = tf.data.Dataset.from_tensor_slices(movies.to_dict(orient='list'))
チュートリアルと同様、型変換後のデータセットも中身を確認することができます。
for element in ratings.take(1).as_numpy_iterator():
pprint.pprint(element)
for element in movies.take(1).as_numpy_iterator():
pprint.pprint(element)
{'movie_title': b'Toy Story (1995)', 'user_id': b'1'}
{'movie_title': b'Toy Story (1995)'}
チュートリアルと違い、movies の中身が辞書型になっていますので、下記のように value を読み込むよう微修正します。
# 修正前
movies.batch(xxx)
# 修正後
movies.batch(xxx).map(lambda x: x["movie_title"])
TensorBoardの追加
%load_ext tensorboard
# (略)
%tensorboard --logdir logs/fit
EPOCHS_NUM = 10
log_dir = "logs/fit/" + datetime.datetime.now().strftime("%Y%m%d-%H%M%S")
tensorboard_callback = tf.keras.callbacks.TensorBoard(log_dir=log_dir, histogram_freq=1)
model.fit(
cached_train,
epochs=EPOCHS_NUM,
callbacks=[tensorboard_callback],
)
推論
(略)
print(f"Recommendations for user 42: {titles[0, :3]}")
推論部分には変更点はありませんが、以下のようにレコメンド結果を出力することができました。
出力:
Recommendations for user 42: [b'Reindeer Games (2000)' b'Money Pit, The (1986)'
b'Friday the 13th Part 3: 3D (1982)']
以上になります、最後までお読みいただきありがとうございました。
参考サイト
Discussion