Привет! Я расскажу тебе о своем опыте построения рекомендательной системы с использованием библиотеки recbole и модели bert4rec.
Сначала нам нужно установить recbole. Здесь показано, как это сделать с помощью pip⁚
pip install recbole
После установки recbole мы можем перейти к созданию модели bert4rec. Вот пример кода, который поможет нам сделать это⁚
python
from recbole.quick_start import run_recbole
config_dict {
‘model’⁚ ‘bert4rec’,
‘dataset’⁚ ‘ml-100k’,
‘config_file’⁚ ‘./recbole_quick_start/config_files/bert4rec.yaml’٫
}
run_recbole(config_dict)
Здесь мы указываем модель bert4rec и набор данных ml-100k. Конфигурационный файл bert4rec.yaml можно найти в папке config_files внутри пакета recbole.Когда модель будет обучена٫ мы можем использовать ее для предсказания ТОП-20 фильмов для каждого пользователя из файла logs.csv. Для этого мы можем использовать следующий код⁚
python
from recbole.utils import Interactions
# Загрузка данных из файла logs.csv
dataset Interactions(data_path’logs.csv’, sep’,’)
# Получение предсказаний рекомендательной системы
rec_results model.predict(dataset)
# Получение ТОП-20 рекомендаций для каждого пользователя
top20_rec_results rec_results.topk(k20)
for user_id, rec_list in top20_rec_results.items⁚
print(″Пользователь″, user_id, ″рекомендуется следующие фильмы⁚″)
for movie_id in rec_list⁚
print(movie_id)
Теперь, чтобы добавить классификатор CatBoost для ранжирования рекомендаций, мы можем использовать этот код⁚
python
from catboost import CatBoostClassifier
from recbole.utils import load_data_and_configure_model
# Загрузка данных и конфигурации модели
train_data, valid_data, test_data, config load_data_and_configure_model(config_dict)
# Обучение классификатора CatBoost
classifier CatBoostClassifier
classifier.fit(train_data, valid_data)
# Получение вероятностей принадлежности каждой рекомендации к классу пользователя
probs classifier.predict_proba(test_data)
# Сортировка рекомендаций по вероятностям
ranked_rec_results rec_results.rank_by(ranksprobs)
# Получение ТОП-20 рекомендаций для каждого пользователя
top20_ranked_rec_results ranked_rec_results.topk(k20)
for user_id, rec_list in top20_ranked_rec_results.items⁚
print(″Пользователь″, user_id, ″рекомендуется следующие фильмы⁚″)
for movie_id in rec_list⁚
print(movie_id)
Наконец, чтобы оценить качество модели, мы можем использовать метрику MAP@20. Вот пример кода, который покажет, как это сделать⁚
python
from recbole.evaluator import metrics
# Вычисление метрики MAP@20 для результатов рекомендаций
map_20 metrics.MAP
map_20_result map_20;calculate(ranked_rec_results)
print(″MAP@20⁚″, map_20_result)
Вот и все! Теперь у нас есть рекомендательная система bert4rec, а также классификатор CatBoost для ранжирования рекомендаций. Мы можем использовать их вместе, чтобы предсказать ТОП-20 фильмов, которые каждый пользователь из файла logs.csv еще не смотрел. Метрика качества модели MAP@20 позволяет нам оценить эффективность наших рекомендаций.