Python: Задав вопрос, найдите 10 вопросов в корпусе, которые имеют наибольшее сходство cpsine - PullRequest
0 голосов
/ 22 февраля 2019

Я разрабатываю алгоритм, который использует образец вопроса в корпусе в качестве входных данных и возвращает еще 10 вопросов в корпусе, которые имеют наибольшее сходство косинусов.Моя проблема в том, что полученные вопросы не похожи на мой вводный вопрос.Поэтому мне интересно, что-то может быть не так в моем коде.

from nltk.corpus import stopwords
from nltk.stem import PorterStemmer
from collections import Counter
from collections import defaultdict
from scipy.sparse import csr_matrix
from nltk.tokenize import word_tokenize
from sklearn.metrics.pairwise import cosine_similarity
from sklearn.feature_extraction.text import TfidfVectorizer
import numpy as np
import pandas as pd
import re, gc, os, sys, json, nltk, random, string, logging

# define a function that uses a question as input and 
# return another 10 questions in corpus with highest cosine similarities
def get_top10_similar_questions(n, model, corpus):
    cos = []; questions = []
    my_in = str(n)
    my_ipt = str(corpus[n])
    my_str = 'Your Input: '
    my_input = my_str + my_in + ' ' + my_ipt
    for x in range(n):
        for y in range(model.shape[0]):
            sim = cosine_similarity(model[x], model[y])
            cos.append([sim[0][0],y])

    cos.sort(key=lambda x:x[0], reverse = True)
    # returns: 1) cosine similarity value; 2) question; and
    # 3) index of the question in corpus
    cosine_sim = [c[0] for c in cos]
    index = [c[1] for c in cos]
    for i in index:
        questions.append(corpus[i])
    pd.options.display.max_colwidth = 100
    output = pd.DataFrame({'similarity':cosine_sim, 'similar questions retrieved':questions, 'index':index})
    top10_output = output[:10]
    return my_input, top10_output, output

И я проверил алгоритм, используя несколько вопросов в корпусе, хотя косинусное сходство вывода кажется высоким, выходное предложение на самом деле не похоже на подобноена входной вопрос.Пожалуйста помоги.Спасибо.

...