利用 SciQ 資料集微調 GPT-4o 模型,並結合 Pinecone 向量資料函式庫及 OpenAI 視覺模型,構建一個根據 RAG 的自動化影片問答系統。系統首先使用 OpenAI Sora 生成影片,再將影片分割成幀,利用 OpenAI 視覺模型生成技術評論。接著,將評論嵌入向量並儲存至 Pinecone,以便後續檢索。最後,透過 GPT-4o 模型分析評論,並根據使用者提問,從 Pinecone 檢索相關幀及影片,提供精準的答案和標籤。這個系統能有效地自動化影片製作流程,並提供客製化的影片描述和標籤。

首先,下載 SciQ 資料集,過濾掉無關資訊,僅保留問題、正確答案和支援文字,確保資料集的乾淨和有效性。接著,將資料集載入 pandas DataFrame,移除幹擾項欄位,並將其轉換為 JSONL 格式,以便用於 GPT-4o 模型的微調訓練。在準備 JSONL 檔案時,將問題、正確答案和支援文字組織成系統指令、使用者問題和助手回應的格式,以引導模型學習正確的問答模式。

下載和過濾資料集

首先,我們下載 SciQ 資料集,並過濾訓練資料以只包含非空記錄、正確答案和支援文字。這些步驟確保了我們的資料集是乾淨和有用的。

# 匯入必要的函式庫
from datasets import load_dataset
import pandas as pd

# 從 Hugging Face 下載 SciQ 資料集
dataset_view = load_dataset("sciq", split="train")

# 過濾資料集以只包含具有支援文字和正確答案的問題
filtered_dataset = dataset_view.filter(lambda x: x["support"]!= "")

# 列印具有支援文字的問題數量
print("具有支援文字的問題數量:", len(filtered_dataset))

輸出結果顯示我們有 10,481 個記錄:

具有支援文字的問題數量: 10481

載入資料集到 DataFrame 並刪除幹擾項欄位

接下來,我們將過濾後的資料集載入到 pandas DataFrame 中,並刪除幹擾項欄位(即錯誤答案)。

# 將過濾後的資料集轉換為 pandas DataFrame
df_view = pd.DataFrame(filtered_dataset)

# 要刪除的欄位
columns_to_drop = ['distractor3', 'distractor1', 'distractor2']

# 從 DataFrame 中刪除欄位
df_view = df_view.drop(columns=columns_to_drop)

# 顯示 DataFrame
print(df_view.head())

輸出結果顯示我們需要的三個欄位:

questioncorrect_answersupport
0
1
2

準備資料集進行微調

為了訓練完成模型,我們需要將資料集寫入 JSON 檔案中,以 JSONL 格式。

  flowchart TD
    A[下載資料集] --> B[過濾資料集]
    B --> C[載入 DataFrame]
    C --> D[刪除幹擾項欄位]
    D --> E[寫入 JSON 檔案]

圖表翻譯:

上述流程圖描述了準備資料集進行微調的步驟。首先,我們下載資料集,然後過濾資料集以只包含非空記錄、正確答案和支援文字。接下來,我們將過濾後的資料集載入到 pandas DataFrame 中,並刪除幹擾項欄位。最後,我們將資料集寫入 JSON 檔案中,以 JSONL 格式。

準備JSON Lines檔案的資料專案

首先,我們需要準備好要寫入JSON Lines檔案的資料專案。這些專案包括了問題、正確答案和詳細解釋。

items = []

for idx, row in df.iterrows():
    # 定義詳細答案,包括正確答案和支援解釋
    detailed_answer = row['correct_answer'] + " Explanation: " + row['support']
    
    # 定義訊息,包括系統指令、使用者問題和助手回應
    items.append({
        "messages": [
            {"role": "system", "content": "Given a science question"},
            {"role": "user", "content": row['question']},
            {"role": "assistant", "content": detailed_answer}
        ]
    })

