(20-1)基于《哈利·波特》系列图书内容的问答系统:项目介绍+ 大型语言模型(LLMs)+准备环境

本项目是一个基于自然语言处理的问答系统,专门设计用来回答有关《哈利·波特》系列的问题。本系统使用了LangChain库来构建问答流程,Hugging Face的Transformers库来加载和使用大型预训练语言模型,以及Gradio库来创建用户界面。项目中还包括了文本加载、分割、嵌入生成、相似性搜索和答案生成等多个环节,通过精心设计的提示和配置来优化模型的输出质量。此外,项目还鼓励社区贡献,并提供了其他相关资源的链接,以供进一步学习和探索。

8.1  项目介绍

项目是一个基于自然语言处理(NLP)的问答系统,专门设计用来回答有关《哈利·波特》系列书籍的问题。项目使用了多个开源库和先进的NLP技术,包括大型语言模型(LLMs)、文本检索、文本生成和用户界面设计。本项目的主要特点和构成组件如下

  1. Langchain:这是一个用于构建聊天机器人的平台,它允许开发者创建能够理解和回应用户输入的智能系统。
  2. RAG Pipeline (Retrieval Augmented Generation):结合了检索(Retrieval)和生成(Generation)两个功能,以提高聊天机器人回答问题的准确性和相关性。
  3. Large Language Models (LLMs):本项目鼓励开发者尝试使用各种大型语言模型,这些模型能够处理和生成自然语言文本。
  4. FAISS Vector Store:这是一个用于存储文本嵌入的系统,它使用了由Sentence Transformers创建的向量。FAISS在GPU上运行,与Chroma相比,它的速度更快。
  5. Retrieval Chain:使用检索链从嵌入的文本中检索出相关的段落,这是RAG流程中的检索部分。
  6. Summarization:对检索到的段落进行总结,以便生成简洁且信息丰富的回答。
  7. Chat UI with Gradio:使用Gradio库来创建聊天界面,Gradio是一个用于快速创建机器学习模型前端界面的Python库。

8.2  大型语言模型(LLMs)

本项目用到了特定的大型语言模型(LLMs),用于构建聊天机器人或其他NLP任务的预训练模型,这些模型被托管在Hugging Face的模型库中。本项目用到的大模型如下:

  1. TheBloke/wizardLM-7B-HF:是一个大型语言模型(Large Language Model,简称LLM),它被设计用于执行多种自然语言处理(NLP)任务,尤其是在理解和生成与《哈利·波特》系列相关的文本方面表现出色。7B表示7 billion,即70亿参数。
  2. daryl149/llama-2-7b-chat-hf:开源的大型语言模型,有70亿用于聊天任务。
  3. daryl149/llama-2-13b-chat-hf:开源的大型语言模型,有130亿参数,用于聊天任务。
  4. mistralai/Mistral-7B-Instruct-v0.2:这是一个70亿参数的模型,可能专门用于理解并遵循自然语言指令。

上述模型可以用于各种NLP任务,包括文本生成、问答、文本摘要等。如果大家对这些模型感兴趣,并且想要在项目中使用它们,可以直接在Hugging Face的模型库中搜索这些名称,然后按照提供的指南使用。

8.3  准备环境

(1)通过如下命令查看当前系统上可用的NVIDIA GPU设备。nvidia-smi 是 NVIDIA System Management Interface 的缩写,它是一个监控和管理系统上NVIDIA GPU的工具。

! nvidia-smi -L

执行后会输出如下两台Tesla T4的GPU信息:

GPU 0: Tesla T4 (UUID: GPU-c4608ceb-4488-50e9-d7b8-68c1fde18d94)
GPU 1: Tesla T4 (UUID: GPU-cf887598-25e4-88c0-8fc2-f8bea6d6434e)

对上面输出的具体说明如下:

  1. GPU 0 和 GPU 1 分别表示系统中的第一块和第二块GPU。
  2. Tesla T4 是NVIDIA推出的一款GPU,常用于服务器和工作站,适用于AI推理和某些图形工作负载。
  3. (UUID: ...) 是每块GPU的唯一标识符,通常用于识别和管理系统中的GPU资源。

从上面的输出中可知:

  1. 系统上安装了两块Tesla T4 GPU。
  2. 每块GPU都有一个唯一的UUID,这有助于在需要时对其进行单独管理或监控。

如果正在分析一个项目,并且项目涉及到使用GPU进行计算,了解系统中可用的GPU资源是非常重要的。例如,在使用Hugging Face的Transformers库或进行深度学习模型训练时,GPU可以显著加速处理过程。

(2)在Jupyter Notebook环境中安装和更新需要的Python库,这些库主要用于支持自然语言处理、深度学习和其他相关任务。安装的库包括sentence_transformers、langchain、tiktoken、pypdf、faiss-gpu、InstructorEmbedding、transformers、accelerate和bitsandbytes。安装完成后,使用clear_output函数清除了Jupyter Notebook中的输出,以便进行下一步操作。

