如何构建一个成功的AI PoC(Prove of Concept)

2024-06-21 09:08
文章标签 ai 构建 poc 成功 concept prove

本文主要是介绍如何构建一个成功的AI PoC(Prove of Concept),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

点击上方“AI公园”,关注公众号,选择加“星标“或“置顶”


作者:Arnault

编译:ronghuaiyang

导读

如何把你的人工智能想法转化为可用的软件。

建立一个 AI PoC 是困难的。在这篇文章中,我将解释我的思维过程,使我的人工智能 PoCs 成功。

“我的闹钟能不能利用交通信息及时叫醒我去上班?”我们都想过求助于人工智能来解决我们的一个问题。概念证明(PoC)的目标是测试是否值得在其中投入时间。构建 PoC 是困难的,但构建 AI PoC 则更加困难,因为它需要大量的技能。

在构建 AI PoC 时,数据科学只是工作的一小部分,但它是最重要的技能之一。很容易找到一些非常好的教程来教你如何解决一个特定的任务,如何构建一个检测算法来停车入库。如何部署一个 flask app 到云上。但是,为你的特定问题设计一个解决方案要困难得多,这主要是因为你需要后知后觉地将问题重新组织成标准化的任务。

在这篇文章中,我将解释我实现这一目标的方法。

首先,我将回顾一下人工智能系统是什么样子的。然后,我将描述我设计一个人工智能的 3 个步骤的过程。最后,我们将看到两个示例,一个简单的示例和一个完整的带有 python 实现的示例。

人工智能系统概述

作为一个例子,我将使用一个分类文件的系统来说。它回答的问题是,“这是什么类型的文件?答案是类似于“电子发票”或“待办事项”这样的类。

AI 工作流程包含 5 个步骤:

  • 收到问题:“这是什么类型的文件?”

  • 在用户或上下文中添加补充数据:“用户拥有什么类型的文件?”

  • 使用数据回答问题:“这个文件属于哪种类型?”,"这是能源发票"

  • 存储结果:添加新文件到数据库

  • 回答客户的问题:“这是能源发票”

你可以把它分成 3 个任务或语义块:

  • 处理客户:接受问题,让他等待……

    示例:HTTP 服务器

  • 数据调取:与“公司知识库”沟通,增加或接收相关数据。

    与数据库的通信

  • AI 部分:回答这个问题的 AI 本身,以及上下文。

    例子:专家系统,支持向量机,神经网络…

回答问题“这是什么类型的文件?

你可以在网上找到关于如何架设你的服务器或数据调取层的教程。Python 中最简单的 AI PoC 解决方案是使用 Flask 和 SQL 数据库,但这在很大程度上取决于你的需要和你已经拥有的东西。我们将专注于设计 AI 本身。

设计 AI 部分

人工智能任务可能涉及多个异构输入。例如,用户的年龄和位置或整个电子邮件讨论。

人工智能的输出取决于任务:我们想要回答的问题。人工智能有很多不同的任务。在下面的图片中,你可以看到一些常见的计算机视觉任务。

一旦你从标准化的输入和任务中走出来,想办法构建一个人工智能就会变得很复杂。

为了让我了解构建 AI 的复杂性,我使用了一个 3 步的过程。

步骤 1:浏览相关的输入

首先,收集你觉得能够回答手头任务的所有输入,并选择在大多数情况下能够自给自足的输入。

在测试人工智能想法时,很容易变得贪婪,并考虑包含大量输入的解决方案:例如,用户的位置可能会让我了解他们的下一封电子邮件是什么。事实是:人们很容易迷失在各种不同含义或性质的输入中,最终什么也得不到。

在建造你的 AI 时,坚持简单的,自给自足的输入。

步骤 2: 数据向量化

第二步是对这些输入进行预处理,使其可用于各种算法。在某种程度上,每一个 AI 过程都要经过一系列的步骤来获得一个向量表示。

文本到向量: 基于词的计数来构建向量

这个过程非常简单,比如计算单词在文档中出现的频率,或者直接使用图像像素的值。它也可以变得非常复杂的多层预处理。

图像矢量化: 根据像素值将PNG图像矢量化为48x48灰度矢量

输入可以是非常不同的:不同的大小、颜色比例或图像格式。请记住,这里的思想是构建所有输入的有意义的、规范化的表示。

构建规范化的输入和有意义的表示。

步骤 3:处理向量

第三步是考虑输出和如何实现输出的时刻。

与输入一样,输出也需要“向量化”。对于分类,它很简单:按类划分一个字段。

然后,我们需要找到从输入向量到输出向量的方法。最后,这是我们开始寻找 AI 时学到的第一件事。它可以涉及到一些简单的任务,比如找到最近的向量或最大值,也可以涉及到更复杂的任务,比如使用巨大的神经网络架构。

大多数任务,如回归、分类或推荐,都有详细的文档记录。对于 PoC,最简单的操作是使用一个预先实现的算法库,如scikit-learn[1]并进行测试。

