顯示具有 NLP 標籤的文章。 顯示所有文章
顯示具有 NLP 標籤的文章。 顯示所有文章

2024年7月31日 星期三

好書 : Build a Large Language Model (From Scratch)

前陣子在陳南宗 fb 看到大師推薦了 Sebastian Raschka 寫的 LLM 巨著 :



Source : Manning


目前是 MEAP 嘗鮮版電子書, 美金 24 元也不算貴, 但就算買了我現在也沒時間看 (最近都還在消化 2018 年買的好幾本 Python 爬蟲書呢), 所以先記下來等正式版出來再說. 

2024年5月10日 星期五

好站 : 變形金剛與抱臉怪-NLP 應用開發之實戰

上回在安裝 HugginFace 的 transformer 套件時找到下面這個 iT 邦幫忙的 NLP 教學文件, 作者以 30 篇文章完整說明如何 transformer 套件與資料集進行 NLP 應用開發, 非常值得一讀 : 


2024年3月14日 星期四

OpenAI API 學習筆記 : 使用 openai 套件串接 GPT 語言模型 (一)

昨天維元老師的 ChatGPT 實戰內訓課程講到 OpenAI API 串接實作, 我因在前一篇測試中已經註冊 OpenAI 帳戶並建立了存取 GPT 模型的金鑰, 所以就能在課堂上邊聽邊在 Colab 上測試, 本篇記錄利用 openai 這個 Python 套件與模型的串接與對話.

本系列之前的文章參考 :


要串接 OpenAI API 必須先取得金鑰才能進行本篇測試. 


一. 安裝 openai 套件 : 

串接 OpenAI API 必須先安裝 openai 套件 : 

pip install openai   

如果是在 Colab 則指令前面要冠驚嘆號 :

!pip install openai   

D:\python\test>pip install openai    
Collecting openai
  Downloading openai-1.14.0-py3-none-any.whl.metadata (18 kB)
Requirement already satisfied: anyio<5,>=3.5.0 in c:\users\tony1\appdata\roaming\python\python310\site-packages (from openai) (3.7.1)
Collecting distro<2,>=1.7.0 (from openai)
  Downloading distro-1.9.0-py3-none-any.whl.metadata (6.8 kB)
