RAG即Retrieval-Augmented Generation,在自然语言处理(NLP)中起到关键作用。
好了现在你可以忘掉这段话了。
接下来我们要讲的就是一个东西: 我们问AI问题,AI是怎么组织语言给我们回答的。
你也许会说,不就是找资料,然后copy这,copy那儿嘛,有什么可讲的。
没错,这就是我们人类的写论文的套路嘛。但是对于计算机来说,这个要比人类的处理要复杂一些。接下来我们来看看,计算机是怎么找资料,组织资料的。先看一张图
全是英文哈哈哈,增加难度,我来介绍一下。
这里有一个背景, OpenAI 的 CEO 萨姆·奥特曼(Sam Altman)被公司突然解雇后又被重新聘用。
我们先看到黄色那一小格。
Input就是用户输入,下面那一段英文其实就是说希望AI来评价一下这个事件。
我们再看右上角淡紫色的一格。
chunks就是在处理大量文本或数据时,常常会将其分割成较小的部分(即 Chunks)。我们注意到,两个箭头指向chunks,一个是用户输入的问题,一个是数据库中的documents,都被剪成了chunks。
我们再把这些chunks变成向量,这个过程被称为embedding。变成向量有利于进行后续的分析、比较、计算等操作。
而索引Indexing:则是包括了将文档库分割成较短的 Chunk,与embedding这两个过程。
再看右下角的粉色那一格。
relevant ducument相关的信息
我们找到与用户问题相关的chunks。这怎么找到呢,其实就是比较,我们生成的向量。用户查询首先会经过向量模型得到相应的向量,然后与 数据库 中所有 Chunk 的向量计算相似度,最简单的例如 余弦相似度,然后得到最相近的一系列 Chunk 。
这个过程过程被称为 检索(Retrieval)。
再看左边的一个蓝色的大框。
其实就是根据我们检索出来的相关信息组合起来生产一篇“新的”文章作为回答。
这就是Generation。
综上RAG的三个过程:
Indexing
索引:将文档库分割成较短的 Chunk,即文本块或文档片段,然后构建成向量索引(embedding)。
Retrieval
检索:计算问题和 Chunks 的相似度,检索出若干个相关的 Chunk。
generation
生成:将检索到的Chunks作为背景信息,生成问题的回答。
最后再来一张图片考考你
补充:
为了完成检索,需要离线将文档(ppt、word、pdf等)经过解析、切割甚至OCR转写,然后进行向量化存入数据库中。
OCR是指电子设备(例如扫描仪或数码相机)检查纸上打印的字符,通过检测暗、亮的模式确定其形状,然后用字符识别方法将形状翻译成计算机文字的过程。
2nd Retrieval 其实是第一轮检索出来的chunks按照与用户的问题的相关程度进行排列,相关程度高的 chunks 会被优先展示,从而为用户提供更具针对性和价值的信息。