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. RPC 框架设计

    RPC 框架设计 初识 RPC 服务化有什么好处? 防止代码拷贝 防止底层复杂性的扩散 防止公共库的耦合 保证 SQL 的质量,能够解除数据库的耦合 什么是 RPC RPC:Remote Proced ...

  2. Spark中普通集合与RDD算子的sortBy()有什么区别

    分别观察一下集合与算子的sortBy()的参数列表 普通集合的sortBy() RDD算子的sortBy() 结论:普通集合的sortBy就没有false参数,也就是说只能默认的升序排. 如果需要对普 ...

  3. 全网最详细的Linux命令系列-cp命令

    cp命令用来复制文件或者目录,是Linux系统中最常用的命令之一.一般情况下,shell会设置一个别名,在命令行下复制文件时,如果目标文件已经存在,就会询问是否覆盖,不管你是否使用-i参数.但是如果是 ...

  4. Java单例模式实现,一次性学完整,面试加分项

    单例模式是设计模式中使用最为普遍的一种模式.属于对象创建模式,它可以确保系统中一个类只产生一个实例.这样的行为能带来两大好处: 对于频繁使用的对象,可以省略创建对象所花费的时间,这对于那些重量级对象而 ...

  5. java面试-synchronized底层实现机制

    一.synchronized的三种应用方式 1.修饰实例方法,锁是当前实例对象,进入同步代码前要获得当前实例的锁 /** * synchronized修饰实例方法,当前线程的锁是实例对象account ...

  6. wap视频广告遇到的问题

    最近在做一个wap端的视频广告,耗了很多心力在上面,仍旧做不好.没想到wap浏览器对video标签这么不友好.广告需要在原编辑视频播完后插入并自动播放. ios浏览器点击播放按钮后喜欢自动全屏播放,希 ...

  7. 字节、位、bit、byte、KB、B、字符之间的关系

    一.bit 位bit就是位,也叫比特位,是计算机表示数据最小的单位,例如 1b ,2b,3b..... 说白了就是0或者1:计算机内存中的存储都是01这两个东西. 二.byte 字节byte就是字节 ...

  8. 第一个 vue-cli项目

    第一个 vue-cli项目 什么是vue-cli vue-cli官方提供的一个脚手架,用于快速生成一个vue的项目模板: 预先定义好的目录结构及基础代码,就好比咱们在创建Maven项目时可以选择创建一 ...

  9. 自学转行JAVA,没有项目经历怎么找工作?

    应届生或者是刚参加工作的转行人员都有这样一个疑惑,刚学出来没有工作经验,但是企业又要求你必须要有工作经验,但是刚毕业找不到工作就不可能有工作经验,感觉陷入一个死循环.其实这种情况那些企业是不可能不知道 ...

  10. Java JVM 启动参数

    JVM 启动参数 java -Xmx4096m // 设置JVM最大可用内存为4096m. -Xms4096m // 设置JVM促使内存为4096m.此值可以设置与-Xmx相同,以避免每次垃圾回收完成 ...