2009年3月31日

机器学习小组第五次活动

征集主讲人
http://groups.google.com/group/hit-machine-learning-group/web/%E6%9C%BA%E5%99%A8%E5%AD%A6%E4%B9%A0%E5%B0%8F%E7%BB%84%E7%AC%AC%E4%BA%94%E6%AC%A1%E6%B4%BB%E5%8A%A8%E5%BE%81%E9%9B%86%E4%B8%BB%E8%AE%B2%E4%BA%BA?hl=zh-CN

报名
http://groups.google.com/group/hit-machine-learning-group/web/%E7%AC%AC%E4%BA%94%E6%AC%A1%E6%9C%BA%E5%99%A8%E5%AD%A6%E4%B9%A0%E5%B0%8F%E7%BB%84%E6%B4%BB%E5%8A%A8%E6%8A%A5%E5%90%8D?hl=zh-CN

通知
http://groups.google.com/group/hit-machine-learning-group/web/%E6%9C%BA%E5%99%A8%E5%AD%A6%E4%B9%A0%E5%B0%8F%E7%BB%84%E7%AC%AC%E4%BA%94%E6%AC%A1%E6%B4%BB%E5%8A%A8%E9%80%9A%E7%9F%A5?hl=zh-CN

--
╱◥██◣ ╭╭ ⌒╮ 让交流成为习惯!
︱田︱田田| ╰--------------------------------------------------------
Douban Reading Group: http://www.douban.com/group/95386/
HIT-Machine Learning QQ Group: 27980716
HIT-Machine Learning Maillist: http://groups.google.com/group/hit-machine-learning-group?hl=en
╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬

2009年3月22日

玩玩Ant

多次听到牛人们闲谈时说Ant如何如何好,自己就是没有什么感觉。用Eclipse不是一切都能搞定么?

今天,为了发布一个自己写的关于LanguageIdentification的小小开源软件包,不得不弄个build.xml在里面。因此自己开始好好学习Ant了。

本想到书店买书或者到图书馆借书,结果都未果。好在找到了这个网页:

我喜欢简单:ant - java 构建工具

然后开始理解,模仿,添加,最终解决了需要处理的问题。

还有一个难点没解决,那就是如果一个Jar含有多个可以执行的主类,在ant里面写执行语句时如何指定执行主类?这个问题最终采用添加windows的bat和linux的sh文件脚本来得以解决。呵呵,笨了一点,但是确实解决了问题。(感谢bluejade的提醒)

哈哈,点击一个build.xml相关的执行bat文件,一切都在掌握之中。全自动构建就是好啊!

2009年3月21日

诡异的Java HashMap的序列化Bug (ID 4756277)

今天写个小的文本处理程序,用到了一个临时类的序列化,在类中加入了一个私有变量后运行总会出现错误

加入的私有变量如下:
private ArrayList sortedEntriesByValue;

得到的运行结果是:
java.io.NotSerializableException: java.util.HashMap$Entry

真是百思不得其解。Google了半天,发现Tomcat里面有人提到这个问题,原因好像是Session类的什么地方需要修改。这个原因和我的问题真是风马牛不相及。

再仔细查找,最终发现,原来这是Java语言目前存在的一个Bug。原来HashMap对应衍生元素除了Key可以被序列化,其他的如keySet, EntrySet, Values都不能被序列化。当然,HashMap本身还是可以被序列化的。

最后我选择了新建一个ArrayList来将KeySet中的元素转换为String后存放起来,就可以实现我需要的序列化了。

呵呵,我该买彩票啊,随便玩玩居然玩到Java自带的Bug里面去了。这个Bug为什么会存在Java里面呢,而且这个Bug是2002就被发现了啊。Sigh~! Java也不是完美的啊!

详细的sun网站上登记的Bug信息如下:http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4756277


Bug ID:
4756277

Votes
7

Synopsis
(coll) HashMap's keySet(), entrySet() and values() are not serializable

Category
java:classes_util

Reported Against
1.3.1

Release Fixed

State
3-Accepted, bug

Priority:
4-Low

Related Bugs

Submit Date
01-OCT-2002

Description

FULL PRODUCT VERSION :
Occurs in both 1.3.0 and 1.3.1:

java version "1.3.0_02"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.3.0_02)
Java HotSpot(TM) Client VM (build 1.3.0_02, mixed mode)

java version "1.3.1"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.3.1-b24)
Java HotSpot(TM) Client VM (build 1.3.1-b24, mixed mode)

FULL OPERATING SYSTEM VERSION :
Microsoft Windows 2000 [Version 5.00.2195]
(Service Pack 2)

