gensim3.8.1——word2vec源码速览

打算看看word2vec的源码,于是参考了

https://blog.csdn.net/u014568072/article/details/79071116?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-task

https://blog.csdn.net/qq_16761099/article/details/90213201

然而实际打开时却感觉对不上,于是赶紧捋一捋。。

以下内容部分参考了上面的博客。

 

用Pycharm新建一个py文件,调用一下word2vec的模型:

from gensim.models import Word2Vec
sentences = [["cat", "say", "meow"], ["dog", "say", "woof"]]

model = Word2Vec(sentences, min_count=1)
say_vector = model['say']  # get vector for word

像IDEA一样点开Word2Vec函数,就可以看到其源码。

word2vec类继承自BaseWordEmbeddingModel类,BaseWordEmbeddingModel这个类又继承自baseAny2vecModel。(后两者在一个文件中)继承关系如下:

gensim3.8.1——word2vec源码速览_第1张图片

经过层层套娃,最核心的函数在主要的函数在BaseWordEmbeddingModel中的 build_vocab 函数下

total_words, corpus_count = self.vocabulary.scan_vocab(
            sentences=sentences, corpus_file=corpus_file, progress_per=progress_per, trim_rule=trim_rule)
        self.corpus_count = corpus_count
        self.corpus_total_words = total_words
        report_values = self.vocabulary.prepare_vocab(
            self.hs, self.negative, self.wv, update=update, keep_raw_vocab=keep_raw_vocab,
            trim_rule=trim_rule, **kwargs)
        report_values['memory'] = self.estimate_memory(vocab_size=report_values['num_retained_words'])
        self.trainables.prepare_weights(self.hs, self.negative, self.wv, update=update, vocabulary=self.vocabulary)

主要分为scan_vocab和prepare_vocab函数。前者和以前的功能一样,看一下源码就发现后者包括了scale和finalize vocab的过程。

所以本质没有区别,还是那几步,看以前的博客就行了。。

你可能感兴趣的:(其他)