新闻api 底层架构 JDK动态代理 开源商城系统 Java Out Of Memory 做推广 OpenCV4 reactjs iphone gulp ios5 swift2 handlebarsjs Normalizecss vue代码规范 android项目实战 nginx视频 在线考试系统代码 jquery解析json node卸载命令 linux源码在线阅读 oracle查看数据库状态 mysql组合索引 网页设计公司 javadate php入门例子 脚本之家 高效能人士的七个习惯下载 rndis驱动下载 ps校正倾斜照片 粉碎文件工具 widcomm flushdns 1500左右性价比最高的手机 金水疑云 通灵学院在哪 打印机怎么打印照片 ps怎么做漂亮艺术字 js绑定事件的方法 ps怎么做动画
当前位置: 首页 > 学习教程  > 编程学习

word2vec训练与相似度计算

2021/1/9 1:56:37 文章标签: word计算

中文语料预处理 采用维基百科里的中文网页作为训练语料库,下载地址为:https://dumps.wikipedia.org/zhwiki/20190301/zhwiki-20190301-pages-articles.xml.bz2 维基百科提供的语料是xml格式的,因此需要将其转换为txt格式。由于维基百科中有…

  • 中文语料预处理

采用维基百科里的中文网页作为训练语料库,下载地址为:https://dumps.wikipedia.org/zhwiki/20190301/zhwiki-20190301-pages-articles.xml.bz2

维基百科提供的语料是xml格式的,因此需要将其转换为txt格式。由于维基百科中有很多是繁体中文网页,故需要将这些繁体字转换为简体字。另外,在用语料库训练词向量之前需要对中文句子进行分词,这里采用Jieba中文分词工具对句子进行分词。

from gensim.corpora import WikiCorpus
import jieba
from opencc import OpenCC

opencc = OpenCC('t2s')


def preprocess():
    space = ' '
    i = 0
    l = []
    zhwiki_name = './data/zhwiki-20190301-pages-articles.xml.bz2'
    with open('./data/reduce_zhiwiki.txt', 'w') as f:  # xml转换为txt
        wiki = WikiCorpus(zhwiki_name, lemmatize=False, dictionary={})  # 读取训练语料
        for text in wiki.get_texts():  # 文本
            for temp_sentence in text:  # 段落
                temp_sentence = opencc.convert(temp_sentence)  # 繁体转简体
                seg_list = list(jieba.cut(temp_sentence))  # 分词
                for temp_term in seg_list:
                    l.append(temp_term)  # 组合成列表
            f.write(space.join(l) + '\n')  # 写入txt文件
            l = []
            i = i + 1

            if i % 200 == 0:
                print('Saved ' + str(i) + ' articles')


if __name__ == '__main__':
    import time
    before = time.time()
    preprocess()
    after = time.time()
    print(str((after - before) / 60) + ' minutes')

处理后的语料如图:

  • 向量化训练

利用gensim模块训练词向量,Word2Vec函数的参数如下:

# sg=0:使用CBOW模型训练词向量
# sg=1:使用skip-gram训练词向量
# size:词向量维度
# windows:当前词和预测词可能的最大距离
# min_count:最小出现次数,如果一个词出现的次数小于min_count,直接忽略该词
# workers:训练词向量时使用的线程数
from gensim.models import Word2Vec
from gensim.models.word2vec import LineSentence


def train():
    wiki_news = open('./data/reduce_zhiwiki.txt', 'r')
    model = Word2Vec(LineSentence(wiki_news), sg=0, size=192, window=5, min_count=5, workers=8)  # 训练词向量
    model.save('zhiwiki_news.word2vec')


if __name__ == '__main__':
    train()

训练好的词向量存在下列文件中:

  • 计算词语的相似度

# coding=utf-8
import gensim


def simularity():

    model = gensim.models.Word2Vec.load('./data/zhiwiki_news.word2vec')
    print(model.similarity('数据', '人工智能'))  # 相似度为0.29
    print(model.similarity('滴滴', '摩拜'))  # 相似度为0.39

    word = '北航'
    if word in model.wv.index2word:
        print(model.most_similar(word))  # 最相近的词


if __name__ == '__main__':
    simularity()

得到数据与人工智能的相似度为0.29,滴滴与摩拜的相似度为0.39,与北航最相近的词有:

[('天津大学', 0.708594799041748), ('哈工大', 0.7071467638015747), ('同济大学', 0.6879477500915527), ('浙大', 0.6827788949012756), ('湖南大学', 0.6754754185676575), ('水利系', 0.6699927449226379), ('深圳大学', 0.6659466624259949), ('西北工业大学', 0.6655755043029785), ('北京航空航天大学', 0.6644810438156128), ('上海大学', 0.663300633430481)]

 


本文链接: http://www.dtmao.cc/news_show_1100115.shtml

附件下载

相关教程

    暂无相关的数据...

共有条评论 网友评论

验证码: 看不清楚?