使用中文维基百科进行Word2Vec实验
1. 环境及语料
1.1 环境
- Homebrew
- Python
- jieba分词库
- gensim库
1.2 下载维基百科语料
从这个链接下载http://download.wikipedia.com/zhwiki/latest/zhwiki-latest-pages-articles.xml.bz2
本文只使用中文WiKi进行Word2Vec实验,英文的Wiki比较好处理,不用使用分词库就可以完成处理。
1.3 安装opencc
opencc用来进行繁体和简体转换
命令:brew install opencc
2. 实验
2.1 转换格式
将下载下来的Wiki XML文件转换成TXT格式文件,运行如下脚本。在Terminal中执行:python parse_wiki_corpora.py zhwiki-latest-pages-articles.xml.bz2 corpus.zhwiki.txt
import logging
import os.path
import sys
from gensim.corpora import WikiCorpusif __name__ == '__main__':program = os.path.basename(__file__)logger = logging.getLogger(program)logging.basicConfig(format='%(asctime)s: %(levelname)s: %(message)s')logging.root.setLevel(level=logging.INFO)logger.info("running %s" % ' '.join(sys.argv))if len(sys.argv) < 3:print (globals()['__doc__'] % locals())sys.exit(1)inp, outp = sys.argv[1:3]space = " "i = 0output = open(outp, 'w')wiki = WikiCorpus(inp, lemmatize=False, dictionary={})for text in wiki.get_texts():output.write(space.join(text) + "\n")i += 1if i % 10000 == 0:logger.info("Saved " + str(i) + " articles")output.close()logger.info("Finished Saved " + str(i) + " articles")
2.2 简繁体转换
命令: opencc -i corpus.zhwiki.txt -o corpus.zhwiki.simplified.txt -c t2s.json
转换其他字体,可参考https://github.com/BYVoid/OpenCC#configurations-%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6 修改上面命令的-c部分。
2.3 移除空白行
执行如下脚本。命令:python remove_en_blank.py corpus.zhwiki.simplified.txt corpus.zhwiki.simplified.done.txt
import re
import logging
import os.path
import sysif __name__ == '__main__':# program = os.path.basename(sys.argv[0])program = os.path.basename(__file__)logger = logging.getLogger(program)logging.basicConfig(format='%(asctime)s: %(levelname)s: %(message)s')logging.root.setLevel(level=logging.INFO)logger.info("running %s" % ' '.join(sys.argv))# check and process input argumentsif len(sys.argv) < 3:print(globals()['__doc__'] % locals())sys.exit(1)inp, outp = sys.argv[1:3]i = 0output = open(outp, 'w')f = open(inp)line = f.readline()while line:line = f.readline()rule = re.compile(r'[ a-zA-z]') # delete english char and blankresult = rule.sub('', line)output.write(result + "\n")i += 1logger.info("Saved " + str(i) + " lines")f.close()output.close()logger.info("Finished Saved " + str(i) + " lines")
2.4 分词
使用jieba进行分词。执行如下脚本,命令:python -m jieba -d ’ ’ corpus.zhwiki.simplified.done.txt > corpus.zhwiki.segwithb.txt
注意英文引号和导出符>
2.5 Training
运行如下脚本,命令:python train.py corpus.zhwiki.segwithb.txt zhiwiki.model
# -*- coding: utf-8 -*-import logging
import os.path
import sys
import multiprocessing
from gensim.corpora import WikiCorpus
from gensim.models import Word2Vec
from gensim.models.word2vec import LineSentenceif __name__ == '__main__':# program = os.path.basename(sys.argv[0])program = os.path.basename(__file__)logger = logging.getLogger(program)logging.basicConfig(format='%(asctime)s: %(levelname)s: %(message)s')logging.root.setLevel(level=logging.INFO)logger.info("running %s" % ' '.join(sys.argv))# check and process input argumentsif len(sys.argv) < 3:print(globals()['__doc__'] % locals())sys.exit(1)inp, outp = sys.argv[1:3]model = Word2Vec(LineSentence(inp), size=400, window=5, min_count=5,workers=multiprocessing.cpu_count())model.save(outp)# model.save_word2vec_format(outp2, binary=False)
2.6 Testing
使用如下脚本进行测试,命令:python test.py
from gensim.models import Word2Vecmodel = Word2Vec.load('zhwiki.model')print(model.most_similar(u'中国', topn=20))
print(model.most_similar(u'北京', topn=20)
3. Word2Vec 存在的问题
- 对每个local Context window单独训练,没有利用包含在global co-currence矩阵中的统计信息
- 对多义词无法很好的表示和处理,因为使用了唯一的词向量
- 一种更好的方法是使用GloVe进行词向量表示
4. Word2Vec 与 GloVe
4.1 Word2Vec中的 CBOW 和 SK-gram 如何选择?
样本量不是特别大的时候,选择CBOW;样本量特别大的时候应该选择SK-gram
4.2 Word2Vec 和 GloVe 对比
GloVe随着迭代次数增加,精度提升。Word2Vec 未使用类似迭代次数的Epoch,用Negative Samples 模拟
使用中文维基百科进行Word2Vec实验相关推荐
- NLP之word2vec:利用 Wikipedia Text(中文维基百科)语料+Word2vec工具来训练简体中文词向量
NLP之word2vec:利用 Wikipedia Text(中文维基百科)语料+Word2vec工具来训练简体中文词向量 目录 输出结果 设计思路 1.Wikipedia Text语料来源 2.维基 ...
- 使用中文维基百科训练word2vec模型的最新方法!
网上看了很多其他博客,发现有些部分都太老旧了,以至于现在套用都错误百出...这里总结了一下使用中文维基百科训练word2vec模型的最新方法. 参考链接: https://blog.csdn.net/ ...
- 使用中文维基百科训练word2vec模型
一.下载原始数据 数据下载地址:https://dumps.wikimedia.org/zhwiki/latest/zhwiki-latest-pages-articles.xml.bz2 ,或者在这 ...
- 中文维基百科语料上的Word2Vec实验
说明:此文主要参考52nlp-中英文维基百科语料上的Word2Vec实验,按照上面的步骤来做的,略有改动,因此不完全是转载的.这里,为了方便大家可以更快地运行gensim中的word2vec模型,我提 ...
- Word2vec训练中文维基百科
1.取得中文维基百科数据,本实验用的数据是zhwiki-20180320-pages-articles-multistream.xml.bz2 也可以前往维基百科数据获取下载最新的数据.(请挑选以pa ...
- 把一个dataset的表放在另一个dataset里面_使用中文维基百科语料库训练一个word2vec模型并使用说明...
本篇主要介绍如何通过中文维基百科语料库来训练一个word2vec模型. 相关资料下载: 中文维基百科下载地址:https://dumps.wikimedia.org/zhwiki/ WikiExtr ...
- Windows下基于python3使用word2vec训练中文维基百科语料资料汇总
Windows下基于python3使用word2vec训练中文维基百科语料(一):https://www.cnblogs.com/gaofighting/p/9055674.html Windows下 ...
- 使用中文维基百科语料库训练一个word2vec模型
本篇文章主要介绍如何通过中文维基百科语料库来训练一个word2vec模型. 相关资料下载: 中文维基百科下载地址:https://dumps.wikimedia.org/zhwiki/20180720 ...
- 使用中文维基百科语料库训练一个word2vec模型 12.1
转自:https://blog.csdn.net/sinat_29957455/article/details/81432846 本篇文章主要介绍如何通过中文维基百科语料库来训练一个word2vec模 ...
最新文章
- centos7执行sh文件_一文看懂centos7如何管理自定义脚本服务
- Python编程专属骚技巧10
- vue --- 获取子组件数据的一个应急方案$refs
- Java实现复数Complex的加减乘除运算、取模、求幅角角度
- 玩转MySQL之Linux下的简单操作(服务启动与关闭、启动与关闭、查看版本)
- 简单的线程同步问题:两个线程交替执行N次【Synchronized、Lock、ArrayBlockingQueue】...
- 浏览器 CSS Hack 收集
- centos7安装gitlab_Docker常用镜像安装:MySql Redis GitLab maven私服等
- arcgis for android 无法加载本地jpg影像解决办法
- 深度学习---循环神经网络RNN详解(LSTM)
- 阿里巴巴2020首发136道Java高级岗面试题(含答案)
- excel自动填充下方相同数据
- Redis更新数据的时候如何不重置过期时间
- hikaricp使用
- 2021-6-25 组态王与modbus rtu从机STM32精英开发板通信
- Rhythmbox 下中文的音乐文件显示成乱码解决办法
- 让Mac文本编辑器成为HTML编辑器
- JAVA 获取mac地址
- 教你前端如何用js写一个跑酷小游戏
- centos 之网络配置