MinIO 和 Apache Tika:文本提取模式

这篇具有很好参考价值的文章主要介绍了MinIO 和 Apache Tika:文本提取模式。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

MinIO 和 Apache Tika:文本提取模式,apache,知识图谱,人工智能,minio,对象存储

Tl;dr:

在这篇文章中,我们将使用 MinIO Bucket Notifications 和 Apache Tika 进行文档文本提取,这是大型语言模型训练和检索增强生成 LLM和RAG 等关键下游任务的核心。

前提

假设我想构建一个文本数据集,然后我可以用它来微调 LLM.为了做到这一点,我们首先需要组装各种文档(由于它们的来源,这些文档可能采用不同的形式)并从中提取文本。数据集安全性和可审计性至关重要,因此这些非结构化文档需要存储在对象存储中以进行匹配。MinIO 是针对这些情况以及更多情况构建的对象存储。另一方面,Apache Tika 是一个工具包,可以“从一千多种不同的文件类型(例如 PPT、XLS 和 PDF)中检测和提取元数据和文本”。它们共同形成一个可以实现我们目标的系统。

在之前的一篇文章中,我们将一个带有 MinIO 的对象检测推理服务器和大约 30 行代码放在一起。我们将再次利用这种高度可移植和可重复的架构,这次是文本提取任务。下面是我们将要构建的系统的粗略描述。

MinIO 和 Apache Tika:文本提取模式,apache,知识图谱,人工智能,minio,对象存储

设置 Apache Tika

启动并运行 Apache Tika 的最简单方法是使用官方 Docker 映像。检查 Docker Hub 以获取所需的 Tika 映像版本/标记。

MinIO 和 Apache Tika:文本提取模式,apache,知识图谱,人工智能,minio,对象存储

在此示例中,我允许它使用并公开默认端口 9998。

docker pull apache/tika:<version>
docker run -d -p 127.0.0.1:9998:9998 apache/tika:<version>

构建文本提取服务器

现在 Tika 正在运行,我们需要构建一个服务器,该服务器可以通过编程方式对新对象发出 Tika 提取请求。之后,我们需要在 MinIO 存储桶上配置 webhook,以提醒此服务器新对象的到来(换句话说,存储桶的 PUT 事件)。让我们一步一步地走一遍。

为了保持相对简单并突出这种方法的可移植性,文本提取服务器将使用流行的 Flask 框架在 Python 中构建。以下是服务器的代码(也可在 MinIO 博客资源存储库的 extraction_server.py 下找到),该服务器使用 Tika(通过 Tika-Python)对添加到存储桶的新文档执行文本提取

"""
This is a simple Flask text extraction server that functions as a webhook service endpoint 
for PUT events in a MinIO bucket. Apache Tika is used to extract the text from the new objects.
"""
from flask import Flask, request, abort, make_response
import io
import logging
from tika import parser
from minio import Minio

# Make sure the following are populated with your MinIO details
# (Best practice is to use environment variables!)
MINIO_ENDPOINT = ''
MINIO_ACCESS_KEY = ''
MINIO_SECRET_KEY = ''


# This depends on how you are deploying Tika (and this server):
TIKA_SERVER_URL = 'http://localhost:9998/tika'

client = Minio(
    MINIO_ENDPOINT,
    access_key=MINIO_ACCESS_KEY,
    secret_key=MINIO_SECRET_KEY,
)

logger = logging.getLogger(__name__)

app = Flask(__name__)

@app.route('/', methods=['POST'])
async def text_extraction_webhook():
    """
    This endpoint will be called when a new object is placed in the bucket
    """
    if request.method == 'POST':
        # Get the request event from the 'POST' call
        event = request.json
        bucket = event['Records'][0]['s3']['bucket']['name']
        obj_name = event['Records'][0]['s3']['object']['key']

        obj_response = client.get_object(bucket, obj_name)
        obj_bytes = obj_response.read()
        file_like = io.BytesIO(obj_bytes)
        parsed_file = parser.from_buffer(file_like.read(), serverEndpoint=TIKA_SERVER_URL)
        text = parsed_file["content"]
        metadata = parsed_file["metadata"]
        logger.info(text)
        result = {
            "text": text, 
            "metadata": metadata
            }
        resp = make_response(result, 200)
        return resp
    else:
        abort(400)

if __name__ == '__main__':
    app.run()

让我们启动提取服务器:

MinIO 和 Apache Tika:文本提取模式,apache,知识图谱,人工智能,minio,对象存储

设置存储桶通知

现在,剩下的就是在 MinIO 服务器上为存储桶配置 Webhook,以便存储桶中的任何 PUT 事件(也称为添加的新对象)都将触发对提取终端节点的调用。使用该 mc 工具,我们只需几个命令即可完成此操作。

