Мне нужно умножить веса терминов в матрице TFIDF на вложения слов матрицы word2ve c, но я не могу этого сделать, потому что каждая матрица имеет различное количество терминов. Я использую один и тот же корпус для получения обеих матриц, я не знаю, почему у каждой матрицы разное количество терминов.
Моя проблема в том, что у меня есть матрица TFIDF с формой (56096, 15500)
(соответствует: количество терминов, количество документов) и матрица Word2ve c с формой (300, 56184)
(соответствует: количество вложений слов, количество терминов).
И мне нужно то же самое количество членов в обеих матрицах.
Я использую этот код для получения матрицы вложения слов Word2ve c:
def w2vec_gensim(norm_corpus):
wpt = nltk.WordPunctTokenizer()
tokenized_corpus = [wpt.tokenize(document) for document in norm_corpus]
# Set values for various parameters
feature_size = 300
# Word vector dimensionality
window_context = 10
# Context window size
min_word_count = 1
# Minimum word count
sample = 1e-3
# Downsample setting for frequent words
w2v_model = word2vec.Word2Vec(tokenized_corpus, size=feature_size, window=window_context, min_count = min_word_count, sample=sample, iter=100)
words = list(w2v_model.wv.vocab)
vectors=[]
for w in words:
vectors.append(w2v_model[w].tolist())
embedding_matrix= np.array(vectors)
embedding_matrix= embedding_matrix.T
print(embedding_matrix.shape)
return embedding_matrix
И этот код для получения матрицы TFIDF:
tv = TfidfVectorizer(min_df=0., max_df=1., norm='l2', use_idf=True, smooth_idf=True)
def matriz_tf_idf(datos, tv):
tv_matrix = tv.fit_transform(datos)
tv_matrix = tv_matrix.toarray()
tv_matrix = tv_matrix.T
return tv_matrix
И мне нужно одинаковое количество терминов в каждой матрице. Например, если у меня есть 56096 членов в TFIDF, мне нужно такое же число в матрице вложений, я имею в виду матрицу TFIDF с формой (56096, 1550)
и матрицу вложений Word2ve c с формой (300, 56096)
. Как я могу получить одинаковое количество терминов в обеих матрицах? Поскольку я не могу удалить без большего количества данных, мне нужно умножение, чтобы иметь смысл, потому что моя цель - получить вложения из документов.
Большое спасибо заранее.