自然语言处理:大语言模型入门介绍

news2025/10/25 3:26:39

自然语言处理:大语言模型入门介绍

  • 语言模型的历史演进
  • 大语言模型基础知识
    • 预训练Pre-traning
    • 微调Fine-Tuning
      • 指令微调Instruction Tuning
      • 对齐微调Alignment Tuning
    • 提示Prompt
      • 上下文学习In-context Learning
      • 思维链Chain-of-thought
      • 提示开发(调用ChatGPT的API)
  • 大语言模型未来展望
  • 参考文献

随着自然语言处理(Natural Language Processing, NLP)的发展,研究人员发现扩展模型规模可以提高模型能力,由此创造了术语——大语言模型(Large Language Model, LLM),它代指大型的预训练语言模型(Pre-training Language Model, PLM),其通常包含数千亿(甚至更多)个参数。大语言模型的一个最显著的进展是OpenAI基于LLM开发的聊天机器人ChatGPT,在此篇博客中,我将介绍大语言模型的历史演进、基础知识、核心技术以及未来展望等,并通过调用API介绍ChatGPT是如何搭建的。

语言模型的历史演进

语言模型(LM)是为了对词序列的生成概率进行建模,从而预测未来或缺失的词的概率,其发展主要有以下三个阶段:

  • 统计语言模型(SLM):基于统计学习方法(如马尔可夫假设)建立词预测模型,根据最近的上下文预测下一个词。
  • 神经语言模型(NLM):通过神经网络(如循环神经网络RNN)来描述预测单词序列的概率。
  • 大语言模型(LLM):研究人员发现扩展模型规模可以提高模型能力,通过使用Transformer架构构建大规模语言模型,并确立了“预训练和微调”的范式,即在大规模语料库上进行预训练,对预训练语言模型进行微调以适配不同的下游任务,并提高LLM的各项性能。

大语言模型基础知识

预训练Pre-traning

模型的预训练首先需要高质量的训练数据,这些数据往往来自于网页、书籍、对话、科学文献、代码等,收集到这些数据后,需要对数据进行预处理,特别是消除噪声、冗余、无关和潜在有害的数据。一个典型的预处理数据流程如下:

  • 质量过滤:删除低质量数据;
  • 去重:删除重复数据;
  • 去除隐私:删除涉及隐私的数据;
  • Token化:将原始文本分割成词序列(Token),随后作为大语言模型的输入。

目前大语言模型的主流架构可分为三大类型:编码器-解码器、因果解码器和前缀解码器,还有一种利用上述三种架构搭建的混合架构:

  • 编码器-解码器架构:利用传统的Transformer架构,编码器利用堆叠的多头自注意力层(Self-attention)对输入序列进行编码以学习其潜在表示,而解码器对这些表示进行交叉注意力(Cross-attention)计算并自回归地生成目标序列。目前只有少数LLM是利用此架构搭建,例如T5、BART。
  • 因果解码器架构:它采用单向注意力掩码,以确保每个输入token只能关注过去的token和它本身。输入和输出token通过解码器以相同的方式处理。GPT系列、OPT、BLOOM和Gopher等模型便是基于因果解码器架构开发的,目前使用较为广泛。
  • 前缀解码器架构:前缀解码器架构又称非因果解码器架构,它修正了因果解码器的掩码机制,以使其能够对前缀token执行双向注意力,并仅对生成的token执行单向注意力,这样,与编码器-解码器架构类似,前缀解码器可以双向编码前缀序列并自回归地逐个预测输出token,其中在编码和解码的过程中共享相同的参数。使用此架构的代表:GLM-130B和U-PaLM等。
  • 混合架构:利用混合专家(MoE)策略对上述三种架构进行扩展,例如Switch Transformer和GLaM等。

微调Fine-Tuning

为了使大语言模型适配特定的任务,可使用指令微调(Instruction Tuning)和对齐微调(Alignment Tuning)等技术方法;由于大语言模型包含了大量的任务,如果进行全参数微调将会有较大开销,对参数进行高效微调的方法有:适配器微调(Adapter Tuning)、前缀微调(Prefix Tuning)、提示微调(Prompt Tuning)和低秩适配(LoRA)等,高效微调的方法在此暂不展开介绍,有兴趣的小伙伴可以自行查阅相关资料。

指令微调Instruction Tuning