分类任务上的向量输出

找一些简单的和预先实现好的算法。

一个直接的例子

任务:文本是法语还是英语?

解决方案:

步骤 1:浏览相关输入。如果没有任何源或其他元数据,文本是惟一可能的输入。

步骤 2:向量化数据。向量化的一个简单方法是计算英语单词和法语单词的数量。我们将使用特定语言中最常用的单词。它们被称为停用词:the, he, him, his, himself, she, her…

步骤 3:处理向量。然后,我们可以选择使用这两个值中最高的值进行分类,以获得二进制输出:True 或 False。

维基百科中法语和英语的页面按照词缀比例随机划分。蓝色的异常值是关于 Ferroplasmaceae 的法语页面,遗憾的是,它包含的英语参考文献比法语句子还多。

构建人工智能通常是人类专长(商业知识)和计算机智能(机器学习)的混合。在这个例子中,由于法语和英语的停用词,我使用了人类的专业知识来选择如何构建我的向量。我也可以使用机器学习来训练一个模型,要么构建一个相应的向量(步骤 2),要么学习更复杂的向量的分类(步骤 3)。

一个更复杂一点的问题

在一次会议上,我与一个从事数字安全项目的人交谈。他告诉我,他想帮助他的用户对他们的个人文档进行分类和排序:合同、账单、文件……他注意到,随着存储的内容越来越多,文件夹树也越来越复杂,人们往往会对自己的文档进行错误的分类。找到他们想要的内容也变得更加困难。搜索引擎只是在“修补”问题,而不是消除根本原因:只有在知道准确信息的情况下才能找到文档,而文件夹仍然很混乱。

那么我们该如何解决这个问题呢?

注:我真的开发了这样一个系统:https://github.com/Wirg/digital-safe-document-classification

阐明 PoC 的思想并定义其范围

我们将设计一个用户界面,用户可以上传一个文档,然后提示用户这个文档最适合的文件夹是什么。我们希望支持这些类型的文件:txt、text、markdown 和 pdf。

“data_to_read”是我放想要阅读的文章的文件夹。Work 是一个文件夹,里面有我以前的学校报告(主要是数据科学项目)。在 15 个文件夹中选择 2 个。具体实现:https://github.com/Wirg/digital-safe-document-classification。

我们想要提示用户的是他们当前的文件夹,而不是旧的或来自其他人的文件夹:答案必须是特定于用户和特定于时间的。

步骤 1:浏览相关的输入

首先,我们需要知道用户的文件夹,否则我们将无法回答。要做出选择,我们可以使用:

  • 文件的内容

  • 添加时间:有些账单可能是按月支付的,有些任务可能大部分是在特定时间内完成的

  • 文件名和类型:" energy_invoice_joe_march.pdf "、“pdf”

在我们的例子中,最可靠的输入可能是文档的内容。我们将使用上传的文档和用户文件夹的内容作为比较。我们来关注一下。

步骤2: 输入向量化

现在,我们有不同的输入格式:pdf、markdown、text、txt…我们可以直接处理 markdown 和其他文本格式的文件内容。但是我们必须处理 pdf 文件,才能像其他文件一样使用它们。

我通过谷歌搜索找到了这里使用的工具 Pdftotext。它是有效的,但有一个巨大的缺点,它不执行光学字符识别(OCR)。这意味着它将读取大多数 pdf 文件,但无法读取由图像或扫描件创建的文件。为了解决这个问题,我可以使用像 Tesseract 这样的替代方法,但是我不会在这个例子中使用。

我们想把文本转换成向量,让我们来看看scikit-learn[2]。我们找一个文本向量化的工具,我们找到一个文本的特征提取包。这正是我们要找的。它有两个向量化工具:一个基于单词计数,另一个称为 TfidfVectorizer,我们使用的就是这个。

首先将发票pdf转换为文本,然后转换为向量

Tfidf 表示词频和逆文档频率。它基本上是数字,但用了一种更聪明的方法。其思想是,我们不只是计算单词的数量,而是通过计算单词的频率,并将其与文档中的单词数量进行比较,从而了解文档中某个单词的重要性:词频(term frequency, TF)。然后,我们将其频率与文档数量进行比较。文档中出现的频率越少,它对文档的影响就越大:逆文档频率(IDF)

步骤 3:处理向量

我们需要一个最佳文件夹的列表作为最终输出。将文件夹名映射到数字很简单。但是我们不能得到一个简单的标准化输出向量因为输出向量的大小会改变。实际上,文件夹的数量在很大程度上取决于用户及其当前文件夹。由于这个原因,我们不能使用固定数量的类的普通分类算法。我们需要每次都对模型进行重新训练,并为每个用户构建一个模型,或者为所有用户构建一个大型模型。

但是我们已经在向量化过程中加入了“智能”。因此,我们将采取另一种方法,更类似于搜索引擎:对上传的文档、文件夹中已经存在的文档进行矢量化,并比较结果向量。

