Python 为什么我在word2vec和TFIDF中有不同数量的术语?我怎么能修好它?
我需要将TFIDF矩阵中的术语权重乘以word2vec矩阵的单词嵌入,但我不能这样做,因为每个矩阵都有不同数量的术语我使用相同的语料库获取两个矩阵,我不知道为什么每个矩阵都有不同数量的术语 . 我的问题是,我有一个形状为Python 为什么我在word2vec和TFIDF中有不同数量的术语?我怎么能修好它?,python,matrix,word2vec,embedding,Python,Matrix,Word2vec,Embedding,我需要将TFIDF矩阵中的术语权重乘以word2vec矩阵的单词嵌入,但我不能这样做,因为每个矩阵都有不同数量的术语我使用相同的语料库获取两个矩阵,我不知道为什么每个矩阵都有不同数量的术语 . 我的问题是,我有一个形状为(5609615500)(对应于:术语数量,文档数量)的矩阵TFIDF和形状为(30056184)(对应于:单词嵌入数量,术语数量)的矩阵Word2vec。 我需要两个矩阵中相同数量的项 我使用此代码获取单词嵌入矩阵Word2vec: def w2vec_gensim(norm_
(5609615500)
(对应于:术语数量,文档数量)的矩阵TFIDF和形状为(30056184)
(对应于:单词嵌入数量,术语数量)的矩阵Word2vec。我需要两个矩阵中相同数量的项 我使用此代码获取单词嵌入矩阵Word2vec:
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
我需要每个矩阵中相同数量的项。例如,如果我在TFIDF中有56096个术语,我需要嵌入矩阵中的相同数字,我指的是形状(560961550)
的矩阵TFIDF和形状(30056096)
的嵌入矩阵Word2vec。如何在两个矩阵中获得相同数量的项?
因为我不能在没有更多数据的情况下删除,因为我需要乘法来解释,因为我的目标是从文档中获取嵌入
提前非常感谢。问题是TFIDF削减了大约90个条款。这是因为标记化是必要的。 这就是解决方案:
wpt = nltk.WordPunctTokenizer()
tv = TfidfVectorizer(min_df=0., max_df=1., norm='l2', use_idf=True, smooth_idf=True,
tokenizer=wpt.tokenize)
不要被反对票吓坏了。你的问题看起来令人生畏和复杂,但可能有一个简单的答案。为了帮助你自己和我们,请看一看如何生成一个我们可以帮助的最小且可复制的示例,然后将其扩展到您的项目中。