Azure 认知服务

1.概述

​ 微软认知服务(Microsoft Cognitive Services)集合了多种智能API以及知识API,使每个开发人员无需具备机器学习的专业知识就能接触到 AI。借助这些API,可以将看、听、说、搜索、理解和加速决策的能力嵌入到应用中,并且能理解和解读我们通过自然交流方法所传达的需求,使开发者可以开发出更智能,更有吸引力的产品。

​ Azure 认知服务中的服务目录可分为五大主要支柱类别:视觉、语音、语言、Web 搜索和决策。

视觉API

服务名称 服务说明
计算机视觉 使用计算机视觉服务,你可以访问用于处理图像并返回信息的高级算法。
自定义视觉服务 通过自定义视觉服务可以生成自定义图像分类器。
人脸 使用人脸服务可访问高级人脸算法,从而实现人脸属性检测和识别。
表单识别器(预览版) 表单识别器从表单文档中识别并提取键值对和表数据;然后输出结构化数据,包括原始文件中的关系。
墨迹识别器(预览版) 使用墨迹识别器可以识别和分析数字墨迹笔划数据、形状和手写内容,并输出包含所有已识别实体的文档结构。
视频索引器 使用视频索引器从视频中提取见解。

语音API

服务名称 服务说明
语音服务 语音服务将支持语音的功能添加到应用程序。
说话人识别 API(预览版) 说话人识别 API 为说话人识别和验证提供算法。

语言API

服务名称 服务说明
语言理解 LUIS 使用语言理解服务 (LUIS),应用程序可以理解用户以自己的语言表达的内容。
QnA Maker 通过 QnA Maker,可以从半结构化内容生成问答服务。
文本分析 文本分析提供对原始文本的自然语言处理,用于情绪分析、关键短语提取和语言检测。
文本翻译 文本翻译近乎实时地提供基于机器的文本翻译。

搜索API

服务名称 服务说明
必应新闻搜索 必应新闻搜索返回确定与用户查询相关的新闻文章列表。
必应视频搜索 必应视频搜索返回确定与用户查询相关的视频列表。
必应 Web 搜索 必应 Web 搜索返回确定与用户查询相关的搜索结果列表。
必应自动建议 通过必应自动建议,可向必应发送部分搜索查询词,并取回建议的查询列表。
必应自定义搜索 借助必应自定义搜索,可以为关注的主题创建定制的搜索体验。

决策API

服务名称 服务说明
异常探测器(预览版) 使用异常检测器可以监视并检测时序数据中的异常。
内容审查器 内容审查器监视可能的冒犯性、不可取和危险内容。
个性化体验创建服务 个性化体验创建服务可让你选择要显示给用户的最佳体验,并从其实时行为中学习信息。

​ 在我们的项目中,主要使用到的是语言API中的文本分析,用于处理用户上传到服务器的已填好的表单,通过处理OCR识别出来的JSON文件,整合相关字段的文本内容和位置信息,使用此API以确定文本所对应的实体,比如名字、地址、邮箱、电话号码等,以便于进一步实现表单的自动生成和模型预测。此API可以有效识别文本中的实体并将其分类为名字、地址、日期/时间、数量等, 已知实体也可以在 Web 上识别并链接到更多信息,其智能化的特性使本项目减少了在表单tag时的繁琐操作,可以很好的优化用户体验。

2.文本分析API

​ 文本分析 API 是一种基于云的服务,它对原始文本提供高级自然语言处理,并且包含四项主要功能:情绪分析、关键短语提取、命名实体识别和语言检测。

情绪分析:通过在原始文本中分析有关积极和消极情绪的线索,使用情绪分析确定客户如何看待你的品牌或主题。 此 API 针对每个文档返回介于 0 和 1 之间的情绪评分,1 是最积极的评分。分析模型已使用 Microsoft 提供的大量文本正文和自然语言技术进行预先训练。 对于选定的语言,该 API 可以分析和评分提供的任何原始文本,并直接将结果返回给调用方应用程序。

关键短语提取:自动提取关键短语,以快速识别要点。 例如,针对输入文本“The food was delicious and there were wonderful staff”,该 API 会返回谈话要点:“food”和“wonderful staff”。

命名实体识别识别文本中的实体并将其分类为人员、地点、组织、日期/时间、数量、百分比、货币等。 已知实体也可以在 Web 上识别并链接到更多信息。

语言检测:可以检测输入文本是用哪种语言编写的,并以多种语言、变体、方言和一些区域/文化语言报告请求中提交的每个文档的单一语言代码。 语言代码与表示评分强度的评分相搭配。

本项目具体涉及到的是命名实体识别,对于其他类型API的使用未做深入分析,感兴趣的可以自行探索~(在线体验网站亲测好用)

2.1Azure资源获取

​ 文本分析资源的密钥和终结点是调用此API的必备条件,因此需要为其创建 Azure 资源。 然后获取生成的密钥,以便对请求进行身份验证。团队开发中我们使用的是同一个Azure账户,创建资源后即可在Azure门户中查找到相关密钥和终结点。