在這段程式碼中,我們首先定義了詳細答案(detailed_answer),它包含了正確答案(correct_answer)和支援解釋(support)。然後,我們定義了訊息(messages),它包含了三個部分:

  1. 系統指令({"role": "system", "content": "Given a science question"}):這設定了語言模型的初始指令,告訴它提供詳細答案給科學問題。
  2. 使用者問題({"role": "user", "content": row['question']}):這代表了使用者提出的問題,從DataFrame的問題欄位中取出。
  3. 助手回應({"role": "assistant", "content": detailed_answer}):這代表了助手的回應,提供了詳細答案。

寫入JSON Lines檔案

接下來,我們可以將準備好的資料專案寫入JSON Lines檔案。

# 寫入JSON Lines檔案
with jsonlines.open('/content/QA_prompts_and_completions.jsonl', 'w') as writer:
    writer.write_all(items)

這段程式碼使用jsonlines函式庫將資料專案寫入JSON Lines檔案中。

驗證JSON檔案內容

最後,我們可以載入剛剛建立的JSON檔案到一個Pandas DataFrame中,以驗證其內容。

# 載入JSON檔案
dfile = "/content/QA_prompts_and_completions.jsonl"
import pandas as pd

# 載入資料
df = pd.read_json(dfile, lines=True)
print(df)

這段程式碼使用Pandas函式庫載入JSON檔案,並將其轉換成DataFrame。然後,它印出DataFrame的內容,以驗證是否成功準備好了JSON Lines檔案。

進行微調訓練

現在,我們已經準備好了JSON Lines檔案,可以進行微調訓練了。首先,我們需要匯入OpenAI函式庫,並建立一個客戶端物件。

from openai import OpenAI
import jsonlines

client = OpenAI()

這段程式碼匯入了OpenAI函式庫,並建立了一個客戶端物件,準備進行微調訓練。

使用OpenAI進行模型微調

上傳訓練檔案

首先,我們需要上傳訓練檔案到OpenAI。這個檔案包含了我們要用來微調模型的資料。

result_file = client.files.create(
    file=open("QA_prompts_and_completions.json", "rb"),
    purpose="fine-tune"
)

上傳後,我們可以印出檔案的資訊:

print(result_file)

這會顯示檔案的ID、大小、建立時間等資訊。

建立微調任務

接下來,我們需要建立一個微調任務。這個任務會使用我們上傳的訓練檔案來微調模型。

ft_job = client.fine_tuning.jobs.create(
    training_file=param_training_file_name,
    model="gpt-4o-mini-2024-07-18"
)

建立後,我們可以印出微調任務的資訊:

print(ft_job)

這會顯示微調任務的ID、建立時間、狀態等資訊。

監控微調任務

要監控微調任務的進度,我們可以使用OpenAI的API來查詢最新的微調任務。

response = client.fine_tuning.jobs.list(limit=3)

這會傳回最新的三個微調任務。然後,我們可以初始化列表來儲存提取的資料:

# Initialize lists to store the extracted data

這些列表會用來儲存微調任務的資訊,例如任務ID、狀態、模型等。

微調任務的詳細資訊

微調任務的輸出會包含許多有用的資訊,例如:

  • Job ID:微調任務的ID
  • Status:微調任務的狀態(例如「validating_files」)
  • Model:使用的模型(例如「gpt-4o-mini-2024-07-18」)
  • Training File:上傳的訓練檔案
  • n_epochs:訓練週期的數量(自動或手動設定)
  • batch_size:批次大小(自動或手動設定)
  • learning_rate_multiplier:學習率乘數(自動或手動設定)
  • Created at:微調任務的建立時間

這些資訊對於監控和管理微調過程非常重要。

圖表翻譯:

以下是使用Mermaid語法繪製的流程圖,展示了微調任務的建立和監控過程:

  flowchart TD
    A[上傳訓練檔案] --> B[建立微調任務]
    B --> C[監控微調任務]
    C --> D[提取微調任務資訊]
    D --> E[儲存提取的資料]

這個流程圖展示了從上傳訓練檔案到儲存提取的資料的整個過程。

內容解密:

首先,我們需要初始化多個空列表來儲存從API回應中提取的資訊,包括工作ID、建立時間、工作狀態、模型、訓練檔案、錯誤訊息以及微調模型名稱。

