暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

用Azure Cognitive Search搭建的COVID-19论文数据库(下)

云就该这么玩 2020-03-18
1216

(续上)

4. 用Azure Cognitive Search进行存储


首先介绍一下我们输出的json文件的结构。为了便于存储以及查阅,我将数据写出为json array,在python里面就是存储了字典的list,每一个字典对应了每一篇paper。现在我们将其导入到Azure blob存储。


在这里选用Azure Cognitive Search功能,主要是因为其内在的AI功能。相信大家一定遇到过这样的情况——在网上查阅文献,有时候文献中的生词很多很多,真的不太清楚这篇文献在讲什么。假设我们现在负责一个数据库,客户要求我们找到某篇论文,并且用中文告诉客户这篇文章的概要。使用Azure Cognitive Search,我们可以直接获得这些文档的中文摘要。下面就来演示Azure Cognitive Search的数据库建立。


4.1 主要步骤

Azure认知搜索,使用倒排索引结构,这使得Azure能够很快地进行全文本搜索。Inverse index由出现在文档中的所有唯一单词的列表组成,每个单词还包含出现该单词的文档的列表。在索引的过程中,Azure Cognitive Search 将每个文档的内容分成单独的单词,并且创建具有所有单词的列表,并且列出每个单词出现的文档,如下图所示。

典型的工作流程如下:

1.导入数据到Azure平台。

2.创建Azure认知搜索服务。

3.将数据导入服务。

4.为数据建立索引。有两种方法,一种是使用Azure Cognitive Search REST API或者.NET SDK手动将数据推入索引,另一种是直接导入受支持的数据格式。为了便于Azure自动提取,我使用blob进行数据存储。

5.搜索索引。这一步可以实现简单的搜索选项,如果选择了AI Enrichment功能,还可以在此基础上进行翻译、拼写检查、查看关键词以帮助理解等等功能。


4.2 导入数据

Azure Cognitive Search服务兼容很多的数据类型,包括Azure虚拟机中的SQL服务器,SQL Database,JSON blobs, csv等等。这里建立索引较为方便的是JSON blobs以及SQL Database,所以我在这里主要使用了JSON blob的方式。


登陆到Azure Portal的首页,如图所示:

点击其中的存储账户,来创建一个存储账户。



在存储账户中点击添加:


存储账户的创建,可以选择storageV2,也可以选择blob,我最后的设置如下:

 

按照上图新建存储账户。创建好之后,转到存储账户,在左边一栏中找到Blob服务,点击容器,点击+容器,即新建一个blob容器:


进入blob容器之后,点击+容器来创建一个容器。



创建好之后,转到容器,点击上传:

在上传blob中,选择上传本地存储的json文件,也就是我们爬虫的结果:


最后的结果如下:

 

5. 创建搜索服务并进行配置

上传好之后,回到主页,点击创建资源,并搜索Azure Cognitive Search,进入点击创建。

 

在查看创建中,选择我们刚刚创建的资源组,并创建搜索服务。

因为我们的数据是JSONblob,所以我们可以在导入数据的同时,创建索引。点击导入数据以上传数据。


进入导入数据页面需要仔细配置,首先在连接到数据部分,导入数据并等待Azure 提取数据信息:

注意在这里我碰到过几次无法读取,这可能跟网络有关,多尝试几次就好了,但一定要保证JSON文件的格式是正确的。


在添加认知技能中,选择添加扩充,这里为了演示方便起见,我暂时只对摘要部分添加了关键词提取、翻译两个功能,当然大家还可以添加自动补全功能等等。


继续设置字段的性质:

创建索引器并提交之后我们的索引就建设完成啦!到这里我们的数据库就已经建好了。在概述中点击搜索浏览器,就可以启动搜索器了。


接着我们就来进行一些简单的搜索吧!


6. 搜索数据库

终于可以测试一下我们建立的数据库了!搜索浏览器是通过请求URL来运行的,我们输入在查询字符串中的都应当遵循Azure规定的可以使用的查询语言。这里我使用的是简单Azure查询语言,也可以使用Lucene等。


6.1 查询标题里带MERS的文章


为了搜索标题中带MERS的文章,我们可以编写这样的查询字符串:

searchFields=title&$select=title&search='MERS'

上面这个字符串的意思是,在title(标题)中搜索带有MERS关键词的数据,并且显示他们的标题。


6.2 查询Coronavirus相关的文章并且返回doi以及中文摘要

在这个例子中,为了了解Coronavirus,我们需要与其相关的文章,并且能够简要了解,并下载。这里我们就可以设置查询字符串为:

searchField=keyword&$select=title,doi,translated_text&search='coronavirus'

也就是在keyword中搜索带有coronavirus关键字的文章,返回他们的标题,doi,以及翻译后的摘要。结果如下:

可以看到,翻译后的文本可读性还是很高的。

 

当然,如果觉得在网页上查看很繁琐,最好能在本地运行,或者公司有开发智能搜索的要求,可以将认知搜索服务连接到Azure Bot。本地运行Azure Bot需要Bot Framework Emulator,Visual studio来编写Azure Bot程序以及预览问答机器人。一个比较简单的方法是,在github上clone LearnAI-KnowledgeMiningBootcamp项目,在其resource基础上进行修改,并且在bot emulator中进行预览,就可以使用问答机器人来进行数据查询啦。

 

7. 结语


本数据库的搭建还是非常简易方便的,当然跟已经成型的数据库相比还是相形见绌。实际上,Azure Cognitive Search还有更多的有趣的功能,例如与Power BI的兼容,可以做出很美观的报告。或者与AI兼容,可以在翻译的基础上,加上语义分析等等功能。与Elasticsearch(基于Lucene的搜索服务器)相比,这个搜索服务更加的简洁,也更加的方便,还可以添加AI功能。当然,一个问题就是他的搜索速度有限,可能不如Elasticsearch的分布式搜索。


总而言之,整个建立数据库的流程还是十分顺利的,使用这样的流程也可以建立其他的数据库。在这里也感谢我的导师们给予我的帮助!


相关代码,请点击文末“阅读原文”(Read more)。



长按二维码,关注本公众号,或搜寻:云就该这么玩。点击文末右下角"在看"(Wow)分享给关注你关注的人。





文章转载自云就该这么玩,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论