Author Archive for 写长城的诗

基于深度学习的中文分词尝试

最近折腾deeplearning和NLP比较多,其实就是在看Stanford的cs224d课程啦。抽空尝试了一下使用词向量和神经网络做中文分词。

使用的数据是参考资料中的中文分词资源,即Bakeoff中微软研究院的中文语料库,它的训练文本带有每个字的标注(BEMS),同时带有测试文本和测试脚本。此外使用了补充的语料库,即sogou新闻语料库,不带字标注,但可用来学习字向量。

使用的工具是python中的gensim库和keras库,gensim可用于学习词向量,keras是基于theano的深度学习库。在本例中只使用了普通的MLP方法。

整体工作的步骤如下:
– 步骤1:使用sogou的语料库建立初始的字向量,向量维度为100,迭代50次。
– 步骤2:读入有标注的训练语料库,处理成keras需要的数据格式。
– 步骤3:根据训练数据建模,使用左右各3个字做为上下文,7*100个神经元为输入层,隐藏层为100,输出层为4,神经网络结构为[700->100->4],总共进行了约50次迭代。
– 步骤4:读入无标注的测试语料库,用训练得到的神经网络进行分词标注
– 步骤5:使用自动脚本检查最终的效果

最终测试脚本输出的summary如下,F值为0.913。
=== SUMMARY:
=== TOTAL INSERTIONS: 2872
=== TOTAL DELETIONS: 2896
=== TOTAL SUBSTITUTIONS: 6444
=== TOTAL NCHANGE: 12212
=== TOTAL TRUE WORD COUNT: 106873
=== TOTAL TEST WORD COUNT: 106849
=== TOTAL TRUE WORDS RECALL: 0.913
=== TOTAL TEST WORDS PRECISION: 0.913
=== F MEASURE: 0.913
=== OOV Rate: 0.026
=== OOV Recall Rate: 0.673
=== IV Recall Rate: 0.919

具体代码可以参见github

后续折腾畅想:
– 本例中带标注的语料库相当大,可以直接在这个上面先训练字向量试试。
– 有空时还可以测试下jieba分词的效果评估。
– 用RNN等其它的方法试试效果。

参考资料:
[中文分词资源]
[中文分词标注法]
[word2vec原理]
[基于word2vec的中文分词]

用代码来理解boosting方法

提升方法是集成学习中预测能力最强的一种方法。在R和Python中都有相应的扩展库和丰富的函数。不过对于初学者来讲,理解这种方法不是很容易。本文基于R的决策树包实现两种基本的提升树,即回归提升树和分类提升树。有助于理解提升方法的原理,以及各项参数的作用。公式推导可以见这篇文章

用非负矩阵分解对文本词项矩阵降维

在前年的一个贴子中,谈到了使用奇异值分解来对一个文本词项矩阵进行降维。本文是使用同样的数据,但是使用不同的工具来处理,也就是非负矩阵分解。nmf的好处在于比svd更容易解释,而且自带正则功能。

中国政治坐标系数据的一点分析

清明节有点空闲,凑巧又看到一份很有趣的数据,下文是对这份数据的一点点分析结果。

1、数据整理
整体数据并不大,读到R里面首先做了点处理。
– 将选项(“强烈同意”,”同意”,”反对”,”强烈反对”) 映射为分值(2,1,-1,-2)
– 对出生年份进行转换,计算出在2015年的年龄并分为10个年龄组(0,18,22,25,30,35,40,50,60,70,120)
– 怀疑70岁以上的人可能是乱写的,删除之。
– 将其它字符型也转为数字编号
– 将18岁以下而填写过高学历和过高收入的数据删除。
– 删除有缺失的数据。

2、有趣的发现
这个数据可以做的分析点有很多,我只做了其中一小部分,观察各种题目的相关性如何。因为已经是离散数据了,所以使用了标准化后的互信息来计算变量之间的相关性。这个数字应该是在0-1之间,发现大部分的回答相关性并不强,多在0.1以下。所以下面所谓相关的回答只是矮子里拔将军。

– 在50个问题中,哪两个问题的回答之间最相关?
发现第3题和第6题的回答相关性最高(0.13)。
[1] “发生重大社会安全事件时.即使认为信息公开会导致骚乱的风险.政府仍应该开放信息传播.”
[2] “由高校自主考试招生比全国统一考试招生更好.”

