Java版本word2vec跑中文数据使用心得

笔者目前在研究中文情感分析,其中考虑到使用word2vec来对词进行量化,从而可以达到计算词相似度或者之后拓展其他用法的目的。由于项目是Java版的,所以研究的是java版本的word2vec在此写下心得交流学习。

首先提供工具下载链接,分别有:

Java版word2vec下载地址

Ansj分词jar包下载(这里用的是 ansj_seg-5.0.1-all-in-one.jar 

搜狗2012全网新闻数据    

分词部分用的是Ansj的ToAnalysis.parse(string)方法,经过测试比较Ansj的几种方法中ToAnalysis方法结果还是比较好一点的。将新闻数据进行分词并且根据Ansj分词得到的词性进行判断,只取非人名的名词、动词、形容词、副词。最后得到的分词结果如下所示:

Java版本word2vec跑中文数据使用心得_第1张图片

之后再下载的Word2Vec中进行词向量的计算,在Learn.java的主函数里面更改文件路径后即可进行计算得到计算后的文件Vector.bin,这里要注意的是在保留所有分词的情况下运行这个文件电脑跑了7个小时才跑完,而根据词性筛选后运行时间只有2小时。之后就可以根据得到的bin文件进行计算。

如果要用到词相似度计算的话Word2Vec里面是没有这个方法的,可以在Word2Vec中加上如下的方法来进行计算词与词之间的相似度。源码自带的distance方法只是求出一个词与其他部分词的相似度。

	public double distanceWith2Words(String word1 , String word2){
		float[] center1 = wordMap.get(word1);
		float[] center2 = wordMap.get(word2);
		double dics = 0;
		for (int i = 0; i < center1.length; i++) {
			dics += center1[i] * center2[i];
		}
		return dics;
	}

并且这里还有个地方要注意的是关于bin文件的加载方法,如果你是用Java计算出来的bin文件应当使用loadJavaModel(String path)方法加载,而使用的Google原开源项目跑出来的bin文件才是用loadGoogleModel(String path)函数,否则会报错。

同时这里还可以使用WordKmeans里的方法对得到的词进行聚类,设置好你想要分的类目数运行即可得到词的聚类,聚类结果如下所示:

Java版本word2vec跑中文数据使用心得_第2张图片

最后欢迎有研究情感分析的小伙伴一起探讨好的方法~


你可能感兴趣的:(Word2Vec,词相似度)