政策文档到大模型自动化抽取部署方案
本文档分三个阶段：1、政策文档抽取QA问答 2、结构化数据融合大语言模型问答 3、自动化部署一、政策文档抽取QA问答由于格式复杂、标准多样，非结构化数据处理起来既困难又耗时。面对海量非结构化数据，如果没有自动化解决方案，人工手动处理将面临巨大挑战。1.传统的QA问答抽取算法(非大模型)传统的QA生成框架需要三个流程：pdf/word问答转txt、文档分块、问题生成，三个流程分别涉及到不同的技术1.pdf问答转txt文本转化：可以通过技术PyPDF2,pdfminer,textract,slate，直接提取文本内容。2.文档分块通过规则,通过分割算法方案参考：https://github.com/chschock/textsplit有相关论文在做文本分割算法3.Learning to Ask模型基于模型在中文问答语料DuReader数据上和已经结构化的政策QA问答数据集上微调，得到通用Learning to Ask模型；DuReader数据数据集主要包含的QA问答对，可以用此数据集中的答案生成问题来微调模型。此模型的输入为：上面文档分块的txt文本输出为：对应的问题Q2.基于大模型的QA问答抽取算法本版本只实现了word文档的抽取，(1)读取word文档内容注意通过python-docx可以读取docx文件pip install python-docx (2)清洗待抽取的文档内容去除无法提取(容易出错的)的部分：表格、图片、流程图(3)对待抽取内容分块python-docx 可以提取word文档的段落，按照段落组待提取的内容分块，经过实验每个块字数，实验结果每块在500-600左右的字数提取效果最好。(4)写prompt内容，抽取返回特定格式本版本使用百川2-13b模型作为抽取大模型，关键的prompt为：prompt = "你是湖南省政策文档QA问答提取助手,需要提取的内容如下：" + cont + "抽取的内容结束" new_query = [{"role":"system","content":prompt},{"role":"user","content":"参考上面内容，尽可能多的提取QA问答json数据,Q为对应问题，以问号结尾，A为对应答案，必须返回json格式 ,格式为：[{\"Q\":抽取的问题,\"A\":抽取的答案},{\"Q\":抽取的问题,\"A\":抽取的答案}]"}] 其中，cont为待提取块文本内容。实例：待提取内如如下：3 政策总体情况 【长沙市】个人待遇政策 （1）目前辖区内已开展的业务 职工：药店购药、普通门诊、普通住院、单病种住院、意外伤害住院、门特、特殊药品、门诊急诊、 生育门诊、生育住院 离休：普通门诊、普通住院 居民：门诊统筹、门特、普通住院、单病种住院、意外伤害住院、门诊两病、特殊药品、居民生育 住院、门诊急诊 （2）参保人存在险种划分 职工：职工基本医疗保险、职工大病互助保险、公务员医疗补助保险、职工生育保险。 离休：离休基本医疗保险 居民：居民基本医疗保险、居民大病 （3）具体基金分类和享受待遇人群分类 职工基金分类：职工基本医疗保险统筹基金、职工大病互助保险基金、公务员医疗补助基金、职工 享受待遇人群：在职、退休 离休基金分类：离休基金、个人账户金 离休享受待遇人群：离休、老红军、二乙伤残军人 居民基金分类：居民统筹基金、居民大病保险基金、医疗救助基金、特惠保金、医院减免金、财政 兜底金 居民享受待遇人群：新生儿、在校学生、大学生、未成年人、农村居民、非从业居民、老年居民。提取之后的结果如下：{ "data": [ { "question": "长沙市的个人待遇政策有哪些业务项目？", "answer": "目前辖区内已开展的业务包括：职工的药店购药、普通门诊、普通住院、单病种住院、意外伤害住院、门特、特殊药品、门诊急诊、生育门诊、生育住院；离休人员的普通门诊和普通住院；居民的门诊统筹、门特、普通住院、单病种住院、意外伤害住院、门诊两病、特殊药品、居民生育住院、门诊急诊。" }, { "question": "职工参保人存在哪些险种划分？", "answer": "职工参保人存在以下险种划分：职工基本医疗保险、职工大病互助保险、公务员医疗补助保险、职工生育保险。" }, { "question": "离休参保人存在哪些险种划分？", "answer": "离休参保人存在以下险种划分：离休基本医疗保险。" }, { "question": "居民参保人存在哪些险种划分？", "answer": "居民参保人存在以下险种划分：居民基本医疗保险、居民大病保险。" }, { "question": "职工基金的分类和享受待遇人群有哪些？", "answer": "职工基金分为职工基本医疗保险统筹基金、职工大病互助保险基金、公务员医疗补助基金。享受待遇的人群包括在职和退休人员。" }, { "question": "离休基金的分类和享受待遇人群有哪些？", "answer": "离休基金分为离休基金和个人账户金。享受待遇的人群包括离休、老红军和二乙伤残军人。" }, { "question": "居民基金的分类和享受待遇人群有哪些？", "answer": "居民基金分为居民统筹基金、居民大病 (5)大模型返回结果后置处理通过正则对提取的后置内容做处理.二、结构化数据融合大语言模型问答1.抽取QA问答数据和历史问答合并将新抽取的QA问答数据和已经存在QA问答库数据出重合并2.训练检索模型（可以省略）将合并后的QA问答数据中的问题库，调用同义不同问检索模型，训练同义不同问模型。如果之前的问题库数据量已经够多了，可以不用训练，直接推理就行。3.检索后的top5数据用大模型回答将检索模型检索的结果，给到大模型，同时将用户问题给到大模型，让大模型回答相关问题。三、自动化部署(待开发)整个自动化部署可以通过shell脚本，pipeline处理整个过程自动化部署主要涉及到两个方面：1.增量数据处理 2.服务的重启1.增量数据处理(1)可以通过python 脚本，将提取的QA问答对数据从mysql（大模型抽取后后端开发放到数据库中）同步到服务器端本地文件中。(2)和之前的QA问答对合并处理。(3)并将对应的问题，通过同义不同问模型转为embedding问题向量。2.服务的重启数据处理完成后，服务启动的时候会初始化模型和数据到内存中，所以需要重启服务。主要重启的服务有：(1)rasa框架服务器，主要提供对话的pipeline处理(2)对话大模型服务，要重新加载数据时间：从结构化一个政策文档10页word文档，到可以在大模型中访问，预计抽取可能2-5分钟，中间数据处理和服务重启预计2-5分钟，整体10分钟内可以完成。