– 哪个问题和学历的相关性最高?
第41题相关性较高,得到相关性为0.009
[1] “两个成年人之间自愿的性行为是其自由.无论其婚姻关系为何.”

– 哪个问题和年龄的相关性最高?
第35题相关性较高,为0.01。而且这个题目和收入的相关性也是最高的。
[1] “那些关系到国家安全.以及其他重要国计民生的领域.必须全部由国有企业掌控.”

– 哪个问题和性别的相关性最高?
第30题相关性较高,为0.077。让人比较惊奇的是,女性回答不给予补贴的比例比男性高。
[1] “改善低收入者生活的首要手段是国家给予财政补贴和扶持.”

– 哪些问题和收入有相关性?
这次使用了GBM模型,计算了问题回答对收入的重要性。发现如下三个问题是最重要的。(除了年龄、学历、性别因素之外)
[1] “条件允许的话应该武力统一台湾.” (负相关)
[2] “两个成年人之间自愿的性行为是其自由.无论其婚姻关系为何.”(正相关)
[3] “国家领导人及开国领袖的形象可以作为文艺作品的丑化对象.” (正相关)

3、其它
最后还做了一个总体的分布图。根据出题者的思路,1-20题为政治方面,21-40题为经济方面,41-50题为文化方面,可以计算每个人在这三个方面的平均得分。我尝试将这三个维度进行散点图绘制。基本上是一个略有点扁的圆形。大部分人在中间,少数人在边缘。

当然后续有兴趣的同学也可以继续搞点聚类之类的事。或者是按照不同属性(收入、时间)来看看圆形的变化。参考代码在此

这份数据除了能了解国人整体的政治观点之外,还有两个奇特的用法。一个是用坐标距离来大致判断两个人是否可以做朋友。还可以用于大致判断某个人未来的收入。所以女性同胞们,千万不要去找那些要武力统一台湾的当自己男朋友。

树莓派折腾第一季:建立私人NAS

1、实验条件:

– 树莓派B+
– micro SD卡
– 读卡器
– 无线网卡
– 5V2A电源
– 移动硬盘
– USB hub
– HDMI转VGA
– 显示器
– 键盘
– 鼠标
– Mac book air

2、实验步骤:

– 烧录系统到SD上。
参考官网步骤,但注意读卡器有时会出问题,选择高质量的设备。
– 启动设置Raspbian系统(raspi-config)
设置各种参数,例如ssh enable之类的,方面后面远程登陆。
注意:把locale设置好,否则后面你还得用dpkg-reconfigure locales
– 配置以修正显示的问题
参考地址:http://www.chengxuyuans.com/Windows/61812.html
注意:多次尝试以适合自己的显示器
– 配置无线网卡
参考地址:http://rpi.linux48.com/rpi-wlan.html
http://blog.appdevp.com/archives/188
注意:要买正确的网卡,再设置一下静态网址。
– 进X看是否可以上网了,再试一下ssh, scp之类的。
– 安装samba
参考地址:http://xwlogic.github.io/2014/08/NAS/
注意:先要更新软件源;挂载移动硬盘的时候得有电;设置samba很多参数,得保证可写。
– 设置挂载方式
参考地址:http://blog.sciencenet.cn/blog-430991-692444.html
注意:如果移动硬盘的格式不是linux,而是exfat之类这种,分享出来的没有写权限,用chomd也不能修改,此时需要特别在fstab中设置挂载细节。
– 其它平台登陆服务器
这样就可以在mac book中的finder里登陆这个服务器 smb://192.168.1.10
也可以在安卓手机上使用软件来登陆这个服务器。安卓上好用的软件是ES文件浏览器
– 增加下载工具
  还需要在树莓派上安装一个下载工具,使之变成一个自动下载器。
  参考地址:http://www.linuxidc.com/Linux/2014-02/96269.htm
  注意: 安装aria2还是很方便的,配合百度网盘转aria2的chrom插件更是如虎添翼。

3、实验小结

– 一开始的设备一定要全,后面可以不需要键盘鼠标,只用ssh了。
– X窗口不是很顺滑,机器在终端玩比较好。
– Raspcherry pi cookbook这本书不错。
– 机器自带mathematica这种逆天神器,再配合linux/python。教小孩数学、计算机的确不错。