Pandas 是 Python 中常用的資料分析工具,在 A/B 測試中能有效處理和分析資料。首先,將使用者反饋資料載入 Pandas DataFrame,新增欄位記錄使用者對不同版本的評價。接著,透過點選按鈕觸發事件,記錄使用者的讚或不讚,並將結果數值化儲存。最後,利用 Pandas 的 groupby() 方法,計算每個版本的總分和參與人數,方便後續分析和比較。此外,文章也提供一個簡單的評分系統,讓使用者能以讚或不讚按鈕評估模型產生的回應,並提供 Jupyter Notebook 和命令列兩種實作方式。程式碼中使用 ipywidgets 建立互動按鈕,並示範如何更新顯示內容和記錄評分結果。

載入和隨機化回應

import pandas as pd

# 載入 responses.csv 檔案
df = pd.read_csv("responses.csv")

# 隨機化 DataFrame
df = df.sample(frac=1).reset_index(drop=True)

現在,我們可以看到即使在列印的回應中,零次學習(zero-shot)的第一五行也趨向於給出一個編號列表,而少次學習(few-shot)的最後五行則趨向於輸出所需的格式,即逗號分隔的內聯列表。下一步是對每個回應進行評分,這最好是在盲目和隨機的情況下進行,以避免偏袒某個提示。

使用 Pandas 進行 A/B 測試資料分析

在進行 A/B 減測試時,瞭解使用者對不同版本的反饋是非常重要的。以下是如何使用 Pandas 進行 A/B 測試資料分析的步驟。

步驟 1:準備資料

首先,我們需要準備好資料。假設我們有一個 DataFrame df,其中包含了使用者的反饋資料。

import pandas as pd

# 建立一個示例 DataFrame
data = {
    'variant': ['A', 'A', 'B', 'B', 'A', 'B'],
    'response': ['text1', 'text2', 'text3', 'text4', 'text5', 'text6']
}
df = pd.DataFrame(data)

步驟 2:新增反饋欄位

接下來,我們需要新增一個新的欄位來儲存使用者的反饋。

# 新增一個新的欄位來儲存使用者的反饋
df['feedback'] = pd.Series(dtype='str')

步驟 3:定義按鈕點選事件

當使用者點選按鈕時,我們需要更新反饋欄位。

def on_button_clicked(b):
    global response_index
    
    # 將讚/踩轉換為 1/0
    user_feedback = 1 if b.description == "\U0001F44D" else 0
    
    # 更新反饋欄位
    df.at[response_index, 'feedback'] = user_feedback
    
    response_index += 1
    
    if response_index < len(df):
        update_response()
    else:
        # 將反饋資料儲存到 CSV 檔案
        df.to_csv("results.csv", index=False)
        print("A/B 測試完成。以下是結果:")
        
        # 計算每個版本的分數和資料行數
        summary_df = df.groupby('variant').agg(
            count=('feedback', 'count'),
            score=('feedback', 'mean')).reset_index()

步驟 4:更新反饋資料

當使用者點選按鈕時,我們需要更新反饋資料。

def update_response():
    global response_index
    
    # 更新反饋資料
    response_index += 1
    
    if response_index < len(df):
        # 繼續顯示下一個反饋
        print(df.at[response_index, 'response'])
    else:
        # 將反饋資料儲存到 CSV 檔案
        df.to_csv("results.csv", index=False)
        print("A/B 測試完成。以下是結果:")
        
        # 計算每個版本的分數和資料行數
        summary_df = df.groupby('variant').agg(
            count=('feedback', 'count'),
            score=('feedback', 'mean')).reset_index()

步驟 5:計算分數和資料行數

最後,我們需要計算每個版本的分數和資料行數。

# 計算每個版本的分數和資料行數
summary_df = df.groupby('variant').agg(
    count=('feedback', 'count'),
    score=('feedback', 'mean')).reset_index()

透過以上步驟,我們可以使用 Pandas 進行 A/B 測試資料分析,瞭解使用者對不同版本的反饋,從而最佳化產品設計。

評估品質與回應評分系統

