zoukankan      html  css  js  c++  java
  • gensim

    官方文档: https://radimrehurek.com/gensim/models/word2vec.html

    1、训练模型定义

    from gensim.models import word2vec
    
    sentences = word2vec.Text8Corpus(r'user.txt')
    word2vec = gensim.models.word2vec.Word2Vec(sentences, size=100, hs=1, min_count=1, window=3)
    word2vec.save('word2vec_te')

    参数解释:

    1.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 = gensim.models.word2vec.Word2Vec(sentences(), size=256, window=10, min_count=64, sg=1, hs=1, iter=10, workers=25)
    word2vec.save('word2vec_wx')

    模型导入

    model = gensim.models.Word2Vec.load('xxx/word2vec_wx')
    pd.Series(model.most_similar(u'微信',topn = 360000))

    gensim.models.Word2Vec.load的办法导入

    其中的Numpy,可以用numpy.load:

    import numpy
    word_2x = numpy.load('xxx/word2vec_wx.wv.syn0.npy')

    还有其他的导入方式:

    from gensim.models.keyedvectors import KeyedVectors
    word_vectors = KeyedVectors.load_word2vec_format('/tmp/vectors.txt', binary=False)  # C text format
    word_vectors = KeyedVectors.load_word2vec_format('/tmp/vectors.bin', binary=True)  # C binary format

    增量训练

    model = gensim.models.Word2Vec.load('/tmp/mymodel')
    model.train(more_sentences)

    gensim训练好的word2vec使用

    1、相似性

    持数种单词相似度任务: 
    相似词+相似系数(model.most_similar)、model.doesnt_match、model.similarity(两两相似)

    model.most_similar(positive=['woman', 'king'], negative=['man'], topn=1)
    [('queen', 0.50882536)]
    
    model.doesnt_match("breakfast cereal dinner lunch".split())
    'cereal'
    
    model.similarity('woman', 'man')
    .73723527

    词向量

    通过以下方式来得到单词的向量:

    model['computer']  # raw NumPy vector of a word
    array([-0.00449447, -0.00310097,  0.02421786, ...], dtype=float32)

    可视化展示

    import gensim
    import numpy
    from gensim.models import word2vec
    from sklearn.decomposition import PCA
    from matplotlib import pyplot
    # import pandas as pd
    pyplot.rcParams['font.sans-serif'] = ['SimHei']
    
    # model = gensim.models.Word2Vec.load('word2vec_wx')
    model = gensim.models.Word2Vec.load('word2vec_te')
    # model.train(more_sentences)
    # pd.Series(model.most_similar(u'微信'),topn=360000)
    # for i in model.most_similar(u'教育'):
    #     print(i)
    # for i in model['教育']:
    #     print(i)
    
    # 基于2d PCA拟合数据
    X = model[model.wv.vocab]
    pca = PCA(n_components=2)
    result = pca.fit_transform(X)
    # 可视化展示
    pyplot.scatter(result[:, 0], result[:, 1])
    words = list(model.wv.vocab)
    for i, word in enumerate(words):
        pyplot.annotate(word, xy=(result[i, 0], result[i, 1]))
    pyplot.show()
    

      

     
  • 相关阅读:
    3.K均值算法
    2.机器学习相关数学基础
    1. 机器学习概述
    15、语法制导的语义翻译
    14、算符优先分析
    13、自下而上语法分析
    12、递归下降语法分析
    11、LL(1)文法的判断,递归下降分析程序
    10、消除左递归
    4.K均值算法--应用
  • 原文地址:https://www.cnblogs.com/pythonclass/p/11309049.html
Copyright © 2011-2022 走看看