Рекомендательные алгоритмы на примере диалогов с Винни-Пухом, продолжение

Мапка характеристик - в вектора и сравниваем. Ну типа чиселки пермножаются друг с другом, берутся корни там, считаются какие то площади/гипотенузы - это не важно. Чиселки немножко ебутся друг с другом - и на выходе - получается чиселка. Чем она больше - тем больше вектор а похож на вектор б, понятна? Я просто показываю что внутри - всратая арифметика. Эта - называется cosine similarity. Ну типа молоток, которым забивают гвозди. Есть другой молоток - мера похожести Жаккара. Или молот - наивный Баес. Но внутри - всратая арифметика. Важна не арифметика - а понимание принципов.

Олл хайль гари потер

Помните мы говорили о том, что все любят гарри потера? Это проблема - так как его все любят - он будет всем рекомендоваться, но все его уже смотрели. Почему это хуево. Помните самый первый пример с кубиком и шаром и яблоком? Все эти три тела - твердые. Характеристика твердости не влияет на меру похожести, так как встречается везде как и гарри потер. Ну или по другому, когда вы в магазине на весах картоху взвешиваете, там под цифрой один - всегда бананы, ибо все любят бананы. И если вы ищете что покупают с водочкой, чтобы этот товар рядом положить - с водочкой берут бананы. Ну потому что их всегда берут. Так вот, чтобы рекомендовать пиздечивские вещи, а не говно типа бананов, нам надо вес часто встречающихся характеристик - применьшить. Другими словами - написать напротив гарри потера не адин, а 0.1 . Эта кстати на первый взгляд всратая идея - позволила выиграть миллион долларов в нетфликс прайз одному чуваку когда то. Для этого надо посчитать частотность характеристики и взять обратную от частоты характеристику. Ну типа чем чаще - тем меньше влияние. Это еще одна встратая формула TF/IDF Примерно так:
func tfidf(termFreq, docTerms, termDocs, N int) float64 {
tf := float64(termFreq) / float64(docTerms)
idf := math.Log(float64(1+N) / (1 + float64(termDocs)))
return tf * idf
}

termFreq - как часто встречается docTerms - в скольки документах. Опять всратая арифметика.

матрицы

Ну, ок рекомендации есть сравнение по характеристикам, но кубики любой дебил сравнит, а как сравнить например текст или картинку? Что насчет более сложных штук?

Надо просто привести их к матрице. Например есть два текста:

текст1: папа олень
текст2: мама олень

Характеристика этого текста - слова - папа, мама, олень. Рисуем такую же табличку, по столбика слова, по строчкам номера текстов. Делаем tf/idf - чтобы понизить значение предлогов и считаем косинусную похожесть. Те все сводится к веторам, матрицам и арифметике. Так в чем же сложность? Во первых - матрица получается ебически большой. Во вторых - сравнение каждой строчки с каждой - это цикл циклов (вложенный цикл) Чтобы упростить - матрицы упрощают, ну, типа декомпозируют. Есть например алгоритм svd - он раскладывает одну большую матрицу на несколько маленьких. Ну или есть так называемые разряженные матрицы (sparse/density) это когда данные хранятся некими триплетами и получается компактнее. Ну вобщем, проблема рекомендательных систем не столько в сложности алгоритмов, сколько в сложности их расчетов на больших данных.

Что дальше?

Мы в нашей матрице фильмов писали - фильм / юзер/ нравится или неизвестно. Потом добавляли нормирование по частоте и там была уже какая то чиселки типа нецелая. Но вообще там могла быть например оценка, типа 5 звездочек. Которая умножается на частотность. Ну то есть, можно потихоньку усложнять матрицу как в глубину (точностями оценки характеристик). А можно и в ширину. Например можно добавить в колоночки пол юзера, возраст, наличие высшего образования. СоцДем так называемый. Звучит как бред, но мужикам не интересен контент каким кремом мазать сиськи после операции по увеличению груди. Это типа фичи - которые могут повысить точность при недостаточности оценок, выявив похожие штуки. Например, есть ли у юзера колонка Алекса от амазон - тоже может быть фичей в том списке.

Ну, пока хватит

24.01.2020 Комментарии Telegram

Рекомендательные алгоритмы на примере диалогов с Винни-Пухом

Рекомендательные системы, нейросети, машинленинг, искусственный интеллект - хрень окутанная туманом терминов, которая воспринимаются как нечто сложное. Когда датасайнтист описывает их - это напоминает хреновый почерк врача - нихрена непонятно, то ли цианид принять то ли аспирин. На самом деле это всратая арифметика. Пойдем от простого к сложному.

Поиск похожих штук

