生成 AI 是一种人工智能,能够创建原始内容,例如自然语言、图像、音频和代码。 生成 AI 的输出基于用户提供的输入。 用户与生成 AI 交互的一种常见方法是使用自然语言作为输入的聊天应用程序。 OpenAI 开发的 ChatGPT 是一个常见的示例。 使用自然语言作为输入的生成 AI 应用程序由大型语言模型(LLM)提供支持,以执行自然语言处理(NLP)。
生成 AI 的工作原理
所有生成 AI 都基于模型构建。 这些模型以内容形式(如自然语言、图像、音频和代码)使用大量数据集进行训练。 生成 AI 模型使用训练数据中标识的模式来生成新的统计相似内容。
用户提供的输入由 AI 模型用于生成输出。 输入首先分析为模型可以理解的数据形式。 然后,该模型使用该数据从其训练中识别匹配模式,并将其组合在一起以生成最终输出。 生成 AI 模型旨在生成独特的内容,因此它们不会为相同的输入生成相同的输出。
支持自然语言作为输入或输出的生成 AI 应用程序利用 LLM 执行此作。 LLM 用于执行 NLP,该 NLP 对输入文本进行分类并确定其情绪。 生成 AI 模型使用该分类和情绪分析来识别模式并生成输出。 如果输出为文本,则单独可以使用 LLM 来生成它。 如果输出是音频或图像,则其他模型用于提供用于以该格式生成输出的数据和模式。
生成 AI 的常见用途
生成式 AI 应用程序支持各种潜在的用例和潜在输出,以下部分将探讨这些用例和潜在输出。
自然语言生成
某些生成 AI 应用程序可以生成自然语言输出,例如:
- LinkedIn配置文件的专业措辞摘要
- 在线店面中商品的丰富说明
- 健康餐的想法
例如,鉴于用户输入 “给我一个健康早餐(包括辣椒)的三个想法”,生成 AI 应用程序可能会生成以下输出:
好吧,这里有三个健康的早餐,包括胡椒:
鸡蛋和胡椒炒:切碎一些钟胡椒,并在锅里炒他们,直到它们稍微软化。 然后,加入一些殴打的鸡蛋,并拼凑一起。 与全谷物烤面包一起吃营养早餐。
胡椒和鳄梨烤面包:烤一片全谷物面包,上面有切片的钟辣椒,混合鳄梨和一片盐和胡椒。 这是一个很好的方法,从鳄梨和维生素C从胡椒中获取一些健康的脂肪。
早餐伯里托与胡椒:烤一些切切的钟胡椒,洋葱,和炒鸡蛋在平底锅中。 然后,将混合物勺到全谷物玉米饼上,并配上一些萨尔萨或热酱。 卷起来享受一个令人满意和营养早餐。
图像生成
某些生成 AI 应用程序从自然语言输入生成图像输出。 根据应用程序及其模型,用户可能能够指定:
- 图像中显示的人员或内容
- 用于创建图像的艺术风格
- 生成类似图像的参考
图像生成可以为在线帐户创建虚拟头像、为企业设计徽标或为创建者提供艺术灵感。 例如,用户可以输入请求, 创建大象吃汉堡的图像。 生成 AI 应用程序可能会生成以下输出:
音频生成
某些生成 AI 应用程序从自然语言输入生成音频输出。 根据应用程序及其模型,用户可能能够:
- 从输入文本合成自然声音
- 以特定风格或具有某些乐器特色创建音乐
- 根据自然语言提供的集条件修改输入音频文件
音频生成可以提供来自数字语音助理的语音响应,将支持乐器添加到音乐制作歌曲,或者从参考录音中重现用户的原始语音。
代码生成
某些生成式 AI 应用程序从自然语言输入生成代码。 根据应用程序及其模型,用户可能能够生成以下代码:
- 以他们选择的语言
- 接受特定的输入和输出结构
- 根据其参考文档使用特定技术
代码生成可以提供常见作的快速实现,例如排序或筛选数据、加快将代码从一种语言转换为另一种语言,或根据指定的参考文档回答有关技术的问题。 例如,假设输入“显示如何使用 C# 编写 tic-tac-toe 的游戏”,生成 AI 应用程序可能会生成以下输出:
下面是有关如何在 C# 中编写 tic-tac-toe 游戏的简单示例:
using System;
namespace TicTacToe
{
class Program
{
static char[] board = { '1', '2', '3', '4', '5', '6', '7', '8', '9' };
static int player = 1; // Player 1 will start
static int choice; // The number the player chooses
static int flag = 0; // Set the flag value to 0
// Check if the position is already marked or not
private static int CheckPosition(char mark)
{
for (int i = 0; i < 9; i++)
{
if (board[i] == mark)
{
return 1;
}
}
return 0;
}
// The rest of the generated code has been omitted for brevity
// ...
}
}
此代码在 C# 中创建一个简单的基于主机的 tic-tac-toe 游戏。 它使用单维数组来表示棋盘,并在每次移动后检查胜利或平局。
LLM 的工作原理
训练 LLM 时,训练文本首先分解为 令牌。 每个令牌标识唯一的文本值。 令牌可以是不同的单词、部分单词或单词和标点符号的组合。 为每个令牌分配一个 ID,使文本可以表示为一系列令牌 ID。
将文本分解为标记后,会将上下文向量(称为 嵌入)分配给每个令牌。 这些嵌入向量是多值数值数据,其中令牌向量的每个元素都表示令牌的语义属性。 令牌矢量的元素取决于令牌在一起使用的常见程度或类似上下文中。
目标是根据前面的标记预测序列中的下一个标记。 将权重分配给现有序列中的每个标记,该标记表示其对下一个标记的相对影响。 然后执行一个计算,该计算使用上述标记的权重和嵌入来预测下一个向量值。 然后,模型选择最可能标记,以根据预测向量继续序列。
此过程对序列中的每个标记进行迭代,输出序列以递归方式用作下一次迭代的输入。 输出一次生成一个令牌。 此策略类似于自动完成的工作原理,其中建议基于到目前为止已键入的内容,并使用每个新输入进行更新。
在训练期间,已知令牌的完整序列,但当前考虑的令牌之后的所有令牌将被忽略。 下一个标记矢量的预测值与实际值进行比较,并计算损失。 然后增量调整权重,以减少损失并改进模型。