• 【NLP练习】调用Gensim库训练Word2Vec模型


    一、准备工作

    1.安装Gensim库

    使用pip安装

    !pip install gensim
    
    • 1

    2. 对原始语料分词

    选择《人民的民义》的小说原文作为语料,先采用jieba分词。

    import jieba
    import jieba.analyse
    
    #加入一些词,使得jieba分词准确率更高
    jieba.suggest_freq('沙瑞金',True)
    jieba.suggest_freq('田国富',True)
    jieba.suggest_freq('高育良',True)
    jieba.suggest_freq('侯亮平',True)
    jieba.suggest_freq('钟小艾',True)
    jieba.suggest_freq('陈岩石',True)
    jieba.suggest_freq('欧阳菁',True)
    jieba.suggest_freq('易学习',True)
    jieba.suggest_freq('王大路',True)
    jieba.suggest_freq('蔡成功',True)
    jieba.suggest_freq('孙连城',True)
    jieba.suggest_freq('季昌明',True)
    jieba.suggest_freq('丁义珍',True)
    jieba.suggest_freq('郑西坡',True)
    jieba.suggest_freq('赵东来',True)
    jieba.suggest_freq('高小琴',True)
    jieba.suggest_freq('赵瑞龙',True)
    jieba.suggest_freq('林华华',True)
    jieba.suggest_freq('陆亦可',True)
    jieba.suggest_freq('刘新建',True)
    jieba.suggest_freq('刘庆祝',True)
    jieba.suggest_freq('赵德汉',True)
    
    with open(r'C:\Users\zhangjh46\Downloads\in_the_name_of_people.txt','r',encoding = 'UTF-8') as f:
        result_cut = []
        lines = f.readlines()
        for line in lines:
            result_cut.append(list(jieba.cut(line)))
            
    f.close()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34

    输出:
    在这里插入图片描述

    stopwords_list = [",","。","\n","\u3000"," ",":","!","?","..."]
    
    def remove_stopwords(ls):
        return [word for word in ls if word not in stopwords_list]
    
    result_stop = [remove_stopwords(x) for x in result_cut if remove_stopwords(x)]
    print(result_stop[100:103])
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    输出:

    [['侯亮平', '也', '很', '幽默', '一把', '抓住', '了', '赵德汉', '的', '手', '哎', '赵', '处长', '我', '既', '来', '了', '还', '真', '舍不得', '和', '你', '马上', '就', '分手', '哩', '咱们', '去', '下', '一个点', '吧', '说', '罢', '从', '赵家', '桌上', '杂物', '筐', '里', '准确', '地', '拿出', '一张', '白色', '门卡', '插到', '了', '赵德汉', '的', '上衣', '口袋', '里'], ['赵德汉', '慌', '了', '忙', '把门', '卡往', '外', '掏', '这', '…', '…', '这', '什么', '呀', '这', '是'], ['你', '帝京', '苑', '豪宅', '的', '门', '卡', '啊', '请', '继续', '配合', '我们', '执行公务', '吧']]
    
    • 1

    二、训练Word2Vec模型

    from gensim.models import Word2Vec
    
    model = Word2Vec(result_stop,
                    vector_size=100,
                    window=5,
                    min_count = 1)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    三、模型应用

    1. 计算词汇相似度

    我们可以使用similarity()方法计算两个词汇之间的余弦相似度

    print(model.wv.similarity('沙瑞金','季昌明'))
    print(model.wv.similarity('沙瑞金','田国富'))
    
    • 1
    • 2

    输出:

    0.9995858
    0.99938
    
    • 1
    • 2
    #选出最相似的5个词
    for e in model.wv.most_similar(positive=['沙瑞金'],topn=5):
        print(e[0],e[1])
    
    • 1
    • 2
    • 3

    输出:

    这位 0.9998286962509155
    李达康 0.9998038411140442
    陈清泉 0.9997875094413757
    有些 0.999778687953949
    陈岩石 0.9997553825378418
    
    • 1
    • 2
    • 3
    • 4
    • 5

    2. 找出不匹配的词汇

    使用doesnt_match()方法,我们可以找到一组词汇中与其他词汇不匹配的词汇。

    odd_word = model.wv.doesnt_match(["苹果","香蕉","橙子","书"])
    print(f"在这组词汇中不匹配的词汇:{odd_word}")
    
    • 1
    • 2

    输出:

    在这组词汇中不匹配的词汇:书
    
    • 1

    3. 计算词汇的词频

    我们可以使用get_vecattr()方法获取词汇的词频。

    word_frequency = model.wv.get_vecattr("沙瑞金","count")
    print(f"沙瑞金:{word_frequency}")
    
    • 1
    • 2

    输出:

    沙瑞金:353
    
    • 1

    四、总结

    Gensim库在使用的过程中更加高效、易用

  • 相关阅读:
    Apache Tomcat的安装与测试
    vue+DataV 易懂使用方式
    mov视频损坏怎么修复?修复秘诀
    结点的查找
    如何在 C# 程序中注入恶意 DLL?
    MethodArgumentNotValidException 与 ConstraintViolationException
    cuda 内存模型
    2022 GCPC--C. Chaotic Construction
    konva系列教程4:图形属性
    软件测试技术之单元测试—工程师 Style 的测试方法
  • 原文地址:https://blog.csdn.net/Elfin_z/article/details/137695679