指令微调通过使用自然语言描述的混合多任务数据集进行有监督地微调,从而使得大语言模型能够更好地完成下游任务,具备更好的泛化能力。在此过程中伴随着参数的更新。

对齐微调Alignment Tuning

对齐微调旨在将LLM的行为与人类价值观或偏好对齐。它需要从人类标注员(需要具备合格的教育水平甚至满足一定学历要求)中收集高质量的人类反馈数据,然后利用这些数据对模型进行微调。典型的微调技术包括:基于人类反馈的强化学习(RLHF)。

为了使大语言模型与人类价值观保持一致,学者提出了基于人类反馈的强化学习(RLHF),即使用收集到的人类反馈数据结合强化学习对LLM进行微调,有助于改善模型的有用性、诚实性和无害性。RLHF采用强化学习(RL)算法,例如近端策略优化(Proximal Policy Optimization, PPO)通过学习奖励模型使LLM适配人类反馈。

提示Prompt

为了使语言模型完成一些特定任务,利用在模型的输入中加入提示的机制,使得模型得到预想的结果或引导模型得到更好的结果,注意与微调不同,在提示这一过程中,无需额外的训练和参数更新。

上下文学习In-context Learning

上下文学习(In-context Learning, ICL)是由GPT-3正式引入,它的关键思想是从类比中学习,它将查询的问题和一个上下文提示(一些相关的样例)连接在一起,形成带有提示的输入,并将其输入到语言模型中进行预测。

思维链Chain-of-thought

思维链(Chain-of-thought, CoT)是一种改进的提示策略,旨在提高LLM在复杂推理任务中的性能,例如算术推理、常识推理和符号推理。具体做法是将中间推理步骤纳入到提示中,引导模型预测出正确结果。据相关论文,这种能力可能是在代码上训练而获得。

提示开发(调用ChatGPT的API)

ChatGPT是使用OpenAI开发的大语言模型进行聊天的web网站,其本质是调用ChatGPT的API完成各项任务,下面演示了使用ChatGPT的API完成总结的任务,除此之外,它还可以完成推理、翻译、问答、校对、扩展等多项任务,有时需要借助ICL或CoT获得更好的结果(前提是你需要从OpenAI官网获得API的密钥key)

import openai
import os
fron dotenv import load_dotenv, find_dotenv

_ = load_dotenv(find_dotenv())
openai.api_key = os.getenv("OPENAI_API_KEY")

def get_completion(prompt, temperature=0, model="gpt-3.5-turbo"):
	messages = [{"role": "user", "content": prompt)]
	response= openai.ChatCompletion.create(
		model=model,
		messages=messages,
		temperature=temperature, # temperature为模型的探索程度或随机性,其值是范围在0~1的浮点数,值越高则随机性越大,说明更有创造力。
	)
	return response.choices[0].message["content"]

text = f"""
XXXXXXXX
"""
prompt = f"""
Summarize the text delimited by triple backticks into a single sentence.
```{text}```
"""
response = get_completion(prompt)
print(response)

ChatGPT的web网站或者聊天机器人通常包含三个角色(role)的消息(messages),包括:用户(user)的消息,ChatGPT/聊天机器人(assistant)的消息和系统(system)的消息。下面以搭建一个“订餐机器人”为例:

  • system messages:用于设置机器人的行为和人设,作为高层指令指导机器人的对话,用户一般对此不可见;
  • user messages:是用户的输入;
  • assistant messages:是机器人的回复。

代码示例如下:

import openai
import os
fron dotenv import load_dotenv, find_dotenv

_ = load_dotenv(find_dotenv())
openai.api_key = os.getenv("OPENAI_API_KEY")

def get_completion_from_messages(messages, temperature=0, model="gpt-3.5-turbo"):
	response= openai.ChatCompletion.create(
		model=model,
		messages=messages,
		temperature=temperature, # temperature为模型的探索程度或随机性,其值是范围在0~1的浮点数,值越高则随机性越大,说明更有创造力。
	)
	return response.choices[0].message["content"]

messages = [
	"role": "system",
	"content": "你现在一个订餐机器人,你需要根据菜单收集用户的订餐需求。菜单:汉堡、薯条、炸鸡、可乐、雪碧。",
	"role": "user",
	"content": "你好,我想要一个汉堡。",
	"role": "assistant",
	"content": "请问还有其他需要的吗?",
	"role": "user",
	"content": "再要一份可乐。",
]

