什么是大语言模型?法学硕士如何运作,在没有炒作的情况下进行解释

  1. 首页
  2. 博客
  3. 人工智能

人工智能

什么是大语言模型? 法学硕士如何运作,无需炒作即可解释

了解人工智能编写文本时到底发生了什么。用简单的语言了解标记、嵌入和注意力,运行一个小型的下一个单词预测器,并了解为什么这些模型可能很聪明,但同时又是错误的。

阅读约 9 分钟
什么是大语言模型?法学硕士如何运作,无需大肆宣传即可解释

要点速览

  • 大型语言模型 是一种神经网络,经过大量文本训练来预测接下来会发生什么。
  • 它适用于 tokens,并使用 attention 来衡量哪些较早的 token 最重要。
  • 它通过从一组概率中进行选择,一次生成一个回复。
  • 它可能听起来很自信,但可能是错误的,因此重要的输出需要检查。

聊天、总结和编写代码的工具看起来几乎是神奇的,直到你看到下面的机制。 大型语言模型(LLM)本质上是一个非常复杂的系统,用于预测下一段文本。这一想法既解释了这些工具的优点,也解释了它们为何失败。

本指南在没有任何数学的情况下解释了主要概念,然后构建了一个微小的下一个单词预测器以使想法具体化。我们在 Python 3.13 上运行该代码,并且输出来自该运行。它是一个简单的计数玩具,而不是一个神经网络,真正的法学硕士的能力要强得多。我们也避免引用特定型号的数据,因为它们变化很快。

什么是大语言模型?

法学硕士是一种经过训练可以理解和生成人类语言的人工智能。让我们一次一个单词地取这个名字:

  • 大:它有大量可调整的内部值,称为参数,并且它从大量文本中学习。
  • 语言:它适用于文本,包括自然语言和代码。
  • 模型:它是一个数学系统,从数据中捕获模式并使用它们进行预测。

模型是引擎,聊天助手等产品是围绕模型构建的汽车。产品通常会添加用户界面、安全系统、搜索和其他工具。

核心思想:预测接下来会发生什么

你自己做这件事。如果您读到“法国的首都是”,您的脑海中立即会出现“巴黎”。法学硕士可以做类似的事情,但规模要大得多。给定一些文本,它会计算每个可能的下一个标记的可能性,选择一个,将其添加到文本中并重复。

没有正在查找的存储答案的数据库。该模型以数字的形式保存在训练期间学到的模式。当这些模式与事实相符时,您就会得到正确的答案。当他们不这样做时,您仍然可以获得流畅的答案,这是与搜索引擎的重要区别。

一个小型的工作演示

为了以最简单的形式查看下一个标记预测,该脚本会计算小文本中哪个单词跟在哪个单词后面。然后它根据这些计数生成新文本。统计学家称之为二元模型。

import random
from collections import Counter, defaultdict

TEXT = """the cat sat on the mat . the dog sat on the rug .
the cat saw the dog . the dog saw the cat ."""

tokens = TEXT.split()

follows = defaultdict(Counter)
for current, following in zip(tokens, tokens[1:]):
    follows[current][following] += 1

def probabilities(word):
    counts = follows[word]
    total = sum(counts.values())
    return {w: round(n / total, 2) for w, n in counts.most_common()}

print(probabilities("the"))
print(probabilities("sat"))

# {'cat': 0.38, 'dog': 0.38, 'mat': 0.12, 'rug': 0.12}
# {'on': 1.0}

该输出是概率分布。在“the”之后,模型认为最有可能的是“cat”和“dog”。现在我们通过从这些概率中重复采样来生成文本:

def generate(start, length, seed):
    rng = random.Random(seed)
    words = [start]
    for _ in range(length):
        counts = follows[words[-1]]
        words.append(rng.choices(list(counts), weights=counts.values())[0])
    return " ".join(words)

print(generate("the", 6, seed=1))
print(generate("the", 6, seed=2))
print(generate("the", 6, seed=3))

# the cat . the cat saw the
# the rug . the cat . the
# the cat saw the dog . the

注意三件事。相同的开始可以产生不同的文本,因为选择是随机的。输出类似于其训练数据,即使对于从未出现在其中的序列也是如此。它根本没有理解力,这就是为什么“地毯。猫”读起来就像无稽之谈。

