很久很久以前就说要写博客了,却一直拖着没有动笔,结果一拖就是好几年...囧...
不过现在终于决定要开始动手写了!
然鹅...我相信光这篇文章就会前前后后断断续续写好久_ ......
为什么写博客
为什么现在下决心要开始好好写博客了呢?主要是随着项目和接触到的技术越来越多,越来越能体会作为一名程序员及时做笔记和定期写博客的重要性。写博客一来可以做定期的总结和归纳,二来可以记录项目和技术以便日后复习和查询,就如同为自己的知识和曾经的学习建立索引。
当然也可以自己写私人的笔记,但是公开的博客有时候对自我更有监督作用,通过交流和讨论也能更好的完善一些不足之处,写博客就如同将自己的知识和思路开源嘛,程序猿要懂得拥抱开源啊!
另一方面,自己现在是越来越不喜欢微信、QQ、微博之类的社交软件了,很多想法和思考越来越不愿意记录在朋友圈里,所以想通过博客来记录很多诸如生活、工作等方面的感想,这可能是由于写博客会更加严谨和深入一些,不至于太过于娱乐化。
这篇算是我的第一篇博客,同时也是 Answer 系列的第一篇文章,接下来的几篇文章将对 Answer 系统进行完整的原理和技术的介绍。
Answer 项目背景
Answer 系统是我本科阶段的毕业设计,当时的毕设名称为《基于领域实体的语义搜索引擎设计与实现》
,当时开题时起名起的不是很准确,更准确的应该叫《基于领域本体的语义搜索引擎设计与实现》
。
当然接下来的几篇系列文章不会像论文那样“难以阅读”,因为我写这系列文章的初衷就是通俗易懂的介绍这个系统,所以文章也不会纠结于系统的每个细节,而是抽出其中最为重要和核心的部分做介绍,而且会尽量做到言简意赅,让大家有一个初步认识,而如果有人想做进一步的了解,可以阅读我发布在 github 上的项目源码(见文末)。
另外当前这个版本的系统与其说是一款搜索引擎,不如说是一款自然语言问答系统,之前的版本有全文搜索和知识问答两部分。
其中全文搜索部分调用了必应的搜索 API,但是现在必应的那个 API 失效了,系统目前只有知识问答这一部分。当然如果将知识问答这一部分内容整合到传统的全文搜索引擎中,就可以称之为一款所谓的语义搜索引擎了,现阶段主流搜索引擎也是在全文搜索引擎的基础上把语义问答的结果整合到最终结果上从而实现语义和知识搜索。
Answer 运行效果
当前系统运行的效果如下
-
美人鱼的导演是谁?
星爷是什么时候出生的?
- 周董妻子的丈夫的外祖母的女儿是谁?
Answer 当前版本的说明
因为一直没有时间进行重构,所以 Answer 当前的版本依然是我一年多以前写的毕设版本,基本没有什么变化。
实际来说,当前版本只能算是“校园水平”的系统 Demo,当前架构也只适用于少数据量,主要用来演示和可行性探索,另外其中应该还会有不少 bug(阅读源码请原谅那些当时写的很粗糙的代码)。
但是从个人的角度来讲,这是自己第一个需要查几十篇论文以及其他各种资料并设计实现的系统。这个过程体会到了很多研发的乐趣,当时做这个系统时,查看了很多相关资料,了解了很多关于知识表达和语义分析的很有趣的理论研究,在那一段时间自己也完全沉浸在这个项目中,在学校或公司实习上下班都在不停思考这些问题,并且经常会有一些异想天开的想法。从中体会到了很多搞科研的乐趣。
同时这个系统的开发过程也是一次高效率的学习过程,自己从对很多相关技术不甚了解到查阅各种资料探索不同技术实现方案再到设计架构和最终实现,在几个月的时间内学到了不少东西,并且完成了系统的 Demo,收获和成长还是相当大的,现在读研期间以及以后走上工作岗位,估计就比较难有这样既有强烈研发兴趣又能高效率自我成长的开发经历了。
Answer 重构
最后,我也会找时间对这个系统进行一次重构,以实现大数据量的搜索和问答。哪怕做不到对任意非结构化文本的知识库自动构建和语义知识搜索,至少也应该要实现对百度百科或维基百科这种半结构化数据的语义知识搜索。
下一篇
IT 相关技术的学习很重要的一点就是先知整体再钻细节(其他领域我觉得也应该是这样),因为知识之间是相互关联的,并不存在一个绝对的线性学习路径,知识更像是一张图而不是一条线。
比如阅读一本书,在理解当前章节中的知识时,很多时候不仅仅和之前的章节知识有关,还和之后的章节知识有关,甚至还和其他书有关,遇到不理解的细节很正常,应该大胆往后看,建立具有广度的知识体系和了解整体的原理后再回头看,很多细节难题就迎刃而解。
所以在讲解系统的细节之前,下一篇会先对 Answer 系统的整体架构、所用技术、基本原理做一个基本介绍,这样对系统就有了一个大体认识,然后再钻入细节就会容易的多。
项目源码
汪
汪.