《从零开始学习自然语言处理(NLP)》-倒排索引(1)

写在最前面

在这个日新月异的信息时代,海量数据的积累,计算能力的不断提升,机器学习尤其是深度学习的蓬勃发展,使得人工智能技术在不同领域焕发出蓬勃的活力。自己经历了嵌入式开发,移动互联网开发,目前从事自然语言处理算法开发工作。从工程软件开发到自然语言处理算法开发,希望通过这个系列的文章,能够由浅入深,通俗易懂的介绍自然语言处理的领域知识,分享自己的成长,同大家一起进步。

问题描述

倒排索引是搜索引擎的基础算法,在本文中我们以一个简单的例子来详细介绍倒排索引的思想和实现。
假设用户有个搜索query:“林俊杰2019演唱会行程”。百度的搜索结果如下:


百度搜索结果

如果要求你来设计一个搜索引擎,来解决这个问题,你会如何着手呢?

问题简化

现在我们把这个问题具体化。我们除了有要查询的query:“林俊杰2019演唱会行程”。还有被查询的网页数据库。这里我们做个简化,假设我们的网页数据库内容只有如下4条:
网页1:

2019年,JJ林俊杰全球演唱会在北京首场演出,行程如下xxxxxxx;

网页2:

林俊杰,吴亦凡终于同框合影 ,惹粉丝们尖叫连连,xxxxx;

网页3:

蔡依林2019世界演唱会行程全曝光,xxxxx;

网页4:

告别2018,迎接崭新的2019,xxxxxx;

简单来说,就是从网页1~4中选取最理想的查询结果。你会怎么做呢?

关键词匹配

最容易想到的方法就是关键词匹配了,简单的来说,就是网页中包含查询的关键词越多,网页和查询query的相关度也就越大。
在做关键词查询前,一般文本会先进行预处理。这里的预处理主要包括去停用词和分词。
去停用词
去除和查询不相关的内容,比如本例子中的标点符号。在其他场景中,除了标点符号也会去除一些特别的字或词。
分词
分词主要目的是将句子切长短语或关键字,这样才利于查询匹配。比如“林俊杰2019演唱会行程”可以分词成,

林俊杰/2019/演唱会/行程

当然网页也需要这样进行分词:
网页1:

2019/年/JJ/林俊杰/全球/演唱会/在/北京/首场/演出/行程/如下/xxxxxxx

网页2:

林俊杰/吴亦凡/终于/同框/合影 /惹/粉丝们/尖叫/连连/xxxxx

网页3:

蔡依林/2019/世界/演唱会/行程/全曝光/xxxxx

网页4:

告别/2018/迎接/崭新/的/2019/xxxxxx;

分词是一项专门的技术,在实际工程中可以至今借助工具来完成,比如jieba分词
分词处理后,我们用查询query中的关键词在网页数据库中进行关键词匹配,并统计匹配数目:

网页序号 匹配关键词 匹配个数
网页1 2019,林俊杰,演唱会,行程 4
网页2 林俊杰 1
网页3 2019,演唱会,行程 3
网页4 2019 1

从“匹配个数”中很容易确定,网页1就是和查询query最匹配的网页。

倒排索引

讲到这里大家可能会疑问,这和倒排索引有什么关系?实际上,如果仔细考虑上面的关键词查询过程,会发现这种方法有个很大的效率问题:我们的例子中只有4个待查询的网页,而实际的互联网世界的网页数目是非常巨大的。假设互联网世界的网页数据为N,那么使用关键词查询的时间复杂度就是O(N),显然,这样的时间复杂度还是太大了,而倒排索引就很好的优化了这个问题。
从倒排索引这个名字很容易联想出它的实现,关键就是“倒排”的“索引”。在前面的讲解中,我们的索引(key)是网页,内容(value)是关键字。倒排索引就是反过来:内容关键字作为索引(key),所在网页作为内容(value)。前面的表格就可以改写成,

关键词 包含关键词的网页
林俊杰 网页1,网页2
2019 网页1,网页3,网页4
演唱会 网页1,网页3,
行程 网页1,网页3

通过上面的表格,很明显网页1是包含最多关键词的网页,也是和查询query相关度最高的网页。采用倒排索引的方法,搜索的时间复杂度得到了明显的降低。

搜索引擎框架

有了倒排索引的知识,我们就可以搭建简单的搜索引擎了,

搜索引擎框架

具体步骤包括:
网页抓取
主要是借助网络爬虫,来抓取网络世界的所有网页,并进行存储。网络爬虫是一项专门的技术,目前工程上也有很多现成的开源工具。
倒排索引生成
将抓取后的网页经过预处理后,整理生成倒排索引。
用户在线查询
借助倒排索引,搜索引擎能够满足用户的实时在线查询。
前两个步骤是不用考虑实时性的,可以离线进行,而用户的在线查询则需要保证实时性。

小结

本文通过一个搜索查询的例子,引出关键词查询的方案,及遇到的问题。进而介绍了倒排索引的原理,和搜索引擎的整体框架。现代搜索引擎是一个非常庞大和复杂的系统工程,这里的例子只是为了方便大家理解做了特别的简化。文中提到的分词和网络爬虫也是专门的文本处理技术,在后续的文章后,会根据需要专门展开。

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

推荐阅读更多精彩内容