天天看點

Scikit-LLM開源項目釋出,讓大語言模型為文本處理提提速

作者:智能奇譚

盡管大語言模型(Large Language Models,LLMs)的發展讓很多做NLP研究的童鞋感覺到前途一片黯淡,但是它對于工程應用的人來說卻是一個福音。

不過,雖然LLM在很多任務上很好用,但是實際應用中我們常見的文本分類、文本标注等工作目前卻依然缺少一個可以利用LLM能力的好方法。LLM的強大并沒有在工程落地上比肩傳統的機器學習處理架構。上周,一個叫Scikit-LLM新的開源項目釋出,将傳統優秀的Scikit-learn架構與LLM結合,帶來了LLM落地的新方法。

Scikit-LLM開源項目釋出,讓大語言模型為文本處理提提速

簡單來說,如果希望把LLMs的能力帶到Scikit-learn的工程流程上,需要将scikit-learn那一套pipeline轉變成對LLM的prompts才可以。例如,正常情況我們可能用model.fit(X,y)來訓練一個分類模型,但是如果用這種方法使用LLM,顯然不是傳統領域的fit(一般可能是利用求解算法求解模型參數)方式,而是将X與y的對應關系轉成prompts,發送給大模型。我們也可以自己這樣做,但是顯然很難與傳統的scikit-learn的pipeline結合。Scikit-LLM就是解決這個問題的。

  • Scikit-LLM簡介
  • Scikit-LLM的使用方法
    • 1、安裝Scikit-LLM:
    • 2、配置OpenAI的API Key
  • Scikit-LLM的實際使用案例
    • 1、使用GPT-3.5做基于有标注資料的文本情感分類
    • 2、使用GPT-3.5在無标注資料上進行标注
    • 3、使用GPT-3.5進行多标簽分類任務
  • Scikit-LLM的總結

Scikit-LLM簡介

在傳統的文本進行中,對文本進行标注、分類等操作是很常見的處理方式。盡管LLMs的出現讓我們看到了很多的工作可以直接讓大模型代替。但是,這并不意味着傳統的文本處理工作都可以丢掉。

而利用LLM處理這些任務并與傳統的工程的工作流程結合則是一種非常有前途的方法。

在傳統機器學習的開發中,Scikit-Learn是最流行的機器學習架構之一。在機器學習和資料科學領域,它提供了非常豐富且易于使用的功能,而且NumPy、Pandas等結合得很好。是以,如果能将LLM與Scikit-learn的能力結合,那将是對現有機器學習應用的一種極大的提升。

前幾天,GitHub上一位開發人員開源了一個Scikit-LLM的架構,可以将Scikit-learn的功能與LLM無縫結合,可以充分利用LLM的能力提升Scikt-learn的文本分析水準。而項目釋出僅五天已經在GitHub上獲得了1.1k的stars:

Scikit-LLM開源項目釋出,讓大語言模型為文本處理提提速

Scikit-LLM的使用方法

目前,Scikit-LLM僅支援OpenAI的線上接口,是以需要OpenAI的key。而根據項目的規劃,未來将支援其它的LLMs(大機率會有離線加載使用的能力)。

Scikit-LLM已規劃和支援如下能力:

✅多類别分類

✅多标簽分類

✅基于GPT的向量化

Few-shot分類器

其它LLMs的內建

GPT微調能力(這個功能在評估)

其中,表示在開發中,✅表示已經支援。

Sckit-LLM的使用也很簡單,目前在使用前有2個步驟:

1、安裝Scikit-LLM:

pip install scikit-llm           

2、配置OpenAI的API Key

from skllm.config importSKLLMConfig
SKLLMConfig.set_openai_key("<YOUR_KEY>")
SKLLMConfig.set_openai_org("<YOUR_ORGANISATION>")           

Scikit-LLM的實際使用案例

接下來我們看幾個具體的使用場景。

1、使用GPT-3.5做基于有标注資料的文本情感分類

首先是根據指定的輸入文本和标簽訓練一個模型,其實這個是類似與prompts-response的方式,将已經标注的資料給OpenAI的模型,然後讓模型預測新資料的标簽。也就是将傳統的标注資料變成prompts給OpenAI的模型,讓模型完成後續的标注工作。使用方法如下:

