Часть 1: Система рекомендаций: использование глубокого обучения

Проблема холодного старта товара возникает, когда элементы, добавленные в каталог, либо не взаимодействуют друг с другом, либо взаимодействуют очень мало. Это представляет собой проблему в основном для алгоритмов совместной фильтрации из-за того, что они полагаются на взаимодействие элементов для выработки рекомендаций. Решение этой проблемы Я использую BERT Embeddings. Я встраиваю все фильмы жанров и сохраняю все файлы . также преобразовывать новые жанры фильмов в вложения BERT и использовать ближайший сосед. Я нахожу новые фильмы, ближайшие к k фильмам, и рекомендую их пользователю.Я не использую фильм с предварительным обучением. Слой встраивания. Потому что каждый фильм имеет представление 1 X 50 Dimensions. во время запроса мне нужно рассчитать расстояние между каждой точкой, и это занимает очень много времени, если каждая точка составляет 50 или более измерений. поэтому я использую BERT Embeddings и получаю представление размеров 1 X 1для каждого фильма для приложения с малой задержкой. Данные, используемые для этой задачи, представляют собой набор данных MovieLens.

movies = pd.read_csv(PATH + 'movies.csv') 
movies.head()

Предварительное прессование:

movies['genres']=movies.genres.str.replace('Sci-Fi','science fiction')
movies['genres']=movies.genres.str.replace('|',' ')

конвертация жанров в Bert Tokenizer

tokenizer = BertTokenizer.from_pretrained('bert-base-uncased', do_lower_case=True)
new=[]
for i in movies['genres'].values:
  gen1=tokenizer(i)
  gen2=gen1['input_ids']
  gen2.pop(0)
  gen2.pop(-1)
  new.append(sum(gen2))
movies['genres_token']=new

вот некоторые преобразованные данные жанров -

Эта функция возвращает K ближайший фильм на основе жанра Tokenize

def Recommendation_Movie(myNumber,myList,j):
  i=set()
  while len(i)<=j:
    i.update(myList.title[myList.genres_token==myNumber].tolist())
    g=min(myList.genres_token.values, key=lambda x:abs(x-myNumber))
    i.update(myList.title[myList.genres_token==g].tolist())
    bgh=myList.genres_token[myList.genres_token == g].index.tolist()
    myList=myList.drop(index=bgh)
  return i

используя этот подход, он показывает фильмы, похожие на новые фильмы, но этот подход является переоснащением. Основная цель этого подхода — работа над малой задержкой.

Некоторые выходы -

Демо -

Подключи меня — linkedin, github