隨著 RAG 技術的發展,處理動態資料的需求日益增長。本文探討如何將穩定資料微調至大語言模型,以最佳化動態 RAG 資料的處理效率。以 SciQ 資料集為例,我們將其轉換為 JSONL 格式,並用於微調 GPT-4o-mini 模型。透過分析訓練損失等指標,我們可以評估微調模型的效能。此外,我們也將探討如何利用 RAG 技術構建 AI 驅動的影片函式庫系統,自動生成帶有註解和標籤的影片。系統將使用 OpenAI 的 Sora 模型生成影片,並利用 Pinecone 向量資料函式庫儲存和查詢影片註解,最後使用 GPT-4o 模型改進影片描述和標籤。

微調技術最佳化RAG資料的實踐與分析

在前述章節中,我們探討瞭如何利用微調技術最佳化靜態RAG資料。本章的主要目標是展示當我們累積RAG資料時,部分資料是動態的,需要不斷更新,而另一部分資料則相對穩定,可以透過微調儲存在大語言模型(LLM)的權重中。

資料準備與處理

首先,我們下載並處理了SciQ資料集,該資料集包含了科學領域的難題。這些資料具有穩定的特性,非常適合用於微調。資料集包含問題、答案和支援(解釋)結構,這種結構使得資料在微調過程中非常有效。我們假設這些資料的準備過程中需要人類反饋,甚至可以透過分析生成式AI模型的輸出結果來提供這些反饋。

JSONL檔案轉換

我們將準備好的資料轉換為符合OpenAI準備工具推薦格式的JSONL檔案。這種格式與完成模型(如GPT-4o-mini)相相容,包含提示(prompt)和完成(completion)兩部分。

{"prompt": "問題內容", "completion": "答案內容"}
{"prompt": "另一個問題內容", "completion": "另一個答案內容"}

內容解密:

上述JSONL檔案的結構簡單明瞭,每一行都代表一個獨立的訓練樣本。prompt欄位包含了輸入的問題,而completion欄位則是對應的答案。這種結構使得模型能夠學習如何根據給定的提示生成正確的答案。

微調GPT-4o-mini模型

接下來,我們使用準備好的JSONL檔案對GPT-4o-mini模型進行微調。微調過程涉及將訓練資料輸入模型,並根據資料對模型的權重進行調整,以最小化訓練損失。

import openai

# 載入API金鑰
openai.api_key = '你的API金鑰'

# 定義微調引數
training_file = 'path/to/your/training_file.jsonl'
model = 'gpt-4o-mini'

# 進行微調
response = openai.File.create(
    file=open(training_file, 'rb'),
    purpose='fine-tune'
)

fine_tune_response = openai.FineTune.create(
    training_file=response.id,
    model=model
)

print(fine_tune_response)

內容解密:

這段程式碼展示瞭如何使用OpenAI的API進行模型的微調。首先,我們需要載入API金鑰並指定訓練檔案的路徑。然後,我們建立一個檔案物件並將其用於微調請求。微調過程是非同步的,因此我們需要檢查微調作業的狀態以確認其是否成功完成。

微調模型的評估

微調完成後,我們可以透過OpenAI提供的使用者介面來評估模型的效能。介面提供了諸如訓練損失、批次大小、學習率乘數等指標,這些指標可以幫助我們瞭解模型的訓練情況和效能。

訓練損失分析

訓練損失是一個關鍵指標,用於評估模型在訓練資料上的表現。較低的訓練損失值表示模型能夠更好地擬合訓練資料。在我們的例子中,訓練損失為1.1570,這表明模型在訓練過程中取得了良好的效果。

訓練損失變化趨勢

  graph LR;
    A[開始訓練] --> B[Epoch 1];
    B --> C[Epoch 2];
    C --> D[Epoch 3];
    D --> E[訓練完成];
    E --> F[最終訓練損失:1.1570];

圖表翻譯: 此圖示展示了模型在訓練過程中的訓練損失變化趨勢。從開始訓練到最終完成,模型的訓練損失逐漸降低,最終達到1.1570。這表明模型在不斷學習和最佳化,最終取得了較好的訓練效果。