from skllm importZeroShotGPTClassifier
from skllm.datasets import get_classification_dataset

# demo sentiment analysis dataset
# labels: positive, negative, neutral
X, y = get_classification_dataset()

clf =ZeroShotGPTClassifier(openai_model ="gpt-3.5-turbo")
clf.fit(X, y)
labels = clf.predict(X)           

這裡的X就是内置的30條文本,y是每個文本對應的情感标簽,包含positive、negative和neutral。如下圖所示:

Scikit-LLM開源項目釋出,讓大語言模型為文本處理提提速

可以看到,與傳統的分類模型流程幾乎完全一樣。

2、使用GPT-3.5在無标注資料上進行标注

在第一個例子中,我們告訴了GPT每一個文本對應的情感标簽結果,然後再去分類其它文本。而LLMs的能力顯然可以做zero-shot,可以按照如下的方式:

from skllm importZeroShotGPTClassifier
from skllm.datasets import get_classification_dataset

X, _ = get_classification_dataset()

clf =ZeroShotGPTClassifier()
clf.fit(None,['positive','negative','neutral'])
labels = clf.predict(X)           

這個例子裡面,我們沒有對資料集和标注結果關聯,隻是告訴OpenAI的GPT-3.5需要對文本标注成哪些結果,那麼直接使用fit(None, [1,2,3])即可,也就是說,将y的參數設定為具體标簽即可。

3、使用GPT-3.5進行多标簽分類任務

有些時候,我們要對一段文本做多個标簽的标注,例如給定一段商品評論,我們想要知道它是描述商品哪些部分的,如價格、品質、物流等,那麼顯然一個評論可能涉及多個,而且每個評論涉及的内容數量不一樣。那麼,Scikit-LLM也可以非常簡單的實作利用GPT-3.5完成這個功能:

from skllm importMultiLabelZeroShotGPTClassifier
from skllm.datasets import get_multilabel_classification_dataset

X, _ = get_multilabel_classification_dataset()
candidate_labels =[
"Quality",
"Price",
"Delivery",
"Service",
"Product Variety",
"Customer Support",
"Packaging",
"User Experience",
"Return Policy",
"Product Information"
]
clf =MultiLabelZeroShotGPTClassifier(max_labels=3)
clf.fit(None,[candidate_labels])
labels = clf.predict(X)           

我測試了10條評論,獲得如下結果:

['Packaging']|The product was of excellent quality,and the packaging was also very good.Highly recommend!
['Price']|The delivery was super fast, but the product did not match the information provided on the website.
['Product Variety']|Great variety of products, but the customer support was quite unresponsive.
['Price']|Affordable prices and an easy-to-use website. A great shopping experience overall.
['Service']|The delivery was delayed,and the packaging was damaged.Not a good experience.
['Quality']|Excellent customer support, but the return policy is quite complicated.
['Product Variety']|The product was notas described.However, the return process was easy and quick.
['Packaging']|Great service and fast delivery.The product was also of high quality.
['Packaging']|The prices are a bit high.However, the product quality and user experience are worth it.
['Quality']|The website provides detailed information about products.The delivery was also very fast.           

可以看到,GPT-3.5對每一個評論都抽取了多個标簽。不過結果好像很一般啊~~

Scikit-LLM的總結

總的來說,Scikit-LLM是非常好的思想,畢竟目前的LLM無法解決所有問題。但是如果想把LLM的能力帶到現有的機器學習流程中,顯然也需要一定的改造。那麼,如果你的應用目前已經是基于scikit-learn構造的。那麼使用Scikit-LLM将大模型引入到你的項目中應該是最順滑的切換了!

不過,目前Scikit-LLM僅支援OpenAI的線上接口,是以需要付費獲得API才可以。但是按照規劃,會支援其它的LLMs,未來離線使用應該也是沒有問題的。不過,如果真的是商業應用,考慮工程與更新,那麼OpenAI的API顯然不是問題。我們也密切關注項目發展,期待能有更多的與LLM內建的方式出現。

Scikit-LLM項目開源位址:https://github.com/iryna-kondr/scikit-llm

繼續閱讀