• Kernel Memory 入门系列:文档预处理


    Kernel Memory 入门系列:文档预处理

    Embedding为我们提供了问题理解和文档检索的方法,但是面对大量的文档,如果在用于提问的时候再进行文档的Embedding的话,那这个过程是非常耗时的,再加之我们的文档并不会频繁变化,所以我们可以对文档进行预处理,提升检索的效率。

    Alt text

    文档的预处理大致分为了几个步骤:

    1. 文档的准备

      首先需要把我们已有的文档整理出来,起码是需要进行检索的这些文档。文档的格式不会有很大的限制,可以是docx,也可以是pdf或者ppt,当然也可以是txt或者markdown,哪怕是图片、网页或者其他可以提取文本的文档格式都可以。

    2. 文本的提取

      文本提取的过程,就是将已经整理好的文档中的文字提取出来,根据不同的文档类型匹配相应的提取方法。Kernel Memory中已经默认集成了docx、excel、ppt、pdf、plaintext(markdown、text)、json、image(via OCR)等类型的文本提取方法,如果有其他的文档类型,也可以自行添加。

    3. 文本的分片

      我们的文档往往比较大,如果直接进行检索使用的话,会导致最终的提示词上下文太长,从而造成Token的浪费。另外提示词太长的话,生成的速度也会变慢,从而费时费钱。
      其实另外一个最主要的原因是embedding的接口是有token限制的,所以太长的话要么造成信息丢失,要么引起生成错误。
      所以最好的方法就是将文本进行分片处理。Kernel Memory中提供了一个默认的分片方法,根据文本的长度、段落、句子、标点符号等进行分片,当然也可以自行添加。

    4. 文档存储

      这里其实只是做一个持久化的过程,可以用于管理文档处理的进度。

    5. 文本的Embedding

      将分片好的文本进行Embedding,得到对应的向量。根据实际的需求,可以选用不同的Embedding模型,但是需要确保,最终和最终检索所使用的Embedding模型保持一致。

    6. 存储到向量数据库

      将Embedding的结果存储到向量数据库中,这样的话,我们就可以在检索的时候,直接从向量数据库中读取向量,而不需要再进行Embedding,从而提升检索的效率。

    一些其他的过程:

    整个文档预处理的过程是讲已有的文本最终转化为向量,存储到向量数据库的过程。在这个处理流程中,另外需要消息队列来管理处理的进度。如果需要进行的文档的更新的话,可以使用文档删除的方法,将文档从向量数据库中删除,然后重新进行文档导入处理。

  • 相关阅读:
    MAC 安装miniconda
    [机缘参悟-66]:怎样才能让别人愿意帮你:利益共享法则、“大道”、“人性”
    Set接口和常用方法
    【Java成王之路】EE初阶第十九篇: 前端三剑客 CSS基础篇
    [python3] 发送微信 同步手机端
    新形势下平台转型,环保新能源企业如何应用SCM供应链平台实现利益最大化?
    LeetCode 2240. Number of Ways to Buy Pens and Pencils【数学,枚举;类欧几里得算法】1399
    路由器ip地址设置
    JavaScript 模块导出示例
    2021-arxiv-Prefix-Tuning- Optimizing Continuous Prompts for Generation
  • 原文地址:https://www.cnblogs.com/xbotter/p/kernel_memory_import.html