response=get_completion_from_messages(messages)
print(response)
# 输出示例:
# 好的,一份汉堡和可乐,已为您下单。

借助上述代码示例,设计一个GUI或Web界面就可以实现人机交互,修改system messages即可更改聊天机器人的行为并让其扮演不同的角色。

大语言模型未来展望

  • 更大规模: 模型的规模可能会继续增大,从而提高模型的表现力和语言理解能力。
  • 更好的预训练: 改进预训练策略,使模型更好地理解语义和上下文,提高模型在各种任务上的迁移能力。
  • 更好的微调: 开发更有效的微调方法,以在特定任务上获得更好的性能。
  • 多模态: 将语言模型与视觉、声音等其他模态相结合,实现跨领域的多模态智能应用。
  • 工具:利用搜索引擎、计算器和编译器等外部工具,提高语言模型在特定领域的性能。

参考文献

大语言模型综述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/914550.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

kafka--技术文档-基本概念-《快速了解kafka》

学习一种新的消息中间键,卡夫卡!!! 官网网址 Apache Kafka 基本概念 Kafka是一种开源的分布式流处理平台,由Apache软件基金会开发,用Scala和Java编写。它是一个高吞吐量的分布式发布订阅消息系统&#xf…

elelementui组件

一、按钮 1、按钮样式 使用type、plain、round和circle属性来定义 Button 的样式。 2、主要代码 <el-row><el-button>默认按钮</el-button><el-button type"primary">主要按钮</el-button><el-button type"success">…

【巧学C++之西游篇】No.2 --- C++闹天宫,带着“重载“和“引用“

文章目录 前言&#x1f31f;一、函数重载&#x1f30f;1.1.函数重载概念&#x1f30f;1.2.C支持函数重载的原理 -- 名字修饰 &#x1f31f;二、引用&#x1f30f;2.1.引用的概念&#x1f30f;2.2.引用特性&#x1f30f;2.3.常引用&#x1f30f;2.4.使用场景&#x1f30f;2.5.传…

Web 自动化神器 TestCafe—页面高级操作篇

♥ 前 言 在【Web 自动化神器 TestCafe — 页面基本操作篇】这篇文章中我们介绍了TestCafe页面交互的一些基本使用 Web 自动化神器 TestCafe — 页面基本操作篇 这篇文章接着上一篇来给大家介绍一下 TestCafe 页面交互的一些高级操作。 一、鼠标拖拽 鼠标拖拽鼠标拖拽 …

食品制造行业云MES系统解决方案

食品饮料行业大致可以分为初级产品加工、二次加工、食品制造、食品分装、调味品和饲料加工等几大类。由于处于产业链不同的位置&#xff0c;其管理存在一定的差异&#xff0c;那么食品行业的MES应该怎么建设呢&#xff1f; 食品饮料行业生产管理特点&#xff1a; 食品饮料行业…

matlab使用教程(21)—求函数最值

1. 求函数最优值 1.1求一元函数的最小值 如果给定了一个一元数学函数&#xff0c;可以使用 fminbnd 函数求该函数在给定区间中的局部最小值。例如&#xff0c;请考虑 MATLAB 提供的 humps.m 函数。下图显示了 humps 的图。 x -1:.01:2; y humps(x); plot(x,y) xlabel(x)…

NLP与大模型主题全国师资培训班落地,飞桨持续赋能AI人才培养

为了推动大模型及人工智能相关专业人员的培养&#xff0c;8月11日-8月13日&#xff0c;由中国计算机学会主办、机械工业出版社、北京航空航天大学、百度飞桨联合承办 “CCF群星计划之文心高校行- NLP与大模型”主题师资培训班&#xff08;以下简称培训班&#xff09;在北京天信…

react antd常见报错Each child in a list should have a unique “key“ prop

常见的一个报错内容&#xff1a;原因可能真的很奇怪&#xff0c;但是那就那么三四种情况&#xff0c;在此记录一下这个问题 console.js:213 Warning: Each child in a list should have a unique "key" prop. Check the render method of Panel. It was passed a chi…

4G工业路由器的功能与选型!详解工作原理、关键参数、典型品牌

