как вычислить косинусное сходство двух текстов

#python #pandas #similarity

Вопрос:

У меня есть две колонки, похожие на эту

 mark-identification statement_text one of the top data is very interesting over this is a towel have hour time description  

Я пытаюсь вычислить косинусное сходство этих двух

модель, которую я использовал:

 model = SentenceTransformer('paraphrase-MiniLM-L6-v2') sent_encode = model.encode(sub1_sample['statement_text'].tolist()) sent_encode = [list(v) for v in sent_encode] sub1_sample['sent_encode'] = sent_encode  

определите fw:

 def gensim_process(text):  try:  return gensim.utils.simple_preprocess(text)[0]   except:  return text df_result['mark-identification'] = df_result['mark-identification'].apply(gensim_process)  

вычислить сходство cos вычислить сходство текста идентификации знака и заявления

 def get_sim_of_words(fw, text, model):  fw_encode = model.encode([fw])  l2_norm_fw = np.sqrt((fw_encode * fw_encode).sum(axis=1))  fw_encode_norm=fw_encode/l2_norm_fw.reshape(-1,1)    word_of_text = gensim.utils.simple_preprocess(text)  if len(word_of_text)==0:  word_of_text = [text]    # calculate cosine similarity   text_encode = model.encode(word_of_text)  l2_norm = np.sqrt((text_encode * text_encode).sum(axis=1))  text_encode_norm=text_encode/l2_norm.reshape(-1,1)    sim_list = np.matmul(fw_encode_norm,text_encode_norm.T)  return [np.min(sim_list), np.mean(sim_list), np.median(sim_list), np.max(sim_list)]  

результат вывода

 df_result['ms_stat_info'] = df_result.apply(lambda x:get_sim_of_words(x['mark-identification'],x['statement_text'], model), axis=1) df_result['sim_score_2'] = df_result['ms_stat_info'].apply(lambda x:x[3]) df_result.head(3)  

мой текущий код может захватывать только «первое слово» в разделе «идентификация знака». Есть ли в любом случае, что я могу просмотреть каждое слово в идентификации знака. вычислить вектор левого предложения и правого предложения?