有没有一种方法可以使用sklearn-TFIDF模型解决单词类比?

2024-09-28 21:25:00 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用Python的sklearn库和我自己的数据集拟合了TF-IDF模型:

tfidf_featuriser = sklearn.feature_extraction.text.TfidfVectorizer(stop_words=None)
tfidf_featuriser.fit(documents)
tfidf_docterm_matrix = tfidf_featuriser.transform(documents)

我正在尝试解决单词类比(男人::国王作为女人::王后),因为这可能与gensim的Word2Vec模型有关。到目前为止,我已经尝试了以下方法:

vec1 = tfidf_docterm_matrix.transpose()[tfidf_featuriser.vocabulary_['man'], :]
vec2 = tfidf_docterm_matrix.transpose()[tfidf_featuriser.vocabulary_['woman'], :]
vec3 = tfidf_docterm_matrix.transpose()[tfidf_featuriser.vocabulary_['king'], :]

vec4 = vec2 + vec3 - vec1

我如何检索与vec4相似的向量,希望其中一个单词向量是“女王”的


Tags: 模型sklearn单词向量matrixdocumentstfidftranspose
1条回答
网友
1楼 · 发布于 2024-09-28 21:25:00

tf idf不[试图]捕获单个单词的语义信息-它是一个纯粹基于频率的模型。因此,你不应该期望看到简洁的词语类比出现(想想看,为什么“男人”、“女人”、“国王”和“女王”的相对频率应该如此简洁地关联起来)

在Word2Vec模型中,queen~=king+女性-男性词语类比的出现部分是因为我们表示为n维向量(希望)编码每个词语的语义

另一方面,在tf idf矩阵中,我们的词向量的每个元素仅代表其在特定文档中的频率函数,因此您设置的约束条件不仅是这些词的相对频率强相关,而且在单个文档的级别上发生,这对于一个只计算词频的模型来说是一个很大的要求

如果你想理解为什么单词类比出现在Word2Vec这样的单词嵌入模型中,我建议你看看这个paper和相关的talk

相关问题 更多 >