Возьмем ребенка. Дадим ему кубик-рубика, бильярдный шар и яблоко. И скажем - найди на чё похоже яблоко. Если он вам бильярдный шар - поздравляем, у вас растет датасайнтист! Разложим на множитили эту задачу, чтоб повторить его успех. У каждой штуки - есть характеристика. Я говорю штука, но имею ввиду любую хрень. Например человек - это тоже штука с характеристиками. И у каждой характеристики есть чиселка. Вернемся к яблокам. Яблока - твердое, яблоко - круглое. Шар твердый и круглый, а квадрат - квадратный, ну вы понели. Читобе понять что на что похоже - надо описать это что то набором характеристик и сравнить.

Продолжаем повышать планку

Такс, теперь найдем какой фильм вам понравится. Вы юзер1 - вам нравится хоббит туда обратно и гарри потер, например. Всем нравится гарри потер, но мы вернемся к этой проблеме позже. Читобе понять какой фильм тебе, юзер1 - понравится - надо найти похожих на тебя юзеров. Ну те юзер это штука из примера выше, а что ему нравится (какие фильмы) - это характеристики штуки из примера выше. Эта хрень в целом - называется датасет) Запишем его в удобном для лупоглазанья виде (csv):
_ Гарри_Поттер ХоббитНжд ХоббитПуст. ХроникиНарн. Сердце_дракона
a, 1, 1, 1, 0, 0
b, 1, 1, 1, 0, 0
c, 1, 0, 0, 1, 0
d, 1, 0, 1, 0, 0
e, 1, 1, 0, 0, 1

a, b, c - это юзеры. Теперь - вы тот ребенок. Я говорю - найди юзера похожего на «a». Внимательно смотрим на строчечки - и ищем похожие.

a и b - адинаковы - бинго, но это не даст нам рекомендаций. d - похож на a но там дырка в хоббите нежданное путешествие. Остается e. Помимо гарри потера и хоббита e нравится Сердце дракона. Юзеру а стоит посмотреть сердце дракона. Поздравлямба - мы узнали алгоримт «лупоглазим глазками». В датасаенс он называется User-Based Collaborative Filtering (UB-CF), ищем похожего юзера. Теперь смотрите по вертикали, на столбики. Видите что столбик Хоббит нежданное путешествие похож Хоббит пустошь смауга, визуально? Это называется Item-Based Collaborative Filtering (IB-CF), похожие итемы. Но на самом деле всё сводится к поиску похожих штук. То столбиков, то строчечек. Просто сперва надо выписать в табличку, которая называется матрица - блаблабла.

А - Арифметика

Строчечки, столбики - называюи вектор. Это немного путает, ну типа слово сложное. Но на самом деле, это просто массив чиселок. Итак, для того чтоб найти что строчечка a похожа на строчечку e - нам надо сравнить два вектора (звучит ебловато, понимаю). Для сравнения векторов - применяется формула косинусной похожести. Сейчас будет код:

//Cosine return cosine similarity
func Cosine(a, b map[string]float64) (sim float64) {
vec1, vec2 := vector(a, b)

var product, squareSumA, squareSumB float64

for i, v := range vec1 {

product += v * vec2[i]
squareSumA += v * v
squareSumB += vec2[i] * vec2[i]
}

if squareSumA == 0 || squareSumB == 0 {
return 0
}

return product / (math.Sqrt(squareSumA) * math.Sqrt(squareSumB))
}

24.01.2020 Комментарии Telegram

Что не так со статистикой: https://medium.com/@sergey_57776/300-%D0%BB%D0%B5%D1%82-%D0%B2-%D0%B8%D1%81%D0%BA%D0%B0%D0%B6%D0%B5%D0%BD%D0%BD%D0%BE%D0%B9-%D1%80%D0%B5%D0%B0%D0%BB%D1%8C%D0%BD%D0%BE%D1%81%D1%82%D0%B8-80d15ea8c6b5

Много интересных выводов можно сделать из вышеозначенной статьи. Начиная от стратегий инвестирования, до интерпретации результатов а/б тестов и стОит ли играть в казино

09.01.2020 Комментарии Telegram

Ребята, Питон сейчас в тренде. Все нейросети пишут на питоне. Питон на хайпе, ребята. И если вы не хотите оказаться на обочине жизни, подписывайтесь на канал: Что в Питоне сделано правильно: @whatsrightinpython

27.12.2019 Комментарии Telegram

https://gioui.org/ - практически готовый флаттер на гоу. Полгода -год - и будет готов полностью. Простую ленту/блог/почтовый клиент или браузер - можно начинать делать уже сейчас. Прекрасное качество рендеренига. Отличная производительность. Тьфу/тьфу чтоб не сглазить. Неужели я смогу сказать «пока» яве?

23.12.2019 Комментарии Telegram