Contents

如何使用 Scikit-LLM 進行大型語言模型的文本分析

Scikit-LLM 是一個 Python 包,可協助將大型語言模型 (LLM) 整合到 scikit-learn 框架中。它有助於完成文字分析任務。如果您熟悉 scikit-learn,那麼使用 Scikit-LLM 會更容易。

應該承認,Scikit-LLM 和 scikit-learn 具有不同的用途,前者針對文本分析任務而定制,而後者則作為更全面的通用機器學習庫。

Scikit-LLM 入門

要開始使用 Scikit-LLM,您需要安裝程式庫並設定您的 API 金鑰。若要安裝該庫,請開啟 IDE 並建立新的虛擬環境。這將有助於防止任何潛在的庫版本衝突。然後,在終端機中執行以下命令。

 pip install scikit-llm
 

執行此指令將有助於安裝 Scikit-LLM 以及所有必要的先決條件。

為了為您的大型語言模型 (LLM) 服務提供者設定 API 金鑰,有必要從他們那裡取得一個。對於尋求 OpenAI API 金鑰的人,請遵循以下流程:

前往 OpenAI API 頁面 。然後點擊視窗右上角的個人資料。選擇查看 API 金鑰。這將帶您進入 API 金鑰頁面。

/bc/images/introduction-to-langchain-api-key-page.jpeg

若要存取 API 金鑰頁面並建立新的金鑰,請以複雜的方式執行以下步驟:1.導覽至在應用程式的儀表板或控制台中管理 API 金鑰的指定網頁。這可以透過「設定」或「整合」下的主選單存取。2。造訪對應的頁面後,找到專門用於管理 API 金鑰的部分。它可能位於頁面頂部附近或顯示為下拉式選單中的選項。3。在本部分中,請尋找標有「建立新金鑰」的突出按鈕,該按鈕將啟動產生新 API 金鑰的程序。或者,如果沒有此類按鈕,請搜尋任何其他可能引導您進行操作的提示或說明

/bc/images/how-to-use-scikit-llm-for-text-analysis-with-large-language-models-api-keys.jpg

請點擊「建立金鑰」按鈕來建立 API 金鑰,以產生必要的憑證。請務必安全地保存此信息,因為 Open AI 不提供稍後檢索該信息的選項。如果您遺失了金鑰,則必須產生一把新密鑰。

完整的原始程式碼可以透過 GitHub 儲存庫訪問,該儲存庫為開發人員提供了輕鬆的存取和共享功能,以便在專案上進行協作並為開源軟體開發工作做出貢獻。

取得 API 金鑰後,導覽至您首選的整合開發環境 (IDE) 並將「SKLLMConfig」模組合併到 Scikit-LLM 庫中。這種整合使得能夠操縱與擴展語言模型的使用有關的可配置參數。

 from skllm.config import SKLLMConfig

請確保您已提供本課程的 Open AI API 金鑰和相關組織訊息,因為這是成功完成課程的先決條件。

 # Set your OpenAI API key
SKLLMConfig.set_openai_key("Your API key")
# Set your OpenAI organization
 SKLLMConfig.set_openai_org("Your organization ID") 

組織 ID 和名稱不相同。組織 ID 是您組織的唯一識別碼。要取得您的組織 ID,請進入 OpenAI 組織 設定頁面並複製它。您現在已經在 Scikit-LLM 和大語言模型之間建立了連線。

Scikit-LLM 需要訂閱即用即付服務,因為免費 OpenAI 帳戶施加的有限配額(每分鐘限制 3 個請求)不足以實現 Scikit-LLM 的最佳效能。

使用免費試用帳戶可能會導致在嘗試執行文字分析時遇到與以下訊息類似的錯誤。

/bc/images/how-to-use-scikit-llm-for-text-analysis-with-large-language-models-error.jpg

了解有關速率限制的更多資訊。前往 OpenAI 速率限制頁面

利用法學碩士平台超越了僅僅依賴開放人工智慧;有可供選擇的法學碩士服務提供者可以考慮滿足您的需求。

匯入所需的庫並載入資料集

利用“pandas”庫來存取和處理資料集。此外,從“Scikit-LLM”和“scikit-learn”庫導入必要的類別。

 import pandas as pd
from skllm import ZeroShotGPTClassifier, MultiLabelZeroShotGPTClassifier
from skllm.preprocessing import GPTSummarizer
from sklearn.model_selection import train_test_split
from sklearn.metrics import classification_report
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.preprocessing import MultiLabelBinarizer
 

首先,匯入並載入您想要分析文字內容的資料集。在本例中,我們將利用 IMDB 電影資料庫作為參考;但是,您可以對其進行調整以合併您喜歡的資料集。

 # Load your dataset
data = pd.read_csv("imdb_movies_dataset.csv")
# Extract the first 100 rows
data = data.head(100) 

您可以選擇利用資料集中的所有數據,而不是僅限於最初的 100 行。

接下來,我們將繼續從資料集中提取特徵和標籤列,然後將其分為訓練集和測試集以進行進一步分析。

 # Extract relevant columns
X = data['Description']
# Assuming 'Genre' contains the labels for classification