向它询问一个它从未见过的单词,它没有提供任何内容:follows["elephant"] 是空的。我们的玩具只查看一个前一个单词。真正的法学硕士的巨大飞跃来自于考虑长时间的背景,并使用神经网络而不是简单的计数从更多的数据中学习。

令牌:模型如何读取

法学硕士不会像我们一样阅读整个单词。文本首先被分割成标记,这些标记可以是单词、单词的一部分或标点符号。每个标记都映射到一个数字,并且该模型完全适用于数字。

代币在实践中很重要有两个原因。托管模型的使用通常按代币定价,并且每个模型一次可以处理的数量都有限制。标记化也解释了一些著名的奇怪行为。由于模型看到的是块而不是字母,因此计算单词中的字母等任务传统上对它们来说非常困难。

嵌入:含义为数字

每个标记都变成一个嵌入,一长串数字,将其放置在某种意义空间中。相关概念最终会靠近在一起,因此“cat”和“kitten”的位置接近,而“cat”和“invoice”则不然。

同样的想法也支持语义搜索,您可以通过含义而不是确切的单词来查找文档。我们的矢量数据库指南涵盖了这种用途。

注意和变压器

大多数现代法学硕士都基于 Google 研究人员在 2017 年论文“Attention Is All You Need”中介绍的 transformer 架构。其关键机制是自注意力。

考虑这句话:“奖杯太大,无法放入手提箱。” “它”指的是什么?你知道这意味着奖杯。注意力让模型在处理每个新词时权衡每个较早的词,因此它可以将“it”链接到最相关的词,即使它们相距很远。

早期的方法逐步处理文本,并且往往会忘记远处的单词。 Transformers 一起查看上下文,并且它们可以在专用硬件上并行运行大部分工作,这使得对如此大量文本的训练变得实用。

LLM 的培训方式

舞台 会发生什么
数据收集 收集并清理大量文本
预训练 该模型重复预测下一个标记,只要它出错,它的参数就会被微调
微调 它从有用答案的示例中学习,并经常使用人类反馈来对响应进行排名
评价 团队对其进行质量、安全和故障案例测试

预训练为模型提供了广泛的语言能力,但它可能只是继续你的文本而不是回答它。后期阶段将其塑造成一个有用的助手。训练大型模型需要大量的计算能力并且成本高昂。使用成品模型(称为推理)对于每个请求来说要便宜得多。

它如何生成文本

  1. 您的提示被拆分为标记并转换为嵌入。
  2. 网络处理它们,利用注意力将它们相互联系起来。
  3. 它输出每个可能的下一个标记的概率。
  4. 选择一个标记并将其添加到上下文中。
  5. 重复步骤 2 至 4,直到达到停止条件。

这就是为什么回复通常在流式传输时逐字出现的原因。文本实际上是按顺序生成的。 温度控制步骤 4 的冒险程度:较低的值有利于最可能的标记,而较高的值允许更多的变化。

提示: 对于提取、分类和其他可重复任务,请在设置可用的情况下使用低温。对于头脑风暴,较高的设置可能很有用。即便如此,较低的值并不能保证每次都会得到相同的答案。

您将遇到的条款

期限 含义
提示 您为模型提供的输入
上下文窗口 一次可以考虑的最大代币数量
参数 培训期间学到的内部价值观
推理 运行经过训练的模型以获得输出
幻觉 确信输出为假
知识截止 训练数据结束的点
RAG 获取文档为模型提供额外的上下文
开放重量模型 您可以自行下载并运行其参数的模型

您应该了解的限制

  • 幻觉。 模型可以发明事实、引文或代码函数。因为它会产生可能的文本,所以错误的陈述看起来完全可信。
  • 知识切断。除非产品将其连接到搜索或其他工具,否则它可能不知道最近发生的事件。
  • 有限的上下文。如果对话超出上下文窗口,则可能会删除或总结先前的详细信息。模型也不会自动记住过去的聊天记录,除非产品添加了该功能。
  • 偏差。 训练数据反映了人类的偏差,这些偏差可能会出现在输出中。
  • 不一致。同一个问题可能会产生不同的答案,当您在一个问题的基础上构建软件时,这一点很重要。
  • 安全风险。 文本中的隐藏指令可以操纵模型,这种问题称为提示注入。

善用LLM