評估人工智慧模型的品質是一個非常重要的步驟,尤其是在模型訓練和最佳化的過程中。為了簡化這個過程,我們可以建立一個簡單的回應評分系統,使用「讚」和「不讚」按鈕來快速標記每個模型產生的回應。

實作評分系統

以下是實作這個評分系統的一個簡單示例,使用Python和Jupyter Notebook中的互動式小工具(Widgets):

import pandas as pd
from ipywidgets import Button, HBox, HTML, Label

# 假設我們有一個DataFrame,包含了模型產生的回應
df = pd.DataFrame({
    'response': ['回應1', '回應2', '回應3']  # 範例回應
})

# 初始化變數
response_index = 0

# 建立小工具
response = HTML()
count_label = Label()

def update_response():
    global response_index
    new_response = df.iloc[response_index]['response']
    if pd.notna(new_response):
        new_response = "<p>" + new_response + "</p>"
    else:
        new_response = "<p>No response</p>"
    
    response.value = new_response
    count_label.value = f"Response: {response_index + 1}/{len(df)}"

# 定義按鈕點選事件
def on_button_clicked(b):
    global response_index
    if b.description == '\U0001F44D':  # 讚
        print(f"讚:{df.iloc[response_index]['response']}")
    elif b.description == '\U0001F44E':  # 不讚
        print(f"不讚:{df.iloc[response_index]['response']}")
    
    response_index += 1
    if response_index < len(df):
        update_response()
    else:
        print("評估完成")

# 建立按鈕
thumbs_up_button = Button(description='\U0001F44D')
thumbs_up_button.on_click(on_button_clicked)

thumbs_down_button = Button(description='\U0001F44E')
thumbs_down_button.on_click(on_button_clicked)

# 顯示小工具
button_box = HBox([thumbs_down_button, thumbs_up_button])
update_response()
display(response, button_box, count_label)

在命令列中實作評分系統

如果你想要在命令列中實作這個評分系統,可以使用以下方法:

import pandas as pd

# 假設我們有一個DataFrame,包含了模型產生的回應
df = pd.DataFrame({
    'response': ['回應1', '回應2', '回應3']  # 範例回應
})

# 初始化變數
response_index = 0

while response_index < len(df):
    print(f"Response: {response_index + 1}/{len(df)}")
    print(df.iloc[response_index]['response'])
    
    rating = input("請輸入評分(Y/N):")
    if rating.upper() == 'Y':
        print("讚")
    elif rating.upper() == 'N':
        print("不讚")
    
    response_index += 1

print("評估完成")

這個評分系統可以幫助你快速標記每個模型產生的回應,並提供一個簡單的方式來評估模型的品質。

第一章:提示的五大原則

在瞭解如何有效地使用提示之前,讓我們先來看看一個簡單的實驗結果。這個實驗是關於兩個不同的提示變體(A和B)在特定情境下的表現比較。結果如下:

變體 次數 得分
A 5 0.2
B 5 0.6

這個結果來自於一個隨機化的測試過程,每個回應都被標記並評估,而評估人員在評估時並不知道原始提示的內容,以確保評估的客觀性。

現在,讓我們一步一步地解釋這個過程是如何實作的:

  1. 匯入必要模組:首先,我們匯入了三個重要的模組,分別是ipywidgetsIPython.displaypandas。其中,ipywidgets提供了互動式的HTML小工具,適用於Jupyter Notebook和IPython核心;IPython.display則提供了顯示各種輸出的類別,如影像、聲音、HTML等;而pandas是一個強大的資料操控函式庫。

  2. 讀取資料:接下來,我們使用pandas函式庫讀取了一個名為responses.csv的CSV檔案,這個檔案包含了我們想要測試的回應。這樣就建立了一個名為df的Pandas資料框架。

  3. 資料打亂:然後,我們使用sample()函式對資料框架df進行了打亂處理,引數frac=1表示使用所有行,而reset_index(drop=True)則用於重置索引,以還原到標準的0、1、2、…、n索引。

  4. 定義回應索引:我們定義了一個變數response_index,初始值為0,用於追蹤當前正在檢視的回應在資料框架中的位置。

  5. 新增反饋欄位:最後,我們向資料框架df增加了一個名為feedback的新欄位,資料型別設定為字串,以便儲存對每個回應的反饋評價。

