Соответствующая фраза с использованием TF-IDF и косинусного сходства - PullRequest
0 голосов
/ 04 октября 2019

У меня есть кадр данных, который выглядит следующим образом:

question                                answer
Why did the chicken cross the road?     to get to the other side
Who are you?                            a chatbot
Hello, how are you?                     Hi
.
.
.  

Что я хотел бы сделать, это использовать TF-IDF для обучения этому набору данных. Когда пользователь вводит фразу, вопрос, наиболее соответствующий этой фразе, будет выбран с использованием косинусного сходства. Таким образом, я могу создать значения TF-IDF для предложений в наборе данных поезда, но как мне использовать это, чтобы найти показатель косинусного сходства для новой фразы, введенной пользователем?

from sklearn.feature_extraction.text import TfidfVectorizer
v = TfidfVectorizer()
x = v.fit_transform(intent_data["sentence"])

Ответы [ 2 ]

1 голос
/ 04 октября 2019

Я думаю, вам нужно что-то вроде

from sklearn.metrics.pairwise import cosine_similarity
cosine_similarities = cosine_similarity(x, v.transform(['user input'])).flatten()
best_match_index = cosine_similarities.argmax()
0 голосов
/ 04 октября 2019

Попробуйте это:

Ввод:

question    answer
0   Why did the chicken cross the road? to get to the other side
1   Who are you?    a chatbot
2   Hello, how are you? Hi

#Script

import pandas as pd
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.metrics.pairwise import cosine_similarity

#data = Input dataframe as above
v = TfidfVectorizer()
sentence_input = ["hello, you"]
similarity_index_list = cosine_similarity(v.fit_transform(data["question"]), v.transform(sentence_input)).flatten()
output = data.loc[similarity_index_list.argmax(), "answer"]

Предложение: Используйте некоторый подход встраивания слов, основанный на предсказаниях, для поддержания контекста в выходном векторе, получите более точные результаты в случае неоднозначностипредложения. (например: fasttext, word2vec).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...