加载预训练的 fasttext 模型

时间:2021-04-14 12:21:13

标签: python nlp 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崩溃了。如何成功加载这些预先训练好的词向量?

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

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

因此他们提供两种类型的预训练模型:.vec.bin

.vec是词->向量信息的字典,词向量是针对训练词汇中的词预先计算的。

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

在您的情况下,您正在加载 .vec 文件,因此 vectors 是数据的“最终形式”,fasttext.load_model 需要 .bin 文件名。 如果您需要的不仅仅是 Python 字典,您可以使用 gensim.models.keyedvector

<块引用>

由于经过训练的词向量独立于它们的训练方式(Word2Vec、FastText、VarEmbed 等),因此它们可以由独立结构表示,如本模块中实现的那样。