• gensim Word2Vec 训练和使用(Model一定要加载到内存中,节省时间!!!)


    训练模型
    利用gensim.models.Word2Vec(sentences)建立词向量模型
    该构造函数执行了三个步骤:建立一个空的模型对象,遍历一次语料库建立词典,第二次遍历语料库建立神经网络模型可以通过分别执行model=gensim.models.Word2Vec(),model.build_vocab(sentences),model.train(sentences)来实现
    训练时可以指定以下参数
    min_count指定了需要训练词语的最小出现次数,默认为5
    size指定了训练时词向量维度,默认为100
    worker指定了完成训练过程的线程数,默认为1不使用多线程。只有注意安装Cython的前提下该参数设置才有意义
    查询查询查询查询查询查询结果训练可以通过model.save('fname')或model.save_word2vec_format(fname)来保存为文件,使用再model.load(fname)或model.load_word2vec_format(fname,encoding='utf-8')读取查询结果

    例如:

    from gensim.models.word2vec import Word2Vec

    sentences = [['A1','A2'],[],[],....]
    model= Word2Vec()
    model.build_vocab(sentences)
    model.train(sentences,total_examples = model.corpus_count,epochs = model.iter)

    保存:
    model.save('/tmp/MyModel')
    #model.save_word2vec_format('/tmp/mymodel.txt',binary = False)
    #model.save_word2vec_format('/tmp/mymodel.bin.gz',binary = True)

    前一组方法保存的文件不能利用文本编辑器查看但是保存了训练的全部信息,可以在读取后追加训练
    后一组方法保存为word2vec文本格式但是保存时丢失了词汇树等部分信息,不能追加训练

    追加加训练:
    model = gensim.models.Word2Vec.load('/tmp/mymodel')
    model.train(more_sentences)
    加载:
    model = gensim.models.Word2Vec.load('/tmp/mymodel')

    #model = gensim.models.KeyedVectors.load_word2vec_format('/tmp/vectors.txt',binary = False)
    #model = gensim.models.KeyedVectors。load_word2vec_format('/tmp/vectors.bin',binary = True)
    ##使用gzipped / bz2输入也可以,不需要解压:
    #model = gensim.models.KeyedVectors.load_word2vec_format('/tmp/vectors.bin.gz',binary=True)

    模型使用:

    获取词向量
    print(model ['man'])
    print(type(model ['man']))
    输出:
    [0.14116223 0.05663395 0.01500377 -0.03592452 ...]
    numpy.ndarray
    计算一个词的最近似的词,倒排序
    model.most_similar(['男人'])

    输出:
    [('女',0.7664012908935547),
    ( '男孩',0.6824870109558105),
    ( '青少年',0.6586930155754089),
    ( '女孩',0.5921714305877686),
    ( '强盗',0.5585119128227234),
    ( '男',0.5489763021469116),
    ('人',0.5420035719871521),
    ( '人',0.5342026352882385),
    ( '绅士',0.5337990522384644),
    ( '摩托车手',0.5336882472038269)]

    计算两词之间的余弦相似度
    word2vec一个很大的亮点:支持词语的加减运算(实际中可能只有少数例子比较符合)
    model.most_similar(positive = ['woman','king'],negative = ['man'],topn = 2)
    输出:
    [('王后',0.7118192911148071),('君主',0.6189675331115723)]
    ---
    model.similarity('女人', '男人')
    输出:
    0.7664012234410319

    计算两个集合之间的余弦似度
    当出现某个词语不在这个训练集合中的时候,会报错!
    list1 = ['我','走','我','学校']
    list2 = ['我','去','家']
    list_sim1 = model.n_similarity(list1,list2)
    print(list_sim1)

    输出:
    0.772446878519
    选出集合中不同类的词语
    model.doesnt_match('breakfast cereal dinner lunch'.split())
    输出:
    '谷类'

  • 相关阅读:
    如何解决软键盘弹出引起的各种不适
    防反编译、混淆文件proguard.cfg与proguard-project.txt详解
    Android.mk添加第三方jar包
    Android Proguard.flags LOCAL_PROGUARD_FLAGS
    【Mood 21】要不要重复造轮子
    彻底解决INSTALL_FAILED_UPDATE_INCOMPATIBLE的安装错误
    【起航计划 037】2015 起航计划 Android APIDemo的魔鬼步伐 36 App->Service->Remote Service Binding AIDL实现不同进程间调用服务接口 kill 进程
    【起航计划ObjC 003】印第安老斑鸠ObjC的幻想 ---- ObjC经典问题
    缩短移动开发周期的ApiCloud
    LeAndroid招聘汇总
  • 原文地址:https://www.cnblogs.com/demo-deng/p/10130490.html
Copyright © 2020-2023  润新知