【问题标题】:Is there a way to solve word analogies using the sklearn TF-IDF model?有没有办法使用 sklearn TF-IDF 模型来解决单词类比问题?
【发布时间】:2021-05-13 06:41:27
【问题描述】:

我已经使用我自己的数据集使用 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)

我正在尝试解决单词类比问题(man::king as woman::queen),因为这可能与 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 相似的向量,希望其中一个词向量是“queen”?

【问题讨论】:

    标签: python scikit-learn nlp


    【解决方案1】:

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

    在 Word2Vec 模型中,我们有 Queen ~= king + woman - man 单词类比出现的部分原因是我们表示为(希望)编码每个单词语义的 n 维向量。

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

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

    【讨论】:

      猜你喜欢
      • 2017-12-27
      • 2019-04-19
      • 1970-01-01
      • 1970-01-01
      • 2019-08-13
      • 1970-01-01
      • 2015-09-07
      • 2019-07-08
      • 2021-02-13
      相关资源
      最近更新 更多