随着工业互联网的发展,4G工业路由器得到越来越广泛的应用。但是如何根据实际需求选择合适的4G工业路由器,是许多用户关心的问题。为此,本文将深入剖析4G工业路由器的工作原理、重要参数及选型要点,并推荐优质的品牌及产品,以提供选型参考。 一、4G工业路由器的工作原理 4G工业…

gitee远程仓库——Git常用远程仓库托管服务

远程仓库 我们的代码不能总是放在本地&#xff0c;因为总是放在本地&#xff0c;一旦电脑出现故障&#xff0c;数据将丢失&#xff0c;怎么共享呢&#xff1f;这里我们需要一个服务器&#xff0c;我们可以把代码放到服务器上&#xff0c;然后让别人下载&#xff0c;这样我们既…

动力节点Java项目的开发原则与核心业务介绍

文章目录 一 项目开发原则 1.1 web开发项目的步骤&#xff1a; 1.2 crm的技术架构&#xff1a;客户关系管理技术框架 1.3 开发目的 1.4 软件公司的组织结构 1.5 软件开发的生命周期 1&#xff09;招标 2&#xff09;可行性分析 3&#xff09;需求分析 4&#xff09;…

Dockerfile文件详细

Dockerfile 是一个文本文件&#xff0c;里面包含组装新镜像时用到的基础镜像和各种指令&#xff0c;使用dockerfile 文件来定义镜像&#xff0c;然后运行镜像&#xff0c;启动容器。 dockerfile文件的组成部分 一个dockerfile文件包含以下部分&#xff1a; 基础镜像信息&…

python爬虫-网页数据提取

import requests #headers 网页右键->Network->最下面的User-Agent复制。 headers {"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36"} #你想要的网址 url &q…

基于大语言模型知识问答应用落地实践 – 知识库构建(上)

01 背景介绍 随着大语言模型效果明显提升&#xff0c;其相关的应用不断涌现呈现出越来越火爆的趋势。其中一种比较被广泛关注的技术路线是大语言模型&#xff08;LLM&#xff09;知识召回&#xff08;Knowledge Retrieval&#xff09;的方式&#xff0c;在私域知识问答方面可以…

HTTP协议(JavaEE初阶系列15)

目录 前言&#xff1a; 1.HTTP协议 1.1HTTP协议是什么 1.2HTTP协议的报文格式 1.2.1抓包工具的使用 1.2.2HTTP请求 1.2.3HTTP响应 2.HTTP请求 2.1首行的组成 2.2.1URL的组成 2.2认识“方法”&#xff08;method&#xff09; 2.2.1GET方法 2.2.2POST方法 2.2.3GET…

【AIGC】单图换脸离线版软件包及使用方法

云端再好&#xff0c;都不如放自己手里啊&#xff0c;想怎么就怎么玩。云端再好&#xff0c;都不如放自己手里啊&#xff0c;想怎么就怎么玩。 Roop作为一个新出的开源项目&#xff0c;配置起来还是有一定难度的。 我已经把各种依赖&#xff0c;模型&#xff0c;环境配置已经…

c++--动态规划回文串问题

1.回文子串 力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 给定一个字符串 s &#xff0c;请计算这个字符串中有多少个回文子字符串。 具有不同开始位置或结束位置的子串&#xff0c;即使是由相同的字符组成&#xff0c;也会被视作不同的子串。 示…

23-props详解

一. 什么是prop Prop定义: 组件上注册的一些 自定义属性 Prop作用: 想子组件传递数据 特点: 1. 可以传递 任意数量 的Prop 2. 可以传递 任意类型 的Prop 二. Props校验 思考: 组件的prop 可以乱传吗? 作用: 为组件的 prop 指定验证要求,不符合要求,控制台就会有提示错误 …

图神经网络与分子表征:2. 读懂SchNet

SchNet 在2018年的面世彻底引爆了神经网络势函数(NNP, Neural Network Potential)领域&#xff0c;虽然说NNP的开山鼻祖还要更早&#xff0c;但均未像 SchNet 这样真正被物理化学家接受&#xff0c;引发变革。 这篇博客浅浅记录下自己阅读SchNet代码的心得。2023年的今天&…

shell 脚本基础(四十三)

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 目录 前言 一、概述 1. 概念 2. 学习路径 2.1表达式 2.2 语句 2.3 函数 2.4 正则表达式 2.5 文件操作四剑客 二、表达式 1.shell 2.1 变量 2.2.1组成 2.2.2 类型 2.2.3 作用域…