【问题标题】:Rename gensim Word2Vec words with mapping使用映射重命名 gensim Word2Vec 单词
【发布时间】:2016-12-04 02:02:20
【问题描述】:

我想用映射替换我的 gensim Word2Vec 模型的单词。

示例

我当前的模型有一个词 'foo' 映射到一个向量:

>>> model['foo']
[1.0 0.0]

我有映射:d = {'foo': 'bar', ...}

我怎样才能用这个新的映射重建模型,这样

>>> model['bar']  # in place of 'foo'
[1.0 0.0]

【问题讨论】:

    标签: python gensim word2vec


    【解决方案1】:

    一种解决方案是将模型保存为基于 C 的 word2vec 格式,并使用 awk 将原始词替换为新词的映射。

    假设我们有一个表格的文件映射:

    $ cat map.txt
    foo:bar
    ...
    

    我们可以通过以下方式重新创建模型:

    import subprocess as sp
    import shlex
    
    from gensim.models import Word2Vec
    
    model.save_word2vec_format('embeddings.txt', binary=False)
    
    CMD = r"""
    awk -F'[ ]|:' 'FNR==NR {a[$1]=$2; next} FNR==1{print $0} FNR!=1{$1=a[$1]; print $0}' map.txt embeddings.txt
    """
    
    with open('new_embeddings.txt', 'w') as f:
        p = sp.Popen(shlex.split(CMD), stdout=f)
    
    new_model = Word2Vec.load_word2vec_format('new_embeddings.txt')
    
    new_model.create_binary_tree()
    

    顺便说一句,我的映射实际上是一个数组,我在其中训练某个数组arr 中单词的索引。我使用 numpy 创建了地图文件:

    import numpy as np
    
    np.savetxt('map.txt', np.c_[np.arange(arr.size), arr], '%d:%s')
    

    【讨论】:

      猜你喜欢
      • 2019-07-02
      • 1970-01-01
      • 2023-03-24
      • 2015-08-15
      • 2016-06-06
      • 2016-10-12
      • 1970-01-01
      • 2017-07-19
      • 2016-12-04
      相关资源
      最近更新 更多