流程

基于向量数据库与GPT3.5的通用本地知识库方案
整个流程非常简略,也没有杂乱的地方,信任重视GPT范畴的都会看到过如上的流程。

首要就以下几个点:

  • 将本地答案数据集,转为向量存储到向量数据
  • 当用户输入查询的问题时,把问题转为向量然后从向量数据库中查询附近的答案topK 这个时分其实就是我们最普遍的问答查询计划,在没有GPT的时分就直接回来相关的答案整个流程就完毕了
  • 现在有GPT了能够优化答复内容的整体结构,在单纯的搜索场景下其实这个优化没什么含义。但如果在客服等的聊天场景下,引用相关范畴内容回复时,这样就会显得不那么的突兀。

运用范围

请参考 OpenAI 的运用政策

openai.com/policies/us…

我的 MSD 事例仅仅探究其中一个笔直范畴的可行性,你能够把这个项目迁移到任何你了解的范畴中,而不必拘泥于医疗范畴

难点

查询数据不精确

根据数据的优化

问答拆分查询

在上面的比如中,我们直接将问题和答案做匹配,有些时分由于问题的模糊性会导致匹配不相关的答案。

如果在现已有很多的问答映射数据的状况下,问题直接搜索问题集,然后根据已有映射回来当前问题匹配的问题集的答案,这样能够提升必定的问题精确性。

抽取主题词生成向量数据

由于答案中有很多非答案的内容,能够经过抽取答案主题然后组合生成向量数据,也能够在必定程度上提升类似度,主题算法有LDA、LSA等。

根据自练习的Embedding模型

openAI 的Embedding模型数据更多是根据普遍性数据练习,如果你要做问答的范畴太过于专业有或许就会呈现查询数据不精确的状况。

解决计划是自练习 Embedding 模型,在这里我引荐一个项目 text2vec ,shibing624 现已给出了一个模型根据 CoSENT + MacBERT +STS-B,shibing624/text2vec-base-chinese。

我也在前些日子练习了根据 CoSENT + LERT + STS-B的两个模型一个隐层巨细是1024的text2vec-large-chinese,另一个是768的text2vec-base-chinese。也欢迎比对。

为了做这个Demo我还练习了两个医疗问答相关的模型根据cMedQQ数据集,其他与上面的一致分别是text2vec-cmedqq-lert-large和text2vec-cmedqq-lert-base。

根据 Fine-tune

现在我自身测试下来,运用问答数据集对GPT模型进行Fine-tune后,问答精确性会大幅提高。你能够理解为GPT经过很多的专业范畴数据的学习后成为了该范畴专家,然后配合调小接口中temperature参数,能够得到更精确的成果。

但 现在 Fine-tune 练习和运用成本仍是太高,每天都会有新的数据,不或许高频的进行 Fine-tune。我的一个想法是每隔一个长周期对数据进行 Fine-tune ,然后配合外置的向量数据库的类似查询来补足 Fine-tune 模型自身的数据落后问题。

项目地址

github.com/GanymedeNil…

本文正在参加「技能视角深入 ChatGPT」征文活动