subscription_key = "<paste-your-text-analytics-key-here>"
endpoint = "<paste-your-text-analytics-endpoint-here>"



​ 如无Azure账号,也可免费获取在七天内有效的试用密钥。 注册之后,它将在 Azure 网站上提供。

2.2规划请求

​ 请求中需包含原始非结构化文本形式的 JSON 数据(输入必须是JSON),架构十分简单,包括以下列表中描述的元素:

元素 有效值 选项 使用情况
id 数据类型为字符串,但实际上文档 ID 往往是整数。 必选 系统使用你提供的 ID 来构建输出。为请求中的每个 ID 生成语言代码、关键短语和情绪分数。
text 非结构化原始文本,最多 5,120 个字符。 必选 对于语言检测,可以使用任何语言来表示文本。 对于情绪分析、关键短语提取和实体标识,此文本必须使用支持的语言
language 支持语言的 2 字符 ISO 639-1 代码 不定 需要情绪分析、关键短语提取、实体链接;语言检测为可选。 排除语言检测不会有任何错误,但没有它会削弱分析。 语言代码应对应你提供的 text

示例:

documents = {"documents": [
{"id": "1", "text": "Microsoft was founded by Bill Gates and Paul Allen on April 4, 1975, to develop and sell BASIC interpreters for the Altair 8800."}
]}

2.3发布请求

​ 对文本分析 API 的调用为 HTTP POST/GET 调用,可以用任何语言表示,和团队开发语言一致,在这里我们使用Python(Python 3.7)实现该调用。将此请求发布到注册期间建立的终结点,并追加所需的资源:命名实体识别,即将 /text/analytics/v2.1/entities 追加到文本分析基终结点,形成语言检测 URL)

entities_url = endpoint + "/text/analytics/v2.1/entities"

​ 使用请求库将文档发送到 API。 将订阅密钥添加到 Ocp-Apim-Subscription-Key 标头,并发送带 requests.post() 的请求。

headers = {"Ocp-Apim-Subscription-Key": subscription_key}
response = requests.post(entities_url, headers=headers, json=documents)
entities = response.json()

2.4处理响应

​ 调用此API时数据不会存储在帐户中,会立即返回结果,输出将会根据 ID 以单个 JSON 文档的形式返回,因此需要在本地流式处理或存储响应。返回样例:

{
"documents" : [
{
"id" : "1",
"entities" : [
{
"name" : "Microsoft",
"matches" : [
{
"wikipediaScore" : 0.49897989655674446,
"entityTypeScore" : 1.0,
"text" : "Microsoft",
"offset" : 0,
"length" : 9
}
],
"wikipediaLanguage" : "en",
"wikipediaId" : "Microsoft",
"wikipediaUrl" : "https://en.wikipedia.org/wiki/Microsoft",
"bingId" : "a093e9b9-90f5-a3d5-c4b8-5855e1b01f85",
"type" : "Organization"
},
.......
]
}
],
"errors" : []
}

​ 本项目的后续处理中,需要将识别出来的实体type与表单中的文本整合起来,按照一定的格式构造出新的表单,以用于模型训练。

3.相关问题

3.1识别粒度

​ 文本分析API现已发布的有两个版本:

  • 最新稳定版 API - v2.1

  • 最新预览版 API - v3.0-Preview.1

    此文档写明了两个版本对实体识别类型的差异以及增加的功能。在API使用的过程中,我们想要实现将类似于"1020 Enterprise Way Sunnayvale, CA 87659"的文本段识别为"Address",但是在实际调用过程中,该API将字段里的每个单词分离,分别识别为"Quantity","Location","Quantity",并且自动忽略了"Enterprise Way"字段,无法实现地缘政治实体的识别,只能提取出位置信息。但是在在线体验网站上,却能将该字段整体识别为"Address":

一开始使用的是2.1版本,但是将其更新为3.0版本也并未解决此问题,所以目前采取的处理方式是一旦识别到"Location"即将其处理为"Address"。可能出现的问题是由于实体识别的粒度不够精细,导致表单生成数据不合理的问题。

3.2安全性

​ 由于实体识别过程涉及到表单中真实姓名、地址、邮箱等信息,所以调用该API的安全性也是必须得考虑的问题,需要了解发送给认知服务的数据是如何处理的。通过查阅相关文档,微软认知服务对于数据的隐私和安全性有比较完善的保护体系,由 Azure 基础结构提供支持,提供了企业级的安全性、可用性、合规性及可管理性,可参阅符合性产品/服务和隐私详细信息此文档概述了 Azure 认知服务安全的各个方面,例如使用传输层安全性、身份验证、安全配置敏感数据,以及客户密码箱客户数据访问,再加上密钥管理和身份验证等操作,提供了比较全面的隐私和安全保护。

