毕业论文初稿完成随想

昨日刚刚完成毕业论文初稿,毕业设计的事情目前看来是告一段落了。虽说这只是初稿,后期还可能大修特修,甚至最后的终稿和初稿比起来会面目全非,但起码目前这段时光可以做一些自己喜欢做的事情了。

其实大家都心知肚明,本科生的毕业论文有价值可言的真没有多少。大概清北复交的本科论文会有一定创新性和实用性,不过对我这种一般学生来说,做一个有价值且有创新意义的项目,真是赶鸭子上架了。

我选择的“研究课题”是基于向量化方法(1234)的知识库语义搜索。实际上我在“研究”的时候还算度过十来篇paper,通过对比各种做知识库问答方法的原理和实验结果,我觉得我当下在研究的方法对于解决语义搜索的问题来说似乎不是很行得通。但是既然选择了这个课题,就要做下去。当然我还是要提醒一下自己,这可能只是我功夫不到家,未能体会这种方法的精髓而已,不可妄下定论。

在做毕设、写论文的时候,我觉得我的精神处于一种分裂的状态:一方面我觉得我现在其实就是在把前人的工作梳理一遍、东拼西凑一点想法,然后做一个实验,而且实验数据还很寒酸(直接说明我的想法并不靠谱);另一方面我还要挖空心思说明我的工作是有意义的,是在继承前人成果的基础上的做出新意的。

但说实话,我自己的过错也很大。从大二开始,在实行和指导老师的启蒙下,我就接触了机器学习、知识图谱等技术和自动问答、信息检索这些课题。如果在大二的时候(可惜没如果)我就下定决心要在本科阶段做出点学术成果,瞄准一个方向死命地磕,我觉得很是很大可能发paper的,起码不会混成先在这鬼样子。这一点我的舍友就做得很好,在大二时期就能写一个关于语料库建设的论文,导师直接说毕业论文就用这个可以。虽然他本人觉得自己的工作水水的,然而在我等看来那都是需要敬仰的存在。

那么现在问题来了,既然三年前我没有做出合理的选择而导致三年的光阴白过了,现在的我要怎样规划来让未来的三年不会浪费呢?我的当下的思路是,把过去三年没做的事情做未来三年做一遍,即“下定决心要在研究生阶段做出点学术成果,瞄准一个方向死命地磕”。至于哪个方向,还是做回老本行,搞自动问答或者语义搜索吧。这个方向也妥妥地在人工智能的领域内,在未来三年应该不会被学界和业界主流抛弃。也就是说,我能做出有价值的成果的机会还是很大的。

过去一年读过一点文章,也做过些许笔记,现摘录部分有价值的内容贴在下面,以祭奠我的本科毕设······


语义搜索-测评方案

什么是语义搜索?

"Semantic search seeks to improve search accuracy by understanding the searcher's intent and the contextualmeaning of terms as they appear in the searchable dataspace, whether on the Web or within a closed system, to generate more relevant results. "

—— Wikipedia

“Semantic search is a data searching technique in a which a search query aims to not only find keywords, but to determine the intent and contextual meaning of the the words a person is using for search. ”

—— techopedia.com

语义搜索的核心是理解用户的搜索意图,信息需求,理解查询的意思(semantics, meanings),而非仅仅把查询编码成向量之类的数学实体然后求解相似度。

缩小一下范围,定义关键词搜索:用户将输入几个自然语言的关键词表达自己的信息需求,系统理解(至少部分)查询的意图后返回相应的结果。一般来说语义搜索是基于知识库的搜索,返回的结果也是知识库中的信息点。

input: (keyword_1, keyword_2, ..., keyword_n)
output: (result_1, result_2, ..., result_n)  s.t. result_k ∈ {......}

怎样设定语义搜索的评测试验?

