Библиотека системы рекомендаций MyMediaLite

Грэг Дункан

Сегодняшний проект отличается от остальных. Сначала я отложил этот рассказ, чтобы потом решить написать о нем или нет. Мне кажется, что он замечательный, но я не уверен насколько он «забавен» и насколько он выходит из принятых здесь рамок. Что меня подтолкнуло к публикации, так это мысль насколько этот проект оригинален и отличается от остальных, что здесь ранее не было чего-то подобного, что я не в состоянии увидеть подобных библиотек и мысль о том, какие клёвые вещи можно сделать с его помощью…

Библиотека системы рекомендаций MyMediaLite

MyMediaLite – это облегченная, многоцелевая библиотека алгоритмов системы рекомендаций.

Она предназначена для использования в двух самых общих сценариях совместной фильтрации:

· предсказание рейтинга (т. е. в диапазоне от одной до пяти звезд)

· предсказание элементов по неявному отзыву (т. е. по щелчкам мыши или по покупкам)

MyMediaLite – свободно доступное ПО (с открытым исходным кодом), и может использоваться и распространяться в условиях GNU General Public License (GPL) .

MyMediaLite: Возможности

...

MyMediaLite предоставляет выбор среди множества методов рекомендации:

· дюжины различных рекомендателей

· методы, использующие совместные данные и атрибутов и содержимого

MyMediaLite готова к использованию :

  • MyMediaLite включает процедуры оценки предсказания рейтингов и предсказания элементов; она может определять MAE , RMSE , AUC , prec@N, MAP и NDCG .
  • Также в ее состав входит утилита командной строки, читающая простой текстовый формат входной информации.

MyMediaLite компактна : ядро библиотеки имеет размер около 150 Kб.

Переносимость: Написана на C# для платформы .NET; работает на любой архитектуре, поддерживаемой Mono : Linux, Windows, Mac OS X.

MyMediaLite наконференции ACM Recommender Systems 2011 вЧикаго

clip_image002

Вот пример фрагмента кода:

 using System;
using MyMediaLite.Data;
using MyMediaLite.Eval;
using MyMediaLite.IO;
using MyMediaLite.ItemRecommendation;

public class ItemPrediction
{
  public static void Main(string[] args)
  {
    // load the data
    var user_mapping = new EntityMapping();
    var item_mapping = new EntityMapping();
    var training_data = ItemData.Read(args[0], user_mapping, item_mapping);
    var test_users = training_data.AllUsers; // users that will be taken into account in the evaluation
    var candidate_items = training_data.AllItems; // items that will be taken into account in the evaluation
    var test_data = ItemData.Read(args[1], user_mapping, item_mapping);

    // set up the recommender
    var recommender = new MostPopular();
    recommender.Feedback = training_data;
    recommender.Train();

    // measure the accuracy on the test data set
    var results = Items.Evaluate(recommender, test_data, training_data, test_users, candidate_items);
    foreach (var key in results.Keys)
      Console.WriteLine("{0}={1}", key, results[key]);

    // make a prediction for a certain user and item
    Console.WriteLine(recommender.Predict(user_mapping.ToInternalID(1), item_mapping.ToInternalID(1)));
  }
}

Несколько замечаний: Несмотря на то, что все ПО написано на C# основной проект прекрасно открывается и компилируется в VS2010 (по крайней мере, для меня), для многих может оказаться проблемой откомпилировать MovieDemo. Он основан на GTK-Sharp и в нем есть ряд ссылок, которые обычный разработчик в VS может не иметь. Однако если вы пользуетесь MonoDev, то это труда не составит...

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