【AIGC】Embedding与LLM的结合:长文本搜索与问答功能

什么是Embedding?

Embedding是一种多维向量数组,由一系列数字组成,可以代表任何事物,如文本、音乐、视频等。在这里我们将重点关注文本部分。Embedding之所以重要,是因为它让我们可以进行语义搜索,也就是通过文本的含义进行相似性检索。

为什么Embedding在AI中如此重要?

Embedding在AI中的重要性在于,它可以帮助我们解决LLM的tokens长度限制问题。通过使用Embedding,我们可以在与LLM交互时,仅在上下文窗口中包含相关的文本内容,从而不会超过tokens的长度限制。

如何将Embedding与LLM结合?

我们可以利用Embedding,在和LLM交互时,仅包含相关的文本内容。具体操作方法是,首先将文本内容分块并转换为向量数组,然后将其存储在向量数据库中。在回答问题时,我们可以使用相似性搜索将问题向量与文档向量进行比较,找到最相关的文本块,然后将这些文本块与问题一起输入到LLM中,得到准确的回答。
image

举例来说

我们可以利用Embedding,在和LLM交互时,仅包含相关的文本内容。以一个巨大的书籍PDF文件为例,假设这是一本讲述人类历史的书籍。我们希望从中提取关于某个重要历史人物的信息,但不想阅读整个文件。

具体操作方法是:

  1. 将PDF文件的文本内容分块。
  2. 使用Embedding模型将每个文本块转换为向量数组。
  3. 将这些向量数组存储在向量数据库中,同时保存向量数组与文本块之间的关系。

当我们需要回答关于该PDF文件的问题时,例如:“作者对xxx人物的看法是什么?”我们可以:

  1. 使用Embedding模型将问题转换为向量数组。
  2. 使用相似性搜索(如,chatGPT推荐的余弦相似度)将问题向量与PDF文件的向量进行比较,找到最相关的文本块。
  3. 将找到的最相关文本块与问题一起输入到LLM(如GPT-3)中,得到准确的回答。

通过这种方法,我们可以将Embedding与LLM结合,实现高效的文本搜索和问答功能。目前比较火的类chatPDF、以及文档问答产品都采用类似的技术。

产品案例

开源fireBase解决方案SupBase二月份时就推出了一款基于chatGPT API的,支持问答的文档系统(https://supabase.com/blog/chatgpt-supabase-docs)
其中就对这个文档系统的技术路径进行了相应的描述:
image

一些值得参考的资料

  1. https://openai.com/blog/introducing-text-and-code-embeddings (主要是关于基于embedding的文本与代码搜索的)
  2. https://github.com/openai/openai-cookbook/blob/main/examples/Question_answering_using_embeddings.ipynb (openAI提供的jupyter基于embedding的QA代码示例)
  3. https://supabase.com/blog/chatgpt-supabase-docs
  4. 详细内容会同步至微信公众号(Hobbes View)

原文链接:https://www.cnblogs.com/xy1997/p/17386756.html

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:【AIGC】Embedding与LLM的结合:长文本搜索与问答功能 - Python技术站

(0)
上一篇 2023年5月10日
下一篇 2023年5月10日

相关文章

  • Keras Sequential顺序模型

    keras是基于tensorflow封装的的高级API,Keras的优点是可以快速的开发实验,它能够以TensorFlow, CNTK, 或者 Theano 作为后端运行。 最简单的模型是 Sequential 顺序模型,它由多个网络层线性堆叠。对于更复杂的结构,你应该使用 Keras 函数式 API,它允许构建任意的神经网络图。 用Keras定义网络模型有…

    Keras 2023年4月8日
    00
  • 第二周:卷积神经网络 part 1

    视频学习 数学基础 受结构限制严重,生成式模型效果往往不如判别式模型。 RBM:数学上很漂亮,且有统计物理学支撑,但主流深度学习平台不支持RBM和预训练。 自编码器:正则自编码器、稀疏自编码器、去噪自编码器和变分自编码器。 概率/函数形式统一: 欠拟合、过拟合解决方案: 欠拟合:提高模型复杂度 决策树:拓展分支 神经网络:增加训练轮数 过拟合1:降低模型复杂…

    2023年4月8日
    00
  • tensorflow自定义网络结构

    自定义层需要继承tf.keras.layers.Layer类,重写init,build,call __init__,执行与输入无关的初始化 build,了解输入张量的形状,定义需要什么输入 call,进行正向计算 class MyDense(tf.keras.layers.Layer):    def __init__(self,units): # unit…

    tensorflow 2023年4月6日
    00
  • 卷积骚操作-Split to Be Slim: An Overlooked Redundancy in Vanilla Convolution

    paper: https://arxiv.org/abs/2006.12085 Code: https://github.com/qiulinzhang/SPConv.pytorch 讲解:https://mp.weixin.qq.com/s/X92cdNubCbuqb2KGAVIoUg    

    2023年4月8日
    00
  • Caffe 源码阅读(二) 卷积层

    背景: 项目中需要在 caffe 中增加 binary convolution layer, 所以在单步调试了 minist 的训练,大致看了一下流程,就详细看 convolution layer 了。 1、数据结构   caffe 的基本数据结构是 Blob,也就是数据流的基本结构。 2、网络结构   Net 是 Layer 构造出来的,Layer 包括了…

    2023年4月8日
    00
  • 0901-生成对抗网络GAN的原理简介

    目录 一、GAN 概述 二、GAN 的网络结构 三、通过一个举例具体化 GAN 四、GAN 的设计细节 pytorch完整教程目录:https://www.cnblogs.com/nickchen121/p/14662511.html 一、GAN 概述 GAN(生成对抗网络,Generative Adversarial Networks) 的产生来源于一个灵…

    GAN生成对抗网络 2023年4月7日
    00
  • 【TF-2-4】Tensorflow-模型和数据的保存和载入

    基本方法 不需重新定义网络结构的方法 saved_model方式 附件一:sklearn上的用法 一、基本方法 1.1 保存 定义变量 使用saver.save()方法保存 import tensorflow as tf import numpy as np W = tf.Variable([[1,1,1],[2,2,2]],dtype = tf.float…

    2023年4月6日
    00
  • 用Keras搭建神经网络 简单模版(五)——RNN LSTM Regressor 循环神经网络

    # -*- coding: utf-8 -*- import numpy as np np.random.seed(1337) import matplotlib.pyplot as plt from keras.models import Sequential from keras.layers import LSTM,TimeDistributed,De…

    2023年4月5日
    00
合作推广
合作推广
分享本页
返回顶部