job_ids = []
created_ats = []
statuses = []
models = []
training_files = []
error_messages = []
fine_tuned_models = []

接下來,我們會迭代API回應中的每個工作,以提取必要的資訊:

for job in response.data:
    job_ids.append(job.id)
    created_ats.append(job.created_at)
    statuses.append(job.status)
    models.append(job.model)
    training_files.append(job.training_file)
    error_message = job.error.message if job.error else None
    error_messages.append(error_message)
    fine_tuned_model = job.fine_tuned_model if hasattr(job, 'fine_tuned_model') else None
    fine_tuned_models.append(fine_tuned_model)

最後,我們使用pandas函式庫建立一個DataFrame,以便更好地組織和分析提取的資訊:

import pandas as pd

這些步驟使我們能夠有效地處理API回應,並將其轉換為一個結構化的DataFrame,方便進一步的分析和處理。

圖表翻譯:

  flowchart TD
    A[初始化列表] --> B[迭代API回應]
    B --> C[提取工作資訊]
    C --> D[建立DataFrame]
    D --> E[分析和處理]

此流程圖描述了從初始化列表到建立DataFrame的整個過程,展示瞭如何從API回應中提取資訊並將其組織成一個結構化的DataFrame以便進一步分析。

使用 Fine-Tuned OpenAI 模型

完成 Fine-Tuning 後,我們可以使用我們的自定義 OpenAI GPT-4o-mini 模型進行完成任務。首先,我們需要確保 generation 變數為 True,表示我們已經成功訓練了一個模型。如果沒有模型訓練成功,則不會執行後續的 OpenAI API 呼叫,以避免使用未經訓練的模型。

驗證 Fine-Tuned 模型

我們可以透過檢查 first_non_empty_model 變數來驗證是否有可用的 Fine-Tuned 模型。如果有,則輸出最新的 Fine-Tuned 模型名稱;否則,輸出提示訊息,指出沒有找到任何 Fine-Tuned 模型。

if generation:
    print("The latest fine-tuned model is:", first_non_empty_model)
else:
    print("No fine-tuned models found.")

執行完成任務

如果 generationTrue,我們可以使用 Fine-Tuned 模型執行完成任務。這涉及到呼叫 OpenAI 的完成 API,並指定使用我們的 Fine-Tuned 模型。

if generation:
    # 執行完成任務
    response = client.completions.create(
        model=first_non_empty_model,
        prompt="您的任務提示",
        max_tokens=1024,
        temperature=0.7,
    )
    print(response.choices[0].text)

處理訓練失敗情況

如果訓練任務失敗,我們需要驗證訓練資料是否存在不一致性、缺失值或錯誤標籤。此外,確保 JSON 檔案格式符合 OpenAI 的 schema 要求,包括正確的欄位名稱、資料型別和結構。

等待訓練完成

由於訓練任務可能需要一些時間,您可以定期重新整理 pandas DataFrame 來檢查狀態,也可以撰寫程式碼等待特定名稱的訓練任務出現或等待 OpenAI 傳送電子郵件通知訓練任務已完成。

透過這些步驟,您可以成功地使用 Fine-Tuned OpenAI 模型進行完成任務,充分發揮自定義模型的潛力。

全球風向的科學解釋

全球風向的形成是一個複雜的過程,涉及多個因素,包括地球的自轉、太陽輻射、海洋和陸地的溫度差異等。然而,在全球風向中有一個重要的現象,使得風向在全球範圍內呈現出一定的規律性,那就是科裡奧利效應(Coriolis effect)。

什麼是科裡奧利效應?

科裡奧利效應是一種由於地球自轉而產生的力,使得移動的物體(如空氣和水)在北半球向右偏轉,在南半球向左偏轉。這種效應對於理解全球風向和海洋洋流的形成至關重要。

科裡奧利效應的成因

科裡奧利效應是由於地球自轉而產生的。當空氣或水在地球表面上移動時,由於地球的自轉,它會受到一種額外的力,這種力使得它向右(在北半球)或向左(在南半球)偏轉。這種力與物體的速度和地球自轉的速度成正比。

