你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

使用图像和自然语言处理通过准实时分析服务分析新闻源

Cosmos DB
函数
服务总线
文本翻译
人脸

此示例方案介绍了用于对来自公共 RSS 新闻源的文档进行大量引入和准实时分析的管道。 它使用 Azure 认知服务根据文本翻译、面部识别和情绪检测提供有用的见解。 具体而言,在基于 Azure 服务总线的消息传递管道中将图像和自然语言处理步骤连接在一起。 管道的输出是包含见解或分析的通知。

此方案包含适用于英语俄语德语新闻源的示例,但你可以轻松地将其扩展到其他 RSS 源和其他语言。 为了便于部署,数据收集、处理和分析完全基于 Azure 服务。

可能的用例

尽管此方案基于 RSS 源的处理,但它与需要执行以下操作的任何文档、网站或文章相关:

  • 将文本翻译为所选语言。
  • 在数字内容中查找关键短语、实体和用户情绪。
  • 检测与数字文章关联的图像中的对象、文本和地标。
  • 按性别和年龄检测与数字内容关联的图像中的人。

体系结构

Architecture diagram: ingest and analyze RSS feeds using image and text processing and send notifications.

数据流经解决方案的情形如下所示:

  1. RSS 新闻源充当从文档或文章获取数据的生成器。 例如,在文章中,数据通常包括标题、新闻项的原始正文摘要,有时还包括图像。

  2. 生成器或引入过程会将文章和任何关联的图像插入到 Azure Cosmos DB 集合中。

  3. 通知会在 Azure Functions 中触发一个 ingest 函数,该函数将文章文本存储在 Cosmos DB 中,并将文章图像(如果有)存储在 Azure Blob 存储中。 然后,将文章传递到下一个队列。

  4. 队列事件将触发一个 translate 函数。 它使用 Azure 认知服务的翻译文本 API 来检测语言,根据需要进行翻译,并从正文和标题收集情绪、关键短语和实体。 然后,将文章传递到下一个队列。

  5. detect 函数将从排队文章中触发。 它使用计算机视觉服务来检测关联图像中的对象、地标以及书面文字,然后将文章传递到下一个队列。

  6. face 函数将从排队文章中触发。 它使用 Azure 人脸 API 服务来检测关联图像中的人脸以识别性别和年龄,然后将文章传递到下一个队列。

  7. 所有函数都完成后,将触发 notify 函数。 它会加载文章的已处理记录,并扫描这些记录以查找所需的任何结果。 如果找到所需的结果,则会标记内容并将通知发送到所选系统。

在每个处理步骤中,函数都将结果写入到 Azure Cosmos DB。 最终,可以根据需要使用数据。 例如,你可以使用它来增强业务流程、查找新客户或确定客户满意度问题。

组件

此示例使用下列 Azure 组件。

  • Azure 存储用于保存与文章关联的原始图像和视频文件。 系统会使用 Azure 应用服务创建一个辅助存储帐户,并使用该帐户来托管 Azure Functions 代码和日志。

  • Azure Cosmos DB 用于保存文章文本、图像和视频跟踪信息。 认知服务步骤的结果也存储在此处。

  • Azure Functions 执行用于响应队列消息和转换传入内容的函数代码。 Azure 应用服务托管函数代码并按顺序处理记录。 此方案包括五个函数:ingest、transform、detect object、face 和 notify。

  • Azure 服务总线托管函数使用的 Azure 服务总线队列。

  • Azure 认知服务根据计算机视觉服务、人脸 API翻译文本计算机翻译服务的实现,为管道提供 AI。

  • Azure Application Insights 提供分析,以帮助你诊断问题和了解应用程序的功能。

备选方法

  • 可以将主题和订阅模式用于此数据流,而不必使用基于队列通知和 Azure Functions 的模式。 Azure 服务总线主题可用于并行处理文章的各个部分,而不是此示例中执行的串行处理。 有关详细信息,请比较队列和主题

  • 使用 Azure 逻辑应用来实现函数代码,以及 Redlock 算法所提供的记录级锁定(在 Azure Cosmos DB 支持部分文档更新之前,需要通过记录级锁定来执行并行处理)。 有关详细信息,请比较 Functions 和逻辑应用

  • 使用自定义 AI 组件实现此体系结构,而不是使用现有 Azure 服务。 例如,使用自定义模型扩展管道,该模型可检测图像中的特定人员,而不是此示例中收集的人员计数、性别和年龄通用数据。 要将自定义机器学习模型或 AI 模型用于此体系结构,请将模型构建为 RESTful 终结点,以便可以从 Azure Functions 调用它们。

  • 使用其他输入机制,而不是 RSS 源。 使用多个生成器或引入过程将数据馈送到 Azure Cosmos DB 和 Azure 存储。

  • Azure 认知搜索是 Azure 搜索中的一项 AI 功能,也可用于从图像、blob 和其他非结构化数据源提取文本。

注意事项

为简单起见,此示例方案仅使用 Azure 认知服务中提供的一些 API 和服务。 例如,可以使用文本分析 API 来分析图像中的文本。 此方案中的目标语言假定为英语,但你可以将输入更改为任何受支持的语言

可伸缩性

Azure Functions 缩放取决于你使用的托管计划。 此解决方案假定一个消耗计划,在此计划中,计算能力会在需要时自动分配给函数。 仅当函数运行时才产生费用。 另一个选择是使用专用计划,此计划允许在各层之间进行缩放以分配不同的资源量。

对于 Azure Cosmos DB,关键是要将工作负载大致平均地分配到数量足够多的分区键上。 对于容器可存储的数据总量或容器可支持的总吞吐量并没有限制。

管理和日志记录

此解决方案使用 Application Insights 来收集性能信息和日志记录信息。 将使用与此部署所需的其他服务相同的资源组中的部署创建 Application Insights 的实例。

要查看解决方案生成的日志,请执行以下操作:

  1. 转到 Azure 门户,导航到为部署创建的资源组。

  2. 选择 Application Insights 实例。

  3. 在“Application Insights”部分中,导航到“调查/搜索”并搜索数据。

安全性

Azure Cosmos DB 通过 Microsoft 提供的 C# SDK 使用安全连接和共享访问签名。 没有其他面向外部的外围应用。 详细了解 Azure Cosmos DB 的安全最佳做法

定价

Azure Cosmos DB 功能强大,但使用此部署时会产生最高成本。 可以通过重构所提供的 Azure Functions 代码,来使用另一种存储解决方案。

Azure Functions 的定价因所使用的计划而异。

部署此方案

注意

必须已经有 Azure 帐户。 如果没有 Azure 订阅,请在开始之前创建一个免费帐户

此方案的所有代码都在 GitHub 存储库中提供。 该存储库包含用于构建生成器应用程序的源代码,此应用程序将馈送此演示的管道。

后续步骤

其他分析体系结构: