在文章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模型来构建智能文档问答助手,希望能给读者们一些启发。