#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)
мой текущий код может захватывать только «первое слово» в разделе «идентификация знака». Есть ли в любом случае, что я могу просмотреть каждое слово в идентификации знака. вычислить вектор левого предложения и правого предложения?