一、简介
在大语言模型应用的场景中,我们会自然想到一个常见的场景–智能问答机器人。对于不同公司而言,这种问答机器人所依赖的知识库是很个性的,因为每个公司的业务场景、业务流程、业务规则等都不相同。如何利用大语言模型技术构建这样一个问答机器人呢?显然我们不能直接问gpt某个公司的内部业务知识库中的信息,因为它的训练数据中不包含这些内容,而且知识库还会经常更新。
那能否用这些知识库数据对预训练模型进行继续训练从而让大模型适应公司特定的数据集或案例呢?openai官方不建议这么做,因为这种方式(openai称为微调模型)更适合于教授专门的任务或风格,而对于事实回忆则不太可靠。当对模型进行微调时,就像是在为一周后的考试复习。当考试来临时,模型可能会忘记细节,或记错从未读过的事实。
微调模型不合适,能否在对gpt做问答时,直接把知识库的信息给到gpt让gpt直接回答呢?这样实时给gpt信息就不会像微调模型一样可能记错事实了。显然也不行,因为gpt的上下文窗口目前最大只能有128K的token量,这显然满足不了公司搭建智能问答机器人的会话需求。
那怎样才能既能让模型清楚的记住知识库的知识,又能不受gpt上下文token量限制的制约呢?这时候,emdeddings模型就派上用场了。
二、基本概念和原理
什么是embeddings呢?【1】
在自然语言处理和机器学习领域,“embeddings” 是指将单词、短语或文本转换成连续向量空间的过程。这个向量空间通常被称为嵌入空间(embedding space),而生成的向量则称为嵌入向量(embedding vector)或向量嵌入(vector embedding)。
嵌入向量可以捕获单词、短语或文本的语义信息,使得它们可以在数学上进行比较和计算。这种比较和计算在自然语言处理和机器学习中经常被用于各种任务,例如文本分类、语义搜索、词语相似性计算等。
用通俗的语言理解embeddings就是将文本等信息转换为机器能理解的数学表示,也就是向量化。有了向量表示,就可以对它们进行数学计算,比如通过计算两个向量的角度来度量它们之间的相似度。
比如【2】:
"机器学习"表示为 [1,2,3] "深度学习"表示为[2,3,3] "英雄联盟"表示为[9,1,3] 使用余弦相似度(余弦相似度是一种用于衡量向量之间相似度的指标,可以用于文本嵌入之间的相似度)在计算机中来判断文本之间的距离:
“机器学习”与“深度学习”的距离:
“机器学习”与“英雄联盟“的距离”:
“机器学习”与“深度学习”两个文本之间的余弦相似度更高,表示它们在语义上更相似。
当然上面的例子只是一个三维的数据,它显然满足不了复杂的的语义场景。在机器学习领域,这个维度可以达到几百甚至上千,维度越高,对语言的理解就会越精确。不同的模型有不同的维度,比如OpenAI 的 text-embedding-ada-002 有 1536 维。
文本embedding的算法【2】:
文本嵌入算法是指将文本数据转化为向量表示的具体算法,通常包括以下几个步骤:
\1. 分词:将文本划分成一个个单词或短语。
\2. 构建词汇表:将分词后的单词或短语建立词汇表,并为每个单词或短语赋予一个唯一的编号。
\3. 计算词嵌入:使用预训练的模型或自行训练的模型,将每个单词或短语映射到向量空间中。
\4. 计算文本嵌入:将文本中每个单词或短语的向量表示取平均或加权平均,得到整个文本的向量表示。
常见的文本嵌入算法包括 Word2Vec、GloVe、FastText 等。这些算法通过预训练或自行训练的方式,将单词或短语映射到低维向量空间中,从而能够在计算机中方便地处理文本数据。
三、如何构建智能问答机器人
那么有了embeddings技术之后有什么用呢?
我们可以将公司知识库数据向量化,当用户提问时,我们把用户的问题也向量化,然后根据向量化后的问题到向量化后的知识库中进行搜索,将搜索结果按照相关性进行排序。(按照上文embeddings的逻辑,相关性越强,值越大)之后把用户的问题和相关性最强的知识库中的文本给到gpt,让它根据实时数据给出最终的回答。
具体流程如下【3】:
【1】准备嵌入数据
(1)收集:公司知识库中的文档;
(2)分块:文件被分割成简短、大部分自成一体的部分,以便嵌入其中;
(3)嵌入:每个部分用 OpenAI API进行嵌入;
(4)存储:保存嵌入(对于大型数据集,可使用矢量数据库)。
【2】 搜索
(1)给定用户问题,通过 OpenAI API 生成查询的嵌入式内容;
(2)进行搜索,根据查询嵌入和文本嵌入之间的距离对文本进行排序。
搜索后返回两个列表:
-
按相关性排序的前 N 个文本
-
相应的相关性得分
【3】提问
(1)将问题和最相关的文本插入给 GPT 的Prompt中;
(2)返回 GPT 的答案。
以下是整个流程的示意图,根据此我们就可以搭建一个依靠大语言模型的公司专属问答机器人了。
四、embeddings更多应用场景【4】
1. 从数据集获取嵌入式数据
举例说明如何从大型数据集中获取嵌入式数据。
详情链接:
https://cookbook.openai.com/examples/get_embeddings_from_dataset
2. 使用嵌入式进行语义文本搜索
通过嵌入式的搜索查询,就能以非常高效的方式和极低的成本对所有评论进行语义搜索。比如搜索“物流太慢”的评论,通过嵌入式的搜索进行相关性对比,就能拿到相关性排序前N的评论。
详情链接:
https://cookbook.openai.com/examples/semantic_text_search_using_embeddings
3. 使用嵌入和最近邻搜索进行推荐
演示了如何使用嵌入式查找类似的推荐项目。比如给定一篇文章,还有哪些文章与之最相似?
要找到相似文章,我们可以分三步走:
- 获取所有文章描述的相似性嵌入信息
- 计算源标题与所有其他文章之间的距离
- 打印出与源标题最接近的其他文章
详情链接:
https://cookbook.openai.com/examples/recommendation_using_embeddings
4. 二维嵌入可视化
t-SNE(t-Distributed Stochastic Neighbor Embedding)是一种用于降低数据维度的非线性方法,通常用于可视化高维数据。它的目标是将高维空间中的数据点映射到二维或三维空间,同时保持相似度关系。这使得我们能够在较低维度中更好地观察数据点之间的关系,特别是在探索数据集结构和发现簇群时非常有用。
详情链接:
https://cookbook.openai.com/examples/visualizing_embeddings_in_2d
5. 使用嵌入式进行回归
根据评论文本的嵌入情况预测得分。
详情链接:
https://cookbook.openai.com/examples/regression_using_embeddings
6. 使用嵌入式进行分类
在文本分类任务中,我们根据评论文本的嵌入情况来预测食品评论的得分(1 到 5 分)。
详情链接:
https://cookbook.openai.com/examples/classification_using_embeddings
7. 使用嵌入式进行零点分类
在没有任何训练的情况下预测样本的标签。为此,我们可以简单地嵌入每个标签的简短描述,例如正标签和负标签,然后比较样本嵌入和标签描述之间的余弦距离。与样本输入相似度最高的标签就是预测标签。
详情链接:
https://cookbook.openai.com/examples/zeroshot_classification_with_embeddings
8. 为冷启动推荐获取用户和产品嵌入信息
详情链接:
https://cookbook.openai.com/examples/user_and_product_embeddings
9. 聚类
详情链接:
https://cookbook.openai.com/examples/clustering
如何学习AI大模型?
作为一名热心肠的互联网老兵,我决定把宝贵的AI知识分享给大家。 至于能学习到多少就看你的学习毅力和能力了 。我已将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。
这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费
】
一、全套AGI大模型学习路线
AI大模型时代的学习之旅:从基础到前沿,掌握人工智能的核心技能!
二、640套AI大模型报告合集
这套包含640份报告的合集,涵盖了AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师,还是对AI大模型感兴趣的爱好者,这套报告合集都将为您提供宝贵的信息和启示。
三、AI大模型经典PDF籍
随着人工智能技术的飞速发展,AI大模型已经成为了当今科技领域的一大热点。这些大型预训练模型,如GPT-3、BERT、XLNet等,以其强大的语言理解和生成能力,正在改变我们对人工智能的认识。 那以下这些PDF籍就是非常不错的学习资源。
四、AI大模型商业化落地方案
作为普通人,入局大模型时代需要持续学习和实践,不断提高自己的技能和认知水平,同时也需要有责任感和伦理意识,为人工智能的健康发展贡献力量。