首先要有一个知识库和对应的评测数据集。

  • 对于Freebase知识库,对应的有WebQuestions和Free971。应该说这两个数据集都是问答数据集,用于知识库问答的benchmarking。数据集包含英文自然语言的问答对,且每个答案都是对应着freebase中的实体(值)。不过将每个问题各种虚词比如“it”, “the”, “a”去掉后,只留下实词,就可以用于语义搜索的测评。然而Freebase现在已经关停,所有数据导入了wikidata。但是网上还是能找到Freebase的dump数据集,但是其N-Triple完整版有250G之多。

  • 对于DBpedia,有一个QALD比赛,专门针对开放域知识库问答,目前已经是第8届。该比赛大多数任务都是以DBPedia和Yago为知识库,今年引入了Wikidata。QALD-1到QALD-6的问答数据都可以用。QALD的数据集除了包含问句和答案外,还很贴心地为每个问答对配置了关键词keywords和答案对应的SPARQL语句,直接可以用来做语义搜索的评测数据集。事实上,QALD-6中北大和港科大联合队伍就是用语义搜索的思路来参赛的,而且获得了第三名的好成绩。这里贴上

有了知识库和对应的数据集后,就是设定评测指标。搜索的指标,无非就是查准率,查全率和F值罢了。

measures

语义搜索 - 基于IR的方法

假设我们的任务是根据用户输入的关键词查询来搜索到知识库中的某个实体。

一种简单的思路

使用信息检索的思路,最简单的实现方法是把知识库中每一条三元组看成一个文档。在传统信息检索中,文档由标题,作者,正文等field组成。那么知识库中的每一条三元组都可以看成一个由subject,predicate,object三个field组成的文档。其中subject和predicate肯定是一个URI(或者说IRI),而object则有可能是URI,也有可能是字面量(literal)。我们可以跟据所有字面量建立倒排索引,输出的索引结构是object中字面量的词项到subject中URI的映射。

Stardog的实现

如此简单的思路当然早就有人实现了。比如支持RDF数据模型的Stardog

The indexing strategy creates a "search document" per RDF literal.

下载,安装,运行stardog

$ bin/stardog-admin server start

然后就可以导入数据,查询数据

$ bin/stardog-admin db create -o search.enabled=true -n movie ./kg_demo_movie.nt
Bulk loading data to new database movie.
Loaded 47,144 triples to movie from 1 file(s) in 00:00:02.327 @ 20.3K triples/sec.
Successfully created database 'movie'.

$ bin\stardog query search movie -q "movie"
+-------+-------+----------------------------------------------------------+
| Index | Score |                           Hit                            |
+-------+-------+----------------------------------------------------------+
| 1     | 8.047 | file:///D:/d2rq/d2rq-0.8.1/kg_demo_movie.nt#movie/274862 |
| 2     | 8.047 | file:///D:/d2rq/d2rq-0.8.1/kg_demo_movie.nt#movie/384521 |
| 3     | 8.047 | file:///D:/d2rq/d2rq-0.8.1/kg_demo_movie.nt#movie/75678  |
| 4     | 8.047 | http://www.kgdemo.com#Movie                              |
| 5     | 8.047 | http://www.kgdemo.com#movieIntroduction                  |
| 6     | 8.047 | http://www.kgdemo.com#movieRating                        |
| 7     | 8.047 | http://www.kgdemo.com#movieReleaseDate                   |
| 8     | 8.047 | http://www.kgdemo.com#movieTitle                         |
+-------+-------+----------------------------------------------------------+

这种搜索策略实在是有点简单,所以Stardog的官方文档对此也是一笔带过。Stardog内部使用Lucene来索引字面量,我们也可以自己实现也个,毕竟这种策略没什么技术含量。

自己实现一个

Lucene很强大,但是它的API有点难用,所以有人在Lucene的基础上做了一层封装使其更加易用,比如Elasticsearch。

ES的下载页面 下载 Elascticsearch, 解压后运行程序。

HOME/TO/YOUR/ELASTICSEARCH$ bin/elasticsearch

下一步是调整数据格式。Elasticsearch 支持的数据格式可以在官方文档查阅。RDF数据模型可以序列化城多种格式,各种格式之间可以相互转换,其中JSON-LD格式和ES的数据格式最为相似。我们可以使用RDF转换工具吧各种格式,比如T-Triples, Turtle转化成JSON-LD,然后把JSON-LD中的“@id”字段转化成“URI”字段,把其他所有字面量合并到“text”字段中。这样我们就可以使用“text”中的词项所引导“URI”中的实体了。

