word2vec
word2vec的使用和学习…
word2vec使用
先跑起来,跑出一个结果,然后再详细了解。
word2vec有多个版本,我是用NLPchina的这个版本
代码下载
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函数为:
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方法
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。
训练之后,下一步的目标就是进行得到词向量之后计算句向量了,这就是后文的目标了。
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("经济"));
}
}
References
[1] [NLP]训练Word2vec的JAVA版本
[2] word2vec
[3] 用word2vec分析中文维基语料库
[4] 中英文维基百科语料上的word2vec实验
[5] word2vec 中的数学原理详解(一)目录和前言
[6] word2vec 中的数学原理详解(二)预备知识
[7] word2vec 中的数学原理详解(三)背景知识
[8] word2vec 中的数学原理详解(四)基于 Hierarchical Softmax 的模型
[9] word2vec 中的数学原理详解(五)基于 Negative Sampling 的模型
[10] word2vec 中的数学原理详解(六)若干源码细节
[11] word2vec源码详细赏析(一)
[12] 在线word2vec网站