python - 在 python 中读取一个大型预训练的 fastext 词嵌入文件
问题描述
我正在做情绪分析,我想使用预训练的 fasttext 嵌入,但是文件非常大(6.7 GB)并且程序需要很长时间才能编译。
fasttext_dir = '/Fasttext'
embeddings_index = {}
f = open(os.path.join(fasttext_dir, 'wiki.en.vec'), 'r', encoding='utf-8')
for line in tqdm(f):
values = line.rstrip().rsplit(' ')
word = values[0]
coefs = np.asarray(values[1:], dtype='float32')
embeddings_index[word] = coefs
f.close()
print('found %s word vectors' % len(embeddings_index))
embedding_dim = 300
embedding_matrix = np.zeros((max_words, embedding_dim))
for word, i in word_index.items():
if i < max_words:
embedding_vector = embeddings_index.get(word)
if embedding_vector is not None:
embedding_matrix[i] = embedding_vector
有什么方法可以加快这个过程吗?
解决方案
您可以改为使用 gensim 加载预训练的嵌入。至少对我来说这要快得多。首先,您需要 pip install gensim 然后您可以使用以下代码行加载模型:
from gensim.models import FastText
model = FastText.load_fasttext_format('cc.en.300.bin')
(我不确定您是否需要 .bin 文件,也许 .vec 文件也可以。)
要使用此模型嵌入单词,只需使用model[word]
.
推荐阅读
- ruby-on-rails - Amadeus Flight 的 Ruby SDK:从低价搜索到航班优惠搜索的迁移
- python - Python 目录、pip 和新库的问题
- android - 从画廊添加图像并在 android studio 中保存为 pdf
- javascript - 使用 Python Selenium 的 Javascript 登录页面
- ios - 是否可以使用 Kotlin/Native 观察 iOS NSObject 值的变化
- regex - 正则表达式或某事使用谷歌应用程序脚本将表格的一部分从网页拉到电子表格
- css - 如何在 CSS 中限制图像比例?
- java - 如何使用 apache poi 4.1.0 为不同的单元格设置不同的背景颜色
- symfony - Symfony + JMS Serializer:反序列化 DateTime 值也返回当前时间
- jenkins - Jenkins 声明性管道 @tmp 文件夹