20151203

今天闲扯一段吧,晚上请舍友吃了饭,中间喝了点酒,然后又滚回了实验室。开题要的材料准备的差不多了,可以还需要再修修补补,今天看到了(www.hankcs.com)[www.hankcs.com]觉得好惭愧。上外的一个女生,不是计算机学院,凭自己的兴趣爱好,搞自然语言处理。知道这个也是看到她公开的HanLP,java写的。效果没有细看,但确实是做了很多东西,中文分词、词性标注、命名实体识别、关键词抽取、自动摘要、短语提取、拼音转换、繁简转换还有依存句法分析。真的,看完好羞愧啊,我自己在做什么。身边能看到这样的人是幸福的,看到同龄人的天花板,看到比自己优秀的人,真正的去学习,可能才是最有意义的。想想之前想做Python的中文nlp的tool,没做;想做中文的pyaiml,没做。。呵呵。呵呵

呵呵

20151126

感觉是一直在挖坑,根本没有填坑。。今天来填一下上周的一些坑、、(但是上次的那个lstm和acl那篇paper并不能填。。。)

这段时间还在做leetcode的数组的题,上次提到的constant space,在这周同样遇到了,果然直接用的他的输入可以减少空间。
每天做几道编程题感觉还是不错的。另一方面也在思考,需要多总结才能摆脱单纯的做题。
今天可能要说的一点事动归,确实动归有专门的一类,但我发现一个问题是,在遇到多维度的情况,可以考虑一下动归的可能性。

今天在arxiv上看到Li Deng他们又占了一篇Stacked Attention Networks for Image Question Answering
感觉也是疯狂灌水。。一篇论文CNN + RNN + SAN(stacked attention network),这个任务是啥呢,就是给个图片,提个问题,做回答。
比如论文里的例子是,几条狗做做自行车的篮子里,问 what are sitting in the basket on a bicycle? 最后给出答案, dogs.
cnn用来抽图像里面的feature,cnn+lstm从question里面的feature。然后用san来做answer,前两个任务,大概是有概念的。
今天重点说一下san吧。attention network我需要再研究一下,大概作者做的事儿就是第一篇算出question对image 的feature的weight,
这时候更多的是在图片中出现的物品,然后在上一次的结果在attention。。反正我觉得说不通。。。

看论文果然是花时间。。

再说一个Python decorator吧。之前感觉这个很难理解,今天仔细看了一下,感觉这个还是很好理解的。直接干货:

1
2
3
4
5
6
7
8
9
10
11
12
def hello(fn):
def wrapper():
print "hello, %s" % fn.__name__
fn()
print "goodby, %s" % fn.__name__
return wrapper
@hello
def foo():
print "i am foo"
foo()

其中@hello就是Python的decorator了,下面这段就是修饰器的本质了:

1
2
3
4
5
6
7
@hello
def foo():
print "i am foo"
# -- >
foo = hello(foo)

也就是说刚才的源码可以看作:

1
2
3
4
5
6
7
8
9
10
def hello(fn):
def wrapper():
print "hello, %s" % fn.__name__
fn()
print "goodby, %s" % fn.__name__
return wrapper
foo = hello(foo)
foo()

这样的话输出结果也很好理解了,
hello, foo
i am foo
goodby, foo

对于多个decorator:

1
2
3
4
5
6
7
@decorator_one
@decorator_two
def func():
pass
func = decorator_one(decorator_two(func))

带参数的decorator:

1
2
3
4
5
@decorator(arg1, arg2)
def func():
pass
func = decorator(arg1, arg2)(func)

挖坑不断

20151120

昨天挖的坑,今天来填吧。

填之前我想先说一下leetcode吧,这周开始,我们宿舍的leetcode的活动是每天两道array的题目,感觉还是有难度的。
尤其是有些hard或者比较难的medium,但大家做的情况都还不错。周五了确实可以总结一下这几个题目。
对于已经排好序的数组,二分是优先考虑的方法,其复杂度也是nlog(n),对于无序的数组,可以考虑o(n)的复杂度
一次遍历或者有限次遍历。还有一个小的感受是,有一道题是要求constant space,开始想了一段时间,还是感觉常数空间解决不了。
后来茅塞顿开,其实是可以利用他的输入,他的输入是一个list,可以在list上做操作,完成常数空间要求。这种变通很好。

其他能想到的就没有了,开始填坑吧。上次说到了有软件重构
我仔细看了这篇博文,里面的东西并没有很复杂或者很多。软件重构就是保证外部行为的不变,对内部结构进行改变,易于理解。
软件重构使用一个行为或者动作。我觉得是可以在写到代码的时候来想想那些东西可以进行改变。不是写完再去重构,而是写了不需要重构。

  1. 违反基本的代码规范,包括命名格式,详细注释等
  2. 重复的代码,这个倒是可以在写代码的时候注意起来,当腻copy一段代码到另一个地方的时候,就应该想到,能不能用公共静态方法,能不能用重载等。。
  3. 冗长的子程序,在云知声的时候。任总就说过这个问题,一个函数实现功能不能太多,尽量不要超过一个屏幕。如果太长就需要进行拆分。
  4. 循环过长嵌套过多
  5. 面向对象的编程,包括使用接口的方式,控制成员变量的访问权限,在构造类的构造方法时,不要花费过多的成本。

我觉得这些点子不是高大上的说教而是在平时写代码的时候真的可以注意的地方。在这些地方花点功夫也是极有必要的。

第二个就要填第三届中文知识图谱研讨会