将法学硕士视为快速、有能力的助手,其工作需要审查。一些习惯会产生很大的影响:

  • 具体。 清晰的说明、上下文和示例可提供更好的结果。我们的快速工程指南展示了具体方法。
  • 提供事实。 当答案必须来自您自己的文档时,请使用 RAG 而不是依赖记忆。
  • 验证重要事项。根据可靠来源检查数据、引文以及法律或医学声明。
  • 测试生成的代码。运行它并为其编写测试,就像为同事做的那样。我们的 AI 代码审查工具 指南提供了一些帮助。
  • 保护敏感数据。 在与托管工具共享机密信息之前,请检查您组织的规则。

如果您正在决定如何为自己的工作自定义模型,我们对 RAG 与微调与提示工程 的比较将帮助您进行选择。

最后的话

LLM 是经过超大规模训练的下一个令牌预测器,它比描述所暗示的更有用,也更容易出错。记住这个机制可以帮助你更好地使用它:它的语言和模式很强,并且需要你对事实的监督。为了使其具体化,请使用您自己的文本运行上面的小脚本,然后在真正的助手中多次尝试相同的提示并比较答案。

常见问题

简单来说什么是大型语言模型?

它是一个人工智能系统,经过大量文本训练来预测接下来会发生什么。通过重复该预测,它可以回答问题、写作和总结。

AI 和 LLM 有什么区别?

人工智能是构建智能系统的广阔领域。 LLM 是一种特定类型的人工智能模型,专注于处理和生成语言。

LLM 明白他们所说的话吗?

这是有争议的。他们捕捉到了丰富的意义模式,并且能够推理出许多问题,但他们无法体验世界,并且可能会以人们不会的方式失败。

为什么 LLM 会编造故事?

他们生成可能的文本,而不是检索经过验证的事实。当模式指向看似合理但错误的答案时,模型可以明显自信地陈述它。

LLM 中的代币是什么?

标记是模型处理的文本块,例如单词、单词的一部分或标点符号。限制和定价通常以代币来衡量。

继续学习

与Stack Quora合作

需要测试、WordPress 或 SEO 方面的帮助?

我们帮助团队交付更好的软件并发展他们的网站。告诉我们您正在做什么,我们将建议明确的下一步。

继续阅读

更多指南 测试、人工智能和现代开发

喜欢这篇文章吗?选择一个主题并直接跳至我们最新的教程。

人工智能

人工智能幻觉解释:语言模型为何会产生幻觉以及如何减少它

人工智能幻觉解释:它们是什么,为什么语言模型产生它们,常见类型,如何通过基础和提示来减少它们,以及我们进行的简单检查。

阅读文章 →
DevOps

环境变量解释:.env 文件、秘密和配置正确完成

使用我们运行的 Python 示例解释环境变量:读取和设置它们、为什么每个值都是字符串、.env 文件、进程继承、秘密和验证。

阅读文章 →
软件开发

API 速率限制解释:算法、标头和处理 429 错误

API 速率限制通过我们运行的模拟进行了解释:令牌桶、固定窗口、滑动窗口、429 响应、速率限制标头、带回退的重试和测试限制。

阅读文章 →
测试自动化

Python 中的模拟:unittest.mock、补丁以及导致测试谎言的错误

使用unittest.mock 在Python 中进行模拟,经过测试:模拟和return_value、side_effect、修补使用名称的位置、spec 和autospec、模拟日期以及常见错误。

阅读文章 →
软件测试

代码覆盖率解释:行覆盖率与分支覆盖率以及 100% 的真正含义

用真实的coverage.py运行来解释代码覆盖率:行、分支和条件覆盖率,阅读报告,为什么100%覆盖率仍然会错过错误,以及合理的目标。

阅读文章 →
数据库与 SQL

SQL 中的 DELETE、TRUNCATE 和 DROP:差异、回滚以及何时使用它们

DELETE、TRUNCATE 和 DROP 通过经过测试的 SQL 进行了解释:各自删除什么、回滚、触发器、身份重置、速度,以及 PostgreSQL、MySQL、SQL Server 和 SQLite 有何不同。

阅读文章 →
数据库与 SQL

SQL 视图解释:创建、使用和避免陷阱(附示例)

SQL 视图通过我们运行的查询进行解释:创建视图、实时结果、隐藏列、性能、可更新和物化视图、破坏的依赖关系和最佳实践。

阅读文章 →
软件开发

TypeScript 接口与类型:真正的差异,使用编译器进行测试

TypeScript 接口与类型,使用真实编译器进行检查:两者都可以做什么,只有一个可以做什么,声明合并,扩展与交集以及要遵循的简单规则。

