Gensim 学习关键点总结

ZhuYuanxiang 2020-06-27 00:00:00
Categories: Tags:

Gensim

Program

KeyedVectors

  1. Why use KeyedVectors instead of a full model?

    功能 KeyedVectors full model note
    继续训练向量 [x] 全模型可以继续训练和更新向量
    更小的对象 [x] KeyedVectors 使用更少的内存,因为不存储模型的状态,也就没法继续训练。
    存/本地格式的fasttext/word2vec [x] 从 Facebook 和 Google 的工具中导出的向量不支持进一步的训练,但是仍然可以加载到 KeyedVectors.
    增加新的向量 [x] [x] 可以动态地向映射中增加新的实体向量
    并发性 [x] [x] 线程案例,允许并发地向量查询
    共享内存 [x] [x] 多进程重用使用 mmap 保存在内存中的相同的数据
    快速加载 [x] [x] 支持 mmap 从磁盘中迅速加载数据

    TL;DR: 最主要的区别是 KeyedVectors 不支持继续训练。因为放弃了训练所需要的内部数据结构,因此 KeyedVectors 提供了更小的内存封装和更小的函数接口。

  2. How to obtain word vectors?

训练一个完全模型,然后得到 model.wv 属性(只保留了独立的有键的向量):

1
2
3
4
5
from gensim.test.utils import common_texts
from gensim.models import Word2Vec

model = Word2Vec(common_texts, size=100, window=5, min_count=1, workers=4)
word_vectors = model.wv

将词向量在磁盘上存取:

1
2
3
4
5
6
from gensim.test.utils import get_tmpfile
from gensim.models import KeyedVectors

fname = get_tmpfile("vectors.kv")
word_vectors.save(fname)
word_vectors = KeyedVectors.load(fname, mmap="r")

将 Google 的 C 格式的 word2vec 载入为 KeyedVectors 实例

1
2
3
4
5
6
7
8
from gensim.test.utils import datapath

wv_from_text = KeyedVectors.load_word2vec_format(
datapath("word2vec_pre_kv_c"), binary=False
) # C text format
wv_from_bin = KeyedVectors.load_word2vec_format(
datapath("euclidean_vectors.bin"), binary=True
) # C bin format

Word2Vec

1
class gensim.models.word2vec.Word2Vec(sentences=None,size=100,alpha=0.025,window=5,min_count=5, max_vocab_size=None, sample=0.001,seed=1, workers=3,min_alpha=0.0001, sg=0, hs=0, negative=5, cbow_mean=1,hashfxn=<built-in function hash>,iter=5,null_word=0,trim_rule=None, sorted_vocab=1, batch_words=10000)

参数: