NLP Course documentation

高級接口功能

Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

高級接口功能

Open In Colab Open In Studio Lab

現在我們可以構建和共享一個基本接口, 讓我們來探索一些更高級的特性, 如狀態和解釋。

使用狀態保存數據

Gradio 支持 會話狀態, 其中數據在頁面加載中的多個提交中持續存在。會話狀態對於構建演示很有用, 例如, 你希望在用戶與模型交互時保留數據的聊天機器人。請注意, 會話狀態不會在模型的不同用戶之間共享數據。

要將數據存儲在會話狀態中, 你需要做三件事:

  1. 向函數中傳遞一個 額外的參數 , 該參數表示接口的狀態。
  2. 在函數結束時, 將狀態的更新值作為 額外的返回值 返回。
  3. 在創建接口時添加 ‘state’ 輸入和 ‘state’ 輸出組件。

請參閱下面的聊天機器人示例:

import random

import gradio as gr


def chat(message, history):
    history = history or []
    if message.startswith("How many"):
        response = random.randint(1, 10)
    elif message.startswith("How"):
        response = random.choice(["Great", "Good", "Okay", "Bad"])
    elif message.startswith("Where"):
        response = random.choice(["Here", "There", "Somewhere"])
    else:
        response = "I don't know"
    history.append((message, response))
    return history, history


iface = gr.Interface(
    chat,
    ["text", "state"],
    ["chatbot", "state"],
    allow_screenshot=False,
    allow_flagging="never",
)
iface.launch()

請注意輸出組件的狀態如何在提交之間保持不變。注意: 可以給 state 參數傳入一個默認值, 作為 state 的初始值。

通過解釋來理解預測

大多數機器學習模型都是黑盒子, 函數的內部邏輯對終端用戶是隱藏的。為了提高透明度, 我們通過簡單地將 Interface 類中的解釋關鍵字設置為默認值, 使向模型添加解釋變得非常容易。這允許你的用戶理解輸入的哪些部分負責輸出。看看下面這個簡單的接口, 它顯示了一個還包括解釋的圖像分類器:

import requests
import tensorflow as tf

import gradio as gr

inception_net = tf.keras.applications.MobileNetV2()  # load the model

# Download human-readable labels for ImageNet.
response = requests.get("https://git.io/JJkYN")
labels = response.text.split("\n")


def classify_image(inp):
    inp = inp.reshape((-1, 224, 224, 3))
    inp = tf.keras.applications.mobilenet_v2.preprocess_input(inp)
    prediction = inception_net.predict(inp).flatten()
    return {labels[i]: float(prediction[i]) for i in range(1000)}


image = gr.Image(shape=(224, 224))
label = gr.Label(num_top_classes=3)

title = "Gradio Image Classifiction + Interpretation Example"
gr.Interface(
    fn=classify_image, inputs=image, outputs=label, interpretation="default", title=title
).launch()

通過提交一個輸入, 然後單擊輸出組件下的Interpret來測試解釋功能。

除了Gradio提供的默認解釋方法之外, 你還可以為 interpretation 參數指定 shap, 並設置 num_shap 參數。這使用基於 Shapley 的解釋, 你可以在 here 閱讀更多信息。最後, 還可以將自己的解釋函數傳入 interpretation 參數。在Gradio的入門頁面 here 中可以看到一個例子。

這結束了我們對Gradio的Interface類的深入研究。正如我們所看到的, 這個類使用幾行Python代碼創建機器學習演示變得簡單。然而, 有時你會想通過改變佈局或鏈接多個預測函數來定製你的demo。如果我們能以某種方式將 接口 分成可定製的 “塊”, 那不是很好嗎? 幸運的是, 有! 這是最後一部分的主題。