首页 > 解决方案 > 加载预训练的 fasttext 模型

问题描述

我对 fasttext ( https://fasttext.cc/ )有疑问。我想下载一个预训练模型并使用它从文本中检索词向量。

下载预训练模型 ( https://fasttext.cc/docs/en/english-vectors.html ) 后,我将其解压缩并得到一个 .vec 文件。如何将其导入fasttext?

我尝试按如下方式使用上述功能:

import fasttext
import io

def load_vectors(fname):
    fin = io.open(fname, 'r', encoding='utf-8', newline='\n', errors='ignore')
    n, d = map(int, fin.readline().split())
    data = {}
    for line in fin:
        tokens = line.rstrip().split(' ')
        data[tokens[0]] = map(float, tokens[1:])
    return data

vectors = load_vectors('/Users/username/Downloads/wiki-news-300d-1M.vec')
model = fasttext.load_model(vectors)

但是,由于 python 崩溃,我无法完全运行此代码。如何成功加载这些预训练的词向量?

感谢您的帮助。

标签: pythonnlpfasttext

解决方案


例如,FastText 相对于 word2vec 或 glove 的优势在于它们使用子词信息来返回 OOV(词汇表外)词的向量。

所以他们提供了两种类型的预训练模型:.vec.bin

.vec字典 Dict[word, vector],词向量是为训练词汇表中的词预先计算的。

.bin是一个可以加载的二进制快速文本模型fasttext.load_model('file.bin'),可以为看不见的词(OOV)提供词向量,进行更多训练等。

在您的情况下,您正在加载.vec文件,vectors数据的“最终形式”也是如此。 fasttext.load_model需要一个.bin文件。

如果您需要的不仅仅是一个可以使用的 Python 字典gensim.models.keyedvector(它可以处理任何词向量,例如 word2vec、glove 等...)。


推荐阅读