Semelhanças baseadas em texto

Construindo mecanismos de recomendação em Python

Rob O'Callaghan

Director of Data

Trabalhando sem atributos claros

Exemplo de descrição de item na Amazon.

Construindo mecanismos de recomendação em Python

Frequência do termo inversa da frequência no documento

$$ \Large{\text{TF-IDF} = \frac{\frac{\text{Contagem de ocorrências da palavra}}{\text{Total de palavras no documento}}}{\log({\frac{\text{Número de docs em que a palavra aparece}}{\text{Total de docs}}})}} $$

Construindo mecanismos de recomendação em Python

Nossos dados

book_summary_df:

Book Description
The Hobbit "Bilbo Baggins lives a simple life with his fellow hobbits in the shire..."
The Great Gatsby "Set in Jazz Age New York, the novel tells the tragic story of Jay ..."
A Game of Thrones "15 years have passed since Robert's rebellion, with a nine-year-long ..."
Macbeth "A brave Scottish general receives a prophecy from a trio of witches ..."
... ...
Construindo mecanismos de recomendação em Python

Instanciar o vetorizador

from sklearn.feature_extraction.text import TfidfVectorizer
tfidfvec = TfidfVectorizer(        ,           )
Construindo mecanismos de recomendação em Python

Filtrando os dados

from sklearn.feature_extraction.text import TfidfVectorizer
tfidfvec = TfidfVectorizer(min_df=2,           )
Construindo mecanismos de recomendação em Python

Filtrando os dados

from sklearn.feature_extraction.text import TfidfVectorizer
tfidfvec = TfidfVectorizer(min_df=2, max_df=0.7)
Construindo mecanismos de recomendação em Python

Vetorizando os dados

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,     ...
 [...,        ...,     ...,     ...,      ...,      ...,     ...
Construindo mecanismos de recomendação em Python

Formatando os dados

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|...
|               ...|   ...|       ...|     ...|     ...|      ...|      ...|...
Construindo mecanismos de recomendação em Python

Similaridade cosseno

Distância cosseno: $$cos(\theta)=\frac{A.B }{||A||\cdot||B||}$$

Construindo mecanismos de recomendação em Python

Similaridade cosseno

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))
Construindo mecanismos de recomendação em Python

Vamos praticar!

Construindo mecanismos de recomendação em Python

Preparing Video For Download...