y = data['Genre']
 # Split the dataset into train and test sets
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

分類類別包括用於預測的名稱,在本文中由術語“流派”表示。

使用 Scikit-LLM 進行零樣本文字分類

大型語言模型具有零樣本文字分類的能力,這需要將未標記的資料分類到預先定義的類別中,而不需要對標記資訊進行事先訓練。事實證明,這種方法在涉及將文本分類為超出模型開發階段預期的未定義類別的情況下特別有利。

為了利用 Scikit-LLM 執行零樣本文字分類任務,您可以使用 ZeroShotGPTClassifier 類別。

 # Perform Zero-Shot Text Classification
zero_shot_clf = ZeroShotGPTClassifier(openai_model="gpt-3.5-turbo")
zero_shot_clf.fit(X_train, y_train)
zero_shot_predictions = zero_shot_clf.predict(X_test)

# Print Zero-Shot Text Classification Report
print("Zero-Shot Text Classification Report:")
print(classification_report(y_test, zero_shot_predictions)) 

輸出如下:

/bc/images/how-to-use-scikit-llm-for-text-analysis-with-large-language-models-zero-shot-classification.jpg

分類報告提供與模型試圖分類的每個標籤相關的定量測量。

使用 Scikit-LLM 進行多標籤零樣本文字分類

在某些情況下,一段特定的文字同時屬於多個類別的情況並不罕見。傳統的分類方法不足以有效地處理此類情況。然而,透過其先進的功能,Scikit-LLM 透過實現多標籤零樣本文字分類,在解決這些複雜性方面表現出了卓越的能力。這種方法涉及將多個描述性標籤附加到單一文字樣本,這對於準確捕獲和分類不同領域內的資訊具有重要意義。

利用 MultiLabelZeroShotGPTClassifier 確定哪個或哪些標籤適用於每個給定的文本摘錄。

 # Perform Multi-Label Zero-Shot Text Classification
# Make sure to provide a list of candidate labels
candidate_labels = ["Action", "Comedy", "Drama", "Horror", "Sci-Fi"]
multi_label_zero_shot_clf = MultiLabelZeroShotGPTClassifier(max_labels=2)
multi_label_zero_shot_clf.fit(X_train, candidate_labels)
multi_label_zero_shot_predictions = multi_label_zero_shot_clf.predict(X_test)

# Convert the labels to binary array format using MultiLabelBinarizer
mlb = MultiLabelBinarizer()
y_test_binary = mlb.fit_transform(y_test)
multi_label_zero_shot_predictions_binary = mlb.transform(multi_label_zero_shot_predictions)

# Print Multi-Label Zero-Shot Text Classification Report
print("Multi-Label Zero-Shot Text Classification Report:")
print(classification_report(y_test_binary, multi_label_zero_shot_predictions_binary)) 

上面,我們確定了我們的文本可以被指定為競爭者的潛在名稱。

輸出如下圖所示:

/bc/images/how-to-use-scikit-llm-for-text-analysis-with-large-language-models-multi-label-classification.jpg

本文檔旨在闡明模型在多標籤分類場景中跨各種標籤的效能,並就每個單獨指定的有效性提供有價值的見解。

使用 Scikit-LLM 進行文字向量化

Scikit-LLM 提供 GPTVectorizer,它可以透過文字向量化將文字資料轉換為機器學習演算法可以理解的數位形式。此轉換過程涉及利用 GPT 模型將文字轉換為固定維度向量。

實現此目的的一種方法是利用詞頻-逆文檔頻率方法。

 # Perform Text Vectorization using TF-IDF
tfidf_vectorizer = TfidfVectorizer(max_features=1000)
X_train_tfidf = tfidf_vectorizer.fit_transform(X_train)
X_test_tfidf = tfidf_vectorizer.transform(X_test)

# Print the TF-IDF vectorized features for the first few samples
print("TF-IDF Vectorized Features (First 5 samples):")
print(X_train_tfidf[:5]) # Change to X_test_tfidf if you want to print the test set

這是輸出:

/bc/images/how-to-use-scikit-llm-for-text-analysis-with-large-language-models-vector-output.jpg

上述資訊涉及資料集中初始五個實例的變換特徵表示,其表示為 TF-IDF 向量化結果。

使用 Scikit-LLM 進行文字摘要

文字摘要是一個壓縮書面作品同時保留其基本內容的過程。 GPTSummarizer 可透過 Scikit-LLM 函式庫取得,利用基於 GPT 架構的高階語言模型來產生簡潔的文字摘要。

 # Perform Text Summarization
summarizer = GPTSummarizer(openai_model="gpt-3.5-turbo", max_words=15)
summaries = summarizer.fit_transform(X_test)
print(summaries)

輸出如下:

/bc/images/how-to-use-scikit-llm-for-text-analysis-with-large-language-models-summarization.jpg

前述內容作為實驗結果的概述。

在法學碩士之上建立應用程序

Scikit-LLM 提供了使用高階語言模型對文字進行全面檢查的廣泛機會。掌握這些模型的技術基礎至關重要,因為它有助於全面了解其強大的功能和局限性,這有助於建立基於這種最先進的創新的高效能軟體解決方案。