pytorch Python语句转换器-按索引顺序获取匹配语句

4si2a6ki  于 2022-12-23  发布在  Python
关注(0)|答案(1)|浏览(174)

我有一个有很多记录的数据库表。我正在比较句子以找到最佳匹配。
假设该表包含4列:id,sentence,info,updated_date,数据包含如下:
| 身份证|句子|信息|更新信息日期|
| - ------| - ------| - ------| - ------|
| 1个|你们公司的名字是什么|一些独特的信息|2022年12月19日|
| 第二章|公司名称|一些独特的信息|2022年12月18日|
| 三个|你们公司的名字是什么|一些独特的信息|2022年12月17日|
| 四个|你们公司的名字是什么|一些独特的信息|二〇二二年十二月十六日|
| 五个|你们公司的名字是什么|一些独特的信息|2022年12月15日|
| 六个|你们公司的名字是什么|一些独特的信息|2022年12月14日|
| 七|你们公司的名字是什么|一些独特的信息|二〇二二年十二月十三日|
| 八个|你们公司的电话号码是多少|一些独特的信息|2022年12月12日|
| 九|你们公司的名字是什么|一些独特的信息|2022年11月12日|
| 十个|你们公司的名字是什么|一些独特的信息|2022年10月12日|
我已把这些句子转换成Tensor。
我通过这个作为一个例子"什么是你的公司的名称"(Tensor)匹配。

sentence = "What is the name of your company" # in tensor format
cos_scores = util.pytorch_cos_sim(sentence, all_sentences_tensors)[0]

top_results = torch.topk(cos_scores, k=5) 
or
top_results = np.argpartition(cos_scores, range(5))[0:5]

top_results does not return the top results index wise.
As the sentences are same, all will have a score of "1". And it returns the results arbitrarily.

我想要的是获得最新updated_date顺序或索引顺序的前5个匹配项。
这有可能实现吗?
有什么建议吗?

yhived7q

yhived7q1#

我会这样做:
1.获取每个句子的余弦相似度得分,并将它们存储在一个数组中。
1.根据updated_date对数组进行排序
1.从排序数组中获取前5个索引
1.使用索引从数据库表中获取相应的句子
1.这将为您提供最新的updated_date或索引顺序的前5个匹配项。

from sklearn.feature_extraction.text import CountVectorizer
from sklearn.metrics.pairwise import cosine_similarity

# Create a CountVectorizer object to transform the sentences into vectors
vectorizer = CountVectorizer()

# Transform the sentences into vectors using the CountVectorizer object
vectors = vectorizer.fit_transform(sentences)

# Calculate the cosine similarity scores using the cosine_similarity function
cosine_scores = cosine_similarity(vectors)

# Convert the cosine similarity scores to a 1-dimensional numpy array
cosine_scores = cosine_scores.flatten()

# Sort the array of cosine similarity scores in ascending order
sorted_indices = cosine_scores.argsort()

# Get the top 5 indices from the sorted array
top_5_indices = sorted_indices[-5:]

# Get the corresponding sentences from the database table using the indices
top_5_sentences = [sentences[i] for i in top_5_indices]

相关问题