word2vec学习笔记2

1.前车之鉴

鉴于前面word2vec在大数据集上由于分词器、数字等噪音的干扰,使得训练出来的word2vec的结果不是很好。因此本节换用IKAnalyzer分词工具,另外调整word2vec的参数来实验。

2.几种分词工具简要介绍对比

fudanNLP:http://code.google.com/p/fudannlp/,将给定句子进行分词,然后切分成对应的分词结果,分词结果不是很好。

ICTCLAS:东西太过于冗余,使用手册不清晰,用户体验超差!弃之。

IKAnalyzer:http://code.google.com/p/ik-analyzer/,使用智能模式,可以过滤掉标点符号以及不在词典中的奇怪符号等,自定义词典以及停用词等,将给定句子进行分词,输出每一个分词结果。注意下载对应lucene版本,否则会有错。

下面进行简单调用fudanNLP以及IKAnalyzer,对比分词结果:

import java.io.IOException;
import java.io.StringReader;

import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.TokenStream;
import org.apache.lucene.analysis.tokenattributes.CharTermAttribute;
import org.wltea.analyzer.lucene.IKAnalyzer;

import edu.fudan.nlp.cn.tag.CWSTagger;

public class testIKAnalyzer {

	public void splitWord(String text, boolean isMaxWordLength) {  
        try {  
            // 创建分词对象  
            Analyzer analyzer = new IKAnalyzer(isMaxWordLength);  
            StringReader reader = new StringReader(text);  
            // 分词  
            TokenStream ts = analyzer.tokenStream("", reader);  
            CharTermAttribute term = ts.getAttribute(CharTermAttribute.class);  
            // 遍历分词数据  
            //System.out.print("IKAnalyzer把关键字拆分的结果是:");  
            while (ts.incrementToken()) {  
                System.out.print("" + term.toString() + " ");  
            }  
            reader.close();  
        } catch (IOException e) {  
            e.printStackTrace();  
        }  
        System.out.println();  
    }  
	
	public static void main(String[] args) throws Exception {
		//IKAnalyzer
		testIKAnalyzer t = new testIKAnalyzer();
		String s1 = "奇瑞汽车贵阳客车项目正式落户小孟工业园区。 本报讯 记者殷雷报道 昨天记者走访菊花村中药材市场发现,三七的市场价格多在600700元/公斤之间,而天麻、西洋参等则同比出现了小幅下跌,陈亭妃谢系:谢长廷(现任)、管碧玲苏系:蔡宪浩(现任)";
		String s2 = "K739次  Twitter微博  微博 QQ 506693套	 杰西卡-阿尔芭杰西卡-阿尔芭搞怪合影当地时间2012年7月18日,女星杰西卡-阿尔芭(Jessica Alba)在自己的个人推特上发布了一些   湖北日报讯 (记者姚启慧、通讯员李国柱、实习生朱玉玲)18日,一辆行驶在白沙洲大桥上的货车发生自燃,不但车上100余万元货物烧掉一半";
		String s3 = "中新网7月 1日 电 据 台湾 《 苹果 日报 》 报道 , 7月 15日 ,";
		t.splitWord(s1, true);
		t.splitWord(s2, true);
		t.splitWord(s3, true);
		//fudan NLP
		CWSTagger tag = new CWSTagger( "./models/seg.m" );
		String seg1 = tag.tag(s1);
		System.out.println(seg1);
		String seg2 = tag.tag(s2);
		System.out.println(seg2);
		String seg3 = tag.tag(s3);
		System.out.println(seg3);
	}
}

分词结果:

IKAnalyzer:

奇瑞 汽车 贵阳 客车 项目 正式 落户 小 孟 工业园区 本报讯 记者 殷 雷 报道 昨天 记者 走访 菊花 村中 药材 市场 发现 三七 市场价格 多在 600700元 公斤 之间 而 天麻 西洋参 等 则 同比 出现 小幅 下跌 陈 亭 妃 谢 系 谢长廷 现任 管 碧 玲 苏 系 蔡 宪 浩 现任 
K739 次 Twitter 微博 微博 QQ 506693套 杰西卡 阿 尔 芭 杰西卡 阿 尔 芭 搞怪 合影 当地时间 2012年 7月 18日 女星 杰西卡 阿 尔 芭 Jessica Alba 在 自己 个人 推 特 上 发布 一些 湖北日报 讯 记者 姚 启 慧 通讯员 李 国 柱 实习生 朱 玉 玲 18日 一辆 行驶 在 白沙洲 大 桥上 货车 发生 自燃 不但 车上 100 余 万元 货物 烧掉 一半 
中新网 7月 1日 台湾 苹果 日报 报道 7月 15日

