我想用gensim从快速文本库中加载经过预训练的多语言单词嵌入;这里是嵌入链接:
https://fasttext.cc/docs/en/crawl-vectors.html
尤其是,我想加载以下单词嵌入:
Gensim提供了以下两个用于加载快速文本文件的选项:
gensim.models.fasttext.load_facebook_model(path, encoding='utf-8')
- 从Facebook的本机快速文本加载隐藏输入的权重矩阵 .bin输出文件。
- load_facebook_model()加载整个模型,而不仅仅是 词嵌入,使您能够继续进行模型训练。
gensim.models.fasttext.load_facebook_vectors(path, encoding='utf-8')
- 从以Facebook的本机fasttext .bin格式保存的模型中加载单词嵌入。
- load_facebook_vectors()仅加载单词嵌入。它的速度更快,但不能使您继续训练。
Gensim源文档: https://radimrehurek.com/gensim/models/fasttext.html#gensim.models.fasttext.load_facebook_model
由于我的笔记本电脑只有8 GB RAM,所以我继续遇到MemoryErrors或加载需要很长时间(最多几分钟)。
是否可以从磁盘加载这些大型模型以提高内存效率?
答案 0 :(得分:1)
由于矢量通常需要至少与其磁盘存储一样多的可寻址内存,因此将这些矢量的全功能版本加载到仅具有8GB RAM的计算机中将具有挑战性。特别是:
一旦您开始对这些向量进行最常见的操作-找到目标词/向量中的<template>
<section class="ShowGallery">
<div class="panelGallery">
<div class="topBlock">
<div class="close" @click="$emit('btnCloseGallery')"><i class="icon-error"></i></div>
</div>
<div class="bottomBlock">
<div class="block first">
<div class="image">
<img :src="gallery.url">
</div>
</div>
<div class="block second">
<h3>info gallery</h3>
{{gallery}}
<ul class="listInfo">
<li><span>{{gallery.size}}</span><span> : size </span></li>
<li><span v-text="gallery.type"></span><span> : format </span></li>
<li><span v-text="gallery.resolution"></span><span> : resolution </span></li>
<li><span v-text="gallery.name"></span><span> : name </span></li>
<li><span v-text="gallery.url"></span><span> : url </span></li>
<li><span v-text="gallery.path"></span><span> : path </span></li>
</ul>
</div>
</div>
</div>
</section>
</template>
<script>
export default {
props : ['gallery_id'],
name: "ShowGallery",
data(){
return {
gallery : {} ,
}
},
methods : {
async getGallery(){
const data = await axios.get(`/admin/gallery/${this.gallery_id}`);
this.gallery = data.data;
console.log(this.gallery)
}
},
mounted(){
this.getGallery();
},
}
</script>
个词的列表-gensim实现也将要缓存一组词向量已经标准化为单位长度–几乎使所需的内存增加了一倍
gensim的FastText支持的当前版本(至少通过3.8.1版)还浪费了一些不必要的内存(特别是在全模式情况下)
如果您仅使用向量,而不进行进一步的培训,那么您肯定只希望使用most_similar()
选项。
如果您愿意放弃模型为语音以外的单词合成新矢量的能力(在训练中看不到),则可以选择从纯文本加载仅一部分全单词矢量,文本load_facebook_vectors()
文件。例如,仅加载第一个500K向量:
.vec
因为通常对此类向量进行排序,以将出现频率较高的词排在首位,所以经常丢弃低频词的长尾巴并不是很大的损失。