阅读文章 →
软件开发

Python *args 和 **kwargs 解释:灵活的函数和清晰的示例

Python *args 和 **kwargs 用我们运行的代码进行了解释:打包和解包、参数顺序、仅关键字和仅位置参数、装饰器和常见错误。

阅读文章 →
软件开发

Python Lambda 函数:语法、实际用途以及何时不使用它们

Python lambda 函数用我们运行的代码进行了解释:语法、使用键排序、映射和过滤器、闭包、后期绑定陷阱,以及何时普通 def 是更好的选择。

阅读文章 →
人工智能

什么是人工智能代理?它们是如何工作的,只需运行一个简单的代理循环

什么是人工智能代理?关于代理循环、工具、内存和护栏的简单指南,以及我们运行的一个小型 Python 循环、真正的风险以及何时简单的聊天机器人是更好的选择。

阅读文章 →
DevOps

监控与可观察性:真正的区别,包括日志、指标和跟踪

监控与可观察性解释:已知和未知的故障、日志、指标和跟踪、检查事件演练、黄金信号、OpenTelemetry 和有用的警报。

阅读文章 →
DevOps

Docker Volumes 与 Bind Mounts:以正确的方式保留容器数据

Docker 卷与绑定挂载解释:为什么容器数据消失、命名卷、绑定挂载、tmpfs、Compose 示例、备份、权限以及何时使用它们。

阅读文章 →
测试自动化

TDD 与 BDD:主要区别、以两种方式构建的一个功能以及何时使用每种方式

TDD 与 BDD 的解释是通过一种双向构建的折扣功能:使用我们运行的代码进行红绿重构、Given-When-Then 场景、工具、权衡以及何时使用每种方案。

阅读文章 →
软件测试

用户验收测试 (UAT):流程、清单和真实示例

用户验收测试解释:谁运行它、它与 QA 有何不同、七步流程、UAT 测试用例模板、清单、签核标准和常见错误。

阅读文章 →
数据库与 SQL

SQL NULL 值解释:IS NULL、COALESCE、NULLIF 和要避免的陷阱

通过我们运行的查询解释了 SQL NULL 值:三值逻辑、IS NULL、COALESCE、NULLIF,聚合、连接和排序如何处理 NULL,以及它悄悄引起的错误。

阅读文章 →
数据库与 SQL

SQL CASE WHEN 语句:语法、实例和常见错误

SQL CASE WHEN 解释了我们运行的查询:简单和搜索表单、条件顺序、SUM 透视、COUNT 技巧、自定义排序、更新和要避免的 NULL 陷阱。

阅读文章 →
软件开发

什么是智威汤逊?通过工作示例解释 JSON Web 令牌

什么是智威汤逊? JSON Web Tokens 解释:这三个部分,在我们运行的代码中构建和篡改的令牌,JWT 与会话,存储,刷新令牌和安全错误。

阅读文章 →
软件开发

JavaScript 事件循环解释:调用堆栈、微任务和计时器以及示例

JavaScript 事件循环用我们运行的代码进行了解释:调用堆栈、任务和微任务队列、为什么 setTimeout 0 不是立即执行、阻塞、饥饿和面试测验。

阅读文章 →
软件开发

Python 生成器和 Yield 解释:通过真实示例节省内存

Python 生成器和yield 用我们运行的代码进行了解释:它们如何暂停和恢复、测量内存节省、管道、无限序列、yield from、发送和常见陷阱。

阅读文章 →
人工智能

什么是嵌入?向量和余弦相似度简单解释

什么是嵌入?关于向量、余弦相似度和语义搜索的简单语言指南,其中包含我们运行的一个小示例、常见用途、选择模型和已知限制。

阅读文章 →
DevOps

蓝绿部署与金丝雀部署:差异、权衡以及如何选择

蓝绿部署与金丝雀部署解释:每种部署的工作原理、成本、风险和回滚、我们测试的稳定用户分桶、数据库迁移、滚动更新以及如何选择。

阅读文章 →
测试自动化

不稳定的测试:造成这些问题的原因以及如何彻底解决它们

我们运行的演示解释了不稳定的测试:主要原因、如何确认和诊断、正确的时间修复、共享状态和日期以及隔离过程。

阅读文章 →
软件测试

负载测试与压力测试:差异、指标和 k6 示例

