• Stars
    star
    3,608
  • Rank 12,281 (Top 0.3 %)
  • Language
    Python
  • License
    GNU Affero Genera...
  • Created over 1 year ago
  • Updated over 1 year ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

基于向量数据库与GPT3.5的通用本地知识库方案(A universal local knowledge base solution based on vector database and GPT3.5)

document.ai

基于向量数据库与GPT3.5的通用本地知识库方案(A universal local knowledge base solution based on vector database and GPT3.5)

目录

code 目录中有本次MSD示例的相关示例代码

docs 目录主要是关于我在这个方向的一些思考和总结

流程

整个流程非常简单,也没有复杂的地方,相信关注GPT领域的都会看到过如上的流程。

主要就以下几个点:

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

使用范围

请参考 OpenAI 的使用政策

https://openai.com/policies/usage-policies

我的 MSD 案例只是探索其中一个垂直领域的可行性,你可以把这个项目迁移到任何你熟悉的领域中,而不必拘泥于医疗领域

难点

查询数据不准确

基于数据的优化

问答拆分查询

在上面的例子中,我们直接将问题和答案做匹配,有些时候因为问题的模糊性会导致匹配不相关的答案。

如果在已经有大量的问答映射数据的情况下,问题直接搜索问题集,然后基于已有映射返回当前问题匹配的问题集的答案,这样可以提升一定的问题准确性。

抽取主题词生成向量数据

因为答案中有大量非答案的内容,可以通过抽取答案主题然后组合生成向量数据,也可以在一定程度上提升相似度,主题算法有LDA、LSA等。

基于自训练的Embedding模型

openAI 的Embedding模型数据更多是基于普遍性数据训练,如果你要做问答的领域太过于专业有可能就会出现查询数据不准确的情况。

解决方案是自训练 Embedding 模型,在这里我推荐一个项目 text2vec ,shibing624 已经给出了一个模型基于 CoSENT + MacBERT +STS-Bshibing624/text2vec-base-chinese

我也在前些日子训练了基于 CoSENT + LERT + STS-B的两个模型一个隐层大小是1024的text2vec-large-chinese,另一个是768的text2vec-base-chinese。也欢迎比对。

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

基于 Fine-tune

目前我自身测试下来,使用问答数据集对GPT模型进行Fine-tune后,对于该类问题的准确性大幅提高。你可以理解为GPT通过大量的专业领域数据的训练后,当你对它提问的时候会更像在和这个领域的专家对话,然后配合调小接口中temperature参数,可以得到更确定的结果。

但 现在 Fine-tune 训练和使用成本还是太高,每天都会有新的数据,不可能高频的进行 Fine-tune。我的一个想法是每隔一个长周期对数据进行 Fine-tune ,然后配合外置的向量数据库的相似查询来补足 Fine-tune 模型本身的数据准确性问题。

Buy me a coffee

Buy Me A Coffee

More Repositories

1

srt2fcpxml

The srt subtitle file is converted to a final cut pro subtitle file.(srt字幕文件转为final cut pro 字幕文件)
Go
98
star
2

bilibili_live-danmu

bilibili直播弹幕机 golang版
Go
29
star
3

request-pipeline

This is a chrome extension that forwards the content of network requests on web pages to the processing server.This extension can better help development engineers or test engineers understand the specifics of interface requests and responses in web pages.
JavaScript
26
star
4

zhujian

一个轻量级剪报工具,支持直接将剪切的网页内容保存为 markdown 以及 图片(Beta)
JavaScript
5
star
5

text2vec-onnx

text2vec onnxruntime
Python
5
star
6

GPUMonitor

Python
3
star
7

audio2srt

The WebRTC-based Vad audio cutting algorithm cuts the audio, and then converts the speech to srt subtitles through Alibaba Cloud / Baidu Cloud's speech recognition cloud services.(基于 WebRTC 的 Vad 音频切割算法对音频进行切割,然后通过阿里云/百度云的语音识别云服务将语音转为 srt 字幕,本程序无日使用时长限制)
2
star
8

Go2Msg

Go2Msg 是一个基于 Go 开发的信息发送模块,如果您喜欢欢迎star
Go
1
star
9

go-webrtcvad

cgo interface to WebRTC Voice Activity Dectection
C
1
star
10

bilibili-live-danmu-mac

HTML
1
star
11

mbdpay

mbdpay (面包多支付 mbd.pub) SDK for Go
Go
1
star
12

php7-win-ext

1
star
13

go-structure-to-php-array

Go structure encoded as php array.(go结构编码为php数组)
Go
1
star
14

GanymedeNil.github.io

HTML
1
star
15

ssaview

ssaview live-renders the SSA representation of a go program
Go
1
star