科裡奧利效應對全球風向的影響

科裡奧利效應對全球風向有著重要的影響。在北半球,科裡奧利效應使得風向向右偏轉,形成了東北風。在南半球,科裡奧利效應使得風向向左偏轉,形成了西北風。這種全球風向的規律性對於氣候和天氣預報至關重要。

圖表翻譯:

上述Mermaid圖表展示了地球自轉、科裡奧利效應、風向偏轉和全球風向形成之間的關係。地球自轉產生科裡奧利效應,科裡奧利效應使得風向偏轉,從而形成全球風向。這個過程是理解地球氣候和天氣規律的關鍵部分。

瞭解OpenAI的模型訓練指標

OpenAI提供了一個使用者介面來分析模型訓練過程和模型的指標。您可以存取與您微調訓練有關的指標。

微調訓練工作列表

介面顯示您微調訓練工作的列表。您可以選擇檢視所有微調訓練工作、成功的工作或失敗的工作。如果您選擇一個成功的工作,例如,您可以檢視工作詳情,如下面的摘錄所示:

工作詳情

讓我們逐一檢視這個圖表中提供的資訊:

  • 狀態:表示微調訓練過程的狀態。在這種情況下,我們可以看到過程已經成功完成。
  • 工作ID:微調訓練工作的唯一識別碼。這可以用於查詢或支援目的。
  • 基礎模型:指定用於微調訓練的預先訓練模型。在這種情況下,gpt-4o-mini是一種OpenAI模型版本。
  • 輸出模型:這是微調訓練後模型的識別碼。它包含根據特定訓練資料進行的更改和最佳化。
  • 建立時間:微調訓練工作開始的日期和時間。
  • 訓練令牌:在訓練期間處理的令牌(文字片段,例如單詞或標點符號)總數。這個指標幫助衡量訓練的程度。
  • 世代:訓練資料在微調訓練期間完成的完整迭代次數。更多世代可以導致更好的學習,但太多可能導致過度適應。
  • 批次大小:在模型訓練的一次迭代中使用的訓練示例數量。較小的批次大小可以提供更多更新和精煉的學習,但可能需要更長時間來訓練。
  • 學習率乘數:這指的是學習率乘數,影響基礎模型在微調訓練期間的學習率如何調整。較小的乘數可以導致對模型權重的更新更小、更保守。
  • 種子:訓練過程中使用的隨機數生成器種子。提供種子可以確保訓練過程是可重現的,這意味著您可以在相同的輸入條件下獲得相同的結果。

微調模型指標

如果我們滾動到模型的「資訊」標籤下方,我們可以看到如下所示的指標:

訓練損失

訓練損失是一個可靠的指標,用於評估機器學習模型在訓練期間的效能。在這種情況下,訓練損失(1.1570)代表模型在訓練資料集上的平均錯誤。較低的訓練損失值表示模型更好地適應了訓練資料。訓練損失為1.1570,表明模型在微調訓練過程中已經很好地學會了預測或分類別其訓練資料。

時間和步驟資訊

我們還可以檢視時間和步驟資訊,以瞭解訓練損失在整個訓練過程中的變化情況。

關於微調訓練

微調訓練確實可以有效地最佳化RAG資料,如果我們確保使用高品質資料和正確的引數進行模型訓練。現在,是時候總結我們的旅程並轉向下一個RAG驅動的生成AI實作。

問題
  1. 所有組織是否需要管理大量RAG資料?
  2. GPT-4o-mini模型是否被描述為不足以進行微調任務?
  3. 預先訓練好的模型是否可以在截止日期後更新其知識函式庫而不使用檢索系統?
  4. 靜態資料是否永遠不會改變,因此永遠不需要更新?
  5. 從Hugging Face下載資料是否是準備資料集的唯一來源?
  6. 所有的RAG資料是否最終都嵌入到已經訓練好的模型引數中根據檔案?

7. 是否推薦僅使用新資料進行AI模型的微調?

根據提供的內容,沒有明確的答案表明章節是否推薦僅使用新資料進行AI模型的微調。然而,微調AI模型通常涉及使用既有的模型作為基礎,並使用新資料對其進行調整,以使模型更好地適應新的任務或資料集。

