仅打印 spacy 中的前 10 个相似点

Print only top 10 similarities in spacy

我正在尝试计算两个列表之间的相似度。它们的大小差别很大(一个有 10 个句子),另一个有 20k 个句子。目标是让短列表中的每个句子在大列表中找到最相似的句子。

我试过用spacy,但是我不能用most_similar之类的东西只打印每个句子的前3个相似度(在这个测试中只有前3个,用我的海量数据,前10个) .

import spacy

little_list = ['nouveau livre révélant', 'bibliothèque pour la modélisation du sujet', 'potentiellement embarrassant']

big_list = ['plusieurs internationaux', 'quotidiens', 'il a grossi', 'pour rendre ces histoires disponibles', 'a aidé à prendre le contrôle', 'une catégorie pouvant inclure les emplois mêmes']

nlp = spacy.load("fr_core_news_sm")

little = list(nlp.pipe(little_list))
big = list(nlp.pipe(big_list))

scores = [(token1.text, token2.text, token1.similarity(token2)) for token2 in big for token1 in little]

import pandas as pd

df = pd.DataFrame(scores)

print(df)

我的输出:

                        0                          1           2
0   nouveau livre révélant  plusieurs internationaux    -0.131661
1   bibliothèque pour la modélisation du sujet  plusieurs internationaux    0.072430
2   potentiellement embarrassant    plusieurs internationaux    -0.267387
3   nouveau livre révélant  quotidiens  0.060414
4   bibliothèque pour la modélisation du sujet  quotidiens  0.036732
5   potentiellement embarrassant    quotidiens  -0.024117
6   nouveau livre révélant  il a grossi 0.243315
7   bibliothèque pour la modélisation du sujet  il a grossi -0.033608
8   potentiellement embarrassant    il a grossi 0.214442
9   nouveau livre révélant  pour rendre ces histoires disponibles   0.053788
10  bibliothèque pour la modélisation du sujet  pour rendre ces histoires disponibles   0.061164
11  potentiellement embarrassant    pour rendre ces histoires disponibles   0.045495
12  nouveau livre révélant  a aidé à prendre le contrôle    0.512961
13  bibliothèque pour la modélisation du sujet  a aidé à prendre le contrôle    0.372229
14  potentiellement embarrassant    a aidé à prendre le contrôle    0.118832
15  nouveau livre révélant  une catégorie pouvant inclure les emplois mêmes 0.159283
16  bibliothèque pour la modélisation du sujet  une catégorie pouvant inclure les emplois mêmes 0.191632
17  potentiellement embarrassant    une catégorie pouvant inclure les emplois mêmes 0.086039

我只想打印零列句子的三个主要相似点。

希望我已经解释清楚了!

好的,我想我明白你的意思了。

从你所在的地方和你的 df。可以按照小列表中的句子进行分组,然后对组内的分数进行排序,打印前三名。

grouped = df.groupby(by=0, axis=0)

for sent1, group in grouped:
  print("Three most similar documents to: {sent1}\n")
  sorted_group = group.sort_values(by=2, ascending=False)
  print(sorted_group.iloc[:3, [1,2]])
  print('~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n')