亚马逊AWS官方博客
基于 AWS 无服务器架构的大语言模型应用构建 (理论篇)
基于 AWS 无服务器架构的大语言模型应用构建,分为上下篇两部分,此为上篇(理论篇),重点介绍在此应用构建时涉及到的技术背景和理论知识。在下篇(工程篇)中,我们会继续从工程实现角度介绍如何借助 AWS 无服务器架构实现构建知识问答机器人场景。
大语言模型的前世今生
大型语言模型(Large Language Model / LLM)是一种语言模型,由具有许多参数(通常为数十亿个权重或更多)的神经网络组成,使用自监督学习或半监督学习对大量未标记文本进行训练。LLM 出现于 2018 年左右,并在各种各样的任务中表现出色。这已经将自然语言处理研究的重点从之前为特定任务训练专门的监督模型的范式转移了。
LLM 是通用模型,擅长于广泛的任务,而不是针对一项特定任务(例如情感分析、命名实体识别或数学推理)进行训练。他们完成任务的技能,以及他们能够完成的任务范围,似乎是分配给他们的资源量(数据、参数大小、计算能力)的函数,以一种不依赖的方式在设计上取得更多突破。
尽管在预测句子中的下一个单词等简单任务上接受过训练,但发现具有足够训练和参数计数的神经语言模型可以捕获人类语言的大部分句法和语义。此外,大型语言模型展示了相当多的关于世界的常识,并且能够在训练期间“记住”大量事实。
大语言模型工作的分类和应用场景举例
大语言模型工作的分类
Model Train
从 0 到 1 构建大语言模型,技术和资源门槛高,需要大量的金钱和时间成本。
Model Fine-Tune
基于开源 LLM 进行 fine-tune 以更好适用业务需求,需要专有数据进行持续的模型优化工作。
Model 应用
直接部署开源 LLM 进行推理或者调用闭源 LLM 的 API,主要通过工程化(如提示工程)获得大语言模型的能力。
大语言模型的应用场景举例
智能对话
陪伴机器人,智能客服,虚拟数字人对话,智能 NPC
智能问答
智能搜索,智能知识库,问答社区
代码辅助
辅助编程,程序语言转换,代码检查,程序文档编写
内容创意生成
剧本/小说/论文编写,文字摘要生成,广告营销文案,新闻采编
其他
语言翻译,语法分析,情感检查
大语言模型下的关键能力
理解指令的能力
我们要先理解 In-Context Learning 进化到 Instruct Learning 的演进。
In-Context Learning(语境学习)
In-Context Learning 是一种范式,允许语言在仅给出几个以演示的形式为例子来学习任务的模型。简单来说,In Context Learning 只是拿出例子让 LLM 看了一眼,并没有根据例子,用反向传播去修正 LLM 模型参数的动作,就要求它去预测新例子。根据定义,我们可以看出 In-Context Learning 和其他相关概念之间的区别:
(1)Prompt Learning:Prompt Learning 是以离散的模板或鼓励模型的软参数预测所需的输出。严格来讲,In-Context Learning 可以看作是 Prompt Tuning 的一个子类,其中演示是提示的一部分。
(2)Few-Shot Learning:Few-Shot Learning 是通用机器学习方法,此方法借助有限数量的监督示例学习到了最佳模型参数。相比之下,In-Context Learning 不需要参数更新,直接执行在预训练的 LLM 上。
*也有主流观点会直接将 In-Context Learning 和 Few-Shot Learning 直接视作类似概念。
Instruct Learning(指示学习)
让 LLM 适配人的习惯命令表达方式,而不是反过来让人去适配 LLM,绞尽脑汁地想出一个能工作的命令(这就是 Instruct 技术出来之前,Prompt 技术在做的事情),而这增加了 LLM 的易用性和用户体验。
通过 Instruct 指令数据的微调,现在大语言模型够直接理解指令了,而不需要给它一些例子,不少开源模型通过指令跟随这种方法也拥有了这种能力。下侧图示就是一个例子,上半部分的图片中,让 LLM 回答问题的时候,想引导 LLM 用亲爱的玩家开头,就需要给一些例子。但是 Instruct 微调后的 LLM 就不需要了,也就是下半张图的示例。这个工作其实是大大改善了人类和 LLM 交互的方式,变得更加友好了。
无害化
达成这样的目标是在 Instruct Tuning(指令微调)或者模型预训练中做到的。通过加入相关的样本来纠正模型,所谓无害化比较抽象,简单来说是两点,回复文明礼貌,价值观正确;拒绝知识边界以外的问题,一本正经胡说八道一定比说不知道更不好。比如现在很多大语言模型在回复中,会这样告诉您,我只是一个大语言模型 AI, 无法了解什么等等。关于这一点需要很多来自用户的样本数据反馈才会慢慢改善。
完成指令的能力
简单来说,是知识抽取/文本分析/文本摘要/创作,多任务的能力。
Prompt 质量
Prompt(提示词)
给 LLM 的指令,它可以是一个问题、一段文字描述,甚至可以是带有一堆参数的文字描述。LLM 会基于 Prompt 所提供的信息,生成对应的内容从而获得符合预期的结果。
Prompt Engineering(提示工程)
是人工智能中的一个概念,特别是自然语言处理(NLP)。 在提示工程中,任务的描述会被嵌入到输入中。例如,不是隐含地给予模型一定的参数,而是以问题的形式直接输入。Prompt Engineering 的目标是创建高度有效和可控的 LLM 系统,使其能够准确、可靠地执行特定任务。
Prompt 编写原则
1. 编写清晰、具体的指令
2. 给模型时间去思考
对一些复杂的问题,需要给模型更多时间思考,示例上给的是 Few-shot CoT (Chain of Thought)的例子:给出一些 example;在 example 的示例回答中,把分析过程写出来,供模型参考。
知识召回的能力
以聊天机器人场景举例,一般来说会采用分流器对⽤户输⼊进⾏意图识别,如果识别为闲聊,直接进 LLM 进行多轮对话,可以基于想要的聊天风格,给一些 Few-Shot Prompt;如果识别为信息获取,则跳转到知识召回。因此知识召回能力是大模型输入的前置步骤,非常重要。为了确保知识召回的准确性,需要注意以下几点:
合适的向量化模型
为了达到好的准确性,第一个需要选择合适的向量化模型。1)注意语言环境,关注这些模型是否有多语言支持,这些模型在不同语言上能力差别很大。 2)结合自己的业务场景,对于垂直行业,例如金融场景,可以关注特定语料的 benchmark。
让用户 Query 和知识语义相似
知识构造
为了达到好的准确性,尽可能的在让用户的 query 和知识相似。(1)两种形式,文档片段和问答对:问答对可以通过问题与用户 query 求相似,准度会比较高,相应的问答对的整理成本也会更高;(2)文档切分的长度,需要和语义模型的长度适应;(3)在切分时,要尽可能保证语义完整,除了按照长度,还应该配合一些分割符;(4)模型支持的 Score Function,在后续的向量检索时应该保持一致。
知识增强
考虑到上述问答对整理的成本比较高,可以利用效果更好的商业闭源 LLM 基于文档生成问答对,很多时候可以得到比较好质量的问答对再进行向量索引。对于过长的段落,也可以基于效果更好的商业闭源来帮我们做段落的摘要。
多样化的知识来源
在真实的业务环境中,常常需要支持多种来源的知识。典型场景是除了文档数据,还包括存贮在 DB 中的数据,此类数据一般属于可变数据,比如游戏中的参数,比如公司的组织架构,比如部门的接口人等。对于存贮在 DB 中的数据,架构上可以加上 Text2sql 到 DB 的流程。
参考链接
大语言模型-维基百科:https://en.wikipedia.org/wiki/Large_language_model
通向 AGI 之路:大型语言模型(LLM)技术精要:https://zhuanlan.zhihu.com/p/597586623
A survey of In-Context Learning:https://arxiv.org/pdf/2301.00234.pdf
SentenceTransformers Documentation:https://www.sbert.net/index.html
text2vec-base-chinese:https://huggingface.co/shibing624/text2vec-base-chinese