word2vec

word2vec的使用和学习…

word2vec使用

先跑起来,跑出一个结果,然后再详细了解。
word2vec有多个版本,我是用NLPchina的这个版本

代码下载

1
2
git clone https://github.com/NLPchina/Word2VEC_java.git
cd Word2VEC_java

准备训练方法需要的语料

在Word2VEC_java目录下新建library目录,然后下载语料到这个路径下。
语料要求是分完词的文件,一行是分完词的一句话或者一篇文章。行数不限。

训练模型

修改Word2VEC_java/src/main/java/com/ansj/vec/Learn.java文件中的main函数为:

1
2
3
4
5
Learn learn = new Learn();
long start = System.currentTimeMillis();
learn.learnFile(new File("library/corpus.txt")); // 语料的路径
System.out.println("use time " + (System.currentTimeMillis() - start));
learn.saveModel(new File("library/javaVector.model")); // 模型的路径

执行main方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
alpha:0.025	Progress: 0%
alpha:0.02498111730866601 Progress: 0%
alpha:0.024964508501374084 Progress: 0%
alpha:0.02494698416965384 Progress: 0%
alpha:0.024929642279395765 Progress: 0%
alpha:0.024912590636918405 Progress: 0%

...

alpha:1.4140374308845295E-4 Progress: 99%
alpha:1.245129808095463E-4 Progress: 99%
alpha:1.043813947391059E-4 Progress: 99%
alpha:8.721199459071072E-5 Progress: 99%
alpha:6.699748058291988E-5 Progress: 99%
alpha:4.9765055202141695E-5 Progress: 99%
alpha:3.306005150289226E-5 Progress: 99%
Vocab size: 348846
Words in train file: 15073327
sucess train over!
use time 2519393

以上就完成了本文的目标,生成的模型文件路径为:library/javaVector.model。
训练之后,下一步的目标就是进行得到词向量之后计算句向量了,这就是后文的目标了。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24

import java.io.IOException;

import com.ansj.vec.Word2VEC;

public class Test {
public static void main(String[] args) throws IOException {
Word2VEC w1 = new Word2VEC() ;
//w1.loadGoogleModel("C:/WorkSpaces/NLP/Word2VEC_java/library/javaVector.model") ;
w1.loadJavaModel("C:/WorkSpaces/NLP/Word2VEC_java/library/javaVector.model");
System.out.println(w1.distance("军事"));
}
}


运行结果(结果是一行,因为展示原因,我放到多行):
[军队 0.62896645, 战争 0.5970405, 转兵 0.57379395, 部队 0.5631516, 79天 0.5608308,
轴心国 0.5573783, 畴型 0.5520164, 反革命战争 0.54803735, 武力 0.5451811, 李德作主 0.5450375,
clausewity 0.5428826, 十有八九学校 0.53841996, 颠复 0.53727686, 克劳塞维茨 0.5356221,
核武器 0.5323216, 时分时合 0.53146726, 武器 0.53097516, 费一枪 0.5285448, 678号 0.5270526,
核武库 0.52657473, 鲁登道夫 0.5246394, 近卫军 0.5244502, 后延 0.5233266, 武装 0.5232187,
博古作主 0.52262974, 叛匪 0.5221401, 反苏 0.522086, 英法 0.5194732, 武一文 0.518501,
政变 0.5179417, 金门岛 0.51790655, 军事化 0.5175235, 非党化 0.5155129, 和谈 0.51519865,
陆基洲际战略 0.5141574, 武装力量 0.5139615, 人民解放军 0.5128906, 宣传战 0.5125072, 明春可 0.5116397]

References

[1] http://blog.csdn.net/android_ruben/article/details/65935621
[2] https://code.google.com/archive/p/word2vec/
[3] https://my.oschina.net/magicly007/blog/851583  用word2vec分析中文维基语料库
[4] http://www.52nlp.cn/中英文维基百科语料上的word2vec实验
[5] http://blog.csdn.net/itplus/article/details/37969519  word2vec 中的数学原理详解(一)目录和前言
[6] http://blog.csdn.net/itplus/article/details/37969635  word2vec 中的数学原理详解(二)预备知识
[7] http://blog.csdn.net/itplus/article/details/37969817  word2vec 中的数学原理详解(三)背景知识
[8] http://blog.csdn.net/itplus/article/details/37969979  word2vec 中的数学原理详解(四)基于 Hierarchical Softmax 的模型
[9] http://blog.csdn.net/itplus/article/details/37998797  word2vec 中的数学原理详解(五)基于 Negative Sampling 的模型
[10] http://blog.csdn.net/itplus/article/details/37999613  word2vec 中的数学原理详解(六)若干源码细节
[11] http://blog.csdn.net/github_31448565/article/details/48598611  word2vec源码详细赏析(一)
[12] http://cikuapi.com/index.php?content=%E6%90%9C%E7%8B%90&bs=  在线word2vec网站