import gradio as gr import pandas as pd from fastai.tabular.all import * from fastai.layers import Module, Embedding, sigmoid_range import torch import torch.nn.functional as F class DotProductBias(Module): def __init__(self, n_users, n_games, n_factors, y_range=(0.1, 11754.0)): self.user_factors = Embedding(n_users, n_factors) self.user_bias = Embedding(n_users, 1) self.game_factors = Embedding(n_games, n_factors) self.game_bias = Embedding(n_games, 1) self.y_range = y_range def forward(self, x): users = self.user_factors(x[:, 0]) games = self.game_factors(x[:, 1]) res = (users * games).sum(dim=1, keepdim=True) res += self.user_bias(x[:, 0]) + self.game_bias(x[:, 1]) return torch.sigmoid(res) * (self.y_range[1] - self.y_range[0]) + self.y_range[0] df = pd.read_csv('original.csv') path = Path("./model.pkl") learn = load_learner(path, 'model.pkl') examples = list(df['user-id'].unique())[:20] all_games_title = list(df['game-title'].unique()) def predict(user_id): user_id = int(user_id) games_alredy_played = list(df[(df['user-id'] == user_id)]['game-title'].unique()) games_not_played = set(all_games_title) - set(games_alredy_played) size_games_not_played = len(games_not_played) data = { 'user-id': [user_id]* size_games_not_played, 'game-title': list(games_not_played), 'time-played': [0]* size_games_not_played } new_df = pd.DataFrame(data) new_dl = learn.dls.test_dl(new_df) predictions = learn.get_preds(dl=new_dl) predicted_time_played = predictions[0].squeeze().tolist() new_df['time-played'] = predicted_time_played recomendations = new_df.sort_values(by='time-played', ascending=False).head(10)['game-title'].tolist() st = [r + '\n' for r in recomendations] ans = ''.join(st) return ans gr.Interface( fn=predict, inputs="text", outputs="text", examples=examples ).launch(share=False)