【问题标题】:How to save fasttext model in vec format?如何以vec格式保存fasttext模型?
【发布时间】:2020-02-08 18:11:40
【问题描述】:

我在 python 中使用fasttext.train_unsupervised() 函数训练了我的无监督模型。我想将它保存为 vec 文件,因为我将在 fasttext.train_supervised() 函数中将此文件用于 pretrainedVectors 参数。 pretrainedVectors 只接受 vec 文件,但我无法创建这个 vec 文件。有人可以帮我吗?

附言。我能够以 bin 格式保存它。如果您建议我一种将 bin 文件转换为 vec 文件的方法,那也会很有帮助。

【问题讨论】:

    标签: python word-embedding fasttext


    【解决方案1】:

    为了获取仅包含所有单词向量的 VEC 文件,我从 bin_to_vec official example 获得灵感。

    from fasttext import load_model
    
    # original BIN model loading
    f = load_model(YOUR-BIN-MODEL-PATH)
        lines=[]
    
    # get all words from model
    words = f.get_words()
    
    with open(YOUR-VEC-FILE-PATH,'w') as file_out:
        
        # the first line must contain number of total words and vector dimension
        file_out.write(str(len(words)) + " " + str(f.get_dimension()) + "\n")
    
        # line by line, you append vectors to VEC file
        for w in words:
            v = f.get_word_vector(w)
            vstr = ""
            for vi in v:
                vstr += " " + str(vi)
            try:
                file_out.write(w + vstr+'\n')
            except:
                pass
    

    获得的VEC文件可能很大。 要减小文件大小,您可以调整矢量组件的格式。

    如果您只想保留 4 位小数,可以将 vstr += " " + str(vi) 替换为
    vstr += " " + "{:.4f}".format(vi)

    【讨论】:

    • ValueError: 预训练向量的维度 (7598805550878845300) 与维度 (300) 不匹配!不幸的是,当我尝试使用以这种方式创建的 vec 文件时,它给了我这个错误。似乎它没有保留应该为 300 的词向量的维度。
    • 我收到了类似的错误:“ValueError:预训练向量的维度 (0) 与维度 (100) 不匹配!”按照@darwin007 的建议,我通过将以下代码的输出添加到文件的第一行来解决了这个问题: str(len(words)) + " " + str(f.get_dimension())
    • 我会非常谨慎地使用读/写类型“a”。实际上,在最后一次更改答案之后使用“a”没有任何价值。如果您多次运行该行代码,您最终将在每次运行该行代码时附加单词长度、维度以及所有单词和向量。每次运行代码时,使用“w”而不是“a”将重写文件,这可能是您想要的。全线解决方案:使用 open(YOUR-VEC-FILE-PATH,'w') as file_out:
    【解决方案2】:

    你应该在你的 vec 文件的第一行添加单词 num 和 dimension,而不是使用 -preTrainedVectors para

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-27
      • 2019-08-28
      • 2021-09-07
      • 2018-10-14
      • 1970-01-01
      相关资源
      最近更新 更多