
ChatGPT生態(tài)系統(tǒng)的安全漏洞導(dǎo)致第三方網(wǎng)站賬戶和敏感數(shù)據(jù)泄露
Figure 1您可以根據(jù)需要選擇最合適的選項(xiàng)
以下是三個(gè)選項(xiàng)的概述:
Figure 2使用 Cohere API 構(gòu)建文本分類(lèi)器的三種方法
本文展示了一個(gè) Python 筆記本的片段,你可以在下面找到完整版本。
在演示中,我們將以航空公司旅行信息系統(tǒng) (ATIS) 意圖分類(lèi)數(shù)據(jù)集的一個(gè)子集為例[資料來(lái)源]。 該數(shù)據(jù)集由進(jìn)入航空公司旅行查詢系統(tǒng)的查詢組成。 下面是幾個(gè)示例數(shù)據(jù)點(diǎn):
Figure 3幾個(gè)示例數(shù)據(jù)
我們的目標(biāo)是訓(xùn)練分類(lèi)器,使其能夠從以下八個(gè)類(lèi)別中預(yù)測(cè)新客戶咨詢的類(lèi)別:
atis_flight
atis_airfare
atis_airline
atis_ground_service
atis_abbreviation
atis_quantity
atis_aircraft
atis_flight_time
為了便于演示,我們將只選取數(shù)據(jù)集中的一小部分: 總共 1000 個(gè)數(shù)據(jù)點(diǎn)。 首先,我們需要?jiǎng)?chuàng)建一個(gè)用于構(gòu)建分類(lèi)器的訓(xùn)練數(shù)據(jù)集和一個(gè)用于測(cè)試分類(lèi)器性能的測(cè)試數(shù)據(jù)集。 我們將分別使用 800 和 200 個(gè)數(shù)據(jù)點(diǎn)來(lái)創(chuàng)建這兩個(gè)數(shù)據(jù)集。
# Load the dataset to a dataframe
df = pd.read_csv("atis_subset.csv")
# Split the dataset into training and test portions
X, y = df["query"], df["intent"]
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=200, random_state=21)
為了準(zhǔn)備接下來(lái)的章節(jié),讓我們來(lái)設(shè)置 Cohere 的 Python SDK 客戶端。
import cohere
co = cohere.Client(“api_key”)
對(duì)于 LLM,我們的一個(gè)選擇是通過(guò)少量分類(lèi)來(lái)建立分類(lèi)器。 這里的 “少量 “指的是,我們只需為每個(gè)類(lèi)別提供少量示例,分類(lèi)器就能正常工作。 之所以能做到這一點(diǎn),是因?yàn)?LLM 是一個(gè)非常龐大的模型,已經(jīng)用大量文本數(shù)據(jù)進(jìn)行了預(yù)訓(xùn)練,捕捉到了語(yǔ)言的深層語(yǔ)境。 現(xiàn)在需要做的是,向模型提示我們需要它執(zhí)行的特定任務(wù),這就是我們現(xiàn)在要做的。
讓我們來(lái)看看如何做到這一點(diǎn)。 在 Cohere 的分類(lèi)終端中,”訓(xùn)練 “數(shù)據(jù)集被稱為示例。 每個(gè)類(lèi)的示例數(shù)最少為 2 個(gè),每個(gè)示例包括一個(gè)文本(在我們的例子中為查詢)和一個(gè)標(biāo)簽(在我們的例子中為標(biāo)簽)。query label
讓我們?yōu)槊總€(gè)類(lèi)別創(chuàng)建 6個(gè)示例,這樣總共就有 48個(gè)示例。 我們不需要之前創(chuàng)建的所有訓(xùn)練數(shù)據(jù)點(diǎn),因?yàn)槠渌麅蓚€(gè)選項(xiàng)都需要這些數(shù)據(jù)點(diǎn)。
# Set the number of examples per category
EX_PER_CAT = 6
# Create list of examples containing texts and labels - sample from the dataset
ex_texts, ex_labels = [], []
for intent in intents:
y_temp = y_train[y_train == intent]
sample_indexes = y_temp.sample(n=EX_PER_CAT, random_state=42).index
ex_texts += X_train[sample_indexes].tolist()
ex_labels += y_train[sample_indexes].tolist()
現(xiàn)在我們已經(jīng)準(zhǔn)備好了示例,可以通過(guò) Python SDK 構(gòu)建分類(lèi)器。 首先,我們使用 Example 模塊按照 SDK 要求的格式整理示例。 接下來(lái),我們通過(guò) co.classify() 方法調(diào)用 Classify 端點(diǎn)。 代碼如下 Example co.classify()
# Collate the examples via the Example module
from cohere.responses.classify import Example
examples = list()
for txt, lbl in zip(ex_texts,ex_labels):
examples.append(Example(txt,lbl))
# Classification function
def classify_text(texts, examples):
classifications = co.classify(
inputs=texts,
examples=examples
)
return [c.predictions[0] for c in classifications]
現(xiàn)在分類(lèi)器已經(jīng)準(zhǔn)備就緒,我們可以對(duì) 100 個(gè)數(shù)據(jù)點(diǎn)進(jìn)行測(cè)試,并得到類(lèi)別預(yù)測(cè)結(jié)果。
# Create batches of texts and classify them
BATCH_SIZE = 90 # The API accepts a maximum of 96 inputs
y_pred = []
for i in range(0, len(X_test), BATCH_SIZE):
batch_texts = X_test[i:i+BATCH_SIZE].tolist()
y_pred.extend(classify_text(batch_texts, examples))
我們將使用準(zhǔn)確率和 F1 分?jǐn)?shù)來(lái)評(píng)估分類(lèi)器的測(cè)試數(shù)據(jù)集(有關(guān)如何評(píng)估分類(lèi)器的更多信息,請(qǐng)點(diǎn)擊此處)。Accuracy F1-score
# Compute metrics on the test dataset
accuracy = accuracy_score(y_test, y_pred)
f1 = f1_score(y_test, y_pred, average='weighted')
我們獲得了 83.00% 的準(zhǔn)確率和 84.66% 的 F1 分?jǐn)?shù)。 考慮到我們只為每個(gè)類(lèi)別提供了六個(gè)示例,這一結(jié)果令人印象深刻。 但肯定還有改進(jìn)的余地。Accuracy F1-score
Figure 4使用嵌入式端點(diǎn)構(gòu)建自己的分類(lèi)器
雖然我們?cè)谏弦还?jié)中取得了不錯(cuò)的結(jié)果,但有時(shí)我們需要更多。 要知道,我們?cè)谘菔局兄皇褂昧艘恍〔糠謹(jǐn)?shù)據(jù),而在現(xiàn)實(shí)世界中,這將更具挑戰(zhàn)性。 因此,我們?nèi)匀恍枰业礁倪M(jìn)的方法。
比方說(shuō),你實(shí)際上掌握了相當(dāng)數(shù)量的訓(xùn)練數(shù)據(jù)集。 在剩下的兩個(gè)選項(xiàng)中,我們將研究如何利用這些數(shù)據(jù)點(diǎn)來(lái)構(gòu)建一個(gè)性能可能更好的分類(lèi)器。
在本節(jié)中,我們將討論選項(xiàng) 2,即如何利用嵌入式端點(diǎn)建立分類(lèi)器。 請(qǐng)注意,本節(jié)確實(shí)需要對(duì)機(jī)器學(xué)習(xí)有一點(diǎn)了解才能建立模型。
這一次,我們將使用之前準(zhǔn)備的全部 800 個(gè)訓(xùn)練數(shù)據(jù)點(diǎn)。 第一步是將訓(xùn)練輸入和測(cè)試輸入(即航空公司查詢)轉(zhuǎn)化為嵌入。
嵌入式到底是什么? 您可以在本文中了解更多相關(guān)信息,但總的來(lái)說(shuō),它是一組數(shù)字,代表了一段文本的含義,捕捉了其上下文和語(yǔ)義。 在我們的案例中,我們使用的是中型模型,該模型生成的嵌入式大小為 2096。 因此,對(duì)于我們輸入的每個(gè)文本,都會(huì)得到一個(gè)由 2096 個(gè)數(shù)字組成的嵌入,如下所示:medium
[0.20641953, 0.35582256, 0.6058123, -0.058944624, 0.8949609, 1.2956009, 1.2408538, -0.89241934, -0.56218493, -0.5521631, -0.11521566, 0.9081634, 1.662983, -0.9293592, -2.3170912, 1.177852, 0.35577637, ... ]
為此,我們通過(guò) co.embed() 方法調(diào)用嵌入端點(diǎn),選擇分類(lèi)作為輸入_類(lèi)型參數(shù)。 然后,我們將嵌入轉(zhuǎn)化為一個(gè)數(shù)組,下一步就需要用到這個(gè)數(shù)組了。 它看起來(lái)如下:co.embed() classification input_type
# Get embeddings
def embed_text(text):
output = co.embed(
model='embed-english-v3.0',
input_type="classification",
texts=text)
return output.embeddings
# Embed and prepare the inputs
X_train_emb = np.array(embed_text(X_train.tolist()))
X_test_emb = np.array(embed_text(X_test.tolist()))
下一步,我們將使用這些嵌入作為輸入建立一個(gè)分類(lèi)模型。 我們將使用支持向量機(jī)(SVM)算法,利用 scikit-learn 庫(kù)中的實(shí)現(xiàn)。 該方法稱為 SVC,您可以在此閱讀相關(guān)信息。SVC
下面展示的是我們的實(shí)現(xiàn)片段(完整版在筆記本中)。 總之,我們將訓(xùn)練數(shù)據(jù)集擬合到模型中,然后使用這個(gè)訓(xùn)練有素的模型來(lái)預(yù)測(cè)測(cè)試數(shù)據(jù)集的類(lèi)別。
# Initialize the model
svm_classifier = SVC(class_weight='balanced')
# Fit the training dataset to the model
svm_classifier.fit(X_train_emb, y_train_le)
# Generate classification predictions on the test dataset
y_pred_le = svm_classifier.predict(X_test_emb)
我們現(xiàn)在要做的是將嵌入作為特征來(lái)訓(xùn)練機(jī)器學(xué)習(xí)模型。 然后,該模型將學(xué)習(xí)包含輸入文本語(yǔ)義信息的特征與提供每個(gè)輸入文本所屬類(lèi)別信息的標(biāo)簽之間的映射。features features labels
我們將再次使用準(zhǔn)確率和 F1 分?jǐn)?shù)來(lái)評(píng)估分類(lèi)器在該測(cè)試數(shù)據(jù)集上的表現(xiàn)。 這次,我們獲得了 91.50% 的準(zhǔn)確率和 91.01% 的 F1 分?jǐn)?shù)。AccuracyF1 score AccuracyF1 score
這比以前的方法有所改進(jìn)。 但我們還能做得更好嗎?
Figure 5通過(guò)分類(lèi)端點(diǎn)微調(diào)模型
使用 Cohere API 進(jìn)行微調(diào)是一個(gè)強(qiáng)大的概念,原因就在這里。 在上一節(jié)中,我們使用 Embed 端點(diǎn)的輸出建立了一個(gè)分類(lèi)器,但請(qǐng)注意,我們使用的仍然是一個(gè)基準(zhǔn)模型。 但通過(guò)微調(diào),你實(shí)際上可以改變模型本身,并根據(jù)你的任務(wù)進(jìn)行定制。
這就意味著,你所得到的是一個(gè)經(jīng)過(guò)微調(diào)的自定義模型,它在特定任務(wù)中表現(xiàn)出色,并有可能優(yōu)于我們所見(jiàn)過(guò)的前兩種方法。 這就是我們本節(jié)要做的。
數(shù)據(jù)點(diǎn)越多越好,但作為一個(gè)例子,我們將使用之前準(zhǔn)備的 800 個(gè)訓(xùn)練數(shù)據(jù)點(diǎn)對(duì)模型進(jìn)行微調(diào)。
本文檔包含如何微調(diào)表示模型的分步指南,表示模型與嵌入端點(diǎn)背后的模型是同一種模型。 因此,本文將不涉及微調(diào)步驟,并假設(shè)您已經(jīng)準(zhǔn)備好了微調(diào)模型。
當(dāng)你對(duì)表示模型進(jìn)行微調(diào)時(shí),在幕后發(fā)生的事情是,模型會(huì)將同一類(lèi)別的示例拉近,反之,將不同類(lèi)別的示例拉遠(yuǎn)。 它是通過(guò)學(xué)習(xí)輸入(即嵌入)和輸出(標(biāo)簽)之間的關(guān)系,捕捉數(shù)據(jù)中的模式來(lái)做到這一點(diǎn)的。
Figure 6微調(diào)將相似的例子拉近,將不相似的例子推遠(yuǎn)
對(duì)模型進(jìn)行微調(diào)后,可從 Playground 或直接從 Cohere 控制面板獲取模型 UUID。
要使用這個(gè)經(jīng)過(guò)微調(diào)的模型,可以通過(guò)我們之前使用的 co.classify() 方法調(diào)用相同的分類(lèi)端點(diǎn)。 調(diào)用端點(diǎn)的方法是一樣的,只是在參數(shù)中輸入的是微調(diào)模型 UUID,而不是基準(zhǔn)版本。 下面是代碼片段,如你所見(jiàn),只需幾行代碼。co.classify()
# Classification function
def classify_text_finetune(texts, examples):
classifications = co.classify(
model='eeba7d8c-61bd-42cd-a6b5-e31db27403cc-ft',
inputs=texts,
examples=examples
)
return [c.predictions[0] for c in classifications]
# Create batches of texts and classify them
BATCH_SIZE = 90 # The API accepts a maximum of 96 inputs
y_pred = []
for i in range(0, len(X_test), BATCH_SIZE):
batch_texts = X_test[i:i+BATCH_SIZE].tolist()
y_pred.extend(classify_text_finetune(batch_texts, examples))
請(qǐng)注意,由于模型已通過(guò)訓(xùn)練數(shù)據(jù)集進(jìn)行了微調(diào),因此現(xiàn)在調(diào)用 “分類(lèi) “端點(diǎn)無(wú)需再像第一個(gè)選項(xiàng)那樣輸入示例。 現(xiàn)在整個(gè)實(shí)現(xiàn)過(guò)程更加簡(jiǎn)潔。
重要的是,這也意味著,對(duì)于不太熟悉機(jī)器學(xué)習(xí)的開(kāi)發(fā)人員來(lái)說(shuō),處理嵌入式的所有復(fù)雜性都已消除。 現(xiàn)在一切都發(fā)生在后臺(tái),你需要知道的只有兩個(gè)步驟,僅此而已。
這一次,我們獲得了 94.50% 的準(zhǔn)確率和 94.53% 的 F1 分?jǐn)?shù)。 這是一個(gè)明顯的提升!
我希望這些示例能讓您了解不同選項(xiàng)之間的比較。 我們看到了少鏡頭分類(lèi)如何消除了建立訓(xùn)練數(shù)據(jù)集的需要,也看到了微調(diào)如何帶來(lái)最佳性能。 當(dāng)然,在不同的數(shù)據(jù)集和任務(wù)下,情況并不總是如此,但大體上,這是你所期望的模式。
最重要的是,在使用分類(lèi)端點(diǎn)時(shí),您的控制水平非常重要。
如果您的訓(xùn)練數(shù)據(jù)有限,但又需要以最小的代價(jià)快速建立文本分類(lèi)器,那么 “少量嘗試 “選項(xiàng)可以幫助您實(shí)現(xiàn)這一目標(biāo),并獲得可觀的性能。
如果最大限度地提高性能是最重要的,那么您可以建立一個(gè)數(shù)據(jù)集,并在此基礎(chǔ)上對(duì)模型進(jìn)行微調(diào),而無(wú)需處理復(fù)雜的機(jī)器學(xué)習(xí)問(wèn)題。
最后,如果你確實(shí)想親自動(dòng)手學(xué)習(xí)機(jī)器學(xué)習(xí),并想自己決定最適合你的任務(wù)的分類(lèi)算法,你可以選擇嵌入選項(xiàng)。
本文翻譯源自:https://cohere.com/blog/classify-three-options
ChatGPT生態(tài)系統(tǒng)的安全漏洞導(dǎo)致第三方網(wǎng)站賬戶和敏感數(shù)據(jù)泄露
想要系統(tǒng)了解Agentic Workflow,看這25篇論文就夠了
生成式 AI 在電商領(lǐng)域究竟有多牛,這款產(chǎn)品給出了回答
AI+搜索:在Elastic的推理API中嵌入大語(yǔ)言模型Cohere API
AI Agent 開(kāi)源和創(chuàng)業(yè)項(xiàng)目大盤(pán)點(diǎn),Agent 基礎(chǔ)設(shè)施正在崛起
人工智能(AI) VS 商業(yè)智能(BI) 區(qū)別與聯(lián)系是什么?
使用 RESTful API 探索藝術(shù)世界
如何在Java、Python、GO程序中使用AI人臉識(shí)別API接口
什么是API產(chǎn)品經(jīng)理?
對(duì)比大模型API的內(nèi)容創(chuàng)意新穎性、情感共鳴力、商業(yè)轉(zhuǎn)化潛力
一鍵對(duì)比試用API 限時(shí)免費(fèi)