【问题标题】:Loading pre trained fasttext model加载预训练的 fasttext 模型
【发布时间】:2021-04-14 12:21:13
【问题描述】:

我有一个关于 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 崩溃,我无法完全运行此代码。如何成功加载这些预训练的词向量?

感谢您的帮助。

【问题讨论】:

  • 请编辑您的问题以指定是否有错误消息。
  • 矢量文件有多大?你的机器有多少内存?

标签: python nlp fasttext


【解决方案1】:

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

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

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

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

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

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

【讨论】:

猜你喜欢
  • 2021-03-29
  • 2021-12-19
  • 1970-01-01
  • 2019-02-04
  • 2021-04-05
  • 2021-02-19
  • 2020-12-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多