8. 是否使用OpenAI Metrics介面來調整學習率在模型訓練期間?

沒有提到OpenAI Metrics介面被用於調整學習率在模型訓練期間。OpenAI Metrics可能與評估模型效能有關,但具體的調整學習率的過程沒有被描述。

9. 是否可以使用OpenAI dashboard有效地監控微調過程?

雖然OpenAI dashboard可能提供了一些工具和功能來監控和管理AI模型的訓練和微調過程,但具體的細節沒有在提供的內容中被提及。

10. 是否認為人工反饋在準備硬科學資料集(如SciQ)時是無必要的?

根據提供的內容,沒有明確的答案表明人工反饋是否被認為是無必要的。然而,在準備硬科學資料集時,人工反饋通常是非常重要的,因為它可以幫助確保資料的品質和準確性。

RAG for Video Stock Production with Pinecone and OpenAI

人類的創造力超出了已知模式的範圍,因為我們能夠打破習慣並發明新的做事方法。在另一方面,生成式AI依賴於我們已知的模式,不過是複製我們的習慣而不是真正地「創造」。因此,在這一章中,當我們使用「創造」這個詞時,我們指的是「生成」。生成式AI將繼續擴充套件,直到它找到複製任何人類任務的方法。因此,我們必須瞭解這些自動化系統如何工作,以便我們能夠在專案中最好地使用它們。這一章可以被視為一種旅程,探索RAG在我們所處的混合人類和AI代理時代的架構。我們將扮演一個初創公司的角色,旨在建立一個由AI驅動的可下載的線上影片函式庫。為了實作這一目標,我們將建立一個AI代理團隊,它們將共同建立一個帶有評論和標籤的影片函式庫。

我們的旅程從第一個管道開始:生成器和評論器。生成器代理使用Sora(一個OpenAI文字到影片模型)建立世界模擬。你將看到如何inVideo AI應用程式(由玄貓提供)從一個想法中生成影片。評論器代理然後將AI生成的影片分割成幀,並使用OpenAI視覺模型生成技術評論。

接下來,在第二個管道中:向量儲存管理員,我們將繼續我們的旅程,並建立一個向量儲存管理員,它管理Pinecone。向量儲存管理員將嵌入由玄貓生成的技術影片評論,上傳向量化評論,並查詢Pinecone向量儲存以驗證系統是否功能正常。最後,我們將建立一個影片專家,它處理使用者輸入,查詢向量儲存,並檢索相關影片幀。最後,在第三個管道中:影片專家,影片專家代理將使用者輸入與查詢的原始輸出增強,並啟動其專家OpenAI GPT-4o模型,它將分析評論,檢測不完善之處,以更高效的方式重新表述它,並為影片提供標籤。

透過玄貓,你將知道如何自動生成短影片函式庫。你將能夠提供一種服務,使用者只需輸入幾個字就可以獲得帶有自定義、實時描述和標籤的影片。

總結一下,這一章涵蓋了以下主題:

  • 設計生成式AI影片和評論
  • 將影片分割成幀以供OpenAI視覺分析模型使用
  • 將影片嵌入並上傳向量到Pinecone索引中
  • 查詢向量儲存
  • 使用OpenAI GPT-4o改進和糾正影片評論
  • 自動標籤原始影片

自動化影片製作流程:從原始影片到標註和評論影片

隨著科技的進步,自動化影片製作流程已成為各個產業中的一項重要需求,尤其是在媒體、行銷、娛樂和教育領域。企業和創作者正不斷尋找高效的方法來生產和管理內容,以滿足日益增長的需求。在本章中,您將學習到可以直接應用於滿足這些需求的實用技能。

我們在本章中的RAG影片製作使用案例目標是使用AI代理來處理AI生成的影片,建立一個標註和評論的影片函式庫,以便識別它們。系統還將動態生成自定義描述。圖10.1展示了AI代理團隊如何處理RAG影片製作:

圖10.1:從原始影片到標註和評論影片

實作AI代理

