NLP(六十一)使用Baichuan-13B-Chat模型构建智能文档问答助手

在文章NLP(六十)Baichuan-13B-Chat模型使用体验中,我们介绍了Baichuan-13B-Chat模型及其在向量嵌入和文档阅读上的初步尝试。

本文将详细介绍如何使用Baichuan-13B-Chat模型来构建智能文档问答助手。

文档问答流程

智能文档问答助手的流程图如下:

  • 文档加载(Document Loading):加载文档,文档格式为URL,PDF,Database。本项目暂时先支持txt文件,后续将支持更多文件格式;
  • 文档划分(Splitting):将文档按照特定格式进行划分,形成文档片段。本项目采用的文档划分方式为LangChain中的RecursiveCharacterTextSplitter,参考网址为:https://python.langchain.com/docs/modules/data_connection/document_transformers/text_splitters/recursive_text_splitter
  • 文档存储(Storage):将划分后的文档进行向量嵌入,再插入至向量数据库。本项目采用的储存方式为ElasticSearch及向量数据库Milvus。
  • 文档召回:对于输入query,从文档存储中召回相关文档片段。本项目采用的召回方式为ElasticSearch中的内置BM25相似度算法及Milvus中的向量距离。
  • 问答输出:对于召回文档和输入query,构建合适的Prompt,利用大模型(LLM)输出最终答案。

下面讲介绍细节。本项目已在Github上开源,项目网址为:https://github.com/percent4/document_qa_with_llm

环境搭建

本项目开发的Web框架为Flask,API接口两个:文件上传接口和文档问答接口。文件上传接口如下:

文档召回采用ElasticSearch和Milvus相结合的方式,设置ElasticSearch和Milvus召回最相似文本数量为2。

ElasticSearch中创建的index为docs,mapping结构如下:

json 复制代码
{
  "docs" : {
    "mappings" : {
      "properties" : {
        "cont_id" : {
          "type" : "integer"
        },
        "content" : {
          "type" : "text",
          "analyzer" : "ik_smart"
        },
        "source" : {
          "type" : "text"
        }
      }
    }
  }
}

其中source代表上传文档名称,cont_id为文本片段编号,content为文本片段。content字段采用的analyzer为ik_smart,该analyzer可较好地对中文进行分词。

Milvus创建的collection为docs_qa,schema如下:


embeddings字段为Baichuan-13B-Chat模型的文本向量嵌入,向量维度为512,范数为1(即单位向量),搜索距离度量采用IP,即两个向量的内积。

大模型采用Baichuan-13B-Chat,主要用于文本片段的向量嵌入和文档问答。关于Baichuan-13B-Chat模型的部署和使用,可参考文章NLP(六十)Baichuan-13B-Chat模型使用体验

文档问答

本文使用的文档为《封神》耗资30亿,第一部上映第次日,北京文化跌停,访问网址为:https://m.jrj.com.cn/madapter/stock/2023/07/22141537710254.shtml ,将其文本内容保存为txt文件,并通过文件上传接口,将数据内容插入至ES和Milvus。

我们的问题(输入query)为:封神第一部什么时候上映的?,对其进行向量嵌入,在ES和Milvus中召回的相似文本为:

bash 复制代码
《封神》耗资30亿,第一部上映第次日,北京文化跌停热点快报 2023-07-22 14:15:04《封神第一部》刚刚上映,北京文化股价却出现下跌。7月21日,A股影视传媒板块震荡下挫,北京文化收于跌停,报7.56元,总市值54.12亿元,板块内个股慈文传媒、荣信文化、中国出版、上海电影等跟跌。值得关注的是,《封神第一部》7月20日才正式上映,北京文化为该影片的出品方。
落地误差只有1公里,3条飞船实现了第一阶段的全部任务。
北京文化曾成功投资《我不是药神》《战狼》《流浪地球》《你好,李焕英》等多部爆款影片。此前《封神第一部》宣布定档,北京文化曾迎来3连板。

大模型问答的Prompt为:

json 复制代码
[
    {
        "role": "system",
        "content": "你是一个出色的文档问答助手,回答要合理、简洁,回复语言采用中文,。若问题与文本片段相关,请根据给定的文本片段和问题,答案以\"根据文档知识\"开头若问题与文本片段相关性较小,则使用外部知识回答问题,答案以\"根据外部知识\"开头。"
    },
    {
        "role": "user",
        "content": "使用下面的文本片段列表,回答问题:封神第一部什么时候上映的?\n\n文本片段1: 《封神》耗资30亿,第一部上映第次日,北京文化跌停热点快报 2023-07-22 14:15:04《封神第一部》刚刚上映,北京文化股价却出现下跌。7月21日,A股影视传媒板块震荡下挫,北京文化收于跌停,报7.56元,总市值54.12亿元,板块内个股慈文传媒、荣信文化、中国出版、上海电影等跟跌。值得关注的是,《封神第一部》7月20日才正式上映,北京文化为该影片的出品方。\n文本片段2: 落地误差只有1公里,3条飞船实现了第一阶段的全部任务。\n文本片段3: 北京文化曾成功投资《我不是药神》《战狼》《流浪地球》《你好,李焕英》等多部爆款影片。此前《封神第一部》宣布定档,北京文化曾迎来3连板。\n"
    }
]

输出答案为:

根据文档知识,《封神第一部》于2023年7月20日上映。

更多测试内容可参考本项目的Github网址。

总结

本项目的Github网址为:https://github.com/percent4/document_qa_with_llm ,后续将持续优化这个项目,提升文档问答的方便性和智能性。

本文详细介绍了如何使用Baichuan-13B-Chat模型来构建智能文档问答助手,希望能给读者们一些启发。

相关推荐
肥猪猪爸31 分钟前
使用卡尔曼滤波器估计pybullet中的机器人位置
数据结构·人工智能·python·算法·机器人·卡尔曼滤波·pybullet
LZXCyrus1 小时前
【杂记】vLLM如何指定GPU单卡/多卡离线推理
人工智能·经验分享·python·深度学习·语言模型·llm·vllm
我感觉。1 小时前
【机器学习chp4】特征工程
人工智能·机器学习·主成分分析·特征工程
YRr YRr1 小时前
深度学习神经网络中的优化器的使用
人工智能·深度学习·神经网络
DieYoung_Alive1 小时前
一篇文章了解机器学习(下)
人工智能·机器学习
夏沫的梦1 小时前
生成式AI对产业的影响与冲击
人工智能·aigc
goomind2 小时前
YOLOv8实战木材缺陷识别
人工智能·yolo·目标检测·缺陷检测·pyqt5·木材缺陷识别
只怕自己不够好2 小时前
《OpenCV 图像基础操作全解析:从读取到像素处理与 ROI 应用》
人工智能·opencv·计算机视觉
幻风_huanfeng2 小时前
人工智能之数学基础:线性代数在人工智能中的地位
人工智能·深度学习·神经网络·线性代数·机器学习·自然语言处理
嵌入式大圣2 小时前
嵌入式系统与OpenCV
人工智能·opencv·计算机视觉