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