今天下午师兄做报告,讲了知识(knowledge),怎么用NLP帮助构建领域知识。
一般解决问题是都有两种思路:知识的和数据驱动的。 一般的看法是,知识就是规则,通过专家建立起复杂的规则系统,然后解决问题就是根据规则进行判定。这其实就是一个确定性的模型。而数据驱动则是根据数据学习出规则来。学习出来的规则可能是显式的,比如决策树学习出来就是显式的规则(如果属性1=xxx and 属性2 =yyy 那么zzz),也可能是隐式的规则,比如svm分类器学出来的参数向量W。
我觉得不管是知识,还是学习的方法,其来源都是数据。知识是人通过大量数据总结出来的规律,总结的方法也是统计的,而学习不过是把人的工作也做了而已。人在学习过程中会阅读前人的书(知识),可能把它作为一个先验,然后根据自己的直接经验,求出后验概率。所以我觉得贝叶斯统计还是比较合理的。
师兄具体做的是从旅游景点的网页里提取一些知识,构建一个语义网,然后在之上做一些应用。
基本的常识库使用的是HowNet,去年董老师来我们实验室做过一个报告,推销他的HowNet。 然后对无结构的文本先做分词和NER,以及词性标注,然后做句法分析,最后做语义角色标注。利用标注扩充常识库。比如颐和园位于北京西郊这句话,能提取位于这个动词,以及颐和园和北京西郊的关系,然后根据HowNet中位于的定义,建立起颐和园这个实例的一个属性,它位于北京西郊。
介绍的主要是怎么构建语义网。推理没怎么讲。现在的主流做法还是一阶谓词逻辑。我觉得可能用概率推理比较好。因为世界上的事件都是不确定性的,而且概率推理包含确定性推理。
实验室和公司的一个区别是考不考虑时间代价。在现实的搜索引擎中,分词可能要求速度很快,准确率差一点无所谓。因为互联网上的数据太多了。据说google最早中文是不分词的,一个字就是一个词,后来好像是分出所有的二字。比如我喜欢她。分出我喜 喜欢 欢她。 百度也只是简单的最长匹配。 因为就算分错了也对检索影响不大,反正查询词也会同样的分词。关键是排序排好了就行了。
不过垂直搜索也许会是一个不错的应用点,一方面它的数据量相对较少,另一方面它要求更准确的元数据抽取,甚至要做一些推理。