前两天教研室老师给我布置了一个任务,试跑一下word2vec,作为一个小白我通过几天的不断尝试和摸索,算是成功的跑出来了。
先来介绍一下,word2vec是谷歌在2013年开源的一个工具,核心思想是将词表征映射为对应的实数向量。项目链接https://code.google.com/archive/p/word2vec
快速入门
1.我先从谷歌官网通过export to github下载了项目源码;
2.运行make编译word2vec工具,由于我是小白一枚,并不知道make这个工具,一开始想直接运行makefile结果当然失败,折腾了一会,谷歌一下才发现正确的打开方式。在这其中还遇到了一个小问题,编译的过程中报错,提示找不到<malloc.h>这个头文件,在网上查找之后,在项目的git下的讨论中找到了问题的解决方法,只要<malloc.h>换成<sys/malloc.h>就可以了。
3.编译完成后就可以运行脚本:./demo-word.sh这个脚本主要是从http://mattmahoney.net/dc/text8.zip下载了一个文件text8(为了方便我先下载好放在目录中)然后使用text8进行训练,最后执行训练生成的vectors.bin文件。另外一个脚本./demo-phrases.sh则是下载另一个英文语料包,对短语进行训练。
中文语库尝试
试完了英文的当然要来试试中文的,中文的比英文的也要复杂许多,主要是还要进行分词处理。在尝试过程中我把维基的中文语料库和搜狗的语料库都下载下来了,在分词工具的选择上也尝试了两种ansj-seg和结巴分词。由于ansj-seg要用到eclipse,而对于eclipse的使用并不太熟悉,于是放弃了转而使用结巴分词。
在语料库方面,在电脑跑了4个多G的搜狗预料文件无果后转而下了一个几百兆的中文语料库,SogouR.txt,而且里面的词几乎都是分好的,只是两两用“-”连在一起,只需要把“-”替换成空格就可以用于训练了。于是利用命令
nohup ./word2vec -train SogouR.txt -output vectors-ch.bin -cbow 0 -size 200 -window 5 -negative 0 -hs 1 -sample 1e-3 -threads 12 -binary 1 &
就能够进行中文训练,并生成vectors-ch.bin文件
./distance vectors-ch.bin
运行文件可得
网友评论