問題與討論

  1. 微調技術是否能夠最佳化靜態RAG資料?
  2. 訓練損失是否是評估模型效能的唯一指標?
  3. 如何選擇合適的批次大小和學習率乘數?

請以「是」或「否」回答以下問題:

  1. 微調技術是否能夠最佳化RAG資料?
  2. 訓練損失是否越低越好?

RAG 技術在影片函式庫製作中的應用

前言

隨著生成式人工智慧(Generative AI)技術的快速發展,自動化內容生成已成為多個產業關注的焦點。本章將探討如何利用 RAG(Retrieval-Augmented Generation)技術結合 Pinecone 和 OpenAI,建立一個 AI 驅動的影片函式庫系統,能夠自動生成帶有註解和標籤的影片。

RAG 在影片製作中的架構設計

本章的目標是設計一個能夠自動處理 AI 生成影片的系統,透過 AI 智慧體(AI Agents)建立一個可擴充套件的影片函式庫。該系統不僅能為影片生成技術註解,還能根據使用者輸入動態生成自定義的影片描述。圖 10.1 說明瞭 AI 智慧體團隊如何處理 RAG 影片製作流程。

圖 10.1:從原始影片到帶註解和標籤的影片

此圖示展示了整個 RAG 影片生產流程,涵蓋從原始影片生成到最終輸出帶有註解和標籤影片的全過程。

圖表翻譯: 圖 10.1 詳細展示了 AI 智慧體如何協同工作,將原始影片轉換為帶有註解和標籤的影片。該過程包括影片生成、拆分、分析、註解生成、向量儲存和查詢等步驟。

系統實作流程

本系統將透過三個主要流程(Pipelines)來實作 RAG 影片製作:

  1. 流程 1:生成器與註解器

    • 使用 OpenAI 的 Sora 文字轉影片模型生成世界模擬場景。
    • 將生成的影片拆分為幀,並使用 OpenAI 的視覺模型生成技術註解。
  2. 流程 2:向量儲存管理員

    • 將註解向量化並存入 Pinecone 向量資料函式庫。
    • 驗證系統功能,確保向量資料正確儲存與查詢。
  3. 流程 3:影片專家

    • 處理使用者輸入,查詢向量資料函式庫並檢索相關影片幀。
    • 使用 OpenAI GPT-4o 模型分析註解,檢測錯誤並重新生成更有效的描述和標籤。

主要技術點與實作細節

本章將涵蓋以下主題:

  • 設計生成式 AI 影片及註解
  • 將影片拆分為幀供 OpenAI 視覺分析模型使用
  • 將影片註解嵌入並上傳至 Pinecone 索引
  • 查詢向量資料函式庫以檢索相關內容
  • 使用 OpenAI GPT-4o 改進和糾正影片註解
  • 自動為原始影片新增標籤
  • 評估輸出結果並實施指標計算
內容解密:

此程式碼範例展示瞭如何使用 OpenCV 將影片拆分為單獨的幀。首先,我們開啟一個影片檔案並逐幀讀取,然後將每一幀儲存為獨立的圖片檔案。這是實作影片分析的第一步,為後續的 AI 視覺分析做好準備。透過這種方式,我們可以對影片的每一幀進行詳細分析,並生成相應的技術註解。

利用生成式人工智慧代理的影片製作生態系統中的RAG技術

影片製作產業正經歷著由人工智慧驅動的歷史性變革。本章將探討如何利用RAG(檢索增強生成)技術和生成式人工智慧代理來建立一個可擴充套件的影片製作系統。

影片製作生態系統的RAG技術

Figure 10.2展示了根據生成式人工智慧代理的影片製作生態系統中的RAG技術架構。主要包含三個流程:

流程1:生成器與評論員

  • 生成器利用OpenAI Sora生成AI影片。
  • 評論員將影片分割成幀,並使用OpenAI的視覺模型對每個幀進行評論,然後儲存這些評論。

流程2:向量儲存管理員

  • 將流程1中評論員生成的評論嵌入並上傳到Pinecone索引中。