为了找到最好的文件夹,我们寻找与上传文档最匹配的文档。

我们找到向量表示与上传文档最相似的文档,并将通过它找到原始文件夹。

使用余弦相似性查找最佳文件夹。

总而言之,解决 AI 问题可以简化为以下 3 个步骤:

  • 首先,浏览相关输入

  • 其次,向量化数据

  • 第三,处理向量

我希望它能帮助你实现你的人工智能想法。

—END—

英文原文:https://www.sicara.ai/blog/2019-03-29-how-build-succesful-ai-poc

请长按或扫描二维码关注本公众号

喜欢的话,请给我个好看吧

这篇关于如何构建一个成功的AI PoC(Prove of Concept)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1080793

相关文章

基于Python构建一个高效词汇表

《基于Python构建一个高效词汇表》在自然语言处理(NLP)领域,构建高效的词汇表是文本预处理的关键步骤,本文将解析一个使用Python实现的n-gram词频统计工具,感兴趣的可以了解下... 目录一、项目背景与目标1.1 技术需求1.2 核心技术栈二、核心代码解析2.1 数据处理函数2.2 数据处理流程

Python FastMCP构建MCP服务端与客户端的详细步骤

《PythonFastMCP构建MCP服务端与客户端的详细步骤》MCP(Multi-ClientProtocol)是一种用于构建可扩展服务的通信协议框架,本文将使用FastMCP搭建一个支持St... 目录简介环境准备服务端实现(server.py)客户端实现(client.py)运行效果扩展方向常见问题结

详解如何使用Python构建从数据到文档的自动化工作流

《详解如何使用Python构建从数据到文档的自动化工作流》这篇文章将通过真实工作场景拆解,为大家展示如何用Python构建自动化工作流,让工具代替人力完成这些数字苦力活,感兴趣的小伙伴可以跟随小编一起... 目录一、Excel处理:从数据搬运工到智能分析师二、PDF处理:文档工厂的智能生产线三、邮件自动化:

详解如何使用Python从零开始构建文本统计模型

《详解如何使用Python从零开始构建文本统计模型》在自然语言处理领域,词汇表构建是文本预处理的关键环节,本文通过Python代码实践,演示如何从原始文本中提取多尺度特征,并通过动态调整机制构建更精确... 目录一、项目背景与核心思想二、核心代码解析1. 数据加载与预处理2. 多尺度字符统计3. 统计结果可

一文教你Java如何快速构建项目骨架

《一文教你Java如何快速构建项目骨架》在Java项目开发过程中,构建项目骨架是一项繁琐但又基础重要的工作,Java领域有许多代码生成工具可以帮助我们快速完成这一任务,下面就跟随小编一起来了解下... 目录一、代码生成工具概述常用 Java 代码生成工具简介代码生成工具的优势二、使用 MyBATis Gen

Spring AI 实现 STDIO和SSE MCP Server的过程详解

《SpringAI实现STDIO和SSEMCPServer的过程详解》STDIO方式是基于进程间通信,MCPClient和MCPServer运行在同一主机,主要用于本地集成、命令行工具等场景... 目录Spring AI 实现 STDIO和SSE MCP Server1.新建Spring Boot项目2.a

Python使用Reflex构建现代Web应用的完全指南

《Python使用Reflex构建现代Web应用的完全指南》这篇文章为大家深入介绍了Reflex框架的设计理念,技术特性,项目结构,核心API,实际开发流程以及与其他框架的对比和部署建议,感兴趣的小伙... 目录什么是 ReFlex?为什么选择 Reflex?安装与环境配置构建你的第一个应用核心概念解析组件

Python+wxPython构建图像编辑器

《Python+wxPython构建图像编辑器》图像编辑应用是学习GUI编程和图像处理的绝佳项目,本教程中,我们将使用wxPython,一个跨平台的PythonGUI工具包,构建一个简单的... 目录引言环境设置创建主窗口加载和显示图像实现绘制工具矩形绘制箭头绘制文字绘制临时绘制处理缩放和旋转缩放旋转保存编

Java中的StringBuilder之如何高效构建字符串

《Java中的StringBuilder之如何高效构建字符串》本文将深入浅出地介绍StringBuilder的使用方法、性能优势以及相关字符串处理技术,结合代码示例帮助读者更好地理解和应用,希望对大家... 目录关键点什么是 StringBuilder?为什么需要 StringBuilder?如何使用 St

使用Python构建一个Hexo博客发布工具

《使用Python构建一个Hexo博客发布工具》虽然Hexo的命令行工具非常强大,但对于日常的博客撰写和发布过程,我总觉得缺少一个直观的图形界面来简化操作,下面我们就来看看如何使用Python构建一个... 目录引言Hexo博客系统简介设计需求技术选择代码实现主框架界面设计核心功能实现1. 发布文章2. 加