知道这个研讨会,是在13年的时候要在云知声真正参与做知识图谱的时候survey发现的。
当时还极其细致的survey了Google的Freebase,当时是要做视频或者娱乐领域的专业知识图谱,在这个基础上完成一个general的中文知识图谱,
想法很好,当时也确实调研了,在第一届大会里面看了各家的slide,说实话感觉当时大学、研究所里面的知识图谱,不仅没有商用而且不是很完善,当时感觉中文知识图谱正在做出来有用到的就是搜狗和百度,
算是当时中文搜索的技术最扎实的两家公司吧。

再看他们是如何做到的呢,我觉得freebase起到了关键的作用,freebase是根据wiki的半结构数据抽到的结构数据。百度有百科,同样也可以做这件事,
我的感觉是中文的freebase+专业领域结构化+百科的结构化得到了一个开放领域的知识图谱,我觉得前两者的贡献更大。百科的结构化和freebase有冲突,可以相互补充。而专业领域结构化是从豆瓣、时光网、娱乐网站等,
直接抽取结构化的数据,从多个源头抽取,交叉验证,可以得到准确率较高的结构数据。

去了亚院知道了satori,但同时一个新的问题又产生了,有个知识图谱怎么用,到底用在什么地方,之前还在知乎跟上一个要做知识图谱的是创业公司的CEO讨论过这个问题。
之所以有了这个困惑,是现在能看到的知识图谱真正用到产品的地方并不多,百度搜狗的那些噱头,在真正页面也并不多见。现在比较明确或者直观的应用是在搜素界面的相关人物的推荐,这个人的相关信息。再就是KBQA了。对,还有entity linking到底怎么用,我觉得以后还可以再讲。。(又挖坑了。。)


上面那些话是我没看第三届的slide一些牢骚,大概浏览完之后,有了一些新的感受,可能领域的知识图谱还是很有效的。
不管是创业公司在做金融、公司层面的还是浙大在做医疗还是财经方面的知识图谱,大家反而是都在做特定领域内的知识图谱,一方面是如果构建,另一个方面是如何应用。可以挖个小坑,找一两个例子仔细讲讲。

好了,再挖几个坑。。我就是这么爱挖坑。。。LSTM简介以及数学推导(FULL BPTT)
http://www.mitpressjournals.org/doi/pdf/10.1162/COLI_a_00239

20151119

上次就写了一下cnn在nlp中的应用,虽然写的不多,但我觉得还是可以学到很多东西,cnn多应用于图像,
但是放在nlp同样也是有用,也可以把道理说的清。

先mark几个东西吧,没细看但用的时候可以找到:

  • Python data visualization tools
    不过这个的东西,如果是写paper的话,用MATLAB来画图其实也已经够用了
  • The Best Machine Learning Libraries in Python
    恩,至于Python里面的ml的库,用的比较多的是scikit,其实想新出的tensorflow还有theano都是deep learning的好东西,
    先mark一下吧,如果用到可以来这儿看一下
  • Awesome-rnn mark一下这个page,之前就有看过,确实把rnn总结的很好,
    不仅仅有paper还是code还有一些task,恩,而且今天在页面上海注意到他们不仅仅有rnn还有deep-vision和random-forest,
    好多可以学习的知识。。。
  • ICLR(International Conference on Learning Representations)最近才举办的一个会,但大牛很多,会很不错,
    当然可以投这个会的也多是比较有学术追求的,毕竟要看ccf;ICLR要求论文都要挂到arXiv,可以mark一下,http://weibo.com/p/1001603910261550506362
  • ACL Anthology这个可以好好的mark一下,里面还有video。
  • Python进阶必读汇总

还想再仔细看一些东西,先挖个坑吧。。但愿明天可以过来填。。
大概会有软件的重构,第三届中文知识图谱研讨会

20151115

写日志的好处是可以拿日期做title,然后发现时间就这么一点一点的过去了,好多事儿都还没有做。想起来去年
张凯师兄说要回学校早做找工作的准备,没想到一晃我也到了这个时候,比较难过的是,我都不知道准备什么。
研究生果然是啥都没做就过去了。。。也许读个博士的好处是可以慢慢熬,也不用太着急

记得之前扫了一眼Understanding Convolutional Neural Networks for NLP
没认真看,最近有人在CSDN里写了译文(http://www.csdn.net/article/2015-11-11/2826192 ) 因为禁止转载,我就
不原文贴上来了,但是可以说一下自己的感受

CNN在图像领域的应用就不用说了,在nlp的领域,我之前只知道dongli师兄在acl15里的QA的那篇,之后也没太
关注过CNN在nlp的应用,而这篇就比较全面的讲述了cnn在NLP的应用,我觉得可以值得思考的点就是在NLP应用
一定是有word embedding或者是one-hot,必须是将一句话或者一个单元转换为矩阵,每一行是个vector。这是
第一点。第二点是在做卷积的时候,滤波器的宽度也就和输入矩阵的宽度相等 ,滑动窗口可以2~5,其实滑动窗口就有点像n-gram了。

我觉得下面这个图就很好。这是15年的一篇论文,来做文本分类,用到了CNN。其中有convoluttion和pool。我觉得看这个论文的另一个好处,
是对cnn也有了一个认识,比如为什么要做pool,句子的长度不同,作为卷积得到的向量长度不同,如何归一那就用pooling,而且pooling对每个滤波器的输出求最大值,
可以理解为保留了更多特征,很好。而且在文章中还提到CNN的一个好处,就是快,用GPU算起来要更快一些。

Zhang, Y., & Wallace, B. (2015). A Sensitivity Analysis of (and Practitioners’ Guide to) Convolutional Neural Networks for Sentence Classification.

就说这么多吧,明天开始要按照类别刷leetcode了,这个每天也可以写写。