本文正在参与「金石方案」
接上文OpenAI Embedding:快速完结谈天机器人(一)有讲到谈天机器人的一些概念,这篇开始讲讲这个谈天机器人的架构和流程。
总架构图
这里我参照一个现成的架构图来讲如何完结,其是根据Azure多个相关云服务完结的Q&A问答体系(Azure OpenAI Embeddings QnA)。
在这个场景中,Azure OpenAI 服务从文档中创立嵌入向量Embedding。为了答复用户的问题,它检索最相关的文档,然后运用 GPT-3
提取问题对应匹配答案。
知识数据预备
从Knowledge Base
到 Azure Translator
整个流程都是在讲如何处理知识数据,终究得到多条合理巨细长度以及逻辑自洽的文本。需求留意的是在流程中额外用到了Azure 供给的认知服务和翻译服务,我们不必关心。在实践过程中,记住一点,开始你手上有很多长短不一相关事务的知识文本,我们要想方法预处理。包括操控文本长度、移除不必要的标点符号、用滑动窗口算法添加文本之间的相关性。
用滑动窗口算法添加文本之间的相关性,即添加上下文联系。或许有些朋友不清楚,举个例子,下面我用苏轼的诗句《赏花归》来解说下:
赏花归去马如飞, 去马如飞酒力微。 酒力微醒时已暮, 醒时已暮赏花归。
该后一句诗的前四个字,是对前一句最终四个字的重复,最终一句的最终四个字,又是对第一句前四个字的重复,这样便上下接受,前后相关。我们即使将这句诗拆成四句别离去核算Embedding向量,可是GPT在处理文本联系的时分依然能够将其相关起来,其在后面的章节fine-tuning 模型训练时特别有用。
中心Embedding存储和查找
图上这块就是我们要讲的的中心,运用上面预处理的文本得到的文本集合,别离运用Azure OpenAI Service
的text-embedding-ada-002
模型,将每个文本转化为一个1536维的Embedding向量,并存储在Redis数据库中。
需求特别留意的是,此Redis数据库除了具备自身缓存的能力外,还额外安装了Redis Search Module,以支撑运用数据时的向量类似度查找。假如你不想运用Redis,还能够挑选Postgresql;甚至你能够挑选在存储在csv中,当需求向量类似度查找时,将数据加载到内存中,然后运用一些库函数,比如余弦类似度算法进行遍历后比较查询。
用户提出问题和获取答案
最终一块流程是用户的运用场景。用户提出问题,运用Azure Embedding 模型将问题转换成Embedding 向量,然后到 Redis 数据库进行类似度查询,回来Top K最类似的文本,再加上原始问题构建一个新的Prompt,运用Azure OpenAI
的GPT-3.5/Text-davinci
模型进行文本加工和提炼,用户便能得到最贴切的答案。
构建出的新Prompt的格式参阅如下:
text1,text2…textK。根据上面的内容,假如你是一个智能客服xx,请答复问题:question?
提示:虽然上面提到的是Azure OpenAI
,没有讲到原生的OpenAI
,但实际上两者在本质上并无区别,只是Azure OpenAI在合规安全、企业级解决方案等方面愈加完善些。我在后面的章节将会持续运用Azure OpenAI来完结例子的讲解。