Как правильно использовать TF-IDF при расчете мягкого косинуса? - PullRequest
0 голосов
/ 09 июля 2019

Моя цель - рассчитать сходство документов для некоторых ежегодно обновляемых документов SEC.Я начал с использования word2vec и мягкого косинуса (метод 1 в коде).Однако, поскольку каждый год в документе обновлялись только части содержимого, я получаю довольно завышенную оценку сходства.

Я хотел бы включить TF-IDF в свой метод, чтобы уменьшить влияние повторяющегося содержимого и сосредоточиться больше на изменениях в документе.И метод 2, и метод 3 в коде дают разумные числа.

Как правильно это сделать?Или, более конкретно, как использовать аргумент tfidf в вызове функции Similarity_matrix ()?

Заранее спасибо:)

import gensim
from gensim.utils import simple_preprocess
from gensim import corpora
from gensim.matutils import softcossim 
import gensim.downloader as api

# load google's pre-trained model
word2vec = api.load('word2vec-google-news-300')

# prepare the inputs, each article_x contain couple paragraphs
documents= [article_1, article_2, article_3]
dictionary = corpora.Dictionary([simple_preprocess(doc) for doc in documents])

sentences = [dictionary.doc2bow(simple_preprocess(i)) for i in documents]
tfidf_fit = gensim.models.TfidfModel(sentences)
sentences_tfidf = tfidf_fit[sentences]

# calculate similarity matrix
sim_mat_none = word2vec.similarity_matrix(dictionary, tfidf=None, threshold=0.0, exponent=2.0, nonzero_limit=100)

sim_mat_tfidf = word2vec.similarity_matrix(dictionary, tfidf=tfidf_fit, threshold=0.0, exponent=2.0, nonzero_limit=100)

# calculate soft cosine similarity
# method 1
softcossim(sentences[0], sentences[1], sim_mat_none )

# method 2
softcossim(sentences_tfidf[0], sentences_tfidf[1], sim_mat_tfidf)

# method 3
softcossim(sentences_tfidf[0], sentences_tfidf[1], sim_mat_none)

...