Requirement already satisfied: httpx<1,>=0.23.0 in c:\users\tony1\appdata\roaming\python\python310\site-packages (from openai) (0.24.1)
Requirement already satisfied: pydantic<3,>=1.9.0 in c:\users\tony1\appdata\roaming\python\python310\site-packages (from openai) (2.5.3)
Requirement already satisfied: sniffio in c:\users\tony1\appdata\roaming\python\python310\site-packages (from openai) (1.3.0)
Requirement already satisfied: tqdm>4 in c:\users\tony1\appdata\roaming\python\python310\site-packages (from openai) (4.66.1)
Requirement already satisfied: typing-extensions<5,>=4.7 in c:\users\tony1\appdata\roaming\python\python310\site-packages (from openai) (4.9.0)
Requirement already satisfied: idna>=2.8 in c:\users\tony1\appdata\roaming\python\python310\site-packages (from anyio<5,>=3.5.0->openai) (3.4)
Requirement already satisfied: exceptiongroup in c:\users\tony1\appdata\roaming\python\python310\site-packages (from anyio<5,>=3.5.0->openai) (1.1.3)
Requirement already satisfied: certifi in c:\users\tony1\appdata\roaming\python\python310\site-packages (from httpx<1,>=0.23.0->openai) (2023.7.22)
Requirement already satisfied: httpcore<0.18.0,>=0.15.0 in c:\users\tony1\appdata\roaming\python\python310\site-packages (from httpx<1,>=0.23.0->openai) (0.17.3)
Requirement already satisfied: annotated-types>=0.4.0 in c:\users\tony1\appdata\roaming\python\python310\site-packages (from pydantic<3,>=1.9.0->openai) (0.5.0)
Requirement already satisfied: pydantic-core==2.14.6 in c:\users\tony1\appdata\roaming\python\python310\site-packages (from pydantic<3,>=1.9.0->openai) (2.14.6)
Requirement already satisfied: colorama in c:\users\tony1\appdata\local\programs\thonny\lib\site-packages (from tqdm>4->openai) (0.4.6)
Requirement already satisfied: h11<0.15,>=0.13 in c:\users\tony1\appdata\roaming\python\python310\site-packages (from httpcore<0.18.0,>=0.15.0->httpx<1,>=0.23.0->openai) (0.14.0)
Downloading openai-1.14.0-py3-none-any.whl (257 kB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 257.5/257.5 kB 933.1 kB/s eta 0:00:00
Downloading distro-1.9.0-py3-none-any.whl (20 kB)
Installing collected packages: distro, openai
Successfully installed distro-1.9.0 openai-1.14.0

先用 import openai 匯入套件, 然後用 dir() 檢視套件內容 : 

>>> import openai   
>>> print(openai.__version__)  
1.14.0
>>> dir(openai)     
['APIConnectionError', 'APIError', 'APIResponse', 'APIResponseValidationError', 'APIStatusError', 'APITimeoutError', 'AssistantEventHandler', 'AsyncAPIResponse', 'AsyncAssistantEventHandler', 'AsyncAzureOpenAI', 'AsyncClient', 'AsyncOpenAI', 'AsyncStream', 'Audio', 'AuthenticationError', 'AzureOpenAI', 'BadRequestError', 'BaseModel', 'ChatCompletion', 'Client', 'Completion', 'ConflictError', 'Customer', 'DEFAULT_MAX_RETRIES', 'DEFAULT_TIMEOUT', 'Deployment', 'Edit', 'Embedding', 'Engine', 'ErrorObject', 'File', 'FineTune', 'FineTuningJob', 'Image', 'InternalServerError', 'Model', 'Moderation', 'NOT_GIVEN', 'NoneType', 'NotFoundError', 'NotGiven', 'OpenAI', 'OpenAIError', 'PermissionDeniedError', 'ProxiesTypes', 'RateLimitError', 'RequestOptions', 'Stream', 'Timeout', 'Transport', 'UnprocessableEntityError', 'VERSION', '_AmbiguousModuleClientUsageError', '_ApiType', '_AzureModuleClient', '_ModuleClient', '__all__', '__annotations__', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__locals', '__name', '__name__', '__package__', '__path__', '__spec__', '__title__', '__version__', '_azure', '_base_client', '_client', '_compat', '_constants', '_exceptions', '_extras', '_files', '_has_azure_ad_credentials', '_has_azure_credentials', '_has_openai_credentials', '_httpx', '_legacy_response', '_load_client', '_models', '_module_client', '_os', '_qs', '_reset_client', '_resource', '_response', '_setup_logging', '_streaming', '_t', '_te', '_types', '_utils', '_version', 'annotations', 'api_key', 'api_type', 'api_version', 'audio', 'azure_ad_token', 'azure_ad_token_provider', 'azure_endpoint', 'base_url', 'beta', 'chat', 'completions', 'default_headers', 'default_query', 'embeddings', 'file_from_path', 'files', 'fine_tuning', 'http_client', 'images', 'lib', 'max_retries', 'models', 'moderations', 'organization', 'override', 'pagination', 'resources', 'timeout', 'types', 'version']

用 dir() 看不出哪些是類別, 函式, 與模組, 這可用下列自訂模組 members 來達成 :

# members.py
import inspect 
def varname(x): 
    return [k for k,v in inspect.currentframe().f_back.f_locals.items() if v is x][0]
def list_members(parent_obj):
    members=dir(parent_obj)
    parent_obj_name=varname(parent_obj)       
    for mbr in members:
        child_obj=eval(parent_obj_name + '.' + mbr) 
        if not mbr.startswith('_'):
            print(mbr, type(child_obj))


將此函式存成 members.py 模組, 放在目前供作目錄下, 然後匯入其 list_members() 函式來檢視 openai 套件 : 

>>> from members import list_members     
>>> list_members(openai)    
APIConnectionError <class 'type'>
APIError <class 'type'>
APIResponse <class 'type'>
APIResponseValidationError <class 'type'>
APIStatusError <class 'type'>
APITimeoutError <class 'type'>
AssistantEventHandler <class 'type'>
AsyncAPIResponse <class 'type'>
AsyncAssistantEventHandler <class 'type'>
AsyncAzureOpenAI <class 'type'>
AsyncClient <class 'type'>
AsyncOpenAI <class 'type'>
AsyncStream <class 'type'>
Audio <class 'openai.lib._old_api.APIRemovedInV1Proxy'>
AuthenticationError <class 'type'>
AzureOpenAI <class 'type'>
BadRequestError <class 'type'>
BaseModel <class 'pydantic._internal._model_construction.ModelMetaclass'>
ChatCompletion <class 'openai.lib._old_api.APIRemovedInV1Proxy'>
Client <class 'type'>
Completion <class 'openai.lib._old_api.APIRemovedInV1Proxy'>
ConflictError <class 'type'>
Customer <class 'openai.lib._old_api.APIRemovedInV1Proxy'>
DEFAULT_MAX_RETRIES <class 'int'>
DEFAULT_TIMEOUT <class 'openai.Timeout'>
Deployment <class 'openai.lib._old_api.APIRemovedInV1Proxy'>
Edit <class 'openai.lib._old_api.APIRemovedInV1Proxy'>
Embedding <class 'openai.lib._old_api.APIRemovedInV1Proxy'>
Engine <class 'openai.lib._old_api.APIRemovedInV1Proxy'>
ErrorObject <class 'openai.lib._old_api.APIRemovedInV1Proxy'>
File <class 'openai.lib._old_api.APIRemovedInV1Proxy'>
FineTune <class 'openai.lib._old_api.APIRemovedInV1Proxy'>
FineTuningJob <class 'openai.lib._old_api.APIRemovedInV1Proxy'>
Image <class 'openai.lib._old_api.APIRemovedInV1Proxy'>
InternalServerError <class 'type'>
Model <class 'openai.lib._old_api.APIRemovedInV1Proxy'>
Moderation <class 'openai.lib._old_api.APIRemovedInV1Proxy'>
NOT_GIVEN <class 'openai.NotGiven'>
NoneType <class 'type'>
NotFoundError <class 'type'>
NotGiven <class 'type'>
OpenAI <class 'type'>
OpenAIError <class 'type'>
PermissionDeniedError <class 'type'>
ProxiesTypes <class 'typing._UnionGenericAlias'>
RateLimitError <class 'type'>
RequestOptions <class 'typing_extensions._TypedDictMeta'>
Stream <class 'type'>
Timeout <class 'type'>
Transport <class 'type'>
UnprocessableEntityError <class 'type'>
VERSION <class 'str'>
annotations <class '__future__._Feature'>
api_key <class 'NoneType'>
api_type <class 'NoneType'>
api_version <class 'NoneType'>
audio <class 'openai._module_client.AudioProxy'>
azure_ad_token <class 'NoneType'>
azure_ad_token_provider <class 'NoneType'>
azure_endpoint <class 'NoneType'>
base_url <class 'NoneType'>
beta <class 'openai._module_client.BetaProxy'>
chat <class 'openai._module_client.ChatProxy'>
completions <class 'openai._module_client.CompletionsProxy'>
default_headers <class 'NoneType'>
default_query <class 'NoneType'>
embeddings <class 'openai._module_client.EmbeddingsProxy'>
file_from_path <class 'function'>
files <class 'openai._module_client.FilesProxy'>
fine_tuning <class 'openai._module_client.FineTuningProxy'>
http_client <class 'NoneType'>
images <class 'openai._module_client.ImagesProxy'>
lib <class 'module'>
max_retries <class 'int'>
models <class 'openai._module_client.ModelsProxy'>
moderations <class 'openai._module_client.ModerationsProxy'>
organization <class 'NoneType'>
override <class 'function'>
pagination <class 'module'>
resources <class 'module'>
timeout <class 'openai.Timeout'>
types <class 'module'>
version <class 'module'>

可見 openai 套件有非常多成員, 但串接 GPT 大模型只會用到 OpenAI 這個類別. 


二. 串接 OpenAI API : 

串接 API 的程式語法是很制式的, 首先從 openai 套件中匯入 OpenAI 類別 :

>>> from openai import OpenAI   

接著定義一個字串變數儲存金鑰, 例如下列範例 (非真實金鑰) : 

>>> api_key='sk-tonyIqevbZyyp3eWNr1966BlbkFJpo5ls6CxBcwvSyHslay2'  

然後呼叫 OpenAI 類別的建構函式 OpenAI() 並將金鑰傳給 api_key 參數, 它會傳回一個 OpenAI 物件 : 

>>> client=OpenAI(api_key=api_key)     
>>> type(client)    
<class 'openai.OpenAI'>    

最後呼叫此 OpenAI 物件的 chat.completions.create() 方法, 並傳入 messages (詢問訊息) 與 model (語言模型) 這兩個參數, 它會傳回一個 ChatCompletion 物件 (即 GPT 生成之回應) :

>>> chat_completion=client.chat.completions.create(
    messages=[
        {"role": "user",
         "content": "請說一個好笑的笑話",
        }],
    model="gpt-3.5-turbo",
    )
>>> type(chat_completion)   
<class 'openai.types.chat.chat_completion.ChatCompletion'>

參數 message 是一個字典串列, 其中 content 屬性就是我們提出的詢問, 因為我使用的是新註冊者的免費帳戶, 所以只能使用 GTP 3.5 模型, 無法使用 GPT 4. 

關於 chat.completions.create() 方法的參數用法參考 OpenAI API 說明 :


回應物件 ChatCompletion 的內容如下 :

>>> print(chat_completion)   
ChatCompletion(id='chatcmpl-92b7YN2M39rI6XvX8eyKlxuTU2SzK', choices=[Choice(finish_reason='stop', index=0, logprobs=None, message=ChatCompletionMessage(content='為什麼警察不玩撲克牌?因為他們怕抓到一隻大老鼠!哈哈哈哈哈!', role='assistant', function_call=None, tool_calls=None))], created=1710406376, model='gpt-3.5-turbo-0125', object='chat.completion', system_fingerprint='fp_4f2ebda25a', usage=CompletionUsage(completion_tokens=49, prompt_tokens=20, total_tokens=69))

print() 的輸出是擠成一團的字串, 可讀性差, 可以用第三方套件 rich 的 print() 來輸出可讀性高的物件內容, 關於 rich 參考 :


>>> import rich 
>>> rich.print(chat_completion)  
ChatCompletion(
    id='chatcmpl-92b7YN2M39rI6XvX8eyKlxuTU2SzK',
    choices=[
        Choice(
            finish_reason='stop',
            index=0,
            logprobs=None,
            message=ChatCompletionMessage(
                content='為什麼警察不玩撲克牌?因為他們怕抓到一隻大老鼠!
哈哈哈哈哈!',
                role='assistant',
                function_call=None,
                tool_calls=None
            )
        )
    ],
    created=1710406376,
    model='gpt-3.5-turbo-0125',
    object='chat.completion',
    system_fingerprint='fp_4f2ebda25a',
    usage=CompletionUsage(
        completion_tokens=49,
        prompt_tokens=20,
        total_tokens=69
    )
) 

觀察 ChatCompletion 物件結構, 可知 GPT 的回應內容放在 choices[0].message.content 屬性裡 :

>>> response_message=chat_completion.choices[0].message.content   
>>> print(response_message)    
為什麼警察不玩撲克牌?因為他們怕抓到一隻大老鼠!哈哈哈哈哈!

完整程式碼如下 :

from openai import OpenAI

api_key='sk-tonyIqevbZyyp3eWNr1966BlbkFJpo5ls6CxBcwvSyHslay2'
client=OpenAI(api_key=api_key)
chat_completion=client.chat.completions.create(
    messages=[
        {"role": "user",
         "content": "請說一個好笑的笑話",
        }],
    model="gpt-3.5-turbo",
    )
print(chat_completion)
response_message=chat_completion.choices[0].message.content
print(response_message)

關於 OpenAI API 的 Python 語法參考官網教學文件 : 



三. 將金鑰儲存在環境變數中 : 

上面直接將金鑰寫在程式中的作法並不妥當, 因為可能在分享時不經意地洩漏出去, 比較好的做法是將金鑰存在環境變數中, 參考 :


首先在目前工作目錄下建立一個檔名為 .env 的純文字隱藏檔, 用 = 把金鑰賦予一個變數名稱, 例如 OPENAI_KEY (注意, 金鑰不可用括號括起來) :

OPENAI_KEY=sk-tonyIqevbZyyp3eWNr1966BlbkFJpo5ls6CxBcwvSyHslay2 

然後安裝第三方套件 python-decouple 或 python-dotenv, 此處以 python-dotenv 為例 :

pip install python-dotenv   

這樣就可以匯入 dotenv 模組的 load_dotenv() 函式來載入環境變數檔 .env, 並配合使用 os.getenv() 來取得環境變數中的指定金鑰了 : 

>>> from dotenv import load_dotenv     
>>> import os   
>>> load_dotenv()   
True
>>> api_key=os.environ.get('OPENAI_API')   
>>> print(api_key)  
sk-tonyIqevbZyyp3eWNr1966BlbkFJpo5ls6CxBcwvSyHslay2    

>>> client=OpenAI(api_key=api_key)     
>>> chat_completion=client.chat.completions.create(
    messages=[
        {"role": "user",
         "content": "請說一個好笑的笑話",
        }],
    model="gpt-3.5-turbo",
    )
>>> response_message=chat_completion.choices[0].message.content   
>>> print(response_message)    
為什麼警察不玩撲克牌?因為他們怕抓到一隻大老鼠!哈哈哈哈哈!

完整程式碼如下 : 

import os
from dotenv import load_dotenv
from openai import OpenAI

load_dotenv()
api_key=os.environ.get('OPENAI_API')
client=OpenAI(api_key=api_key)
chat_completion=client.chat.completions.create(
    messages=[
        {"role": "user",
         "content": "請說一個好笑的笑話",
        }],
    model="gpt-3.5-turbo",
    )
print(chat_completion)
response_message=chat_completion.choices[0].message.content
print(response_message)

這樣就可避免在程式中直接揭露金鑰的問題了. 

2024年3月8日 星期五

好站 : Taiwan LLM 解析台灣第一個大型對話式語言模型

最近加入了一個台灣大型語言模型的臉書社群, 昨天在 YT 有林彥廷的直播 (約 46 分鐘) : 





裡面提到一些訓練模型時採用較少 bit 與 GPU 的設定建議, 值得參考. 

2024年2月17日 星期六

高科大還書 3 本 : PyTorch, 自然語言處理, GPT 模型等

今天中午午休時到 50 層大樓的永豐銀行驗證, 順便去母校圖書館還書三本 (被預約) :
No.2 這本 NLP 很不錯, 下回再回借, 或乾脆自己買一本. 還 3 本換 3 本回來 :
  1. 駕馭Chat GPT 4 : 探索Azure OpenAI與Cognitive Service for Language開發實踐(使用.NET與Node.js)
  2. AIoT與OpenCV實戰應用 : Python、樹莓派、物聯網與機器視覺
  3. AI繪圖夢工廠
還完書去吃鄧園雞腿飯, 他們的特製雞腿飯可香了, 我每次去借還書都要去吃一次或包便當回家, 還好要下周一才開學, 不用排隊. 

2024年2月13日 星期二

OpenAI API 學習筆記 : 註冊 OpenAI 帳戶與建立 API 金鑰

我使用 ChatGPT 已一年, 上過不少如何串接 OpenAI API 的教學課程, 卻一直沒時間測試, 趁春節連假結束前兩天的空檔動手玩看看. 由於我在 2023 年 2 月初註冊 OpenAI 帳號時獲得的 18 美元額度早就歸零了, 這次借用爸的手機註冊一個 OpenAI 帳號來用, 不過目前新註冊帳戶的免費額度已縮水到 5 美元, 一支手機可用來驗證 3 個 Email 帳號, 但只有第一個 Email 帳號會獲得 5 美元免費額度. 


一. 註冊 OpenAI 帳戶 : 

使用 OpenAI API 可以從 ChatGPT 登入/註冊頁面進去註冊 : 


也可以直接從 OpenAI API 登入/註冊頁面進去註冊 : 


或者從下面網址按 Try ChatGPT 鈕進去登入 :


兩個註冊入口效果是一樣的, 此處使用前者進行註冊. 

按右上角 "Get Started" 底下的 "Sign up" 鈕 :




輸入 Email 後按 "繼續" (最好是用 Gmail) : 



設定密碼 (至少 12 個字元) 後按 "繼續" :




OpenAI 會寄一封驗證信到信箱 : 



開啟信件按其中的 "Verify email address" 鈕, 若顯示 "Email verified" 表示註冊完成 : 





這時回登入/註冊頁面, 按 "Login in" 鈕 : 





輸入帳密 : 



登入成功會進入 ChatGPT 3.5 版頁面 : 




左上角的下拉式選單可以選擇所使用的 GTP 大語言模型, 免費帳戶只能使用 GPT 3.5, 只能使用聊天功能, 如果要使用文生圖等進階功能, 需按左下角的 "Upgrade plan" 鈕升級為付費帳戶 (輸入信用卡號授權每月扣款 20 美元). 

如欲聊天可在右下方中的輸入框輸入提示 (Prompt 文句) 後按 Enter 即可. 例如茶米老師上課最愛問的 "愛情是甚麼" :




不過 GPT 有些答覆會讓人覺得傻眼, 例如問它 "我爸與我媽可以結婚嗎?" : 




好的答覆通常需要給它一些適當的人設設定或背景提示, 這些技巧稱為提示工程 (Prompt engineering)
.

二. 建立 OpenAI API 金鑰 (key) : 

上面的 ChatGPT 已經提供了簡易操作的網頁介面來與 GPT 大語言模型聊天, 但必須是人工手動操作, 如果要達成自動化或將 GPT 的聊天功能整合到自己的應用程式 (例如 Line Bot 聊天機器人), 必須透過 OpenAI 所提供的 API 才行. 應用程式存取 GPT 並非使用 OpenAI 的帳號密碼, 而是透過金鑰 (API Key). 

首先連線下列網址按右上角的 "Log in" 鈕登入 OpenAI 帳戶 : 







登入成功會進入文件區的 Overview 頁面 : 





按左導覽列上的 "API Keys" 按鈕會進入金鑰管理頁面 :



 
新註冊的帳戶會先做手機驗證, 每支手機可替 3 個 Email 做驗證, 但只有第一個 Email 帳號會獲得使用期限 3 個月的 5 美元免費額度. 按右方的 "Start verification" 鈕進行驗證 : 




在彈出視窗輸入手機號碼 (0 不用) 後按 "Send code" 鈕 :




OpenAI 會傳送一個含有驗證碼的簡訊到上面輸入的手機中, 請查看簡訊並將驗證碼 (5 位數字) 填入至彈出視窗的驗證碼輸入框中, 正確的話會彈出如下之 Key 產生頁面 : 




Name 欄可填可不填, 按 "Create secret key" 鈕即可產生金鑰 :



按 "Copy" 鈕將 Key 複製到一個文字檔中保存, 因為它只顯示這一次, 務必在按 "Done" 鈕之前先保存起來, 彈出視窗關閉後, 在金鑰管理頁面中不會顯示完整的 Key, 如果沒記下來只能刪除它重新建立新的金鑰 :




按左邊導覽列的 "Usage" 鈕可檢視可用額度與已用額度 :





可見新註冊帳戶已獲得 5 美元的 API 使用額度, 它會依據用掉的 token 數計算要扣除的金額. 此 5 美元的免費額度需在 3 個月內用完, 逾期會歸零. 注意, API 的計費採 Pay as you go (實支實付) 模式計價, 與 ChatGPT 升級為付費帳戶的月付 20 美元不相干. 

如果是用我的 Hinet Email 帳戶登入檢視 Usage 結果如下 :




我在 2023-02-08 申請後小玩一下就沒時間而擱著, 18 美元免費額度才用了 0.01 美元, 三個月到期就被歸零了. 如果要繼續使用 API 就要填寫信用卡資訊成為付費帳戶才行.

 按左邊導覽列的 "Settings" 再按 "Billing" :




按 "Add payment details" 鈕會彈出一個視窗詢問是個人帳戶還是公司帳戶 (主要差別是公司戶有統編欄位), 選擇個人帳戶 :




接著會彈出填寫信用卡資訊與地址的視窗, 填好後按 "Continue" 即可 :




OpenAI 會先扣款 5 美元但會在稍後 (約 7 天) 後退還. API 使用費為月結, 依照 token 使用量計費, 用多少付多少. 如果怕費用爆表, 可在 Billing 頁面按 "Usage limits" 鈕進去設定費用限制, 其中 Soft limit 是警告額度, 當費用超過此額度後會發出警告信; Hard limit 則是停用額度, 超過此額度後當月的剩餘日子就無法再使用 API 了. 


三. 使用 Playground 聊天介面 : 

OpenAI 提供了 Playground 網頁介面讓使用者可以與 GPT 大語言模型聊天 (這正是 ChatGPT 一炮而紅的起源). 在 platform.openai.com 按左上方第一個圖示即可進入 Playground 頁面 : 




先關閉左邊的使用說明欄 :




這樣就會剩下 System, User, 與 Model 三個欄位. Playgound 預設是試用中 (beta) 的 Assistants 模式, 請將其從預設的 Assistans 改成 Chat 模式 : 




然後在 System 欄輸入 "你是一個 Python 程式設計師", 中間上方輸入 "如何用正規式驗證 Email?",  右方的模型設定欄用預設值即可, 然後按中間欄最底下的 "Submit" 鈕, 這樣 Assistans 欄位就會出現回應了 : 





右方的模型設定欄參數說明如下 : 
  • Temperature : 控制回應的創造力 (值 0~1)
    低 : 會生成正確但相對單調, 變化較小的文本.
    高 : 會評估能適應上下文之可能回應, 生成較多樣化的文本, 但錯誤性較高.
  • Maximum length : 回應長度限制 (回應之 token 數)
    API 以每次生成文本之 token 數收費, 對預算有限者而言此參數很重要. API 的限制是提示詞與回應總 tooken 數最多 2048. 
  • Stop sequence : 讓 API 停止生成的字串
    這是安插在提示詞中的信號字串, 當 API 遇到該詞時就會停止生成 toke, 這是提供給使用者控制成本的機制. API 允許你設定 4 個詞彙做為停止詞.
  • Top P : 控制模型在 Temperature 建議的隨機結果中要選出的範圍 (值 0~1)
    Top P 的值低表示確定性較高, 例如 0.1 表示只有 10% 的隨機回應會被考慮用來回應 (限制了創造力), Top P 的值高表示有更多比例的隨機回應會被考慮做為回應 (釋放創造力), 但也意味著會冒較高的錯誤風險. Temperature 與 Top P 是息息相關的, 前者控制隨機程度, 後者則控制隨機結果的選擇性. 
  • Frequency/Presence penalty : 控制在回應中重複輸出相同文本的程度
    這兩個參數是考慮提示詞與先前的輸出回應 (而不是模型內的參數) 來控制回應, Frequency panalty 透過懲罰模型來降低重複相同語句之機率; 而 Presence penalty 則增加模型談論新話題之機率, 這樣可以避免在多次的回應中重複輸出相同的語句. 若建議的文本輸出重複了就會使用 Frequency penalty; 若只出現一個相同 token 就使用 Presence penalty. 

2024年2月2日 星期五

NLP 學習筆記 : 安裝 Hugging Face NLP 工具集套件

Transformer 是目前自然語言處理最常用也最先進的架構, 它可以執行文本的分類 (classification), 產生 (generation), 摘要 (summerization), 與問答 (Q&A) 等任務. Hugging Face 提供了開源的 NLP 工具集套件, 透過統一的介面讓使用者能方便地開發 NLP 應用, 其主要工具集如下 :
  • transformers 套件 : 實作 Transformer 架構
  • datasets 資料集 : 統一的資料集處理工具
參考書籍 :
教學文件參考 :



一. 安裝 transformers 套件 :

今天下午在 Thonny 中 (自帶 Python 3.10) 安裝了 Hugging Face 的 transformers 套件 : 

D:\python>pip install transformers    
Collecting transformers
  Downloading transformers-4.37.2-py3-none-any.whl.metadata (129 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 129.4/129.4 kB 692.6 kB/s eta 0:00:00
Requirement already satisfied: filelock in c:\users\tony1\appdata\roaming\python\python310\site-packages (from transformers) (3.12.3)
Requirement already satisfied: huggingface-hub<1.0,>=0.19.3 in c:\users\tony1\appdata\roaming\python\python310\site-packages (from transformers) (0.20.1)
Requirement already satisfied: numpy>=1.17 in c:\users\tony1\appdata\roaming\python\python310\site-packages (from transformers) (1.24.3)
Requirement already satisfied: packaging>=20.0 in c:\users\tony1\appdata\roaming\python\python310\site-packages (from transformers) (23.1)
Requirement already satisfied: pyyaml>=5.1 in c:\users\tony1\appdata\local\programs\thonny\lib\site-packages (from transformers) (6.0.1)
Collecting regex!=2019.12.17 (from transformers)
  Downloading regex-2023.12.25-cp310-cp310-win_amd64.whl.metadata (41 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 42.0/42.0 kB 2.0 MB/s eta 0:00:00
Requirement already satisfied: requests in c:\users\tony1\appdata\roaming\python\python310\site-packages (from transformers) (2.31.0)
Collecting tokenizers<0.19,>=0.14 (from transformers)
  Downloading tokenizers-0.15.1-cp310-none-win_amd64.whl.metadata (6.8 kB)
Collecting safetensors>=0.4.1 (from transformers)
  Downloading safetensors-0.4.2-cp310-none-win_amd64.whl.metadata (3.9 kB)
Requirement already satisfied: tqdm>=4.27 in c:\users\tony1\appdata\roaming\python\python310\site-packages (from transformers) (4.66.1)
Requirement already satisfied: fsspec>=2023.5.0 in c:\users\tony1\appdata\roaming\python\python310\site-packages (from huggingface-hub<1.0,>=0.19.3->transformers) (2023.9.1)
Requirement already satisfied: typing-extensions>=3.7.4.3 in c:\users\tony1\appdata\roaming\python\python310\site-packages (from huggingface-hub<1.0,>=0.19.3->transformers) (4.9.0)
Requirement already satisfied: colorama in c:\users\tony1\appdata\local\programs\thonny\lib\site-packages (from tqdm>=4.27->transformers) (0.4.6)
Requirement already satisfied: charset-normalizer<4,>=2 in c:\users\tony1\appdata\roaming\python\python310\site-packages (from requests->transformers) (3.2.0)
Requirement already satisfied: idna<4,>=2.5 in c:\users\tony1\appdata\roaming\python\python310\site-packages (from requests->transformers) (3.4)
Requirement already satisfied: urllib3<3,>=1.21.1 in c:\users\tony1\appdata\roaming\python\python310\site-packages (from requests->transformers) (2.1.0)
Requirement already satisfied: certifi>=2017.4.17 in c:\users\tony1\appdata\roaming\python\python310\site-packages (from requests->transformers) (2023.7.22)
Downloading transformers-4.37.2-py3-none-any.whl (8.4 MB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 8.4/8.4 MB 2.6 MB/s eta 0:00:00
Downloading regex-2023.12.25-cp310-cp310-win_amd64.whl (269 kB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 269.5/269.5 kB 5.5 MB/s eta 0:00:00
Downloading safetensors-0.4.2-cp310-none-win_amd64.whl (269 kB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 269.5/269.5 kB 3.3 MB/s eta 0:00:00
Downloading tokenizers-0.15.1-cp310-none-win_amd64.whl (2.2 MB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.2/2.2 MB 3.4 MB/s eta 0:00:00
Installing collected packages: safetensors, regex, tokenizers, transformers
Successfully installed regex-2023.12.25 safetensors-0.4.2 tokenizers-0.15.1 transformers-4.37.2

看起來 transformers 套件並沒有很大, 安裝完先匯入整個模組來檢查版本 :

>>> import transformers  
>>> transformers.__version__   
'4.37.2'   

然後用 dir() 檢視其內容 : 

>>> dir(transformers)   
['ALBERT_PRETRAINED_CONFIG_ARCHIVE_MAP', 'ALBERT_PRETRAINED_MODEL_ARCHIVE_LIST', 'ALIGN_PRETRAINED_CONFIG_ARCHIVE_MAP', 'ALIGN_PRETRAINED_MODEL_ARCHIVE_LIST', 'ALL_PRETRAINED_CONFIG_ARCHIVE_MAP', 'ALTCLIP_PRETRAINED_CONFIG_ARCHIVE_MAP', 'ALTCLIP_PRETRAINED_MODEL_ARCHIVE_LIST', 'ASTConfig', 'ASTFeatureExtractor', 'ASTForAudioClassification', 'ASTModel', 'ASTPreTrainedModel', 'AUDIO_SPECTROGRAM_TRANSFORMER_PRETRAINED_CONFIG_ARCHIVE_MAP', 'AUDIO_SPECTROGRAM_TRANSFORMER_PRETRAINED_MODEL_ARCHIVE_LIST', 'AUTOFORMER_PRETRAINED_CONFIG_ARCHIVE_MAP', 'AUTOFORMER_PRETRAINED_MODEL_ARCHIVE_LIST', 'Adafactor', 'AdamW', 'AdamWeightDecay', 'AdaptiveEmbedding', 'AddedToken', 'Agent', 'AlbertConfig', 'AlbertForMaskedLM', 'AlbertForMultipleChoice', 'AlbertForPreTraining', 'AlbertForQuestionAnswering', 'AlbertForSequenceClassification', 'AlbertForTokenClassification', 'AlbertModel', 'AlbertPreTrainedModel', 'AlbertTokenizer', 'AlbertTokenizerFast', 'AlignConfig', 'AlignModel', 'AlignPreTrainedModel', 'AlignProcessor', 'AlignTextConfig', 'AlignTextModel', 'AlignVisionConfig', 'AlignVisionModel', 'AltCLIPConfig', 'AltCLIPModel', 'AltCLIPPreTrainedModel', 'AltCLIPProcessor', 'AltCLIPTextConfig', 'AltCLIPTextModel', 'AltCLIPVisionConfig', 'AltCLIPVisionModel', 'AlternatingCodebooksLogitsProcessor', 'AudioClassificationPipeline', 'AutoBackbone', 'AutoConfig', 'AutoFeatureExtractor', 'AutoImageProcessor', 'AutoModel', 'AutoModelForAudioClassification', 'AutoModelForAudioFrameClassification', 'AutoModelForAudioXVector', 'AutoModelForCTC', 'AutoModelForCausalLM', 'AutoModelForDepthEstimation', 'AutoModelForDocumentQuestionAnswering', 'AutoModelForImageClassification', 'AutoModelForImageSegmentation', 'AutoModelForImageToImage', 'AutoModelForInstanceSegmentation', 'AutoModelForMaskGeneration', 'AutoModelForMaskedImageModeling', 'AutoModelForMaskedLM', 'AutoModelForMultipleChoice', 'AutoModelForNextSentencePrediction', 'AutoModelForObjectDetection', 'AutoModelForPreTraining', 'AutoModelForQuestionAnswering', 'AutoModelForSemanticSegmentation', 'AutoModelForSeq2SeqLM', 'AutoModelForSequenceClassification', 'AutoModelForSpeechSeq2Seq', 'AutoModelForTableQuestionAnswering', 'AutoModelForTextEncoding', 'AutoModelForTextToSpectrogram', 'AutoModelForTextToWaveform', 'AutoModelForTokenClassification', 'AutoModelForUniversalSegmentation', 'AutoModelForVideoClassification', 'AutoModelForVision2Seq', 'AutoModelForVisualQuestionAnswering', 'AutoModelForZeroShotImageClassification', 'AutoModelForZeroShotObjectDetection', 'AutoModelWithLMHead', 'AutoProcessor', 'AutoTokenizer', 'AutoformerConfig', 'AutoformerForPrediction', 'AutoformerModel', 'AutoformerPreTrainedModel', 'AutomaticSpeechRecognitionPipeline', 'AwqConfig', 'AzureOpenAiAgent', 'BARK_PRETRAINED_MODEL_ARCHIVE_LIST', 'BART_PRETRAINED_MODEL_ARCHIVE_LIST', 'BEIT_PRETRAINED_CONFIG_ARCHIVE_MAP', 'BEIT_PRETRAINED_MODEL_ARCHIVE_LIST', 'BERT_PRETRAINED_CONFIG_ARCHIVE_MAP', 'BERT_PRETRAINED_MODEL_ARCHIVE_LIST', 'BIGBIRD_PEGASUS_PRETRAINED_CONFIG_ARCHIVE_MAP', 'BIGBIRD_PEGASUS_PRETRAINED_MODEL_ARCHIVE_LIST', 'BIG_BIRD_PRETRAINED_CONFIG_ARCHIVE_MAP', 'BIG_BIRD_PRETRAINED_MODEL_ARCHIVE_LIST', 'BIOGPT_PRETRAINED_CONFIG_ARCHIVE_MAP', 'BIOGPT_PRETRAINED_MODEL_ARCHIVE_LIST', 'BIT_PRETRAINED_CONFIG_ARCHIVE_MAP', 'BIT_PRETRAINED_MODEL_ARCHIVE_LIST', 'BLENDERBOT_PRETRAINED_CONFIG_ARCHIVE_MAP', 'BLENDERBOT_PRETRAINED_MODEL_ARCHIVE_LIST', 'BLENDERBOT_SMALL_PRETRAINED_CONFIG_ARCHIVE_MAP', 'BLENDERBOT_SMALL_PRETRAINED_MODEL_ARCHIVE_LIST', 'BLIP_2_PRETRAINED_CONFIG_ARCHIVE_MAP', 'BLIP_2_PRETRAINED_MODEL_ARCHIVE_LIST', 'BLIP_PRETRAINED_CONFIG_ARCHIVE_MAP', 'BLIP_PRETRAINED_MODEL_ARCHIVE_LIST', 'BLOOM_PRETRAINED_CONFIG_ARCHIVE_MAP', 'BLOOM_PRETRAINED_MODEL_ARCHIVE_LIST', 'BRIDGETOWER_PRETRAINED_CONFIG_ARCHIVE_MAP', 'BRIDGETOWER_PRETRAINED_MODEL_ARCHIVE_LIST', 'BROS_PRETRAINED_CONFIG_ARCHIVE_MAP', 'BROS_PRETRAINED_MODEL_ARCHIVE_LIST', 'BarkCausalModel', 'BarkCoarseConfig', 'BarkCoarseModel', 'BarkConfig', 'BarkFineConfig', 'BarkFineModel', 'BarkModel', 'BarkPreTrainedModel', 'BarkProcessor', 'BarkSemanticConfig', 'BarkSemanticModel', 'BartConfig', 'BartForCausalLM', 'BartForConditionalGeneration', 'BartForQuestionAnswering', 'BartForSequenceClassification', 'BartModel', 'BartPreTrainedModel', 'BartPretrainedModel', 'BartTokenizer', 'BartTokenizerFast', 'BarthezTokenizer', 'BarthezTokenizerFast', 'BartphoTokenizer', 'BasicTokenizer', 'BatchEncoding', 'BatchFeature', 'BeamScorer', 'BeamSearchScorer', 'BeitBackbone', 'BeitConfig', 'BeitFeatureExtractor', 'BeitForImageClassification', 'BeitForMaskedImageModeling', 'BeitForSemanticSegmentation', 'BeitImageProcessor', 'BeitModel', 'BeitPreTrainedModel', 'BertConfig', 'BertForMaskedLM', 'BertForMultipleChoice', 'BertForNextSentencePrediction', 'BertForPreTraining', 'BertForQuestionAnswering', 'BertForSequenceClassification', 'BertForTokenClassification', 'BertGenerationConfig', 'BertGenerationDecoder', 'BertGenerationEncoder', 'BertGenerationPreTrainedModel', 'BertGenera…

從後面的 ... 可知其成員非常龐大啊! 

谷歌 Colab 執行環境已經預先安裝 transformers 套件可直接匯入使用, 不需安裝 : 




可見其版本較上面本機安裝的 v4.37.2 要舊一些 (v4.35.2). 


二. 安裝 datasets 工具集套件 :

此工具集負責資料預處理, 例如資料集的載入與儲存, 檢視, 排序, 過濾, 抽樣, 與拆分等, Hugging Face 的 datasets 套件提供了統一的資料集處理 API 介面, 可以大幅降低資料預處理的難度與工作量 (在資料科學中, 預處理佔據大部分工作量, 可說是一種 dirty work). 

此套件在本機可直接用 pip install 安裝 :

D:\python>pip install datasets    
Collecting datasets
  Downloading datasets-2.16.1-py3-none-any.whl.metadata (20 kB)
Requirement already satisfied: filelock in c:\users\tony1\appdata\roaming\python\python310\site-packages (from datasets) (3.12.3)
Requirement already satisfied: numpy>=1.17 in c:\users\tony1\appdata\roaming\python\python310\site-packages (from datasets) (1.24.3)
Requirement already satisfied: pyarrow>=8.0.0 in c:\users\tony1\appdata\roaming\python\python310\site-packages (from datasets) (13.0.0)
Collecting pyarrow-hotfix (from datasets)
  Downloading pyarrow_hotfix-0.6-py3-none-any.whl.metadata (3.6 kB)
Requirement already satisfied: dill<0.3.8,>=0.3.0 in c:\users\tony1\appdata\local\programs\thonny\lib\site-packages (from datasets) (0.3.7)
Requirement already satisfied: pandas in c:\users\tony1\appdata\roaming\python\python310\site-packages (from datasets) (2.0.3)
Requirement already satisfied: requests>=2.19.0 in c:\users\tony1\appdata\roaming\python\python310\site-packages (from datasets) (2.31.0)
Requirement already satisfied: tqdm>=4.62.1 in c:\users\tony1\appdata\roaming\python\python310\site-packages (from datasets) (4.66.1)
Collecting xxhash (from datasets)
  Downloading xxhash-3.4.1-cp310-cp310-win_amd64.whl.metadata (12 kB)
Collecting multiprocess (from datasets)
  Downloading multiprocess-0.70.16-py310-none-any.whl.metadata (7.2 kB)
Requirement already satisfied: fsspec<=2023.10.0,>=2023.1.0 in c:\users\tony1\appdata\roaming\python\python310\site-packages (from fsspec[http]<=2023.10.0,>=2023.1.0->datasets) (2023.9.1)
Requirement already satisfied: aiohttp in c:\users\tony1\appdata\roaming\python\python310\site-packages (from datasets) (3.9.1)
Requirement already satisfied: huggingface-hub>=0.19.4 in c:\users\tony1\appdata\roaming\python\python310\site-packages (from datasets) (0.20.1)
Requirement already satisfied: packaging in c:\users\tony1\appdata\roaming\python\python310\site-packages (from datasets) (23.1)
Requirement already satisfied: pyyaml>=5.1 in c:\users\tony1\appdata\local\programs\thonny\lib\site-packages (from datasets) (6.0.1)
Requirement already satisfied: attrs>=17.3.0 in c:\users\tony1\appdata\roaming\python\python310\site-packages (from aiohttp->datasets) (23.1.0)
Requirement already satisfied: multidict<7.0,>=4.5 in c:\users\tony1\appdata\roaming\python\python310\site-packages (from aiohttp->datasets) (6.0.4)
Requirement already satisfied: yarl<2.0,>=1.0 in c:\users\tony1\appdata\roaming\python\python310\site-packages (from aiohttp->datasets) (1.9.4)
Requirement already satisfied: frozenlist>=1.1.1 in c:\users\tony1\appdata\roaming\python\python310\site-packages (from aiohttp->datasets) (1.4.1)
Requirement already satisfied: aiosignal>=1.1.2 in c:\users\tony1\appdata\roaming\python\python310\site-packages (from aiohttp->datasets) (1.3.1)
Requirement already satisfied: async-timeout<5.0,>=4.0 in c:\users\tony1\appdata\roaming\python\python310\site-packages (from aiohttp->datasets) (4.0.3)
Requirement already satisfied: typing-extensions>=3.7.4.3 in c:\users\tony1\appdata\roaming\python\python310\site-packages (from huggingface-hub>=0.19.4->datasets) (4.9.0)
Requirement already satisfied: charset-normalizer<4,>=2 in c:\users\tony1\appdata\roaming\python\python310\site-packages (from requests>=2.19.0->datasets) (3.2.0)
Requirement already satisfied: idna<4,>=2.5 in c:\users\tony1\appdata\roaming\python\python310\site-packages (from requests>=2.19.0->datasets) (3.4)
Requirement already satisfied: urllib3<3,>=1.21.1 in c:\users\tony1\appdata\roaming\python\python310\site-packages (from requests>=2.19.0->datasets) (2.1.0)
Requirement already satisfied: certifi>=2017.4.17 in c:\users\tony1\appdata\roaming\python\python310\site-packages (from requests>=2.19.0->datasets) (2023.7.22)
Requirement already satisfied: colorama in c:\users\tony1\appdata\local\programs\thonny\lib\site-packages (from tqdm>=4.62.1->datasets) (0.4.6)
INFO: pip is looking at multiple versions of multiprocess to determine which version is compatible with other requirements. This could take a while.
  Downloading multiprocess-0.70.15-py310-none-any.whl.metadata (7.2 kB)
Requirement already satisfied: python-dateutil>=2.8.2 in c:\users\tony1\appdata\roaming\python\python310\site-packages (from pandas->datasets) (2.8.2)
Requirement already satisfied: pytz>=2020.1 in c:\users\tony1\appdata\roaming\python\python310\site-packages (from pandas->datasets) (2023.3)
Requirement already satisfied: tzdata>=2022.1 in c:\users\tony1\appdata\roaming\python\python310\site-packages (from pandas->datasets) (2023.3)
Requirement already satisfied: six>=1.5 in c:\users\tony1\appdata\local\programs\thonny\lib\site-packages (from python-dateutil>=2.8.2->pandas->datasets) (1.16.0)
Downloading datasets-2.16.1-py3-none-any.whl (507 kB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 507.1/507.1 kB 2.0 MB/s eta 0:00:00
Downloading multiprocess-0.70.15-py310-none-any.whl (134 kB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 134.8/134.8 kB 2.0 MB/s eta 0:00:00
Downloading pyarrow_hotfix-0.6-py3-none-any.whl (7.9 kB)
Downloading xxhash-3.4.1-cp310-cp310-win_amd64.whl (29 kB)
Installing collected packages: xxhash, pyarrow-hotfix, multiprocess, datasets
Successfully installed datasets-2.16.1 multiprocess-0.70.15 pyarrow-hotfix-0.6 xxhash-3.4.1

檢查版本 :

>>> import datasets  
>>> datasets.__version__   
'2.16.1'

用 dir() 檢視其內容 :

>>> dir(datasets)     
['Array2D', 'Array3D', 'Array4D', 'Array5D', 'ArrowBasedBuilder', 'Audio', 'AudioClassification', 'AutomaticSpeechRecognition', 'BeamBasedBuilder', 'BuilderConfig', 'ClassLabel', 'Dataset', 'DatasetBuilder', 'DatasetDict', 'DatasetInfo', 'DownloadConfig', 'DownloadManager', 'DownloadMode', 'Features', 'GeneratorBasedBuilder', 'Image', 'ImageClassification', 'IterableDataset', 'IterableDatasetDict', 'LanguageModeling', 'Metric', 'MetricInfo', 'NamedSplit', 'NamedSplitAll', 'QuestionAnsweringExtractive', 'ReadInstruction', 'Sequence', 'Split', 'SplitBase', 'SplitDict', 'SplitGenerator', 'SplitInfo', 'StreamingDownloadManager', 'SubSplitInfo', 'Summarization', 'TaskTemplate', 'TextClassification', 'Translation', 'TranslationVariableLanguages', 'Value', 'VerificationMode', 'Version', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__path__', '__spec__', '__version__', 'are_progress_bars_disabled', 'arrow_dataset', 'arrow_reader', 'arrow_writer', 'builder', 'combine', 'concatenate_datasets', 'config', 'data_files', 'dataset_dict', 'deprecation_utils', 'disable_caching', 'disable_progress_bar', 'disable_progress_bars', 'doc_utils', 'download', 'enable_caching', 'enable_progress_bar', 'enable_progress_bars', 'exceptions', 'experimental', 'extract', 'features', 'file_utils', 'filesystems', 'fingerprint', 'formatting', 'get_dataset_config_info', 'get_dataset_config_names', 'get_dataset_default_config_name', 'get_dataset_infos', 'get_dataset_split_names', 'hub', 'info', 'info_utils', 'inspect', 'inspect_dataset', 'inspect_metric', 'interleave_datasets', 'is_caching_enabled', 'is_progress_bar_enabled', 'iterable_dataset', 'keyhash', 'list_datasets', 'list_metrics', 'load', 'load_dataset', 'load_dataset_builder', 'load_from_disk', 'load_metric', 'logging', 'metadata', 'metric', 'naming', 'packaged_modules', 'parallel', 'patching', 'percent', 'py_utils', 'search', 'set_caching_enabled', 'sharding', 'splits', 'stratify', 'streaming', 'table', 'tasks', 'tf_utils', 'tqdm', 'track', 'typing', 'utils', 'version']

不過 Colab 並未預載 datasets 套件, 每次重新連線都必須自行安裝一次 :

!pip install datasets 




匯入檢視版本 :




可見與本機一樣都是最新的 v2.16.1 版. 

微軟 Azure OpenAI 自學參考資料

1/30 參加 Azure OpenAI 內訓課程時老師提供了許多參考資料, 此課程為 Azure AI-050 認證的一部分, 包含 6 個模組, 每個模組均有實作, 整理如下 :

模組 0 :  
模組 1 : 
模組 2 :
  1. Azure OpenAI 服務的 REST API 參考 : https://learn.microsoft.com/en-us/azure/ai-services/openai/reference
  2. Azure OpenAI .NET SDK : https://learn.microsoft.com/en-us/dotnet/api/overview/azure/ai.openai-readme?view=azure-dotnet-preview
  3. ChatCompletion - 快速上手 - 使用 C# : https://learn.microsoft.com/en-us/azure/ai-services/openai/chatgpt-quickstart?tabs=command-line%2Cpython&pivots=programming-language-csharp
  4. 遷移到 OpenAI Python API 函式庫 1.x 版 : https://learn.microsoft.com/en-us/azure/ai-services/openai/how-to/migration?tabs=python%2Cdalle-fix
  5. ChatCompletion - 快速上手 - 使用 Python : https://learn.microsoft.com/en-us/azure/ai-services/openai/chatgpt-quickstart?tabs=command-line%2Cpython&pivots=programming-language-python
  6. 微軟學習 - 使用 Azure OpenAI 服務建立自然語言解決方案 : https://aka.ms/mslearn-build-openai
模組 3 : 
模組 4 : 
  1. Azure OpenAI 服務既有模型 : https://learn.microsoft.com/en-us/azure/ai-services/openai/concepts/legacy-models
  2. 微軟學習 - 利用 Azure OpenAI 服務產生程式碼 : https://aka.ms/mslearn-code-openai
模組 5 : 
模組 6 :
其他學習參考 : 
這些學習指引對於自學 Azure OpenAPI 非常有幫助, 過年期間可以好好地來探索一番. 

2024年1月28日 星期日

momo 買書一本 : ChatGPT原理-從PyTorch中的NLP功能讓你一腳跨入自然語言

上周末這本書 momo 有單日優惠價 611 元 (約 69 折) 但我忘記下單, 就一直放在購物車, 今天收到 momo 的降價通知信又有 611 了, 趕緊把握機會買下來 :





因還有 1021 元 momo 幣, 先用掉其中的零頭 21 元, 實付 590 元 :





直接從 69 折變 67 折好爽 (有夠阿 Q, 呵呵).