A DESCRIPTION OF THE PROBLEM :
The collections returned by calls to
java.util.HashMap#entrySet, #keySet and #values are not
Serializable which, although consistent with the
documentation, is confusing and counter-intuitive because
HashMap itself is Serializable.


STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
1. Create a HashMap.
2. Attempt to serialize the result of calling keySet(),
entrySet() or values() on that HashMap.


EXPECTED VERSUS ACTUAL BEHAVIOR :
I would (naively, optimistically :-) assume these
collections to be Serializable, since the object from which
they come is itself Serializable.

ERROR MESSAGES/STACK TRACES THAT OCCUR :
keySet():
Trying to serialize [two, one, three]...failed:
java.io.NotSerializableException: java.util.HashMap$1
at java.io.ObjectOutputStream.outputObject(ObjectOutputStream.java:1148)
at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:366)
at
test.MapCollectionsSerializeMain.trySerialize(MapCollectionsSerializeMain.java:15)
at
test.MapCollectionsSerializeMain.main(MapCollectionsSerializeMain.java:36)
entrySet():
Trying to serialize [two=two, one=one, three=three]...failed:
java.io.NotSerializableException: java.util.HashMap$3
at java.io.ObjectOutputStream.outputObject(ObjectOutputStream.java:1148)
at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:366)
at
test.MapCollectionsSerializeMain.trySerialize(MapCollectionsSerializeMain.java:15)
at
test.MapCollectionsSerializeMain.main(MapCollectionsSerializeMain.java:38)
values():
Trying to serialize [two, one, three]...failed:
java.io.NotSerializableException: java.util.HashMap$2
at java.io.ObjectOutputStream.outputObject(ObjectOutputStream.java:1148)
at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:366)
at
test.MapCollectionsSerializeMain.trySerialize(MapCollectionsSerializeMain.java:15)
at
test.MapCollectionsSerializeMain.main(MapCollectionsSerializeMain.java:40)

REPRODUCIBILITY :
This bug can be reproduced rarely.

---------- BEGIN SOURCE ----------
package test;

import java.io.*;
import java.util.*;

public class MapCollectionsSerializeMain
{

private static void trySerialize (Object o) {
try {
ObjectOutputStream stream
= new ObjectOutputStream(new ByteArrayOutputStream());
System.out.print("Trying to serialize " + o + "...");
stream.writeObject(o);
stream.flush();
System.out.println("done");
}
catch (Exception e) {
System.out.print("failed: ");
e.printStackTrace();
}
}

// ----------------------------------------------------------------------
// Entry point

public static void main (String[] args) {

Map map = new HashMap();
map.put("one", "one");
map.put("two", "two");
map.put("three", "three");

System.out.println("keySet():");
trySerialize(map.keySet());
System.out.println("entrySet():");
trySerialize(map.entrySet());
System.out.println("values():");
trySerialize(map.values());

}
}

---------- END SOURCE ----------

CUSTOMER WORKAROUND :
For the keySet() and valueSet() cases, one could create a
new HashSet from those sets, but that's inefficient and it
doesn't cover the values() case.

The right answer in the first place is presumably that any
Serializable object which contains a Set (or xxxxx abstract
type not documented as Serializable) must implement its own
readObject and writeObject methods which (de-)serialize the
set manually. Either that, or define the object to contain
a HashSet (or xxxxx type documented as Serializable).
(Review ID: 165184)
======================================================================

Work Around

N/A

Evaluation

N/A

NLP&IR研究在计算机产业链中的位置

突发奇想,标题所示的问题成为我思考的一个集中点。

上网找到了Goole中国研究员吴军的浪潮之巅系列中的第四章“计算机工业的生态链”。读完顿觉IT业是一个神秘的行业。

时常听到朋友们说现在的内存就像白菜,价格低得都不行了。现在的笔记本价格也是一跌再跌。这样一来,引发出来的对于NLP&IR等相关领域有什么影响呢?

个人感觉NLP&IR在整个IT产业里面扮演着越来越重要的角色。最抢眼的Google&Baidu等掌握数据就掌握一切的搜索公司的盈利模式,以及xx&xx(等这两个公司发达了再写明)等NLP&IR基础技术服务公司,都在不断的深化着NLP&IR技术。各种硬件的性价比的不断提升,对于NLP&IR里很多以前不能做的事情,现在都能尝试展开。但是这些公司真正的目的就是为了大力发展和强化NLP&IR技术么?我想本质上不是的。原因可能是技术的强化能够增强用户的粘滞力,从而在盈利模式的框架里面能够赚取更多的利益。对于公司而言,盈利是第一位的,也是永恒不变的,其他事宜都是围绕这个目标旋转的。

