自制AI图像搜索引擎(txt+pdf+epub+mobi电子书下载)


发布时间:2021-04-05 04:47:44

点击下载

作者:明恒毅

出版社:人民邮电出版社有限公司

格式: AZW3, DOCX, EPUB, MOBI, PDF, TXT

自制AI图像搜索引擎

自制AI图像搜索引擎试读:

前言

得益于基于内容的图像检索技术的发展,近十年来互联网业界涌现出一些以TinEye图像搜索、淘宝图像搜索为代表的通用和垂直领域图像搜索引擎。这些图像搜索引擎改变了以往单一的关键字检索方式,极大地满足了人们日益多样的图像检索需求。作者在研究图像搜索引擎的过程中发现,目前国内尚无一本系统论述图像搜索引擎原理与实现的书籍,因此产生了撰写本书的想法。本书内容共分为5章。第1章由文本搜索引擎的原理讲起,逐步抽象出搜索引擎的一般结构,引领读者由文本搜索过渡到图像搜索。第2~3章分别按照传统人工设计和深度学习两种方式对图像特征提取的相关理论和方法进行讲解。第4章详述了图像特征索引和检索的相关理论和方法。上述每一章都在阐述相关理论和方法的同时,使用基于Java语言的实现代码和详实的代码注释对理论和方法进行复述。力求使读者不但能够理解深奥的理论知识,而且能将理论转换为实际可运行的程序。第5章会带领读者从零开始逐步构建一个基于深度学习的Web图像搜索引擎,使读者能够更透彻地理解图像检索的理论,并具有独立实现一个在线图像搜索引擎的能力。图像搜索引擎技术涵盖知识面广,目前尚在不断发展中,由于作者水平所限,书中难免存在错误和不足之处,欢迎各位读者批评指正。反馈意见和建议可以通过加入本书QQ群(743328332)进行沟通交流,或致信邮箱imgsearch@126.com,我将不胜感激。在这里,我要感谢人民邮电出版社编辑张爽的邀请,通过写作此书,我感受到了技术写作的不易与乐趣,也得到了一次难得的提升能力的机会。还要感谢父母妻儿对我的支持和理解,以及生活上的照顾,正是有了他们的支持,才能让我能够心无旁骛、安心写作。资源与支持本书由异步社区出品,社区(https://www.epubit.com/)为您提供相关资源和后续服务。配套资源本书提供配套源代码,请在异步社区本书页面中单击,跳转到下载界面,按提示进行操作即可。注意:为保证购书读者的权益,该操作会给出相关提示,要求输入提取码进行验证。提交勘误作者和编辑尽最大努力来确保书中内容的准确性,但难免会存在疏漏。欢迎您将发现的问题反馈给我们,帮助我们提升图书的质量。当您发现错误时,请登录异步社区,按书名搜索,进入本书页面,点击“提交勘误”,输入勘误信息,点击“提交”按钮即可。本书的作者和编辑会对您提交的勘误进行审核,确认并接受后,您将获赠异步社区的100积分。积分可用于在异步社区兑换优惠券、样书或奖品。与我们联系我们的联系邮箱是contact@epubit.com.cn。如果您对本书有任何疑问或建议,请您发邮件给我们,并请在邮件标题中注明本书书名,以便我们更高效地做出反馈。如果您有兴趣出版图书、录制教学视频,或者参与图书翻译、技术审校等工作,可以发邮件给我们;有意出版图书的作者也可以到异步社区在线提交投稿(直接访问www.epubit.com/selfpublish/submission即可)。如果您是学校、培训机构或企业,想批量购买本书或异步社区出版的其他图书,也可以发邮件给我们。如果您在网上发现有针对异步社区出品图书的各种形式的盗版行为,包括对图书全部或部分内容的非授权传播,请您将怀疑有侵权行为的链接发邮件给我们。您的这一举动是对作者权益的保护,也是我们持续为您提供有价值的内容的动力之源。关于异步社区和异步图书“异步社区”是人民邮电出版社旗下IT专业图书社区,致力于出版精品IT技术图书和相关学习产品,为作译者提供优质出版服务。异步社区创办于2015年8月,提供大量精品IT技术图书和电子书,以及高品质技术文章和视频课程。更多详情请访问异步社区官网https://www.epubit.com。“异步图书”是由异步社区编辑团队策划出版的精品IT专业图书的品牌,依托于人民邮电出版社近30年的计算机图书出版积累和专业编辑团队,相关图书在封面上印有异步图书的LOGO。异步图书的出版领域包括软件开发、大数据、AI、测试、前端、网络技术等。异步社区微信服务号第1章 从文本搜索到图像搜索[1]1.1 文本搜索引擎的发展1990年,加拿大麦吉尔大学的Alan Emtage等学生开发了一个名叫Archie的系统。该系统通过定期搜集分析散落在各个FTP服务器上的文件名列表,并将之索引,以供用户进行文件查询。虽然该系统诞生在万维网的出现之前,索引的内容也不是现代搜索引擎索引的网页信息,但它采用了与现代搜索引擎相同的技术原理,因此被公认为现代搜索引擎的鼻祖。1991年,明尼苏达大学的学生Mark McCahill设计了一种客户端/服务器协议Gopher,用于在互联网上传输、分享文档。之后产生了Veronica、Jughead等类似于Archie,但运行于Gopher协议之上的搜索工具。同一时期,英国计算机科学家Tim.Berners.Lee提出了将超文本和Internet相结合的设想,并将之称为万维网(World Wide Web)。随后,他创造了第一个万维网的网页,以及浏览器和服务器。1991年,他将该项目公之于众。自此,万维网成为了Internet的主流,全球进入了丰富多彩的WWW时代。搜索引擎也逐步从FTP、Gopher过渡到了万维网,并进一步演进。1993年,麻省理工学院的学生Matthew Gray开发了第一个万维网spider程序WWW Wanderer,它可以沿着网页间的超链接关系对其进行逐个访问。起初,WWW Wanderer只是用来统计互联网上的服务器数量,后来加入了捕获URL的功能。虽然它功能比较简单,但它为后来搜索引擎的发展提供了宝贵的思想借鉴。这一构思激励了许多研究开发者在此基础上进行进一步改进和扩展,并将spider程序抓取的信息用于索引构建。我们今天在开发一个网站或做搜索引擎优化时所用到的robot.txt文件,正是告诉spider程序可以爬取网站的哪些部分,不可以爬取哪些部分的一份协议。同年,英国Nexor公司的Martin Koster开发了Aliweb。它采用用户主动提交网页简介信息,而非程序抓取的方式建立链接索引。是否使用robot、spider采集信息也形成了搜索引擎发展过程中的两大分支,前者发展为今天真正意义上的搜索引擎,后者发展为曾经风靡一时,能够提供分类目录浏览和查询的门户网站。1994年可以说是搜索引擎发展史上里程碑的一年。华盛顿大学的学生Brain Pinkerton开发了第一个能够提供全文检索的搜索引擎WebCrawler。而在此之前,搜索引擎只能够提供URL或人工摘要的检索。自此,全文检索技术成为搜索引擎的标配。这一年,斯坦福大学的杨致远和David Filo创建了大家熟知的Yahoo,使信息搜索的概念深入人心,但其索引数据都是人工录入的,虽能提供搜索服务,但并不能称之为真正的搜索引擎;卡耐基梅隆大学的Michael Maldin推出了Lycos,它提供了搜索结果的相关性排序和网页自动摘要,以及前缀匹配和字符近似,是搜索引擎的又一历史性进步;搜索引擎公司Infoseek成立,在其随后的发展中,它首次允许站长提交网址给搜索引擎,并将“千人成本”(Cost Per Thousand Impressions,CPM)广告模式引入搜索引擎。1995年,一种全新类型的搜索引擎——元搜索引擎诞生了,它是由华盛顿大学的学生Eric Selburg和Oren Etizioni开发的MetaCrawler。元搜索引擎采用将用户的查询请求分发给多个预设的独立搜索引擎的方式,并统一返回查询结果。但是由于各独立搜索引擎搜索结果的打分机制并不相同,常常返回一些不相干的结果,精准性往往并不如独立搜索引擎好,因此元搜索引擎始终没有发展起来。同一年,DEC公司开发了第一个支持自然语言搜索及布尔表达式(如AND、OR、NOT等)高级搜索功能的AltaVista。它还提供了新闻组搜索、图片搜索等具有划时代意义的功能。1998年,斯坦福大学的学生Larry Page和Sergey Brin创立了Google(谷歌)——一个日后影响世界的搜索引擎。Google采用了PageRank(网页排名)的算法,根据网页间的超链接关系来计算网页的重要性。该算法极大地提高了搜索结果的相关性,使其后来居上,几乎垄断了全球搜索引擎市场。1.2 文本搜索引擎的结构与实现目前,基于文本信息的搜索引擎虽然还有一定的提升空间,但其工作原理已经相对稳定,基本结构也已趋于成熟。文本搜索引擎基本可以分为抓取部分、预处理部分、索引部分、搜索部分以及用户接口,如图1-1所示。图1-1 文本搜索引擎结构由于抓取部分不是本书所讨论的内容,故不做详细介绍。下面来着重介绍一下文本数据预处理、索引及搜索。1.2.1 文本预处理蜘蛛程序(Spider)抓取的数据在进行一定程度的预处理之后才能用于索引的建立。文本数据预处理主要是为了提取词语而进行的文本分析,而文本分析又可分为分词、语言处理等过程。1.分词文本分词过程通常分为三步:第一步,将文本分为一个个单独的单词;第二步,去除标点符号;第三步,去除停止词(Stop words)。停止词是语言中最普通的一些单词,它们的使用频率很高,但又没有特殊意义,一般情况下不会作为搜索关键词。为了减小索引的大小,一般将此类单词直接去除。为方便读者理解,下面举例说明,如图1-2所示。图1-2 文本预处理2.语言处理语言处理主要对分词产生的词元进行相应语言的处理。以英文为例:首先将词元变为小写,然后对单词进行缩减。缩减过程主要有两种,一种被称为词干提取(Stemming),另一种被称为词形还原(Lemmatization)。词干提取是抽取词的词干或词根,词形还原是把某种语言的词汇还原为一般形式。两者依次进行相关语言处理,比如将books缩减为book(去除复数形式),将tional缩减为tion(去除形容词后缀)。词干提取采用某种固定的算法进行缩减。词形还原通常使用字典的方式进行缩减,缩减时直接查询字典,比如将reading缩减为read(字典中存在reading到read的对应关系)。词干提取和词形还原有时会有交集,同一个词,使用两种方式都会得到同样的缩减。接上面的举例,继续说明,如图1-3所示。图1-3 语言处理1.2.2 建立索引经过文本分析后,得到的结果称为词(Term),我们利用它建立索引。首先使用得到的词创建一个字典,然后对字典按字母顺序进行排序,最后合并相同的词,形成文档倒排表(Posting List),具体过程如下。1.使用词生成字典,如表1-1所示表1-1 使用词生成字典词文档IDwe1use1search1engine1query1book1information1he2use2image2search2engine2query2similar2image2huge2repository22.对字典按字母顺序排序,如表1-2所示表1-2 对字典按字母顺序排序词文档IDbook1engine1engine2he2huge2image2image2information1query1query2repository2search1search2similar2use1use2we13.合并相同的词,形成文档倒排链表在文档倒排表中,有几个概念需要解释一下。文档频率(Document Frequency)表示共有多少个文档包含这个词。词频率(Term Frequency),表示这个文档中包含此词的个数。在图1-4中,左边是按字母顺序排序的字典合并相同词,并统计出该词在文档中出现次数的结果。中间和右边是文档1和文档2中包含某个词的次数——词频率。它们之间是用链表的形式串起来的,又因为是根据词的值来查找相关文档的,而非在文档中查找相关的值,和正常顺序是相反的,故称其为文档倒排链表或倒排索引。图1-4 文档倒排链表至此,索引已经构建好了。根据以上的文档倒排链表,我们就能使用关键词来查到相应的文档了。1.2.3 对索引进行搜索上面我们已经可以查找到包含关键词的相关文档了,但它还不能满足实际搜索的要求。如果结果只有几个,当然没有问题,全部显示就是了。但在实际应用中,搜索引擎需要返回几十万,甚至百万、千万级的结果。我们怎样才能将最相关的文档显示在最前面呢?这也是下面需要探讨的问题。1.用户输入查询语句目前,搜索引擎均提供自然语言搜索以及布尔表达式高级搜索,所以查询语句也是遵循一定的语法结构。比如我们可以输入查询语句“search AND using NOT image”,它搜索包含search和using但不包含image的文档。2.对查询语句进行词法分析、语法分析、语言处理词法分析用来提取查询词以及布尔关键字,上面的查询语句提取出的查询词为search using image,布尔关键字是AND和NOT。语法分析会将词法分析的提取结果生成一棵语法树。上例形成的语法树如图1-5所示。图1-5 语法树语言处理与创建索引时的语言处理过程几乎相同。如图1-6所示,上例中的using将转换为use。图1-6 语言处理后的语法树3.搜索索引,返回符合上述语法树的结果首先,在反向索引中分别找出包含search、use和image的文档链表。然后,将包含search和use的文档链表合并,得到既包含search,又包含use的文档链表。接着,在上一步的结果中去除包含image的文档链表,最终的文档链表就是符合上述语法树的结果。4.对结果进行相关性排序虽然在上一步中我们得到了想要查找的文档,但这些文档并未按照与查询语句的相关性进行排序,并不是我们最终想要的结果。那怎样才能将查找结果按相关性进行排序呢?首先,把查询语句也视为一个由若干词组成的短小文档,那么查询语句与相应文档的相关性问题就转变成了文档之间的相关性问题。毫无疑问,文档主题近似程度高的,其相关性必然强;文档主题近似程度低的,其相关性必然弱。那进一步思考一下,什么又是决定文档间相关性的主要因素?想必读者都读过或写过论文,是否留意到每篇论文都有“关键词”这一项?“关键词”是能够反映论文主题的词或词组。也就是说,论文中每个词对论文主题思想的表达程度是不相同的。换个说法,文档中的每个词对其主题思想表达的权重是不同的,正是这些不同权重的词构成了文档的主题。有两个主要因素会影响一个词在文档中的重要性。一是词频率(Term Frequency,tf),表示一个词在此文档中出现的次数,它的值越大,说明这个词越重要。二是文档频率(Document Frequency,df),表示多少文档中包含这个词,它的值越大,说明这个词越不重要。一个词的权重可以使用式(1-1)进行计算: (1-1)在上述公式中,W表示词t在文档d中的权重,tf表示词t在文档d中t,dt,d出现的频率,n表示文档的总数,df表示包含词t的文档数量。t怎样才能度量文档的相似度呢?第一步,把文档中每个词的权重组成一个向量,DocumentVector={weight1, weight2, …, weightN}。把查询语句也看作一个简单的文档,将其中的每个词的权重也组成一个向量,QueryVector={weight1, weight2, …, weightN}。第二步,将所有查询出的文档向量和查询语句向量取并集,用并集元素的个数N统一各向量长度,如果一个文档中不包含某个词,那么该词的权重为0。第三步,把所有统一后的向量放到一个N维空间中,每个词是一维,如图1-7所示。图1-7 N维向量空间(3维)如图1-8所示,文件向量间存在一定的夹角。我们可以通过计算夹角余弦值的方法来表示它们之间的相似程度。因为夹角越小,余弦值越大,也就是说文档向量夹角的余弦值越接近,文档也越相近。图1-8 向量夹角相关性的计算公式如下: (1-2)下面梳理一下上述的索引、搜索过程,如图1-9所示。图1-9 索引、搜索过程词法分析和语言处理过程将一系列文本转化为若干个词,然后索引创建过程将这些词生成词典和倒排索引,索引写程序将其写入索引库。当用户输入查询语句进行搜索时,首先进行词法分析和语言处理,将查询语句分解成一系列词,而后将其输入语法分析过程生成查询语法树。索引读程序将反向索引表由索引库读入内存,搜索过程在反向索引表中查找与查询语法树中每个词一致的文档链表,并对其进行相应的布尔运算,得到结果文档集。将结果文档集与查询语句的相关性进行排序,并将生成结果返回给用户。1.3 搜索引擎的一般结构在学习了文本搜索引擎之后,我们是否可以从文本搜索引擎抽象出搜索引擎的一般结构呢?根据一般的抽象方法,我们可以把事物非关键性的特征剥离出来,而只保留其最为本质的特征。对于现有技术条件下的搜索引擎,必须事先生成索引库,再在其上进行搜索查询。如图1-10所示,首先需要对输入数据进行一定的预处理,以使我们可以对其进行进一步分析。接下来,把文本搜索引擎的词法、语法分析等语言处理阶段抽象为对输入数据的特征提取,一个个提取出来的词就是构成一个文档特征向量的基本元素,反向索引库就是特征和文档对应关系的集合。对于查询数据,我们也要抽取其特征,然后计算它的特征向量与索引库中所有特征向量的相似度,最终返回规定数量的相似结果。图1-10 抽象搜索引擎结构1.4 从文本到图像随着互联网的发展和网络带宽的改善,万维网上的信息逐渐由纯文本过渡到文字和图像相结合,甚至有些网站(比如Flickr和Pinterest)发布的信息几乎都是图像。查找文本信息是传统搜索引擎的强项,但对于图像信息,很多搜索引擎无能为力。面对用户强烈的需求,很多互联网公司开始在自己的搜索引擎中增加图像搜索的选项。下面来观察一个网页的源文件: 可爱的小猫
猫身体灵活,样子招人喜爱。
用户一看就知道这是一个介绍猫的网页。html文件的title是猫,该文件中还有一个小猫的图片,其路径是/images/animal/cat.jpg,并且有一个Alt标签说明了图片的内容,图片下面还有一段猫的简介。我们是否可以利用这些内容来索引和搜索图像呢?答案是肯定的。最初,Altavista、Lycos等搜索引擎正是利用图像的文件名、路径名,图像周围的文本以及Alt标签中的注释索引和搜索相关图像的。从本质上来说,这样的图像搜索引擎其实还是基于文本搜索引擎的。有时图像周边的这些文本信息和图像并没有关系,会造成搜索出来的部分图像结果和查询关键词并不一致。为了避免这种缺陷,有些搜索引擎采用人工的方式对图像进行标注索引。比如美国中北部教育技术联盟开发的Amazing Picture Machine,它事先由专人从事图像信息的搜集、整理和标注,虽然人工标注保证了搜索引擎的查准率,但是它限制了图像索引的规模,不可能有很好的查全率。有时,图像的内容是很难用几个关键词就能完整描述出来的。在某种情况下,无论是利用图像网页相关文本信息,还是人工标注文字说明,都很难做到较高的搜索准确度。1992年,T. Kato提出了基于内容的图像检索(CBIR)概念,它使用图像的颜色、形状等信息作为特征构建索引用于图像检索,也即我们通常所说的“以图查图”。基于这一概念,IBM开发了第一个商用的CBIR系统QBIC(Query By Image Content),用户只需输入一幅草图或图像便可以搜索出相似的图像。同一时期,很多公司也将这一技术引入搜索引擎。哥伦比亚大学开发的WebSEEK系统不仅提供了基于关键词的图像搜索和按照图像类目的主题浏览,还可以利用图像的颜色信息进行基于内容的图像搜索。Yahoo的ImageSurfer也提供了使用例图的颜色、形状、纹理特征以及它们的组合来进行基于内容的图像搜索功能。随着视觉技术的进步和发展,越来越多的搜索引擎采用这一方式来进行图像搜索,并在此基础上不断演进。曾经使用“以图搜图”方式进行过图像搜索的读者可能都会有这样的印象,这种图像搜索返回结果的准确度往往不是太令人满意。为此,很多视觉研究人员、图像技术开发者不断提出新的图像特征表示算法。虽然准确率在一点点提高,但是并未根本性地解决这一问题。这究竟是什么原因呢?原因就在于无论是图像的颜色、纹理、形状这些全局信息,还是后来的SIFT等局部图像信息都是人为设计的硬编码,还不能完整地表达人类对整幅图像内容的理解。那图像搜索的准确率还能提高吗?随着人工智能,特别是神经网络理论和技术的发展,人们逐步找到了解决方案。神经网络算法起源于1943年的MCP人工神经元模型,经过诸多科学家的努力,历经跌宕起伏的发展,它逐步解决了发展中的问题,进入了新的快速发展阶段。2006年,Hinton提出了训练深层神经网络的新思路,也就是现在通常所说的深度学习。2012年,Hinton和他的学生Alex等人参加ImageNet图像识别比赛,利用深度学习理论构建的卷积神经网络(CNN)AlexNet以84.7%的正确率一举夺冠,并以极大的优势击败了使用人工设计特征算法获得亚军的选手。自此,在图像特征提取方法上,深度学习的方法超过了许多传统方法。很多图像搜索引擎也引入了深度学习算法,极大地提高了图像搜索的准确率。1.5 现有图像搜索引擎介绍目前很多互联网公司都推出了图像搜索引擎,并不断对其进行改进,使其取得了日新月异的发展。下面选取了几个有代表性的图像搜索引擎进行简要介绍。1.5.1 Google图像搜索引擎但凡提到搜索引擎,就不可能绕过Google。2001年7月,Google首次推出了图像搜索服务。最初,它只支持基于文本信息的图像搜索,使用前面介绍的图片名称、路径、Alt标签、图片周围的说明文字等进行索引。2011年6月,Google在其图像搜索的主页中加入了基于内容的图像搜索功能。随着相关领域理论和技术的快速发展,Google不断对其进行改进,搜索结果的准确度也不断得到提升。用户界面如图1-11所示(为方便读者理解,做了一定处理,下同),搜索框中可以输入所要查询图像的相关词汇,后面灰色的照相机按钮用于上传图像或输入图片网址来查询与之相似的若干结果。图1-12展示了使用Google图像搜索引擎上传一个香蕉图片时返回的结果。在返回的页面中,搜索框中显示了我们刚刚上传的图片,并对其进行了图像到文本的解析,解析为banana family。下面依次为对banana family的文本搜索结果和与上传图片外观类似图像的展示。很显然,Google在图像搜索过程中,无论是基于文本的,还是基于内容的,都大量使用了人工智能技术。图1-11 Google图像搜索引擎图1-12 Google图像搜索引擎查询结果

试读结束[说明:试读内容隐藏了图片]

下载完整电子书


相关推荐

最新文章


© 2020 txtepub下载