负载测试与压力测试的解释:各自证明什么、峰值和浸泡测试、重要的指标、为什么平均值会误导、k6 个示例以及如何计划测试。

阅读文章 →
软件测试

测试用例与测试场景:主要区别、示例以及何时使用它们

测试用例与测试场景的解释:清晰的定义、并排的表格、从场景到案例的密码重置功能、模板以及何时使用每个功能。

阅读文章 →
数据库与 SQL

SQL 查询优化:读取执行计划并修复慢速查询(带计时)

对一百万行进行 SQL 查询优化测试:读取执行计划、添加正确的索引、修复不可控制的过滤器、使用复合索引和键集分页。

阅读文章 →
数据库与 SQL

SQL UNION 与 UNION ALL:差异、示例和性能测试

SQL UNION 与 UNION ALL 通过我们运行的查询进行了解释:重复、都遵循的规则、真实的数据错误、测量的性能、INTERSECT 和 EXCEPT 以及何时使用它们。

阅读文章 →
软件开发

JavaScript Fetch API 教程:GET、POST、错误处理和超时

针对本地服务器测试的 JavaScript Fetch API 教程:GET 和 POST、为什么不抛出 404、可重用的帮助程序、查询字符串、超时、CORS 和常见错误。

阅读文章 →
软件开发

Python 文件处理:读取、写入、CSV、JSON 和 pathlib 以及示例

使用我们运行的代码解释了 Python 文件处理:打开模式、使用、读取大文件、CSV、JSON、pathlib、二进制文件、安全写入、错误处理和常见错误。

阅读文章 →
软件开发

Python 类和对象:带有实际示例的 OOP 教程

用我们运行的代码解释 Python 类和对象:__init__、方法、类与实例属性、继承、属性、dunder 方法、数据类和常见错误。

阅读文章 →
人工智能

什么是大语言模型?法学硕士如何运作,在没有炒作的情况下进行解释

什么是大语言模型?法学硕士用简单的语言解释:标记、嵌入、注意力、训练、温度和上下文窗口、一个微小的下一个单词演示和真正的限制。

阅读文章 →
DevOps

适合初学者的 Linux 命令:带有示例的基本终端指南

适合初学者的 Linux 命令,按任务分组:导航、文件、查看日志、grep、管道、权限、进程和档案,并附有实用的日志分析示例。

阅读文章 →
测试自动化

Selenium 与 Playwright:主要区别、代码比较以及选择

Selenium 与 Playwright 比较:架构、等待、浏览器和语言支持、调试、两种工具中的相同测试、迁移建议以及如何选择。

阅读文章 →
软件测试

等价划分:通过实例解释测试设计技术

等效分区解释:如何找到有效和无效分区,年龄、密码和优惠券的工作示例,我们运行的测试,以及为什么将其与边界配对。

阅读文章 →
软件测试

软件测试中的严重性与优先级:差异、矩阵和实例

软件测试中的严重性与优先级解释:清晰的定义、带有示例的四向矩阵、级别尺度、谁设置每个级别以及如何运行错误分类。

阅读文章 →
数据库与 SQL

SQL 子查询教程:类型、相关子查询和 EXISTS 以及示例

SQL 子查询教程,其中包含我们运行的查询:标量、IN、FROM 和 SELECT 子查询、相关子查询、EXISTS、NOT IN NULL 陷阱以及子查询与 JOIN 与 CTE。

阅读文章 →
数据库与 SQL

SQL 事务和 ACID 解释:COMMIT、ROLLBACK 和隔离级别

SQL 事务和 ACID 通过我们运行的银行转账进行了解释:COMMIT、ROLLBACK、保存点、锁、隔离级别、脏读、死锁和最佳实践。

阅读文章 →
软件开发

Git merge 与 rebase 的区别:示例及如何选择

用真实的 log 输出、对比表、rebase 黄金法则和安全的团队工作流,讲清 Git merge 与 rebase 的区别。

阅读文章 →
软件开发

Python 列表推导式:语法、示例与何时避免使用

Python 列表推导式详解:语法、过滤、if-else、嵌套循环、实测耗时,以及何时普通 for 循环更合适。

阅读文章 →
数据库与 SQL

SQL JOIN 详解:附示例(INNER、LEFT、RIGHT、FULL)

通过示例表和查询,一步步讲解 SQL JOIN:INNER、LEFT、RIGHT、FULL、CROSS 和 SELF,并介绍常见错误与性能技巧。

阅读文章 →