word2Vec
来源:互联网 发布:c语言 最长单词 编辑:程序博客网 时间:2024/06/17 02:29
Word2Vec,以及对应的Python版本 gensim word2vec ,就有心在一个更大规模的语料上测试一下,自然而然维基百科的语料与SogouCA中文语料库就进入了视线。以下将重点讲解如何实现过程。
1.语料库的获取
这里主要包括了三个语料库,一个英文,两个中文语料库。
(1)英文语料库
维基百科英文语料库
下载的是xml压缩后的最新数据,大概11G左右,是个不错的语料库呦!
(2)中文语料库
维基百科中文语料库
中文维基百科的数据比较小,整个xml的压缩文件大约才1G,相对英文数据小了很多。
SogouCA全网新闻数据
压缩1.2G左右。
2.英文实验
处理包括两个阶段,首先将xml的wiki数据转换为text格式,通过下面这个脚本(process_wiki.py)实现:
- 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
- 35
- 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
- 35
在控制台执行命令:
python process_wiki.py enwiki-latest-pages-articles.xml.bz2 wiki.en.text
执行过程比较慢,大概要好几个小时。
训练阶段:
有以下脚本:
train_word2vec_model.py
- 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
- 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
执行命令:执行 “python train_word2vec_model.py wiki.en.text wiki.en.text.model wiki.en.text.vector”,大概得好几十个小时,因计算机性能而异。我们得到了一个gensim中默认格式的word2vec model和一个原始c版本word2vec的vector格式的模型: wiki.en.text.vector
以下,调试结果:
- 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
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 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
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
3.中文数据
执行相同命令解压:python process_wiki.py enwiki-latest-pages-articles.xml.bz2 wiki.en.text
然后最痛苦的事情来了,如何进行繁简转换?(因为除了加杂一些英文词汇外,还有很多繁体字混迹其中)
在网上下载开源项目opencc(opencc-0.4.3.tar.gz即可,太高版本的无法运行。),解压,进入到目录下,进入dos界面。执行命令:
opencc -i wiki.zh.text -o wiki.zh.text.jian -c zht2zhs.ini
(注:不清楚的话,可以在评论区发言,也可通过邮箱:m18852867035@163.com询问)
然后进行分词处理,先下载MeCab(日文分词系统),然后下载mecab-chinesedic-binary,放在MeCab bin目录下,cmd运行命令:mecab -d mecab-chinesedic-binary wakati wiki.zh.text.jian -o wiki.zh.text.jian.seg -b 10000000
详细详细可参考《用MeCab打造一套实用的中文分词系统》,也可在评论区和邮箱处询问。
接下来是utf-8转码,个人感觉在windows下作用不大,但也可试试,反正我是偏向于不用转。
iconv -c -t UTF-8 < wiki.zh.text.jian.seg > wiki.zh.text.jian.seg.utf-8(你还得下载 iconv包,还不如不转)
接下来到了训练阶段:
执行命令:
python train_word2vec_model.py wiki.zh.text.jian.seg(.utf-8) wiki.zh.text.model wiki.zh.text.vector
大概两小时左右。
测试命令同英文
如:`In [1]: import gensim
In [2]: model = gensim.models.Word2Vec.load(“wiki.zh.text.model”)
In [3]: model.most_similar(u”足球”)
Out[3]:
[(u’\u8054\u8d5b’, 0.6553816199302673),
(u’\u7532\u7ea7’, 0.6530429720878601),
(u’\u7bee\u7403’, 0.5967546701431274),
(u’\u4ff1\u4e50\u90e8’, 0.5872289538383484),
(u’\u4e59\u7ea7’, 0.5840631723403931),
(u’\u8db3\u7403\u961f’, 0.5560152530670166),
(u’\u4e9a\u8db3\u8054’, 0.5308005809783936),
(u’allsvenskan’, 0.5249762535095215),
(u’\u4ee3\u8868\u961f’, 0.5214947462081909),
(u’\u7532\u7ec4’, 0.5177896022796631)]
In [4]: result = model.most_similar(u”足球”)
In [5]: for e in result:
print e[0], e[1]
….:
联赛 0.65538161993
甲级 0.653042972088
篮球 0.596754670143
俱乐部 0.587228953838
乙级 0.58406317234
足球队 0.556015253067
亚足联 0.530800580978
allsvenskan 0.52497625351
代表队 0.521494746208
甲组 0.51778960228
In [6]: result = model.most_similar(u”男人”)
In [7]: for e in result:
print e[0], e[1]
….:
女人 0.77537125349
家伙 0.617369174957
妈妈 0.567102909088
漂亮 0.560832381248
잘했어 0.540875017643
谎言 0.538448691368
爸爸 0.53660941124
傻瓜 0.535608053207
예쁘다 0.535151124001
mc刘 0.529670000076
In [8]: result = model.most_similar(u”女人”)
In [9]: for e in result:
print e[0], e[1]
….:
男人 0.77537125349
我的某 0.589010596275
妈妈 0.576344847679
잘했어 0.562340974808
美丽 0.555426716805
爸爸 0.543958246708
新娘 0.543640494347
谎言 0.540272831917
妞儿 0.531066179276
老婆 0.528521537781
In [10]: result = model.most_similar(u”青蛙”)
In [11]: for e in result:
print e[0], e[1]
….:
老鼠 0.559612870216
乌龟 0.489831030369
蜥蜴 0.478990525007
猫 0.46728849411
鳄鱼 0.461885392666
蟾蜍 0.448014199734
猴子 0.436584025621
白雪公主 0.434905380011
蚯蚓 0.433413207531
螃蟹 0.4314712286
In [12]: result = model.most_similar(u”姨夫”)
In [13]: for e in result:
print e[0], e[1]
….:
堂伯 0.583935439587
祖父 0.574735701084
妃所生 0.569327116013
内弟 0.562012672424
早卒 0.558042645454
曕 0.553856015205
胤祯 0.553288519382
陈潜 0.550716996193
愔之 0.550510883331
叔父 0.550032019615
In [14]: result = model.most_similar(u”衣服”)
In [15]: for e in result:
print e[0], e[1]
….:
鞋子 0.686688780785
穿着 0.672499775887
衣物 0.67173999548
大衣 0.667605519295
裤子 0.662670075893
内裤 0.662210345268
裙子 0.659705817699
西装 0.648508131504
洋装 0.647238850594
围裙 0.642895817757
In [16]: result = model.most_similar(u”公安局”)
In [17]: for e in result:
print e[0], e[1]
….:
司法局 0.730189085007
公安厅 0.634275555611
公安 0.612798035145
房管局 0.597343325615
商业局 0.597183346748
军管会 0.59476184845
体育局 0.59283208847
财政局 0.588721752167
戒毒所 0.575558543205
新闻办 0.573395550251
In [18]: result = model.most_similar(u”铁道部”)
In [19]: for e in result:
print e[0], e[1]
….:
盛光祖 0.565509021282
交通部 0.548688530922
批复 0.546967327595
刘志军 0.541010737419
立项 0.517836689949
报送 0.510296344757
计委 0.508456230164
水利部 0.503531932831
国务院 0.503227233887
经贸委 0.50156635046
In [20]: result = model.most_similar(u”清华大学”)
In [21]: for e in result:
print e[0], e[1]
….:
北京大学 0.763922810555
化学系 0.724210739136
物理系 0.694550514221
数学系 0.684280991554
中山大学 0.677202701569
复旦 0.657914161682
师范大学 0.656435549259
哲学系 0.654701948166
生物系 0.654403865337
中文系 0.653147578239
In [22]: result = model.most_similar(u”卫视”)
In [23]: for e in result:
print e[0], e[1]
….:
湖南 0.676812887192
中文台 0.626506924629
収蔵 0.621356606483
黄金档 0.582251906395
cctv 0.536769032478
安徽 0.536752820015
非同凡响 0.534517168999
唱响 0.533438682556
最强音 0.532605051994
金鹰 0.531676828861
In [24]: result = model.most_similar(u”习近平”)
In [25]: for e in result:
print e[0], e[1]
….:
胡锦涛 0.809472680092
江泽民 0.754633367062
李克强 0.739740967751
贾庆林 0.737033963203
曾庆红 0.732847094536
吴邦国 0.726941585541
总书记 0.719057679176
李瑞环 0.716384887695
温家宝 0.711952567101
王岐山 0.703570842743
In [26]: result = model.most_similar(u”林丹”)
In [27]: for e in result:
print e[0], e[1]
….:
黄综翰 0.538035452366
蒋燕皎 0.52646958828
刘鑫 0.522252976894
韩晶娜 0.516120731831
王晓理 0.512289524078
王适 0.508560419083
杨影 0.508159279823
陈跃 0.507353425026
龚智超 0.503159761429
李敬元 0.50262516737
In [28]: result = model.most_similar(u”语言学”)
In [29]: for e in result:
print e[0], e[1]
….:
社会学 0.632598280907
人类学 0.623406708241
历史学 0.618442356586
比较文学 0.604823827744
心理学 0.600066184998
人文科学 0.577783346176
社会心理学 0.575571238995
政治学 0.574541330338
地理学 0.573896467686
哲学 0.573873817921
In [30]: result = model.most_similar(u”计算机”)
In [31]: for e in result:
print e[0], e[1]
….:
自动化 0.674171924591
应用 0.614087462425
自动化系 0.611132860184
材料科学 0.607891201973
集成电路 0.600370049477
技术 0.597518980503
电子学 0.591316461563
建模 0.577238917351
工程学 0.572855889797
微电子 0.570086717606
In [32]: model.similarity(u”计算机”, u”自动化”)
Out[32]: 0.67417196002404789
In [33]: model.similarity(u”女人”, u”男人”)
Out[33]: 0.77537125129824813
In [34]: model.doesnt_match(u”早餐 晚餐 午餐 中心”.split())
Out[34]: u’\u4e2d\u5fc3’
In [35]: print model.doesnt_match(u”早餐 晚餐 午餐 中心”.split())
中心`
SogouCA数据的测试:
解压后:合并各个.txt:
copy *.txt SogouCA.txt
接下来,比较蛋疼,在Linux下运行了一行命令(windows不知道如何弄。)
cat SogouCA.txt | iconv -f gbk -t utf-8 -c | grep “” > corpus.txt
可参考利用中文数据跑Google开源项目word2vec
接下来,繁简转换,分词等操作同上。
测试也同上,只是换了模型而已。
- word2vec
- word2vec
- word2vec
- Word2Vec
- word2vec
- Word2Vec
- Word2Vec
- word2vec
- word2vec
- word2vec
- word2vec
- word2vec
- word2vec
- word2vec
- word2vec
- Word2Vec
- word2vec
- Word2Vec
- Python标准模块——argparse
- 移动前端UI框架使用
- C#中StringBuilder类的使用总结
- hdu 1009 FatMouse' Trade
- MyBatis取得新插入数据的ID
- word2Vec
- Maven初识(四)——运行第一个Servlet,依赖范围讲解
- 解决:在js中拼接html中,调用方法只能传递数字,不能传递字母或者中文
- 每日一题 No.50 任意二点间的最短路问题(Floyd-Warshall算法)
- 蓝桥格子刷油漆
- fopen、freopen、fdopen打开流
- 多源多目标统计信息融合-第三章 通用的数据建模
- 放大器:A类、B类、AB类、D类、G类、H类
- 会话控制系统session和Cookie