在上一篇文章中,分享了第一次使用 IBM Watsonx 的經歷,以及我對 Prompt lab 功能的初步探索。繼續這個話題,本文將探討 Watsonx 平台對 Python SDK 的支持,以及實作幾個 LLM 的應用,這一特性為開發者提供了極大的便利,使得在此平台上進行開發和應用大型語言模型(LLM)變得非常簡便。更值得一提的是,這個平台甚至支持 hugging face 上的模型,為開發者提供了更廣闊的創新空間和可能性,也對於介接 LLM 模型更加便利。
在IBM Watsonx.ai平台上,搭載一系列來自IBM和其他開源提供商(hugging face)的基礎模型。這些包括多種功能強大的模型,如flan-t5-xl-3b、flan-t5-xxl-11b、flan-ul2-20b、gpt-neox-20b、granite-13b-chat-v2等。這些模型涵蓋了從聊天生成到程式碼生成
等多種用途,可在Prompt Lab中或透過Python庫進行編程調用。
IBM提供的基礎模型,如granite-13b系列,專注於對話應用和指令型任務,並且經過精細調整,以適應企業相關的數據集。這些模型的 Maximum Token Limit 達到8192,並被分類為不同的計費類別。
此外,通過Hugging Face提供的第三方模型,如由Google提供的flan-t5系列和Meta的llama-2-13b-chat等,涵蓋了從自然語言處理到長文本推理的各種任務。這些模型支持多種自然語言,並且在訓練過程中結合了鏈式思維數據和其他多步驟推理任務。
每個模型的詳細資料,包括使用案例、code 架構、支持的語言,以及訓練數據集的詳情,都已在各自的模型卡上公開。
詳細內容可以參閱:watsonx.ai 支援的基礎模型 - IBM 文件
利用 IBM Watsonx 平台和 ibm/granite-13b-instruct-v1
等基礎模型來分析租車使用者的滿意度,我們使用的主要數據來源是名為 car_rental_training_data.csv 的租車數據集,在這個數據集中,分析「顧客服務」的評論以及相應的「滿意度評分」。實作為通過設計合適的提示(prompt)來引導模型,當輸入用戶的評論後,模型會根據內容給出「是」或「否」的滿意度評價
。
import wget
import pandas as pd
filename = 'car_rental_training_data.csv'
url = 'https://raw.githubusercontent.com/IBM/watson-machine-learning-samples/master/cloud/data/cars-4-you/car_rental_training_data.csv'
if not os.path.isfile(filename):
wget.download(url, out=filename)
df = pd.read_csv("car_rental_training_data.csv", sep=';')
data = df[['Customer_Service', 'Satisfaction']]
model_id = ModelTypes.GRANITE_13B_INSTRUCT
我們選用 GRANITE_13B_INSTRUCT
from ibm_watson_machine_learning.metanames import GenTextParamsMetaNames as GenParams
from ibm_watson_machine_learning.foundation_models.utils.enums import DecodingMethods
parameters = {
GenParams.MIN_NEW_TOKENS: 0,
GenParams.MAX_NEW_TOKENS: 1,
GenParams.DECODING_METHOD: DecodingMethods.GREEDY,
GenParams.REPETITION_PENALTY: 1
}
GenParams.MIN_NEW_TOKENS: 0
GenParams.MAX_NEW_TOKENS: 1
GenParams.DECODING_METHOD: DecodingMethods.GREEDY
DecodingMethods.GREEDY
是一種貪婪解碼方法,它在每一步都選擇最有可能的下一個 token。這種方法傾向於快速決策,但可能不總是生成最自然或最有創造性的文本。GenParams.REPETITION_PENALTY: 1
from ibm_watson_machine_learning.foundation_models import Model
model = Model(
model_id=model_id,
params=parameters,
credentials=credentials,
project_id=project_id)
查看模型資訊
model.get_details()
定義好輸入顧客經驗,回傳顧客是否滿意
instruction = """Determine if the customer was satisfied with the experience based on the comment. Return simple yes or no.
Comment:The car was broken. They couldn't find a replacement. I've waster over 2 hours.
Satisfied:no""
prompt1 = "\n".join([instruction, "Comment:" + comments[2], "Satisfied:"])
print(prompt1)
Determine if the customer was satisfied with the experience based on the comment. Return simple yes or no.
Comment:The car was broken. They couldn't find a replacement. I've waster over 2 hours.
Satisfied:no
Comment:long lines waiting for the rental pick.
Satisfied:
輸出分析結果:
print(model.generate_text(prompt=prompt1))
no
model_id = ModelTypes.LLAMA_2_70B_CHAT
model = Model(
model_id=model_id,
params=parameters,
credentials=credentials,
project_id=project_id)
模型可以換成中文的 LLAMA_2
instruction = """基於給予的評論判斷使用者對這次體驗是否滿意。僅回答是或否。
輸入: 這輛車壞了。他們不能找到替代方案。我浪費了兩個小時。
輸出: 否
輸入: 客戶服務非常有幫助。他們知道我正在探望我 91 歲的母親,並免費升級了一輛對她來說更舒適的汽車。
輸出: 是"""
執行輸出結果
prompt1 = "\n".join([instruction, "輸入: " + comments[2], "輸出: "])
print(prompt1)
基于给出的评论判断用户对这次体验是否满意。仅回答是或否。
输入: 这辆车坏了。他们不能找到替代方案。我浪费了两个小时。
输出: 否
输入: 客户服务非常有帮助。他们知道我正在探望我 91 岁的母亲,并免费升级了一辆对她来说更舒适的汽车。
输出: 是
输入: 我主要担心的是互联网上的报价不是我开具发票的价格。我不得不打电话给提供商并解决问题,但这需要时间而且很麻烦。
输出:
print(model.generate_text(prompt=prompt1))
否
這次實作 IBM Watsonx.ai 平台支援 Python SDK,以及可以很方便的去呼叫和應用各種 LLM model,並使用租車服務的顧客滿意度作為應用場景,展示 LLM 在現今充斥著 AI 的時代,有沒有什麼快速、隨插即用的可能,我想 LLM 很適合扮演這樣的角色,尤其是面對多元的語言,展現模型對於語言的理解能力與強大。
同時,面對的挑戰為如何快速理解已預訓練的模型的優點,並在對的場景選擇適合的編碼方式、選擇適合的模型,變得更為重要。無論是貪婪解碼、beam search 還是其他解碼技術,每種方法都有其獨特的適用場景和優勢。正如我們所見,適當的設置和參數調整能顯著影響模型的性能和輸出質量。
總結來說,IBM Watsonx.ai 和其豐富的模型庫為開發者提供了一個強大的工具集與平台,不僅可以促進創新和探索,還可以應對實際的業務挑戰。下一篇還有更多實作的應用場景,感謝閱讀到這裡的你,我們下次見!