首先,我们需要设置一些环境变量,以向 MinIO 服务器发出信号,表明您正在启用要调用的 Webhook 和相应的端点。替换为您选择的函数名称。为简单起见,我选择了“提取”。此外,请确保将终端节点环境变量设置为推理服务器的正确主机和端口。在本例中,http://localhost:5000 是运行 Flask 应用程序的位置。

export MINIO_NOTIFY_WEBHOOK_ENABLE_<YOURFUNCTIONNAME>=on 
export MINIO_NOTIFY_WEBHOOK_ENDPOINT_<YOURFUNCTIONNAME>=http://localhost:5000

设置这些环境变量后,启动 MinIO 服务器(或者,如果它已在运行,请重新启动它)。在以下步骤中,我们将需要一个“别名”用于 MinIO 服务器部署。要了解有关别名以及如何设置别名的更多信息,请查看文档。我们还将使用 mc MinIO 客户端命令行工具,因此请确保您已安装它。

接下来,让我们为存储桶配置事件通知以及我们想要收到通知的事件类型。出于这个项目的目的,我创建了一个全新的存储桶,也命名为“extraction”。您可以通过 MinIO 控制台或 mc 命令执行此操作 由于我们希望在将新对象添加到“提取”存储桶时触发 Webhook,因此 PUT 事件是我们的重点。将 ALIAS 替换为 MinIO 服务器部署的别名,将 BUCKET 替换为该服务器上所需的存储桶。和以前一样,请确保替换为在前面步骤中使用的相同值。

mc event add ALIAS/BUCKET arn:minio:sqs::<YOURFUNCTIONNAME>:webhook --event put

最后,您可以通过验证运行此命令时是否输出了存储桶通知来检查是否 s3:ObjectCreated:* 为存储桶通知配置了正确的事件类型:

mc event ls ALIAS/BUCKET arn:minio:sqs::<YOURFUNCTIONNAME>:webhook

如果您想了解有关将存储桶事件发布到 Webhook 的更多信息,请查看文档以及对事件通知的深入探讨。现在,我们准备试用我们的文本提取服务器。

尝试一下

这是我想从中提取文本的文档。这是 2000 年《商品未来现代化法案》的 PDF 文件,该法案是美国一项有影响力的金融立法。

MinIO 和 Apache Tika:文本提取模式,apache,知识图谱,人工智能,minio,对象存储
我使用 MinIO 控制台将此 PDF 放入我的“提取”存储桶中。

MinIO 和 Apache Tika:文本提取模式,apache,知识图谱,人工智能,minio,对象存储
此 PUT 事件会触发存储桶通知,然后将该通知发布到提取服务器终端节点。因此,文本由 Tika 提取并打印到控制台。

MinIO 和 Apache Tika:文本提取模式,apache,知识图谱,人工智能,minio,对象存储

后续步骤

MinIO 和 Apache Tika:文本提取模式,apache,知识图谱,人工智能,minio,对象存储

虽然我们现在只是打印出提取的文本,但正如 The Premise 中所暗示的那样,该文本可以用于许多下游任务。例如:

  1. 创建用于LLM微调的数据集:假设您想要对以各种文件格式(即 PDF、DOCX、PPTX、Markdown 等)存在的公司文档集合进行微调大型语言模型。要为此任务创建LLM友好的文本数据集,您可以将所有这些文档收集到配置了类似 Webhook 的 MinIO 存储桶中,并将每个文档提取的文本传递到微调/训练集的数据帧中。此外,通过将数据集的源文件放在 MinIO 上,可以更轻松地管理、审核和跟踪数据集的组成。

  2. 检索增强生成:RAG 是LLM应用程序可以利用精确上下文并避免幻觉的一种方式。这种方法的一个核心方面是确保可以提取文档的文本,然后将其嵌入到向量中,从而实现语义搜索。此外,通常最佳做法是将这些向量的实际源文档存储在对象存储中(如 MinIO!)。使用本文中概述的方法,您可以轻松实现两者。如果您想了解有关 RAG 及其优势的更多信息,请查看这篇之前的文章。

  3. LLM应用:通过编程方式从新存储的文档中即时提取文本,可能性是无穷无尽的,特别是如果您可以使用LLM.想想关键词检测(即提示:“提到了哪些股票代码?”),内容评估(即提示:“根据评分标准,这篇论文提交应该得到什么分数?),或者几乎任何类型的基于文本的分析(即提示:”根据这个日志输出,第一个错误是什么时候发生的?“)。

除了存储桶通知用于这些任务的实用性之外,MinIO 还旨在为任何类型和数量的对象(无论是 Powerpoint、图像还是代码片段)提供世界一流的容错和性能。文章来源地址https://www.toymoban.com/news/detail-830511.html