技术博客:Azure 认知服务的更多相关文章

  1. 开源的服务发现项目Zookeeper,Doozer,Etcd - 木精灵的技术博客 - CSDN博客

    开源的服务发现项目Zookeeper,Doozer,Etcd - 木精灵的技术博客 - CSDN博客   http://blog.csdn.net/shlazww/article/details/38 ...

  2. Azure认知服务的实际应用-资讯采集推送

    Azure认知服务的实际应用-资讯采集推送 演示 实现的是通过使用各种azure服务,每天自动获取资讯.博客,定时推送到公众号的功能! 微信公众号搜索TechViews,或直接扫描二维码关注,每天推送 ...

  3. 解决编译apache出现的问题:configure: error: APR not found . Please read the documentation - ____哊.時^随记 - 51CTO技术博客

    解决编译apache出现的问题:configure: error: APR not found . Please read the documentation - ____哊.時^随记 - 51CTO ...

  4. 个人技术博客(α)------javaweb的学习路程

    该博文大致内容是学习的一个过程,心得,并不是以技术博客为主,在此说明. 关于javaweb的学习开始的时间大概是从大二下(2017年6.7月份)的暑假开始的,在学长的介绍下加入了实验室进行学习,由于是 ...

  5. 50家硅谷IT公司技术博客

    分享一下 50 家硅谷优秀 IT 公司技术博客,从中可以了解企业文化,技术特色和设计语言,如果直接列出来很单调,加上点评,算吐槽版吧. 知名大厂   1. Facebook https://www.f ...

  6. 在Ubuntu14.04上安装WordPress4搭建技术博客

    1.安装LAMP环境 1.1 安装Apache2 1.2 安装MySQL5 1.3 安装PHP5 1.4 安装phpMyAdmin 2.初始化数据库 3.下载并配置WordPress 4.配置Apac ...

  7. 技术人如何利用 github+Jekyll ,搭建一个独立免费的技术博客

    上次有人留言说,技术博客是程序员的标配,但据我所知绝大部分技术同学到现在仍然没有自己的技术博客.原因有很多,有的是懒的写,有的是怕写不好,还有的是一直想憋个大招,幻想做到完美再发出来,结果一直胎死腹中 ...

  8. 【技术博客】nginx服务器的https协议实现

    在本学期软件工程的Alpha和Beta阶段,我们的服务器部署都是使用基础的http协议,http在网络路由间的信息转发都为明文,这对我们网站的账户密码登录来说很不安全,因此在Gamma阶段我们实现了h ...

  9. 【技术博客】Django中文件下载的实现

    开发组在开发过程中,都不可避免地遇到了一些困难或问题,但都最终想出办法克服了.我们认为这样的经验是有必要记录下来的,因此就有了[技术博客]. Django中文件下载的实现 1.背景 在VisualPy ...

随机推荐

  1. MQ 架构与细节

    MQ 架构与细节 MQ 是什么? MQ:MessageQueue,消息队列的简称,用于进程间通信或同一进程的不同线程间的通信方式. 什么时候该使用MQ? 数据驱动的任务依赖 上游不关心执行结果 上游关 ...

  2. java中if语句的应用

    1. 注释怎么写: 1.1  //单行注释 1.2  /*多行注释*/ 2. If语句的用法 2.1. if(条件语句){ (  ps:只有一行代码时可以不加{}  ) } 2.2. if(条件语句) ...

  3. Android Studio 报错:你的主机中的软件中止了一个已建立的连接

    •解决方案 关闭电脑的移动热点 关闭后,build 就不会报错了. 等 build 好了后,重新打开移动热点,再次 build 一就不会报错.

  4. 力扣 - 剑指 Offer 09. 用两个栈实现队列

    目录 题目 思路 代码 复杂度分析 题目 剑指 Offer 09. 用两个栈实现队列 思路 刚开始想的是用stack1作为数据存储的地方,stack2用来作为辅助栈,如果添加元素直接push入stac ...

  5. 免费开源的客服系统 Linux 服务器环境安装部署过程

    最近因为项目需要,要找一款在线客服系统集成在 APP 中使用,而且涉及到生意开单,客服系统必须稳定可靠.另外甲方要求,必须支持 Linux 服务器环境. 我们以 Ubuntu 18.04 为例把安装部 ...

  6. NLP入门学习中关于分词库HanLP导入使用教程

    大家好,时隔多年再次打开我的博客园写下自己的经验和学习总结,开园三年多,文章数少得可怜,一方面自己技术水平局限,另一方面是自己确实想放弃写博客.由于毕业工作的原因,经常性的加班以及仅剩下少的可怜的休息 ...

  7. Linux 用户和用户组管理(useradd userdel groupadd groupdel)

    Linux 用户和用户组管理 Linux系统是一个多用户多任务的分时操作系统,任何一个要使用系统资源的用户,都必须首先向系统管理员申请一个账号,然后以这个账号的身份进入系统. Linux系统用户账户的 ...

  8. c# 输出一个数组

    关于C#输出一个数组最普遍的方法就是用for 循环语句写 如: int[] a = new int[10];for (int i = 0; i < a.Length; i++) { a[i] = ...

  9. 使用Leaflet创建地图模块

    背景 最近需要为某单位开发地图展示系统,因此开始涉略和使用Leaflet这个轻量级地图库. 创建基础地图需要以下几步 引入相关js和css文件,创建基础地图 <div id="map& ...

  10. (二) LDAP 安装

    LDAP 安装 参考:https://blog.51cto.com/bigboss/2341986