產生 AI 是一種人工智慧,能夠建立原始內容,例如自然語言、影像、音訊和程式代碼。 產生 AI 的輸出是以使用者所提供的輸入為基礎。 用戶與產生 AI 互動的一個常見方式,就是透過使用自然語言作為其輸入的聊天應用程式。 由 OpenAI 開發的 ChatGPT 是熱門的範例。 使用自然語言做為輸入的產生 AI 應用程式是由大型語言模型 (LLM) 提供技術支援,以執行自然語言處理 (NLP)。
generative AI 的運作方式
所有行性 AI 都是以模型為基礎所建置。 這些模型會以內容形式使用大量數據進行定型,例如自然語言、影像、音訊和程序代碼。 產生 AI 模型會使用定型數據中所識別的模式來產生新的統計相似內容。
使用者提供的輸入是由 AI 模型用來建置輸出。 輸入會先剖析成模型可以理解的數據形式。 然後,模型會使用該數據來識別其定型中的比對模式,並結合以建置最終輸出。 產生式 AI 模型的設計目的是要產生獨特的內容,因此它們不會針對相同的輸入產生相同的輸出。
支援自然語言作為輸入或輸出的產生 AI 應用程式會利用 LLM 來執行此動作。 LLM 可用來執行 NLP,以分類輸入文字並判斷其情感。 這種分類和情感分析是由產生的 AI 模型用來識別模式並建置輸出。 如果輸出是文字,則單獨使用 LLM 即可產生它。 如果輸出是音訊或影像,則會使用其他模型來提供數據與模式,以產生該格式的輸出。
Generative AI 的常見用法
Generative 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 時,訓練文本會先細分為 個標記,。 每個令牌都會識別唯一的文字值。 標記可以是不同的單字、部分單字或單字和標點符號的組合。 每個令牌都會指派一個標識符,讓文字可以表示為一連串的令牌標識碼。
將文本拆解成令牌後,會為每個令牌指派一個稱為 嵌入的上下文向量。 這些內嵌向量是多重值數值數據,其中標記向量的每個元素都代表令牌的語意屬性。 一個符號向量的元素是根據符號在一起使用或在類似上下文中出現頻繁的程度來確定的。
目標是根據上述令牌來預測序列中的下一個令牌。 給現有序列中的每個令牌分配一個權重,以表示其對下一個令牌的相對影響。 接著會執行計算,以使用上述標記的權數和內嵌來預測下一個向量值。 然後,模型會選取最可能令牌,以根據預測向量繼續序列。
此程式會針對序列中的每個令牌反覆執行,輸出序列會以遞歸方式使用,做為下一個反覆項目的輸入。 輸出是一次建置一個符號。 此策略就像自動完成的運作原理,建議是根據已輸入的內容,並隨著每個新輸入進行更新。
在訓練過程中,已知令牌的完整順序,但目前正在考慮的令牌之後的所有令牌都會被暫時忽略。 下一個標記向量的預測值會與實際值進行比較,並計算損失。 然後會累加調整權數,以減少損失並改善模型。