大型語言模型(LLM)與傳統機器學習工作流的集成不僅已經成為可能,而且正在改變我們處理這些模型的方式,無論是在成本還是安全性方面。不再僅僅依賴具有配額、流量瓶頸和數據隱私問題的商業雲API,scikit-ollama為此提供了有力的解決方案。該庫主要基於scikit-llm,彌合了友好的scikit-learn語法(用於訓練和使用經典機器學習模型)與LLM(特別是運行在Ollama上的免費本地模型)之間的差距。
本文探討如何設置這一集成,以構建一個高度實用的零樣本分類器,用於電影評論的情感預測,使用本地安裝的Llama 3模型。
分步指南
首先,由於scikit-ollama僅兼容Python 3.9或更高版本,請檢查當前開發環境中的Python版本。如果版本低於3.9,請升級。然後安裝scikit-ollama:
pip install scikit-ollama安裝完成後,我們可以開始編碼。Scikit-LLM在其datasets模塊中提供了自己的數據集目錄。我們將使用其中一個基於文本的數據集,專門用於電影評論的情感分類。以下是加載數據並顯示示例評論及其情感標籤的代碼:
from skllm.datasets import get_classification_dataset
X, y = get_classification_dataset()
print(f"Sample text: {X[0]} \nLabel: {y[0]}")輸出示例:
Sample text: I was absolutely blown away by the performances in 'Summer's End'. The acting was top-notch, and the plot had me gripped from start to finish. A truly captivating cinematic experience that I would highly recommend.
Label: positive接下來是scikit-ollama本身。你需要在本地安裝Ollama,並確保你想要的模型(如llama3:latest)已下載。使用ollama pull命令獲取模型。然後,導入ZeroShotOllamaClassifier並實例化:
from skollama.models.ollama.classification.zero_shot import ZeroShotOllamaClassifier
clf = ZeroShotOllamaClassifier(model="llama3:latest")重要的是要理解:llama3:latest是一個通用LLM,原本設計用於更多任務(如聊天、頭腦風暴等)。但通過scikit-ollama和底層的scikit-llm,我們將分類任務重新表述為語法約束的文本生成提示,使本地模型僅輸出所需內容,就像經典機器學習模型一樣,同時保留其強大的語言推理能力。這是scikit-ollama的核心價值:將LLM的力量與scikit-learn接口的簡潔性相結合。
現在應用經典的機器學習兩階段過程:擬合和預測。在零樣本LLM驅動的分類中,擬合併不更新權重,而是用於註冊候選標籤,引導模型進行上下文學習:
clf.fit(None, ["positive", "negative", "neutral"])調用predict()時,本地Ollama實例處理每個輸入作為提示,並解析輸出以確保映射到零樣本分類標籤之一。代碼生成預測並顯示前三個結果:
predictions = clf.predict(X)
for text, prediction in zip(X[:3], predictions[:3]):
print(f"Text: '{text}'")
print(f"Predicted Sentiment: {prediction}\n")輸出顯示模型正確預測了積極情感。本地模型僅輸出預期內容,如同經典機器學習模型,同時應用其強大的基於語言的內在推理。
總結
本文展示瞭如何用本地Ollama模型替換基於雲的LLM API,以在沒有訂閲費用或敏感文本數據離開機器的情況下執行推理任務。關鍵要素是scikit-ollama庫,它將本地集成優雅地封裝為另一個scikit-learn流水線。