內容解密:

這段程式碼的核心思想是如何設計和評估不同的提示,以達到最佳的效果。透過這個過程,我們可以瞭解到如何使用資料分析和測試來最佳化提示的設計,從而提高整體的表現和使用者經驗。

import pandas as pd
import ipywidgets as widgets
from IPython.display import display

# 讀取CSV檔案
df = pd.read_csv('responses.csv')

# 打亂資料
df = df.sample(frac=1).reset_index(drop=True)

# 定義回應索引
response_index = 0

# 新增反饋欄位
df['feedback'] = ''

圖表翻譯:

以下是這段程式碼邏輯的視覺化呈現,使用Mermaid流程圖描述了從讀取資料到新增反饋欄位的整個過程。

  flowchart TD
    A[讀取CSV檔案] --> B[打亂資料]
    B --> C[定義回應索引]
    C --> D[新增反饋欄位]
    D --> E[完成]

這個圖表展示瞭如何一步一步地處理資料,以達到最終的目的。

建立一個簡單的評分系統

為了評估提示的品質,我們可以建立一個簡單的評分系統。這個系統可以幫助我們判斷提示的優劣,並發現潛在的問題。

系統設計

系統由以下幾個部分組成:

  1. 資料函式庫:儲存使用者的評分結果。
  2. 使用者介面:顯示提示和評分按鈕。
  3. 評分邏輯:根據使用者的評分結果更新資料函式庫。

實作細節

  1. 定義評分函式:建立一個函式 on_button_clicked,該函式會在使用者點選評分按鈕時呼叫。這個函式會根據使用者的評分結果更新資料函式庫。
  2. 更新資料函式庫:在 on_button_clicked 函式中,根據使用者的評分結果更新資料函式庫中的相應記錄。
  3. 顯示下一個提示:如果還有未評分的提示,則顯示下一個提示。
  4. 儲存結果:如果所有提示都已經評分,則儲存結果到一個新的 CSV 檔案中。

優點和缺點

這個簡單的評分系統有以下優點:

  • 可以快速評估提示的品質。
  • 可以發現潛在的問題。 但是,也有以下缺點:
  • 評分過程可能很繁瑣。
  • 評分結果可能不能代表目標受眾的偏好。

未來改進

為了改進這個系統,我們可以考慮以下幾點:

  • 自動化評分:建立一個自動化的評分系統,使用演算法來評估提示的品質。
  • 增加評分標準:增加更多的評分標準,例如準確性、相關性等。
  • 使用機器學習:使用機器學習演算法來分析評分結果,找出最佳的提示策略。

結論:以使用者與開發體驗視角探討提示工程的迭代最佳化

從終端使用者互動流程的最佳化角度來看,本篇文章探討瞭如何透過載入、隨機化、評分與分析回應結果來迭代最佳化提示工程。透過Pandas等工具,我們得以建立一個簡單卻有效的A/B測試框架,結合「讚」與「不讚」的評分機制,讓開發者能快速地評估不同提示策略的優劣。 分析顯示,即使是少數樣本的測試,也能觀察到不同提示策略在輸出格式上存在顯著差異,例如零次學習傾向產生編號列表,而少次學習則更易於生成所需的逗號分隔列表。 然而,此評分系統仍存在一些限制,例如缺乏更細緻的評分標準、高度依賴人工評估的效率瓶頸,以及評分結果未必能完全反映真實使用者的感受。

展望未來,提示工程的發展趨勢將會朝向自動化評估、更精細的評分指標以及結合機器學習模型的方向演進。 例如,可以利用自然語言處理技術分析回應的語義、相關性、流暢度等,並結合使用者行為資料,建立更客觀、全面的評估模型。 玄貓認為,持續最佳化評估方法,並將其整合至提示工程的開發流程中,將是提升提示效能、降低開發成本的關鍵所在。 對於追求高效能提示策略的開發者而言,投入資源建立自動化評估系統將是值得的投資。