使用gensim从快速文本库中高效地加载预训练单词嵌入的内存

我想用gensim从快速文本库中加载经过预训练的多语言单词嵌入;这里是嵌入链接:

https://fasttext.cc/docs/en/crawl-vectors.html

尤其是,我想加载以下单词嵌入:

  • cc.de.300.vec(4.4 GB)
  • cc.de.300.bin(7 GB)

Gensim提供了以下两个用于加载快速文本文件的选项:

  1. gensim.models.fasttext.load_facebook_model(path,encoding='utf-8')

      
        
    • 从Facebook的本机快速文本加载隐藏输入的权重矩阵   .bin输出文件。
    •   
    • load_facebook_model()加载整个模型,而不仅仅是   词嵌入,使您能够继续进行模型训练。
    •   
  2. 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或加载需要很长时间(最多几分钟)。

是否可以从磁盘加载这些大型模型以提高内存效率?

tooy12345 回答:使用gensim从快速文本库中高效地加载预训练单词嵌入的内存

由于矢量通常需要至少与其磁盘存储一样多的可寻址内存,因此将这些矢量的全功能版本加载到仅具有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

因为通常对此类向量进行排序,以将出现频率较高的词排在首位,所以经常丢弃低频词的长尾巴并不是很大的损失。

本文链接:https://www.f2er.com/2943221.html

大家都在问