LangChain手记 Question Answer 问答系统

整理并翻译自DeepLearning.AI×LangChain的官方课程:Question Answer(源代码可见)

本节介绍使用LangChian构建文档上的问答系统,可以实现给定一个PDF文档,询问关于文档上出现过的某个信息点,LLM可以给出关于该信息点的详情信息。这种使用方式比较灵活,因为并没有使用PDF上的文本对模型进行训练就可以实现文档上的信息点问答。本节介绍的Chain也比较常用,它涉及到了嵌入(embedding)和向量存储(vector store)。

(笔者注:embedding指的是将一个实体映射到高维空间,以高维向量的形式存储,以最大限度地capture其信息,自然语言处理使用embedding方式表示单词,即词向量。自然语言处理语境下,embedding都指的是word embedding词嵌入)

首先是一个简单的例子:
在这里插入图片描述
在这里插入图片描述
下面解释了一下底层原理:

LLM‘s on Documents 文档上的大语言模型

在这里插入图片描述
由于最大token数限制,LLM最多只能一次性处理几千个token。因而如果有一个文档级别的信息(远大于几千token),LLM没办法直接处理,因而引入词嵌入(embedding)和向量存储(vector store)来解决这个问题

在这里插入图片描述

Embedding 词嵌入

  • 嵌入向量捕捉上下文/含义
  • 相似(指语义相似)内容地文本对应相似的向量

如下图:句子1)和2)语义相似,因而它们的表示向量也相似。
在这里插入图片描述
因而我们可以使用表示向量的相似程度来判定两句话的相似程度,在回答文档上的问题时,先找出和提问相似的信息,作为输入喂给LLM,期望LLM能根据相似信息做出解答。

(笔者注:事实上,LLM内部就是将文本转化为词向量(tokenizer)来处理的,直接以向量形式存储节省了文本到向量的转化步骤。)

Vecotor Database 向量数据库

在这里插入图片描述
在这里插入图片描述
当一个查询输入时,先将其向量化,然后跟向量数据库里面的所有项对比,找出最相似的n项。
在这里插入图片描述
查询结果放入输入的上下文中喂给LLM,得到回复。

下面分步解释过程:
在这里插入图片描述
使用CSVLoader对象loader加载一个csv文件,里面存放了户外服装相关信息,打印第一行信息如上图。

因为文本量比较少,不需要分块,因而可以直接创建embedding,查看一个embedding(其实是一组词向量):
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
上述过程可以使用RetrievalQA chain轻松实现:
在这里插入图片描述
在这里插入图片描述

Stuff method 原材料方法

在这里插入图片描述
原材料是最简单的方法,只需要将所有的原始数据放到prompt中作为上下文喂给语言模型。
优点:只需调用一次LLM。LLM可以一次性访问所有数据。
缺点:LLM有上下文长度,对于大型文档或者多个文档超过上下文长度时无法生效。

additional methods 额外方法

在这里插入图片描述
Map_reduce:将文档每一个块和提问一起输入一个LLM中,汇总所有LLM结果,再使用一个LLM处理拿到最终答案。
(很有效,可以处理任意数量的文档,还可以并行,但很贵,且独立对待每一个文档,即忽略了文档之间的关联性)

在这里插入图片描述
Refine:从一个块和LLM中得到回复之后,再把结果作为下一轮的输出,不断优化到最后一个块,得到最终结果。
(好处时考虑了文档之间的关联性,和map_reduce代价相同)

在这里插入图片描述
Map_rank:处理所有块,给每一个块和LLM的结果打分,选一个分最高的作为最终结果。
(需要LLM有能力给结果打分,和map_reduce代价相同,也没有考虑文档之间的关联性)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/68838.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

springcloud3 使用openfegin实现getpost请求调用

一 项目介绍 1.1 工程介绍 1.consumer9008 2.provider9009 二 get请求 2.1 消费端 1.controller 2.service 2.2 提供者 1.提供者 2.3 测试请求 地址: http://localhost:9008/consumer/payment/nacos/2223 三 post请求 3.1 消费者 3.2 提供者 3.3 测试请求…

bytesec靶场