流程3:影片專家

  • 根據使用者輸入查詢Pinecone向量儲存。
  • 傳回最相似的影片幀,並結合技術評論,請求OpenAI GPT-4o找出影片中的邏輯缺陷,給出針對性的評論和標籤。
  • 包含評估函式(評估員)和指標計算。

環境設定

本章的GitHub目錄(Chapter10)包含了四個notebook所需的環境設定:

  • Videos_dataset_visualization.ipynb
  • Pipeline_1_The_Generator_and_the_Commentator.ipynb
  • Pipeline_2_The_Vector_Store_Administrator.ipynb
  • Pipeline_3_The_Video_Expert.ipynb

每個notebook都包含環境安裝、模組和函式庫匯入等部分。

匯入模組和函式庫

為了建立一個通用的預生產環境,四個notebook都匯入了相同的模組和函式庫:

from IPython.display import HTML # 用於顯示影片
import base64 # 用於將影片編碼為base64
from base64 import b64encode # 用於將影片編碼為base64
import os # 用於與作業系統互動
import subprocess # 用於執行命令
import time # 用於測量執行時間
import csv # 用於儲存評論
import uuid # 用於生成唯一ID
import cv2 # 用於分割影片
from PIL import Image # 用於顯示影片
import pandas as pd # 用於顯示評論
import numpy as np # 用於使用Numerical Python
from io import BytesIO # 用於在記憶體中管理二進位資料流

內容解密:

這些模組和函式庫涵蓋了從顯示和處理影片到資料儲存和數值計算等多個方面。例如,cv2用於分割影片,而pandas則用於顯示評論。

GitHub下載功能

download(directory, filename)函式用於從GitHub倉函式庫下載所需檔案:

def download(directory, filename):
    base_url = 'https://raw.githubusercontent.com/Denis2054/RAG-Book/master/'
    file_url = f"{base_url}{directory}/{filename}"
    try:
        curl_command = f'curl -o {filename} {file_url}'
        subprocess.run(curl_command, check=True, shell=True)
        print(f"成功下載'{filename}'。")
    except subprocess.CalledProcessError:
        print(f"下載'{filename}'失敗。請檢查URL。")

內容解密:

此函式透過curl命令從指定的GitHub URL下載檔案。它處理了下載成功與失敗的情況,並給出了相應的提示。

OpenAI API設定

OpenAI套件安裝在三個流程相關的notebook中。API金鑰可以從檔案中讀取或手動輸入:

# 從檔案中讀取API金鑰
from google.colab import drive
drive.mount('/content/drive')
f = open("drive/MyDrive/files/api_key.txt", "r")
API_KEY = f.readline()
f.close()

內容解密:

這段程式碼演示瞭如何在Google Colab中掛載Google Drive並從特設定檔案中讀取OpenAI API金鑰,以確保金鑰的安全性。

本章所建立的RAG影片製作系統能夠透過Pinecone的儲存能力實作無限擴充套件,每次處理一個影片,僅需CPU和有限的記憶體。這一系統展示了自動化影片製作的可行性,但其在實際專案中的實施仍需要大量的工作。不過,相關技術已經準備就緒,影片製作的未來正處於歷史性的變革之中。

自動化影片生成與分析的革新:生成器與評論員的協作

在電腦視覺領域,一場由自動化影片生成與分析引領的革命正在悄然興起。本章將探討生成器(Generator)AI 代理的應用,特別是與 OpenAI 的 Sora 模型結合的創新實踐。Sora 是一種文字到影片的擴散變換器,能夠根據文字提示生成高品質的影片內容。

AI 生成的影片資料集

本專案的第一個 AI 代理是一個文字到影片的擴散變換器模型,用於生成我們將要使用的影片資料集。這些影片是由 OpenAI 在 2024 年 2 月發布的 Sora 模型生成的。你可以透過 https://ai.invideo.io/ 存取 Sora,觀看公開的 AI 生成影片並建立自己的影片。AI 生成的影片提供了免費且具有彈性版權條款的影片資源,可參考 https://invideo.io/terms-and-conditions/

環境設定

在開始之前,我們需要設定開發環境。首先,安裝必要的函式庫:

#!pip install openai==1.45.0
#!pip install pinecone-client==4.1.1

接著,匯入所需的函式庫並設定 API 金鑰:

import openai
import os

# 設定 OpenAI API 金鑰
os.environ['OPENAI_API_KEY'] = 'YOUR_API_KEY'
openai.api_key = os.getenv("OPENAI_API_KEY")

# 設定 Pinecone API 金鑰
f = open("drive/MyDrive/files/pinecone.txt", "r")
PINECONE_API_KEY = f.readline()
f.close()

擴散變換器的工作原理

Sora 的核心是一個擴散變換器模型,它在編碼器和解碼器之間執行。該模型使用使用者的文字輸入來引導內容生成,將其與編碼器的補丁(patches)相關聯。模型迭代地改進這些嘈雜的潛在表示(latent representations),增強其清晰度和一致性。最後,將改進後的資料傳遞給解碼器,以重建高保真度的影片幀。

編碼器與解碼器的工作流程

編碼器和解碼器是整體擴散模型的核心組成部分,如圖 10.3 所示。它們在變換器擴散模型的工作流程中扮演著至關重要的角色:

  • 編碼器:將輸入資料(如影像或影片)壓縮到較低維度的潛在空間中,保留關鍵資訊。
  • 解碼器:從編碼器產生的潛在表示中重建原始資料,執行編碼器的逆向操作。

圖 10.3:影片擴散模型的編碼和解碼工作流程

此圖示展示了影片擴散模型的整體架構,包括編碼器、擴散變換器和解碼器的協作流程。 圖表翻譯: 該圖詳細展示了影片擴散模型的運作流程,首先透過編碼器將輸入資料壓縮至潛在空間,接著由擴散變換器進行迭代最佳化,最後由解碼器重建出高品質的影片幀。

擴散變換器的五個主要步驟

擴散變換器模型的過程經歷五個主要步驟,如前圖所示:

  1. 視覺編碼器 將影像資料集轉換為較低維度的潛在空間。
  2. 視覺編碼器 將較低維度的潛在空間分割成類別似句子中的單詞的補丁(patches)。
  3. 擴散變換器 將使用者文字輸入與其補丁字典相關聯。
  4. 擴散變換器 反覆改進生成的嘈雜影像表示,以產生連貫的幀。

程式碼範例:擴散變換器的實作

# 定義擴散變換器模型的類別
class DiffusionTransformer:
    def __init__(self, encoder, decoder):
        self.encoder = encoder
        self.decoder = decoder
    
    def generate_video(self, text_input):
        # 使用編碼器將文字輸入轉換為潛在表示
        latent_representation = self.encoder(text_input)
        
        # 使用擴散變換器迭代改進潛在表示
        refined_representation = self.diffusion_transform(latent_representation)
        
        # 使用解碼器重建高保真度的影片幀
        video_frames = self.decoder(refined_representation)
        
        return video_frames
    
    def diffusion_transform(self, latent_representation):
        # 實作擴散變換器的迭代最佳化過程
        # 詳細實作省略
        pass

#### 內容解密:

  • DiffusionTransformer 類別封裝了擴散變換器模型的核心功能,包括編碼器和解碼器的協作。
  • generate_video 方法根據文字輸入生成影片,首先透過 encoder 取得潛在表示,然後使用 diffusion_transform 方法進行迭代最佳化,最後透過 decoder 重建出高品質的影片幀。
  • diffusion_transform 方法實作了擴散變換器的核心邏輯,包括與使用者文字輸入相關聯的補丁處理和迭代最佳化過程。

與挑戰

AI 生成的影片代表著 AI 應用領域的一大飛躍。Sora 的潛力適用於許多行業,包括電影製作、教育和行銷。其從簡單文字提示生成細緻影片內容的能力為創意和教育輸出開闢了新的途徑。然而,AI 生成的影片也帶來了諸如深度偽造(deep fakes)和誤導資訊的風險。在個人層面上,我們必須在實施生成式 AI 時考慮倫理因素,以產生建設性、倫理和真實的內容。

總之,生成器與評論員的協作標誌著電腦視覺領域的一大創新,不僅提高了影片生成的效率,也為未來的創意產業帶來了新的可能性。然而,我們也必須正視其帶來的挑戰,並採取相應的倫理措施。