from IPython.display import clear_output

! pip install sentence_transformers==2.2.2

! pip install -qq -U langchain
! pip install -qq -U tiktoken
! pip install -qq -U pypdf
! pip install -qq -U faiss-gpu
! pip install -qq -U InstructorEmbedding 

! pip install -qq -U transformers 
! pip install -qq -U accelerate
! pip install -qq -U bitsandbytes

clear_output()

执行后输出显示了安装过程的CPU时间和实际经过的墙钟时间(wall time):

CPU times: user 1.63 s, sys: 429 ms, total: 2.06 s
Wall time: 2min 24s

(3)导入一系列库和模块,用于构建和配置一个基于自然语言处理(NLP)的问答系统。

import warnings
warnings.filterwarnings("ignore")

import os
import glob
import textwrap
import time

import langchain
from langchain.document_loaders import PyPDFLoader, DirectoryLoader
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain import PromptTemplate, LLMChain
from langchain.vectorstores import FAISS
from langchain.llms import HuggingFacePipeline
from langchain.embeddings import HuggingFaceInstructEmbeddings
from langchain.chains import RetrievalQA

import torch
import transformers
from transformers import (
    AutoTokenizer, AutoModelForCausalLM,
    BitsAndBytesConfig,
    pipeline
)

clear_output()

上述代码导入了多个库,包括文档加载、文本预处理、向量存储、语言模型调用和问答系统集成,具体说明如下所示。

  1. 警告过滤:通过warnings.filterwarnings("ignore")忽略不重要的警告信息,以简化输出。
  2. 导入基础库:加载了os、glob、textwrap和time等基础Python库,用于文件操作、字符串处理和时间管理。
  3. LangChain库的组件:引入了langchain库的多个模块,用于构建NLP应用的不同部分:
  • 文档加载器 (PyPDFLoader, DirectoryLoader):用于加载PDF和其他格式的文档。
  • 文本分割器 (RecursiveCharacterTextSplitter) :用于将长文本分割成更易处理的小块。
  • 模板和链 (PromptTemplate, LLMChain) :用于创建和管理问答系统中使用的提示模板和处理链。
  • 向量存储 (FAISS) :用于存储文本的向量表示,以便快速检索。
  • 大型语言模型 (HuggingFacePipeline)和嵌入模型 (HuggingFaceInstructEmbeddings):用于生成文本的嵌入表示和执行语言生成任务。
  • 检索问答 (RetrievalQA) :用于构建一个检索增强的问答系统。
  1. 深度学习库:导入了torch和transformers库,这是NLP任务中常用的深度学习库。其中AutoTokenizer和AutoModelForCausalLM用于加载预训练的分词器和语言模型,BitsAndBytesConfig用于配置模型优化,pipeline用于创建模型的流水线接口。
  2. 清理输出:使用clear_output()清除Jupyter Notebook中的输出,以便进行下一步操作。

(4)打印输出当前安装在Python环境中的langchain、torch和transformers库的版本,每个库的版本信息通过访问库的__version__属性获得。

print('langchain:', langchain.__version__)
print('torch:', torch.__version__)
print('transformers:', transformers.__version__)

执行后输出作者电脑系统的版本信息:

langchain: 0.1.10
torch: 2.0.0
transformers: 4.38.2

(5)使用glob和sorted函数来获取指定目录下的所有文件,并按照一定的顺序对进行排序。

sorted(glob.glob('input/harry-potter-books-in-pdf-1-7/HP books/*'))

执行上述代码后将得到一个input/harry-potter-books-in-pdf-1-7/HP books/目录中所有文件和子目录路径的列表,且列表中的路径是按字母顺序排列的,目录中的文件都是《哈利·波特》的电子书文件。执行后会输出:

['/input/harry-potter-books-in-pdf-1-7/HP books/Harry Potter - Book 1 - The Sorcerers Stone.pdf',
 '/input/harry-potter-books-in-pdf-1-7/HP books/Harry Potter - Book 2 - The Chamber of Secrets.pdf',
 '/input/harry-potter-books-in-pdf-1-7/HP books/Harry Potter - Book 3 - The Prisoner of Azkaban.pdf',
 '/input/harry-potter-books-in-pdf-1-7/HP books/Harry Potter - Book 4 - The Goblet of Fire.pdf',
 '/input/harry-potter-books-in-pdf-1-7/HP books/Harry Potter - Book 5 - The Order of the Phoenix.pdf',
 '/input/harry-potter-books-in-pdf-1-7/HP books/Harry Potter - Book 6 - The Half-Blood Prince.pdf',
 '/input/harry-potter-books-in-pdf-1-7/HP books/Harry Potter - Book 7 - The Deathly Hallows.pdf']

未完待续

  • 47
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码农三叔

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值