靶场下载 https://www.vulnhub.com/entry/hacknos-os-bytesec,393/ 下载完成后进入配置修改网卡 教程 配置 第一步:启动靶机时按下 shift 键, 进入以下界面 第二步:选择第二个选项,然后按下 e 键,进入编辑界面 将…

飞凌嵌入式i.MX9352嵌入式ARM开发板,让通信安全又稳定——EMC防护,静电、浪涌、脉冲4级防护能力

随着新基建的加快推进,智能制造迎来了更好的发展时机,嵌入式板卡等智能设备也在更多的应用场景中大放异彩。但随着现场的设备数量的剧增,环境中的各种干扰信号也随之增加,这就对设备间通信的安全性与稳定性提出了更高的要求。 1【…

Qt应用开发(基础篇)——滚屏区域类 QScrollArea

一、前言 QScrollArea类继承于QAbstractScrollArea,QAbstractScrollArea继承于QFrame,是Qt滚动视图的常用部件。 滚屏区域基类 QAbstractScrollArea 框架类 QFrame QScrollArea类提供了对另一个小部件的滚动视图,基础功能、滚动条控制、界面策…

服务器数据恢复-EqualLogic存储RAID5数据恢复案例

服务器数据恢复环境: 一台DELL EqualLogic存储中有一组由16块SAS硬盘组建的RAID5阵列。存储存放虚拟机文件,采用VMFS文件系统,划分了4个lun。 服务器故障&检测&分析: 存储设备上有两个硬盘指示灯显示黄色,存储…

elasticsearch-head 插件

1、elastic 插件说明 **Head** 是第三方提供的一款很优秀的插件,集监控、查询、配置一体的web功能系统,可以在系统中进行创建、删除索引 、文档。以及查询、配置索引等功能,深受广大开发者的喜爱 **Kopf** 是另一个第三方提供的一款很优秀…

iTOP-STM32MP157开发板Linux Misc驱动编写实验程序(运行测试)

启动 STM32MP157 开发板,我们通过 nfs 挂载共享文件目录,我们进入到共享目录,加载驱动模块如 图所示: insmod misc.ko 驱动加载成功后,输入以下命令,查看注册的设备节点是否存在,如下图所示&a…

opencv图片换背景色

#include <iostream> #include<opencv2/opencv.hpp> //引入头文件using namespace cv; //命名空间 using namespace std;//opencv这个机器视觉库&#xff0c;它提供了很多功能&#xff0c;都是以函数的形式提供给我们 //我们只需要会调用函数即可in…

计算机网络:网络字节序

目录 一、字节序1.字节序概念2.字节序的理解&#xff08;1&#xff09;大端模式存储数据&#xff08;2&#xff09;小端模式存储数据 二、网络字节序 一、字节序 1.字节序概念 字节序&#xff1a;内存中存储多字节数据的顺序。 难道存储数据还要看顺序吗&#xff1f; yes。内…

利用python实现批量登录网络设备进行日常巡检

利用python实现批量登录网络设备 实现ensp与物理机互通ensp 配置配置网络设备远程登录 用python实现批量登录常见问题 通过阅读本文可以学习自动化运维相关知识&#xff0c;本文章代码可以直接使用&#xff0c;通过批量登录功能后&#xff0c;可以按照自己意愿进行功能更改与完…

gitlab合并新项目和分支切换

一、新建项目 1、创建空白项目 2、先创建一个群组 3、编写群组信息 4、创建群组完成以后新建项目 ​​​​​​​ 二、将代码推送到gitlab 1、初始化 git init 2、关联gitlab地址 # 比如:http://192.168.139.128:7070/cloud/obwt_cloud.git git remote add origin <你…

leetcode 力扣刷题 旋转矩阵(循环过程边界控制)

力扣刷题 旋转矩阵 二维矩阵按圈遍历&#xff08;顺时针 or 逆时针&#xff09;遍历59. 旋转矩阵Ⅱ54. 旋转矩阵剑指 Offer 29. 顺时针打印矩阵 二维矩阵按圈遍历&#xff08;顺时针 or 逆时针&#xff09;遍历 下面的题目的主要考察点都是&#xff0c;二维数组从左上角开始顺…