另外一种驱动NLP&IR前进的动力就是纯粹的研究。细想一下,NLP比IR年纪大很多,早先的想法是从人工智能的角度来推动NLP的研究,更多的是理想主义的力量。IR是新兴的行业,换句话说是更能带来巨大价值的方向,而且这种价值可以在短期之内见效。传统的NLP在遇到IR之前几乎快要不行了,IR的出现带来了需求,带来了数据,加上依赖数据的统计机器学习方法的大规模引入,从而带来了整个NLP行业的大规模发展。

但是NLP&IR研究在IT业中究竟能够多大分量呢。我个人感觉,只能占到很小很小的部分。可以说,那些大公司或者大的IT受益者在大口大口的吃肉的时候,搞NLP&IR研究的人可以跟着喝点肉汤。当然,这是在整个行业欣欣向荣的时候。一旦出现一些大的经济震荡或者危机,那么搞NLP&IR研究的人就只能喝稀粥了,而且粥越来越稀。

这个问题有点深刻,还得继续思考。

以上是胡思乱想的结果,纯属瞎猜乱蒙,可能词不达意,如有雷同纯属巧合。欢迎广大朋友拍砖表玉 :)

2009年3月15日

台球比赛,心理控制很重要

经历过真正的比赛才能算是体会其中的全部味道。

今天上午准时抵达紫丁香台球馆,参加了前几天报完名的第十五届紫丁香台球比赛。比赛最终有14人参加。我抽签到11。和我第一轮比赛的选手实力在我之上,他的平均实力和我的最佳状态持平。但是由于他开球时,我转移衣服去了,结果不知道还未分球,最终导致失去先机,先下一局。第二局没有放开,因为第一轮比赛是三局两胜。但是最终还是在对手失误的前提下,扳平为1:1。第三局时,对手发挥很好,面对强敌,我更加紧张,最终毫无悬念的输掉了第一轮。

刚结束时,组织者说还有一次机会,可以二次报名进入第一轮。

犹豫了一下,还是和俺mm一起留下了。这次和我比赛的是一个中年人。打了一会儿后我发现他出手时最后瞬间都不稳定。于是心里放松了一些。最终较为轻松的拿下第一局。第二局时也就是心里有点放松,最终比分成为1:1。第三局时,开始我打掉6个,对手还一个未进。原以为会较为顺利拿下第三局。没想到对手巧妙的利用剩下的很多球,防守很好。最后在都剩下一球的时候,我仔细打掉了最后一球。这时,面对黑8,我很轻松。击球位置和开球时的差不多。用力一击,黑8进了。我非常高兴,对手一下子泄气了。但这个时候,母球快乐的转了一圈最后蹦进了开球面的底袋。按照国标规则,我输掉了。一下子,我成了泄气的皮球。

哈哈,这个小小的比赛,真是瞬息万变啊。

体会到一点,心理控制很重要。一定要认真稳重的打好每一个球。

也感谢俺mm的全程陪伴和鼓励。比赛前随意练习时,mm打得也很好。可惜今天没有其他女生报名,最终mm未能参加比赛。

嗯,开心的周末!

2009年3月6日

Java编码

和自然语言处理打交道,必不可少的一环就是汉字编码问题。这不,今天又被折腾了一次。俺们的Mr. Hu说了,今年的目标之一是不折腾。所以得想个好招儿才行。

问 题是这样的,我在实验室已毕业的技术大牛Victor的指导下,准备采用Web Server的方式来整合我所带领的共指消解小组的各种特征抽取工作。各项工作起初都进展顺利,最后卡在了汉字编码上。由于建立的Web Server只接收UTF-8格式的URL,恰好俺对Java处理中文编码问题不是很熟悉,找了几种方案都感觉不是万全之计。最后采用了一种极其暴力的解 决方案。那就是将Eclipse的默认编码环境全部指定为UTF-8。

至此,我面前的一座大山被彻底摧垮,这种方式的空间里再现青山绿水的hexie :)

2009年3月4日

开始闭关两月

仔细算来,刚好花了整整两个月时间构思并完成了这个Proposal。今天又花了一整天制作了一个详细介绍的PPT。到刚才算是准备工作全部完工。现在的思路总算比当初想到这个想法时清晰了许许多多。经过这些准备工作,算是要进入一段忙碌的生活了。这个想法应该是我博士毕业前的最后一个较大的研究方案了。争取将自己多年来的经验积累都体现在上面。

方案中给了自己两个月的时间,又要闭关咯!

这两个月将充满坎坷与荆棘,好消息是又可以开始珍惜这充满激情的日子了 :)