Tekstgebaseerde overeenkomsten

Aanbevelingssystemen bouwen in Python

Rob O'Callaghan

Director of Data

Werken zonder duidelijke attributen

Voorbeeld van een productbeschrijving op Amazon.

Aanbevelingssystemen bouwen in Python

Termfrequentie–omgekeerde documentfrequentie

$$ \Large{\text{TF-IDF} = \frac{\frac{\text{Aantal voorkomens van woord}}{\text{Totaal aantal woorden in document}}}{\log({\frac{\text{Aantal docs met het woord}}{\text{Totaal aantal docs}}})}} $$

Aanbevelingssystemen bouwen in Python

Onze data

book_summary_df:

Boek Beschrijving
The Hobbit "Bilbo Balings leidt een eenvoudig leven met zijn mede-hobbits in de Gouw..."
The Great Gatsby "Gesitueerd in New York in de Jazz Age, vertelt de roman het tragische verhaal van Jay ..."
A Game of Thrones "Het is 15 jaar sinds Roberts opstand, met een negen jaar durende ..."
Macbeth "Een dappere Schotse generaal krijgt een voorspelling van drie heksen ..."
... ...
Aanbevelingssystemen bouwen in Python

Vectorizer aanmaken

from sklearn.feature_extraction.text import TfidfVectorizer
tfidfvec = TfidfVectorizer(        ,           )
Aanbevelingssystemen bouwen in Python

Data filteren

from sklearn.feature_extraction.text import TfidfVectorizer
tfidfvec = TfidfVectorizer(min_df=2,           )
Aanbevelingssystemen bouwen in Python

Data filteren

from sklearn.feature_extraction.text import TfidfVectorizer
tfidfvec = TfidfVectorizer(min_df=2, max_df=0.7)
Aanbevelingssystemen bouwen in Python

Data vectoriseren

vectorized_data = tfidfvec.fit_transform(book_summary_df['Descriptions'])

print(tfidfvec.get_feature_names)
['age', 'ancient', 'angry', 'brave', 'battle', 'fellow', 'game', 'general', ...]
print(vectorized_data.to_array())
[[0.21,      0.53,    0.41,    0.64,     0.01,     0.02,     ...
 [0.31,      0.00,    0.42,    0.03,     0.00,     0.73,     ...
 [...,        ...,     ...,     ...,      ...,      ...,     ...
Aanbevelingssystemen bouwen in Python

Data formatteren

tfidf_df = pd.DataFrame(vectorized_data.toarray(),
                        columns=tfidfvec.get_feature_names())

tfidf_df.index = book_summary_df['Book']
print(tfidf_df)
                   | 'age'| 'ancient'| 'angry'| 'brave'| 'battle'| 'fellow'|...
|------------------|------|----------|--------|--------|---------|---------|...
| The Hobbit       |  0.21|      0.53|    0.41|    0.64|     0.01|     0.02|...
| The Great Gatsby |  0.31|      0.00|    0.42|    0.03|     0.00|     0.73|...
| A Game of Thrones|  0.61|      0.42|    0.77|    0.31|     0.83|     0.03|...
|               ...|   ...|       ...|     ...|     ...|      ...|      ...|...
Aanbevelingssystemen bouwen in Python

Cosinus-­similariteit

Cosinusafstand: $$cos(\theta)=\frac{A.B }{||A||\cdot||B||}$$

Aanbevelingssystemen bouwen in Python

Cosinus-­similariteit

from sklearn.metrics.pairwise import cosine_similarity

# Find similarity between all items
cosine_similarity_array = cosine_similarity(tfidf_summary_df)
# Find similarity between two items
cosine_similarity(tfidf_df.loc['The Hobbit'].values.reshape(1, -1),
                  tfidf_df.loc['Macbeth'].values.reshape(1, -1))
Aanbevelingssystemen bouwen in Python

Laten we oefenen!

Aanbevelingssystemen bouwen in Python

Preparing Video For Download...