fudanNLP:

奇瑞 汽车 贵阳 客车 项目 正式 落户 小孟 工业 园区 。  本报 讯 记者 殷雷 报道 昨天 记者 走访 菊花村 中 药材 市场 发现 , 三 七 的 市场 价格 多 在 600700元 / 公斤 之间 , 而 天麻 、 西洋 参等 则 同比 出现 了 小幅 下跌 , 陈 亭妃 谢 系 : 谢长廷 ( 现任 ) 、 管 碧玲  苏系 : 蔡宪浩 ( 现任 )
K739次  Twitter微 博  微博 QQ 506693套 	 杰西卡-阿尔芭杰西卡-阿尔芭 搞 怪合 影 当地 时间 2012年 7月 18日 , 女星 杰西卡-阿尔芭 ( Jessica Alba ) 在 自己 的 个人 推特 上 发布 了 一些   湖北 日报 讯 ( 记者 姚启慧 、 通讯员 李国柱 、 实习生 朱玉玲 ) 18日 , 一 辆 行驶 在 白沙洲 大桥 上 的 货车 发生 自燃 , 不但 车 上 100 余万 元 货物 烧 掉 一半
中新网 7月 1日 电 据 台湾 《 苹果 日 报 》 报道 , 7月 15日 ,

可以看到,IKAnalyzer智能模式分词效果更加好一些,更符合我们当前的任务,因此选择IKAnalyzer。


3.word2vec 训练参数

参考http://blog.csdn.net/zhoubl668/article/details/24314769

word2vec学习笔记2_第1张图片


4.word2vec在搜狗数据集上的结果

小数据集:34M

大数据集:1.5G

训练参数分别如下:

大数据集:


小数据集:


训练结果:

左边为大数据集,右边为小数据集:

大数据集非重复词数为:87445,总共出现220304814次。

小数据集分别为:7975, 4026106


调用distance对比:

输入南京:

word2vec学习笔记2_第2张图片

输入 子孙:

word2vec学习笔记2_第3张图片

输入 清华:

word2vec学习笔记2_第4张图片

输入 南京大学:

word2vec学习笔记2_第5张图片

输入 足球:

word2vec学习笔记2_第6张图片

输入 文学:

word2vec学习笔记2_第7张图片

输入 电影:

word2vec学习笔记2_第8张图片

输入 睡觉:

word2vec学习笔记2_第9张图片

输入 计算机:

word2vec学习笔记2_第10张图片

5.个人总结:

1)word2vec基于语料数据来将词汇转换为向量,即类似于无监督训练语言模型获得其向量表示,大数据集上的效果明显要好,词汇丰富,意义更加准确。

2)word2vec基于上下文(即分布式表示,基于假设:具有相同上下文环境,即相同分布的词之间相似),因此即用上下文来表示该词,存在一定的问题。极端情况下,例如有些词经常相互出现,如句子“睡觉前...洗澡...”,睡觉和洗澡经常一起出现,则结论是二者相似,甚至相似度为1,不够准确。

3)对大多数应用来说,word2vec应该足矣,且效果还不错。

4)word2vec等基于上下文环境来表示词,本质上是一种间接的表示,可以在一定程度上提供词之间相似度、相关性的度量。但是所属层次为词语级别,信息较为单一。

5)展望:未来更好的word -> vector应该致力于能够真正地表示词的意义,或许是更高层次的语义表示。就像存在于人类大脑的表示一样,对于任意两个词,我们既可以度量其之间的相似度、相关性,我们亦可以度量二者的不同之处,区别等。这样,一个词word将会有其更加丰富的意义或者表达,而不仅仅是表面的词语层次。试想,如果有一天真正实现了语义的表示,那么递归向上,词、句、段落、篇章等的表示都可以有其语义表示,人类将会更加易于接受。相应的的NLP领域的很多问题将会得到很好的解决。



你可能感兴趣的:(自然语言处理NLP,算法,Algorithms,open,projects)