【问题标题】:Pythonic way to obtain a distance matrix from word vectors in gensim 4.0从 gensim 4.0 中的词向量获取距离矩阵的 Pythonic 方法
【发布时间】:2021-11-02 16:02:51
【问题描述】:

我目前正在使用 gensim 4.0.1 版来生成词向量。我的最终目标是计算所有成对组合词向量之间的余弦距离,并使用获得的距离矩阵对词向量进行聚类。到目前为止,我一直在使用以下代码生成距离矩阵:

    print('Setting up Word2Vec model')
    model = gensim.models.Word2Vec (genome_tokens, vector_size=100, window=args.window_size, min_count=args.min_cluster_size, workers=args.threads, sg=1)

    print('Training Word2Vec model')
    model.train(genome_tokens,total_examples=len(genome_tokens),epochs=10)

    words = sorted(model.wv.index_to_key)
    scaled_data = [model.wv[w] for w in words]
    print('Calculating distribution distance among clusters')
    cluster_distrib_distance = pairwise_distances(scaled_data, metric=args.metric)

我想知道是否有一个特定的函数可以直接从模型对象中获取距离矩阵,而不必创建单词和缩放数据对象。

通过 gensim 文档,我主要找到了有关计算相似性而不是距离的方法的信息,并且通常是在文档之间而不是单个单词之间。在github repository 上似乎确实对此主题进行了一些讨论,但那里描述的方法似乎特定于旧版本,就像here 提出的解决方案一样

【问题讨论】:

    标签: python nlp gensim word2vec


    【解决方案1】:

    没有内置的实用方法。

    但是,您可以在 model.wv.vectors 属性中获取原始支持数组以及其中的所有向量。每行是index_to_key中相同位置对应单词的词向量。

    您可以直接将其输入sklearn.metrics.pairwise_distances(或类似的),而无需在外部单独(和不同排序的)scaled_data

    请注意,如果使用类似欧几里得距离的方法,您可能希望在计算距离之前对词向量进行单位长度归一化。那么所有距离都将在[0.0, 2.0] 范围内,并且排名距离将与排名余弦相似度完全相反。

    在这种情况下,您将再次希望从一组外部向量中工作——通过使用 get_vector(key, norm=True) 来获得 1×1,或者使用 get_normed_vectors() 来获得完全单位规范的 @ 版本987654330@数组。

    【讨论】:

      猜你喜欢
      • 2016-06-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-10
      • 2016-08-23
      • 1970-01-01
      • 2017-06-09
      • 2010-11-09
      相关资源
      最近更新 更多