J'essaie de calculer des scores de similarité de cosinus entre toutes les combinaisons possibles de documents texte d'un corpus. J'utilise la fonction cosine_similarity
de scikit-learn pour ce faire. Comme mon corpus est énorme (30 millions de documents), le nombre de combinaisons possibles entre les documents du corpus est trop important pour être stocké en tant que dataframe. Donc, je voudrais filtrer les scores de similarité en utilisant un seuil, au moment où ils sont créés, avant de les stocker dans une base de données pour une utilisation future. Pendant que je fais cela, je veux aussi assigner les identifiants correspondants de chacun de ces documents aux noms d'index et de colonnes de la base de données. Ainsi, pour une valeur de données dans la trame de données, chaque valeur doit avoir des noms d'index (ligne) et de colonne qui sont les ID de document pour lesquels la valeur est un score de similarité cosinus.Filtrage des scores de similarité de cosinus dans un cadre de données pandas
similarity_values = pd.DataFrame(cosine_similarity(tfidf_matrix), index = IDs, columns= IDs)
Cette pièce de code fonctionne bien sans la partie filtrante. IDs
est une variable de liste dont tous les ID de document sont triés en fonction de la matrice tfidf.
similarity_values = pd.DataFrame(cosine_similarity(tfidf_matrix)>0.65, index = IDs, columns= IDs)
Cette modification permet le filtrage mais les scores de similarité sont transformées en valeurs booléennes (Vrai/Faux). Comment puis-je conserver les scores de similarité cosinus ici à la place des valeurs booléennes Vrai/Faux.
cosine_similarity va afficher une matrice carrée et en ce qu 'il peut être possible que dans une seule colonne une valeur est> 0,65 et d'autres sont moins. Alors, dans ce cas, comment voulez-vous que la colonne apparaisse dans la base de données? –
@VivekKumar Bonne question. Je souhaite que toutes les valeurs de l'ensemble de données soient empilées les unes sur les autres. c'est-à-dire que chaque rangée de la trame de données devrait avoir un seul score de similarité et les ID de document correspondants. 'similarity_values = similarity_values.stack(). reset_index(). rename (colonnes = {'level_0': 'ID1', 'level_1': 'ID2', 0: 'Score'})' – Minu