python - 加载预训练的 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 崩溃,我无法完全运行此代码。如何成功加载这些预训练的词向量?
感谢您的帮助。
解决方案
例如,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 等...)。
推荐阅读
- arrays - 将用户值存储在数组中,然后使用 bash 比较这些变量
- directory - 用户如何选择桌面上要使用 applescript 使用数字名称创建的文件夹数量?
- firebase - Firebase - 缺少 IAM 权限“cloudscheduler.jobs.update”
- git - 无法从远程推送 git 标签?
- android - 为什么 Retrofit reponse.body().toString() 不显示响应中的 JSON?
- chisel - 如何将 IO 端口动态添加到 Chisel Bundle?
- java - 人生游戏没有正确重置
- buffer - 如何在 GEOS 中生成多边形的负缓冲区?
- c++ - 在 C++ 中将文件读入结构
- python - 将表情符号添加到嵌入消息