到了这里,关于MinIO 和 Apache Tika:文本提取模式的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【学习笔记】pandas提取excel数据形成三元组,采用neo4j数据库构建小型知识图谱

    前言     代码来自github项目 neo4j-python-pandas-py2neo-v3,项目作者为Skyelbin。我记录一下运行该项目的一些过程文字以及遇到的问题和解决办法。 invoice_data 如下: node_list_key 如下: node_list_value 如下: df_data 如下: 构建的知识图谱如下所示: 压缩包里其他文件说明(个人理

    2024年01月16日
    浏览(49)
  • 基于飞桨实现的特定领域知识图谱融合方案:ERNIE-Gram文本匹配算法

    文本匹配任务在自然语言处理领域中是非常重要的基础任务,一般用于研究两段文本之间的关系。文本匹配任务存在很多应用场景,如信息检索、问答系统、智能对话、文本鉴别、智能推荐、文本数据去重、文本相似度计算、自然语言推理、问答系统、信息检索等,这些自然

    2023年04月09日
    浏览(32)
  • 【Tika】快速使用:文件(word/pdf)内容转文本

    parseText()     文件转文本内容 parsePageToPdf() pdf转按页文本内容

    2024年02月16日
    浏览(40)
  • 《苍穹外卖》知识梳理P11-Apache POI导出报表

    可以通过Apache POI处理excel文件,核心操作是读和写 应用场景 银行网银交易明细 各种业务系统导出Excel报表 批量导入业务数据 使用步骤 1.导入maven坐标 2.测试代码(写操作) 3.运行结果(写操作) 4.测试代码(读操作) 5.运行结果(读操作) 由于实际业务中可能会有复杂的报

    2024年02月19日
    浏览(42)
  • 集群基础2——LVS负载均衡apache(nat模式)

    使用lvs中的nat模型,对apache负载均衡集群。 主机IP 角色 安装服务 真实IP:192.168.161.129 VIP:192.168.161.130 调度服务器 lvsadm 192.168.161.131 后端服务器1 httpd,80端口 192.168.161.132 后端服务器2 httpd,8080端口 1.配置两个网卡。 2.本机能ping通这调度器。 1.两台后端服务器都安装httpd服务。

    2024年02月17日
    浏览(43)
  • Apache Flink连载(十四):Flink 本地模式开启WebUI

    🏡 个人主页:IT贫道_大数据OLAP体系技术栈,Apache Doris,Clickhouse 技术-CSDN博客  🚩 私聊博主:加入大数据技术讨论群聊,获取更多大数据资料。  🔔 博主个人B栈地址:豹哥教你大数据的个人空间-豹哥教你大数据个人主页-哔哩哔哩视频 目录

    2024年02月03日
    浏览(43)
  • Apache Thrift C++库的TThreadPoolServer模式的完整示例

    1) 要有完整的request  和 response; 2) 支持多进程并行处理任务; 3)子进程任务结束后无僵尸进程 见 步步详解:Apache Thrift C++库从编译到工作模式DEMO_北雨南萍的博客-CSDN博客 数据字段定义: cat Datainfo.thrift # Datainfo.thrift struct message   {     1:i32 seqId,     2:string content   }     

    2024年02月14日
    浏览(28)
  • 开源PDF工具 Apache PDFBox 认识及使用(知识点+案例)

    博主介绍:✌目前全网粉丝2W+,csdn博客专家、Java领域优质创作者,博客之星、阿里云平台优质作者、专注于Java后端技术领域。 涵盖技术内容:Java后端、算法、分布式微服务、中间件、前端、运维、ROS等。 博主所有博客文件目录索引:博客目录索引(持续更新) 视频平台:

    2024年02月20日
    浏览(41)
  • 《HCIP-openEuler实验指导手册》1.4 Apache MPM工作模式调整

    查看MPM当前工作模式 方法一: 方法二: 浏览器访问:http://IP:端口/server-status 方法三: 查看 LoadModule mpm_event_module modules/mod_mpm_event.so LoadModule mpm_worker_module modules/mod_mpm_worker.so 是否开启(是否注释) 修改MPM工作模式 按照上述方法三中的event(第一条注释),worker(第二条取消

    2024年04月29日
    浏览(36)
  • 事件溯源架构模式: Event Sourcing Patterns with Apache Kafka and

    作者:禅与计算机程序设计艺术 在分布式系统中,事件驱动架构(Event-driven architecture)是一种重要的设计模式。它将应用的状态建模为一系列事件,并通过异步通信机制传播这些事件。这种架构非常适用于处理复杂的业务逻辑和实时数据流,因为它能够简化应用的开发,提

    2024年02月08日
    浏览(59)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包