项目地址:https://coding.net/u/qige96/p/semantic-search/git


语义搜索 - 文献摘要 1

标题:A survey of semantic keyword search approaches
作者:Siraya Sitthisarm, Lydia Lao, Peter Dew
时间:2012-10
主要内容

本文主要介绍了语义搜索的一般概念,本体和RDF在语义搜索中的角色,语义搜索的交互方式,语义搜索系统的一般架构,以及六种语义搜索的方法及其对应的demo系统,最后提供了衡量系统好坏的一些评价指标。

  • 语义搜索的基本概念:语义搜索使用语义网技术,除了利用数据本身以外,还利用了数据的意义和数据间结构等信息,来提高用户查询的效果。

  • 交互方式

    1. 基于表单的搜索(form based search)。这种系统提供一个表单界面,用户可以输入知识库中的概念(concept)、属性(property),值(value)等来搜索知识库中的数据。
    2. 基于RDF查询语言的搜索。这种系统提供一种基于RDF模型的查询语言。其主要局限是用户徐亚时间去掌握查询语言的用法以及知识库的结构。
    3. 基于关键词的搜索。这种系统把用户输入的关键词转化成语义查询语言来在知识库中搜索。好处是易用,而最大的挑战是如何识别关键词背后的查询意图,并将其转化成查询语言(formal query language)。
    4. 基于自然语言的搜索。这种系统把用户的自然语言查询转化成语义查询语言来在知识库中搜索。比起关键词查询,这种基于自然语言的查询允许用户更准确地表达查询一体,但是挑战也更大:还要解析自然语言查询中的语法结构信息,而且自然语言查询中有更多的歧义词项。
  • 语义搜索系统的一般架构一般分为两部分,一是预处理部分,而是查询构建部分。

    • 预处理部分主要任务是清洗数据,索引知识库中的实体等等
    • 查询构建部分主要任务则是实体映射(找出每个关键词对应的候选实体),查询生成(formal query generation)和查询排序(根据查询和用户关键词的相关度排序)
  • 相关方法和系统:

    • Semsearch:该系统预根据知识库中的本体预先定义好一系列查询模板(The templates are all possible entity types from the knowledge base)。当用户输入关键词后,系统会把关键词映射成知识库中的实体,然后根据找出的实体去匹配模板,然后构建查询,最后系统会根据生成的查询与用户关键词的相关性给查询排序。
    • Quick:该系统的流程分两步。首先用户会输入关键词,然后系统会提供详细指引(step-by-step)引导用户构建查询图。用户界面会使用图的形式,节点代表实体类(ontology class),边代表属性(property)。
    • SPARK:经过类似的输入关键词与实体映射后,所有匹配出来的实体会枚举(enumerate)到查询集中,即对找出来的实体做组合运算。然后对每个查询集使用 Kruskal 最小生成树算法构建查询图,进而构建查询,最后排序返回结果。
    • Tran:该系统使用一种奇葩的方法。首先根据用户的关键词匹配出所有相关的资源(class, property, literal, instance),然后为每一个匹配到的资源找到到他们的邻居(即做局部广度优先遍历)。生成的查询图会转化成正式的查询,返回给用户,让用户来选择使用哪个查询。
    • Q2Semantic:该系统支持缺少本体的RDF数据。系统会使用RDF聚类算法来推导出一个本体,然后根据关键词在推导出来的本体中构建查询,最后把top-k查询返回给用户让用户选择最合适的查询。
    • SKengine:该系统专门为专家发现任务(expert discovery task)设计。类似的,系统根据关键词生成查询图,但是该系统使用了固定根节点算法(fix root node) ,避免了生成的查询图有不同的根节点。

    原文地址:http://203.158.98.12/actisjournal/index.php/IJACTIS/article/download/47/35


语义搜索 - 文献摘要 2

