Побудова систем рекомендацій за допомогою NMF

Наглядове навчання в Python

Benjamin Wilson

Director of Research at lateral.io

Пошук схожих статей

  • Інженер у великій онлайн-газеті
  • Завдання: рекомендувати статті, схожі на ту, яку читає користувач
  • Схожі статті мають схожі теми
Наглядове навчання в Python

Стратегія

  • Застосуйте NMF до масиву частот слів
  • Значення ознак NMF описують теми
  • ... отже, схожі документи мають подібні значення ознак NMF
  • Порівняти значення ознак NMF?
Наглядове навчання в Python

Застосування NMF до масиву частот слів

  • articles — це масив частот слів
from sklearn.decomposition import NMF
nmf = NMF(n_components=6)
nmf_features = nmf.fit_transform(articles)
Наглядове навчання в Python

Стратегія

  • Застосуйте NMF до масиву частот слів
  • Значення ознак NMF описують теми
  • ... отже, схожі документи мають подібні значення ознак NMF
  • Порівняти значення ознак NMF?
Наглядове навчання в Python

Версії статей

  • Різні версії одного документа мають однакові пропорції тем
  • ... точні значення ознак можуть відрізнятися!
  •  
  •  

Сильна версія: Dog bites man! Attack by terrible canine leaves man paralyzed...

Наглядове навчання в Python

Версії статей

  • Різні версії одного документа мають однакові пропорції тем
  • ... точні значення ознак можуть відрізнятися!
  • Напр., якщо одна версія містить багато пустих слів
  •  

Слабка версія: You may have heard, unfortunately it seems that a dog has perhaps bitten a man...

Наглядове навчання в Python

Версії статей

  • Різні версії одного документа мають однакові пропорції тем
  • ... точні значення ознак можуть відрізнятися!
  • Напр., якщо одна версія містить багато пустих слів
  • Але всі версії лежать на одній прямій через початок координат

Точкова діаграма: тема pets проти теми danger; сильна й слабка версії лежать на одній прямій через початок

Наглядове навчання в Python

Косинусна подібність

  • Використовує кут між прямими
  • Більше значення — більш схоже
  • Максимум 1, коли кут 0 градусів

Точкова діаграма документів A і B з двома різними прямими через початок під різними кутами

Наглядове навчання в Python

Обчислення косинусних подібностей

from sklearn.preprocessing import normalize

norm_features = normalize(nmf_features)
# if has index 23 current_article = norm_features[23,:] similarities = norm_features.dot(current_article)
print(similarities)
[ 0.7150569   0.26349967 ..., 0.20323616  0.05047817]
Наглядове навчання в Python

DataFrame і мітки

  • Призначте подібностям назви статей за допомогою DataFrame
  • Назви подані списком: titles
import pandas as pd

norm_features = normalize(nmf_features)
df = pd.DataFrame(norm_features, index=titles)
current_article = df.loc['Dog bites man']
similarities = df.dot(current_article)
Наглядове навчання в Python

DataFrame і мітки

print(similarities.nlargest())
Dog bites man                            1.000000
Hound mauls cat                          0.979946
Pets go wild!                            0.979708
Dachshunds are dangerous                 0.949641
Our streets are no longer safe           0.900474
dtype: float64
Наглядове навчання в Python

Давайте потренуємось!

Наглядове навчання в Python

Preparing Video For Download...