题记
与自己的导师肖老师做维基百科也有一年多时间了,对维基百科的了解也多多少少积累了一定的内容,因此有点想记录下我用维基百科做了些什么。近期也准备在华科做计算机存储方向,因此可能做维基百科(或者更大一点方向NLP)要放一阵子了,再加之我在上半年帮老师招了一批学生继续研究维基百科,自己也基本上完成了交接工作,后面的发展就看学生自己的努力了。直接进入正题吧!
维基百科
维基百科作为一个开放的知识库,是一个人人可以编辑的百科全书,它受到许多自然语言处理方面的学者将其作为高质量的语料来源,中文维基百科的副题是“海纳百川,有容乃大”也表现出维基百科自由开发的原则和宗旨。
中文维基百科访问点击此!英文的点击此!(最近好像都被墙了,记得翻墙访问)
由于每个维基百科概念都包含有结构化和非结构化的信息资源,这为找出概念对之间的关系提供良好的参考。每个概念在维基百科上的页面(article)主要包含标题(title)、概要说明(summary)、正文(main body)和分类(category),其中在标题和正文部分的文本当中还包含有大量的超链接概念,这些超链接构成了维基百科庞大的链接网络,使得每个概念在维基百科当中并不是以孤立的形式存在,而每个概念在维基页面的底端的分类列出了该概念所属的类别,这些类别为用户找到相似概念提供了方便。
先决条件关系(Prerequisite Relationship)
先决条件关系简单一点就是可以类比于课程之间所具有的“先修关系”,例如,计算机专业的学生必须完成一系列的前导课程才能进入目标课程的学习,假设这些课程的名称与相应代号有如下表所示的关系。
课程之间的“先修关系”可以用一个有向图表示,如下图。
更正式的定义就看这篇论文当中讲的吧《Crowdsourced comprehension_Predicting prerequisite structure in wikipedia》,我的研究也是从这篇文章开始的。文章当中的这句话基本上就先决条件关系最直接的解释了:
“d->d’ corresponds to the assertion “understanding d’ is a prerequisite to understanding d”".当然这个指向与我们上文的先修关系可能是反的,后面大家稍微注意一下这个区别即可。
选择维基百科的理由
首先,维基百科的文档里,通常包含了大量的超链接,这些链接可能暗示着两个文档间存在先决关系。其次,维基百科的文档都具有标准化的格式,通过其提供的API,可以方便的对文档进行特征分析,同时活跃的社区也为我们提供了有利的帮助。最后,维基百科覆盖的领域较广,提取出概念的先决关系,构建领域知识网络,能够为学习对象排序、学习路径设计、课程计划的安排提供有效的支持。
后面我就简单介绍如何通过维基百科当中的关系找到概念之间的先决条件关系,原理其实都很简单,但是自己需要举一反三,通过数学定理转换成其余更加复杂的feature来挖掘更深层的关系。
基于链接关系
由于维基百科里面相关概念之间是通过超链接联系在一起,据此可以猜想这些引用关系可能暗含着两个概念的先决关系。这与大多数人在阅读某个概念的维基百科页面时候碰到用于解释该概念的其他概念非常类似,而这些概念大多在维基百科里面又以超链接的形式出现,因此有理由对每个概念包含的超链接进行考虑。
上面图就是展现的维基百科当中的超链接关系,就拿pet和cat、dog作为例子,你们基本上应该可以明白其中的道理。但是如何将这样的关系转化为数学公式,这个就要看你自己了,我这篇文章暂时不讲,以后有机会再写。
基于分类关系
每个维基百科的概念都对应有相应的标签,可以把这些标签看成一种层次关系,与计算机网络当中的网状型拓扑结构类似,只是在概念网络当中其内部也有结点,越往内层概念的层次也越低,如果一个概念的标签在整个网络的层次越低,这就代表这个概念就越具体越特殊。当往外层走的时就会遇到一个根节点(可以将其看成网络当中的终端设备),这个节点是最抽象也最基本的概念,这样的根节点不止有一个。这样的思想和理解事物是有着相似之处的,最开始都是理解比较抽象的事物,在大脑里面建立出该概念的大体轮廓,在建立好这样的模型后再去具体化和细节化。通过这样的层次关系本文得到如下猜想,如果前一个概念是比后一个概念更加抽象,那就说明前者是后者的先决条件。
大家看上面的图的时候我建议倒过来看,我这里因为已经做成这样了,倒过来不太方便。上面当中可以明显看到概念“深度学习”的层数明显要比概念“人工智能”要更深,因此更加抽象。
基于文本的特征
这个特征暂时不太好讲,因为所涉及的内容太多,包括LDA、wordVec等都可以拿来作为文本的处理工具和对象,不同工具得出的结论也不同,有的是基于主题的思想来解释,有的还是落实到链接关系层面,但是我推荐去理解LDA,这可能是占时可以较好解释基于文本的特征如何发现概念之间的先决条件关系。LDA可以看我之前写过的博文《LDA(Latent Dirichlet Allocation)的原理和代码实现》。将主题提取出来后我们通过计算主题之间的差异度来得到先决条件关系。
基于时间的特征
在维基百科当中还有一个比较重要的是概念的创建时间,换一句话来讲,它表达的含义是后创建的概念要用先创建的概念来解释。这也就意味着创建时间越早的概念它就越抽象和越基础。
以上就是目前通过维基百科挖掘概念之间的先决条件关系的初步研究,当然如何将这四个关系转换成数学公式还是需要一番功夫,我在后头有时间也会继续写一下过程。当前可用的数据集可以见之前的那篇文章所用的数据集。除此之外,维基百科还有许多有关特征可能对概念之间的先决条件关系的挖掘有所帮助,这里我也把API地址给出,有兴趣的可以查看(API)。
对于获取超链接信息或者分类信息,我也已经写好对应的代码可以直接进行访问,可以参考我的博文《通过Python获取维基百科中概念词条的维基信息》。通过举一反三的方式你也可以写出其他特征的获取代码。
后记
通过数学公式转换成一个个features后,你可以使用机器学习的方式来对概念对进行分类,你可以像论文中那样分为两类,我后面做的也有分为三类(A -> B, B -> A, A 与 B 无关),但是思想都是一样的。如果你的正确率和准确率可以达到90%左右,那说明基本上你的模型已经很好了,我当时做的时候只达到80%左右,感觉还欠一把火,可能是特征设计还有待完善,但是相关的论文已经在CCF系列会议发表出去了,也算是有了个结果。
最后总结一下,运用维基百科可以做很多自然语言处理方向,目前课题组里面老师分配的任务当中除了我这个方向之外,还有人用维基百科做大学排名等,原理也会用到我上文当中讲的那些,因此搞懂维基百科对做NLP方向是很有帮助的!
欢迎大家访问我的主页当中的其他博文,谢谢!
博文的其他说明
该文早在2019年10月发布过,由于涉及到自己本科毕业论文的相关内容,为了避免对论文查重造成影响,文章在20年4月被我下线为草稿,因此之前可能无法访问到该文。这期间收到了一些阅读者的反馈以及感兴趣小伙伴的私信,还有一些朋友也尝试联系我咨询更多这方面的知识和问题,在此非常感谢各位朋友对我的支持,也希望更多的人能够有机会接触这个领域,细细研究一番倒还有那么点意思呢!当然我在这里撰写的博文也仅仅给大家一个参考,更多的需要阅读相关论文才能收获更多。
本科毕业答辩完后,回首论文最初的起点以及本科期间的葱葱岁月,内心五感交集,复杂难以言说,但我依旧清晰记得第一次正式接手做科研的那段日子,平淡中蕴含着对未来的希望。非常幸运自己能够涉足该领域,不仅以独立第一作者在CCF推荐会议上发表了相关论文并顺利保研,也让我对“科研”有了大概的认识和经历,对应的毕业论文很荣幸被评为优秀论文,最后在计算机类八校联盟毕业答辩当中获得本校唯一的一等奖。在这里特别感谢我的指导导师肖老师,预祝肖老师的科研事业越做越强,实验室的发展越来越好。