标题:Semplore: An IR Approach to Scalable Hybrid Query of Semantic Web Data
作者:Lei Zhang , QiaoLing Liu , Jie Zhang , HaoFen Wang , Yue Pan, and Yong Yu
时间:2007年
主要内容:本文主要介绍了一种对图数据尤其是RDF数据进行关键词搜索的方法。

The idea is that we view the searched keywords as a “virtual” concept called keyword concept W. An individual will be regarded as an instance of a keyword concept W if the textual content of any of its datatype properties contains the searched keywords in W (i.e., we adopt a boolean IR model).

In this paper, we restrict to queries whose graph patterns are trees, as in [10]. We also restrict the query result to be unary (i.e., a single target variable x in the query).

Our intuition is that if we treat individuals as documents and their associated concept names as terms, we can then retrieve all individuals of a given concept by inputing the concept name as a query term into the IR engine.

What’s new in our work, however, is on how to index relation instances (s,R,o). The index should enable us to find all the objects of a relation with a given set of subjects

We propose an approach called PosIdx to index a relation instance (s,R,o). Recall that in the classic inverted index structure, for each term there is a posting list of documents that contain the term. In addition, for each document in the posting list, there is also a list of positions showing where the term appears in the document. In the PosIdx method, subject s is treated as a document with a field named subjOf and a term R in the field. Object o is stored as a “position” of the term R in the document s. We use the position list to store the objects
of relation R under subject s

本文研究对象是有本体(即schema,有class之类的信息)的RDF数据图。主要的思想是把语义网中的实体,包括class,predicate,instances都看成文档,文档的内容是他们的属性(字面量,如label,name)。针对这些文档,可以使用信息检索的方法来索引,如下图:

索引一共有三类:

  1. term - instance索引,即词项到实体的映射,其中term是instance的字面量中的词项。
  2. class - instance索引,即类到实体的映射。
  3. relation - instance索引,即关系到实体的映射,其中relation是三原则中的predicate,instance是三元组中的subject。在这个索引中,每个instance后面挂接这一个类似position list的列表,即三元组中的object。此索引用于根据确定的predicate和subject检索出所有object,弥补了前面两种索引只能检索出subject的不足,也是本文的创新出之一。

本文的不足时提出的算法为混合查询设计,混合查询允许用户使用关键词来检索class和instance,但涉及到relation时,则需要使用RDF中的relation对应的名字。所以混合查询并不能完全解放用户的学习压力:还是要了解一下数据库中有哪些relation可用。


语义搜索 - 文献摘要 3

标题:Keyword Search on RDF Graphs — A Query Graph Assembly Approach
作者:Shuo Han, Lei Zou, Jeffery Xu Yu, Dongyan Zhao
时间:2015年
主要内容

we propose a query graph assembly (QGA for short) problem to model the keyword search task in this paper. In brief, we firstly match each keyword term into a group of elementary query graph element candidates (i.e. entity/class vertices and predicate edges), then assemble these graph elements into a query graph Q, which can express users’ query intention accurately.

本文提出了一个语义搜索的思路:先用实体识别的方法为用户查询中的每个关键词找出候选的实体并打上标记(class, instance,relation)。然后根据这些关键词的候选实体组合成一个查询图,进而跟检出SPARQL查询来在知识库中检索信息。作者定义这个问题为QGA问题,并证明了是一个NP完全问题,因此提出了一种启发式方法。

作者并没有过多阐述实体识别的流程,主要把篇幅集中在QGA问题的解决方案上。

本文一大亮点是结合了深度学习,主要是图嵌入的方法。在构建查询图时,需要确定两个实体之间是否存在某种关系,即(class/instance,relation,class/instance)是否成立。作者先把知识库(RDF图)所有实体(除了字面量外的点,也就是所有class,instance,relation)采用TransE算法映射成一个50到500维的向量,然后计算 s + p - o 的值,一次确定一个三元组模式是否成立。

本文的核心是解决QGA问题的方法,一个基于二部图的算法(没看懂)。


©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,185评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,445评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,684评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,564评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,681评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,874评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,025评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,761评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,217评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,545评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,694评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,351评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,988评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,778评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,007评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,427评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,580评论 2 349

推荐阅读更多精彩内容