我們將實作AI代理來完成以下任務:

  1. 自動生成原始影片:使用AI技術自動生成原始影片,並下載它們。
  2. 分割影片為幀:將生成的影片分割為個別的幀,以便進一步分析。
  3. 分析幀樣本:選取一部分幀進行分析,以瞭解影片的內容。
  4. 啟動OpenAI LLM模型:使用OpenAI的大語言模型(LLM)生成技術評論。
  5. 儲存評論:儲存生成的評論,包括唯一索引、評論內容、分析的幀號和影片檔名。
  6. 更新Pinecone向量儲存:將資料更新到Pinecone向量儲存中,以便進行查詢和檢索。
  7. 查詢Pinecone向量儲存:使用使用者輸入查詢Pinecone向量儲存,以找到最相似的幀。
  8. 檢索特定幀:根據查詢結果,檢索出最相似的幀及其對應的影片。

實作細節

生成原始影片

首先,我們需要使用AI技術自動生成原始影片。這可以透過使用影片生成模型,如GAN(生成對抗網路)或VAE(變分自編碼器),來實作。

分割影片為幀

接下來,我們需要將生成的影片分割為個別的幀。這可以透過使用影片處理函式庫,如OpenCV,來實作。

分析幀樣本

然後,我們需要選取一部分幀進行分析,以瞭解影片的內容。這可以透過使用電腦視覺技術,如物體偵測或場景理解,來實作。

啟動OpenAI LLM模型

接下來,我們需要使用OpenAI的大語言模型(LLM)生成技術評論。這可以透過使用OpenAI的API,來實作。

儲存評論

然後,我們需要儲存生成的評論,包括唯一索引、評論內容、分析的幀號和影片檔名。

更新Pinecone向量儲存

接下來,我們需要將資料更新到Pinecone向量儲存中,以便進行查詢和檢索。

查詢Pinecone向量儲存

然後,我們需要使用使用者輸入查詢Pinecone向量儲存,以找到最相似的幀。

檢索特定幀

最後,我們需要根據查詢結果,檢索出最相似的幀及其對應的影片。

影片生產生態系統的技術架構

為了實作影片生產的自動化,我們將建立一個根據人工智慧(AI)的生態系統。這個系統將由三個管道組成:生成器和評論器、向量儲存管理員以及影片專家。

管道1:生成器和評論器

在這個管道中,我們使用OpenAI Sora生成AI影片。評論器將影片分割成幀,並使用玄貓的視覺模型對每個幀進行評論。評論器代理然後儲存這些評論。

管道2:向量儲存管理員

這個管道負責將評論嵌入到向量儲存中,並更新儲存的內容。這樣,我們就可以根據使用者的輸入查詢最相似的幀。

管道3:影片專家

在這個管道中,我們使用Pinecone向量儲存查詢最相似的幀,根據使用者的輸入。然後,我們使用OpenAI GPT-4o分析評論的邏輯,找出不完美的地方,並生成一段針對使用者的定製評論和標籤。

從技術架構視角來看,本文深入探討瞭如何利用 OpenAI 和 Pinecone 建立一個自動化影片製作流程,涵蓋從原始影片生成、評論分析到向量儲存和檢索的完整流程。文章詳細闡述了三個核心管道的設計與實作:生成器和評論器管道利用 Sora 模型生成影片並進行逐幀評論;向量儲存管理員管道則負責將評論嵌入向量空間並更新 Pinecone 向量資料函式庫;影片專家管道則根據使用者查詢,從 Pinecone 檢索相關幀,並利用 GPT-4o 模型生成客製化評論和標籤。 然而,文章缺乏對不同技術方案的比較分析,例如與其他向量資料函式庫或大語言模型的比較。此外,系統的效能瓶頸,例如影片處理速度和向量搜尋效率,也未被提及。展望未來,隨著 AI 技術的持續發展,預期會有更高效的影片生成模型和更強大的語義理解模型出現,進一步提升自動化影片製作流程的效率和智慧化程度。對於有意打造自動化影片生產流程的團隊,建議深入研究各個環節的技術選型,並關注效能最佳化和成本控制,才能最大限度地發揮 AI 的潛力。