美文网首页Python小哥哥
Python gensim库word2vec 基本用法

Python gensim库word2vec 基本用法

作者: 我爱学python | 来源:发表于2019-04-29 16:34 被阅读4次

    ip install gensim安装好库后,即可导入使用:

    1、训练模型定义

    参数解释:

    0.sentences是训练所需语料,可通过以下方式进行加载

    sentences=word2vec.Text8Corpus(file)

    此处训练集的格式为英文文本或分好词的中文文本

    .sg=1是skip-gram算法,对低频词敏感;默认sg=0为CBOW算法。

    2.size是输出词向量的维数,值太小会导致词映射因为冲突而影响结果,值太大则会耗内存并使算法计算变慢,一般值取为100到200之间。

    3.window是句子中当前词与目标词之间的最大距离,3表示在目标词前看3-b个词,后面看b个词(b在0-3之间随机)。

    4.min_count是对词进行过滤,频率小于min-count的单词则会被忽视,默认值为5。

    5.negative和sample可根据训练结果进行微调,sample表示更高频率的词被随机下采样到所设置的阈值,默认值为1e-3。

    6.hs=1表示层级softmax将会被使用,默认hs=0且negative不为0,则负采样将会被选择使用。

    7.workers控制训练的并行,此参数只有在安装了Cpython后才有效,否则只能使用单核。

    详细参数说明可查看word2vec源代码。

    2、训练后的模型保存与加载


    3、模型使用


    gensim  word2vec实战

    我选择的《人民的名义》的小说原文作为语料,语料原文在这里

    完整代码参见 github: https://github.com/ljpzzz/machinelearning/blob/master/natural-language-processing/word2vec.ipynb

    拿到了原文,我们首先要进行分词,这里使用结巴分词完成。在中文文本挖掘预处理流程总结中,我们已经对分词的原理和实践做了总结。

    加入下面的一串人名是为了结巴分词能更准确的把人名分出来。

     拿到了分词后的文件,在一般的NLP处理中,会需要去停用词。由于word2vec的算法依赖于上下文,而上下文有可能就是停词。因此对于word2vec,我们可以不用去停词。

     现在我们可以直接读分词后的文件到内存。这里使用了word2vec提供的LineSentence类来读文件,然后套用word2vec的模型。

       这里只是一个示例,因此省去了调参的步骤,实际使用的时候,你可能需要对我们上面提到一些参数进行调参。

    模型出来了,我们可以用来做什么呢?这里给出三个常用的应用。

    第一个是最常用的,找出某一个词向量最相近的词集合,代码如下:

    我们看看沙书记最相近的一些3个字的词(主要是人名)如下:

    高育良 0.967257142067

    李达康 0.959131598473

    田国富 0.953414440155

    易学习 0.943500876427

    祁同伟 0.942932963371

    第二个应用是看两个词向量的相近程度,这里给出了书中两组人的相似程度:

    输出如下:

    0.961137455325

    0.935589365706

    第三个应用是找出不同类的词,这里给出了人物分类题:

    print model.wv.doesnt_match(u"沙瑞金 高育良 李达康 刘庆祝".split())

    word2vec也完成的很好,输出为"刘庆祝"。

    相关文章

      网友评论

        本文标题:Python gensim库word2vec 基本用法

        本文链接:https://www.haomeiwen.com/subject/asxunqtx.html