欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

使用GPT-3訓練垃圾短信分類器示例詳解

 更新時間:2023年02月16日 17:10:22   作者:大鵬學開發(fā)  
這篇文章主要為大家介紹了使用GPT-3訓練垃圾短信分類器示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪

引言

平時我們都會收到很多短信,由于微信等即時通訊工具的普及,短信已經成為了一個驗證碼接收器,但是偶爾也有不少垃圾短信,所以對短信進行分類和屏蔽是一個很簡單又很重要的需求。

目前在AppStroe上有很多實現(xiàn)短信分類的App,比如《熊貓吃短信》,有需要可以自行下載體驗一下。解決這樣的一個簡單的需求的App,就可以讓App的開發(fā)者賺不少錢,我們可以學習一下這種需求用GPT-3如何實現(xiàn)。

今天這個教程,我們可以使用GPT-3模型來實現(xiàn)一個垃圾短信分類器,可以做為一個GPT3模型二次開發(fā)訓練的簡單的入門練手項目

因為使用成本的原因(訓練完成調用接口仍然需要付費,而且更貴),此方式不適合用于正式的生產環(huán)境,僅作為學習體驗使用,期待以后會有成本更低更合適的方式。

*如果您沒有開發(fā)基礎也可以了解學習訓練過程,再找到有基礎的程序員代為訓練 *

訓練數(shù)據

希望訓練什么,就要準備什么數(shù)據,如果想要做一個通用的短信識別那就需要盡可能的廣泛而多的短信樣本,這個案例我們只取一個人的短信來訓練,需要的樣本數(shù)量可以很少,訓練出來的模型也會很適用于這個人。

我們從某位同學手機上直接導出了一萬條短信(好幾年沒刪),然后隨機取了500條短信作為樣本進行標注,將短信分成四個簡單的類型:通知短信、垃圾短信、公益短信、正常短信,然后將文件保存為.csv格式的文件,放到項目文件夾

分類短信內容
通知短信【碼上購】【網上營業(yè)廳】您的訂單正在做修改證件操作,驗證碼:522348,非本人同意請勿向他人提供驗證碼信息
通知短信尊敬的客戶:您好!您所反映的問題(工單號:TS00000000000000)已處理完畢,我司將跟進滿意度調查,如您收到提示短信,請對我們的服務給予10分的滿意評價。感謝您的理解和支持!<湖南聯(lián)通10010>
垃圾短信交費、充值更多人選聯(lián)通手機營業(yè)廳,安全快捷,固定面值本機交費享受9.95折,快來體驗吧!u.10010.cn/khddf2
公益短信公益短信:4月15日是全民國家安全教育日。國家安全,人人有責!發(fā)現(xiàn)危害國家安全的情況,請撥打舉報電話12339,一經查實將予獎勵?!竞鲜野踩珡d】
正常短信今天上午可以安裝嗎老板

注意事項

  • 樣本數(shù)量最少200條,建議500條以上,數(shù)據越多準確率越高
  • 做分類訓練,每個類型至少有100個樣本,否則會影響準確率
  • 確保訓練的樣本與實際使用的情況是非常相似的,否則影響準確率
  • 如果樣本里面包含敏感信息,可以用*號或者某某來進行脫敏處理,不會影響訓練效果
  • 每條樣本添加一個結束符,比如“###”或者“->",如果沒有添加,轉換工具會問是否需要幫你添加

這里需要注意,我們將短信分為四種,并且用中文表示,是方便我們教程測試,實際使用中,使用數(shù)字代替中文分類,我們將分類換成:

正常短信=1, 通知短信=2, 公益短信=3, 垃圾短信=4

因為模型接口是按token收費的,可以理解為按字數(shù)收費,用數(shù)字就可以節(jié)省一些成本

另外,訓練的模型有四種可選,davinci、curie、babbage、ada

其中ada價格最便宜,性能最好,像這種分類的簡單需求,使用ada模型就可以了。

四種模型的價格如下:

模型訓練價格訓練完成調用價格
Ada$0.0004 / 1K tokens$0.0016 / 1K tokens
Babbage$0.0006 / 1K tokens$0.0024 / 1K tokens
Curie$0.0030 / 1K tokens$0.0120 / 1K tokens
Davinci$0.0300 / 1K tokens$0.1200 / 1K tokens

每1千token,token大概相當于字數(shù),一個中文字約為2個token,一條短信大約為140個token,如果我們以ada模型作為訓練模型,換算下來,識別1千條短信大概成本為1.568人民幣。

價格不算便宜,但是人類歷史上所有有需求但價格昂貴的東西,最終都會被市場打下來的。

訓練過程

首先安裝最新的openai庫

pip install --upgrade openai

然后導入open的密鑰,可以使用環(huán)境變量導入的方式

export OPENAI_API_KEY="&lt;填你的openai密鑰&gt;" // linux系統(tǒng) 
set OPENAI_API_KEY="&lt;填你的openai密鑰&gt;" // windows系統(tǒng)

GPT-3訓練需要將樣本數(shù)據轉換為他們要求的JSONL格式

{"prompt": "輸入的提示", "completion": "輸出的結果"}
...
{"prompt":"sms: 今天上午可以安裝嗎老板 ->", "completion":" 正常短信"}
……

我們可以使用openai提供的轉換工具,來換為符合要求的格式

openai tools fine_tunes.prepare_data -f <樣本文件地址>
openai tools fine_tunes.prepare_data -f sms_classifier/sms_sample_500_converted.csv

首先將我們csv文件的表頭,改成 prompt 和 completion,代表輸入和輸出的內容,然后在信息前面加一個標志(sms: ),用于區(qū)別正常的內容

completionprompt
通知短信sms:【碼上購】【網上營業(yè)廳】您的訂單正在做修改證件操作,驗證碼:522348,非本人同意請勿向他人提供驗證碼信息!

處理好csv文件之后,執(zhí)行命令進行轉換

openai tools fine_tunes.prepare_data -f sms_classifier/sms_sample_500_converted.csv

其中提示我們一些注意事項,一路點選Y就可以了

(venv) D:\dev2023\openai-tutorial>openai tools fine_tunes.prepare_data -f sms_classifier/sms_sample_500_converted.csv
Analyzing...
- Based on your file extension, your file is formatted as a CSV file
- Your file contains 441 prompt-completion pairs
- Based on your data it seems like you're trying to fine-tune a model for classification
- For classification, we recommend you try one of the faster and cheaper models, such as `ada`
- For classification, you can estimate the expected model performance by keeping a held out dataset, which is not used for training
- All prompts end with suffix ` ##`
- All prompts start with prefix `sms: `
- The completion should start with a whitespace character (` `). This tends to produce better results due to the tokenization we use. See https://beta.openai.com/docs/guides/fine-tuning/preparing-your-dataset for 
more details
Based on the analysis we will perform the following actions:
- [Necessary] Your format `CSV` will be converted to `JSONL`
- [Recommended] Add a whitespace character to the beginning of the completion [Y/n]: y
- [Recommended] Would you like to split into training and validation set? [Y/n]: y
Your data will be written to a new JSONL file. Proceed [Y/n]: y
Wrote modified files to `sms_classifier/sms_sample_500_converted_prepared_train.jsonl` and `sms_classifier/sms_sample_500_converted_prepared_valid.jsonl`
Feel free to take a look!
Now use that file when fine-tuning:
> openai api fine_tunes.create -t "sms_classifier/sms_sample_500_converted_prepared_train.jsonl" -v "sms_classifier/sms_sample_500_converted_prepared_valid.jsonl" --compute_classification_metrics --classification_n_classes 4
After you've fine-tuned a model, remember that your prompt has to end with the indicator string ` ##` for the model to start generating completions, rather than continuing with the prompt.
Once your model starts training, it'll approximately take 12.92 minutes to train a `curie` model, and less for `ada` and `babbage`. Queue will approximately take half an hour per job ahead of you.

其中工具會幫我們將樣本分成訓練集和測試集,以便訓練完成之后測試訓練的效果

同時也提醒我們:

  • 訓練完成后,正常的調用也需要保持與樣本相同的請求格式
  • 如果選擇curie模型,大概需要12.92分鐘,如果選擇ada或者babbage模型則更短一些

開始訓練

這里我們指定模型為ada:-m ada

指定訓練的名稱為:--suffix sms_classifier

(venv) D:\dev2023\openai-tutorial&gt;openai api fine_tunes.create -m ada --suffix "sms_classifier" -t "sms_classifier/sms_sample_500_converted_prepared_train.jsonl" -v "sms_classifier/sms_sample_500_converted_prepared_valid.jsonl" --compute_classification_metrics --classification_n_classes 4
Upload progress: 100%|██████████████████████████████████████████| 97.6k/97.6k [00:00&lt;00:00, 95.8Mit/s]
Uploaded file from sms_classifier/sms_sample_500_converted_prepared_train.jsonl: file-HQgXiRZBxwn7In0sUax1WVdj
Upload progress: 100%|██████████████████████████████████████████| 24.3k/24.3k [00:00&lt;?, ?it/s]
Uploaded file from sms_classifier/sms_sample_500_converted_prepared_valid.jsonl: file-gtmsXSjMpmdFowRQ8Hn0FxbX
Created fine-tune: ft-tEt9Oo95zgJ42KJvP4nS8nee
Streaming events until fine-tuning is complete...
(Ctrl-C will interrupt the stream, but not cancel the fine-tune)
[2023-02-14 11:56:00] Created fine-tune: ft-tEt9Oo95zgJ42KJvP4nS8nee

這里提示已經創(chuàng)建了一個訓練任務,返回了一個任務ID:ft-zYQQqF1bBvOgiFllSR8R9jvZ

后面我們可以通過這個任務ID來查詢具體的情況

按Ctrl+C可以中斷輸出任務訓練情況,但不會中斷任務

如果發(fā)生中斷,可以使用命令繼續(xù)查看記錄

openai api fine_tunes.follow -i <任務ID>

等待一會后可以看到已經完成了訓練

(venv) D:\dev2023\openai-tutorial>openai api fine_tunes.follow -i ft-wHXGw263e8ujLaDHNQGqYB6K
[2023-02-14 13:36:56] Created fine-tune: ft-wHXGw263e8ujLaDHNQGqYB6K
[2023-02-14 13:44:57] Fine-tune costs $0.10
[2023-02-14 13:44:58] Fine-tune enqueued. Queue number: 1
[2023-02-14 13:44:58] Fine-tune is in the queue. Queue number: 0
[2023-02-14 13:45:01] Fine-tune started
[2023-02-14 13:46:10] Completed epoch 1/4
[2023-02-14 13:47:07] Completed epoch 2/4
[2023-02-14 13:48:03] Completed epoch 3/4
[2023-02-14 13:48:59] Completed epoch 4/4
[2023-02-14 13:49:24] Uploaded model: ada:ft-personal:sms-classifier-2023-02-14-05-49-24
[2023-02-14 13:49:25] Uploaded result file: file-SaX4z4avlLH8KXDFM3UyNFoU
[2023-02-14 13:49:25] Fine-tune succeeded
Job complete! Status: succeeded ??
Try out your fine-tuned model:
openai api completions.create -m ada:ft-personal:sms-classifier-2023-02-14-05-49-24 -p <YOUR_PROMPT>

可以看到任務是消耗了$0.10,模型名稱為:ada:ft-personal:sms-classifier-2023-02-14-05-05-31

我們可以輸入一條短信來測試一下結果,注意格式必須與樣本的格式相同

其中 -M參數(shù)表示限制返回的token長度,因為我們只需要返回我們標簽分類,所以返回長度1就可以了

(venv) D:\dev2023\openai-tutorial>openai api completions.create -m ada:ft-personal:sms-classifier-2023-02-14-05-49-24 -p "sms: 你在哪里###" -M 1
sms: 你在哪里### 1
(venv) D:\dev2023\openai-tutorial>openai api completions.create -m ada:ft-personal:sms-classifier-2023-02-14-05-49-24 -p "sms: 【京東】邀您參與調研,有機會得800京豆,點 3.cn/1EgRyx-J 回復TD8退訂###" -M 1          
sms: 【京東】邀您參與調研,有機會得800京豆,點 3.cn/1EgRyx-J 回復TD8退訂### 4

可以看到模型已經能正常識別一些全新的短信并正確分類。

如何應用到生產環(huán)境中:

import openai
def model_predict(sms):
    response = openai.Completion.create(
        # 指定要使用的模型:這里使用的是我們訓練好的模型
        model="ada:ft-personal:sms-classifier-2023-02-14-05-49-24",
        prompt="""sms: {sms}###""".format(sms=sms),
        temperature=0.6,
        max_tokens=1,
    )
    return response
if __name__ == '__main__':
    sms = "【騰訊云】尊敬的用戶,您好,我是騰訊云技術顧問。您(賬號ID: 123*****"
    category = {"1": "短信", "2": "通知短信", "3": "公益告短信", "4": " 垃圾短信"}
    response = model_predict(sms)
    print("判斷結果:", category[response.choices[0].text])

輸出

(venv) D:\dev2023\openai-tutorial&gt;python sms_classifier/test.py  
判斷結果:通知短信

迭代訓練

但是目前準確率仍然不高,原因有二:

  • 樣本總量不夠多
  • 各分類的樣本數(shù)量不均勻,有的太少(不到10條)

為了提高準確率,我們后續(xù)還可以繼續(xù)整理樣本,對當前模型進一步進行訓練,不需要從頭開始重新訓練。

同時,繼續(xù)整理新樣本時,可以先用模型進行識別標注再人工校對,可以提高整理速度。

在創(chuàng)建迭代訓練任務時,增加參數(shù):

-m curie: ft-< org >-< date >

也就是上次訓練完成的名稱:ada:ft-personal:sms-classifier-2023-02-14-05-49-24

與上次創(chuàng)建任務的參數(shù)相同,在后面增加參數(shù):

openai api fine_tunes.create -m ada --suffix "sms_classifier" -t "sms_classifier/sms_sample_500_converted_prepared_train.jsonl" -v "sms_classifier/sms_sample_500_converted_prepared_valid.jsonl" --compute_classification_metrics --classification_n_classes 4 -m ada:ft-personal:sms-classifier-2023-02-14-05-49-24

另外我們還可以對每次的訓練結果進行分析,這里需要協(xié)助官方提供的其他工具,因篇幅有限這里就不展開聊這個部分。

更多訓練類型與商業(yè)應用

GPT-3經過訓練可以應用在很多種場景,可以實現(xiàn)ChatGPT達不到的效果,可以實現(xiàn)更精準更強大的商業(yè)應用

我們大致規(guī)劃以下可以訓練的類型:

內容分類器

可以實現(xiàn)對一段內容的分類,以下類型都可以用今天這篇教程的方式訓練

  • 短信分類、垃圾郵件分類
  • 微博博文情緒判斷(消極/積極、正面/負面)
  • 美食評價、點評內容的分類
  • 網站留言是否為廣告
  • 微信群內信息是否為廣告/是否為需要重點關注的信息

結構化信息提取

可以實現(xiàn)對一段內容進行結構化提取,取出我們想要的重點字段

  • 簡歷重點信息提取和篩選
  • IPO招股書、上市公司年報等核心內容提取
  • 從一段求職文本提取重要信息
  • 快遞地址結構化提取

上下文會話

通過訓練對話樣本,可以訓練一個對話機器人,實現(xiàn)專用的聊天客服機器人。

公司咨詢客服機器人

在線銷售聊天輔助

語音呼叫應答邏輯處理

心理/法律/醫(yī)療等專業(yè)會話咨詢

信息嵌入查詢

可以通過加載外部數(shù)據庫,實現(xiàn)更強大的信息查詢功能,在專業(yè)領域進行應用

  • 律師文本撰寫:比如輸入案由生成法律條文依據
  • 患者病歷診斷,輸入病歷和診斷結果訓練,從而輔助醫(yī)生判斷病情
  • 銀行信貸審核,輸入貸款客戶各項信息,輸出判斷

注意:所有訓練樣本都可以脫敏處理,電話、姓名等隱私信息請全部用***號代替。

訓練完之后的模型和數(shù)據是私有的,只能在你的賬號之下使用。

如果您有以上內容的或者可以實現(xiàn)相似功能的樣本,愿意與我們合作,可以聯(lián)系我們代為訓練,可以在您的賬號之下訓練,這項服務目前不收費用。

本次分享所有的代碼和數(shù)據集 會放在公眾號后,請關注公眾號并回復:短信分類器 獲取。

ChatGPT正在迅速走紅,全球都在推廣和關注這個項目,許多人也正在嘗試從中變現(xiàn)獲利。然而,他們所采用的方法往往都過于簡單和低門檻,如“寫作文”、“寫求職信”等。為了實現(xiàn)更高水平的商業(yè)價值,我們希望嘗試更復雜,更深度定制的方法。例如,我們可以通過收集數(shù)據庫并進行二次訓練,比如訓練一個適合公司實際情況的客戶服務的機器人。 因此,我們將在以后逐漸分享我們的研究步驟和操作方法,以幫助那些希望深入了解GPT模型訓練的朋友。這樣,他們就可以以更低的技術門檻實現(xiàn)更高級的商業(yè)價值。

以上就是使用GPT-3訓練垃圾短信分類器示例詳解的詳細內容,更多關于GPT-3訓練垃圾短信分類器的資料請關注腳本之家其它相關文章!

相關文章

  • jupyter 實現(xiàn)notebook中顯示完整的行和列

    jupyter 實現(xiàn)notebook中顯示完整的行和列

    這篇文章主要介紹了jupyter 實現(xiàn)notebook中顯示完整的行和列,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-04-04
  • 謹慎使用Python進行矩陣計算解析

    謹慎使用Python進行矩陣計算解析

    這篇文章主要介紹了使用Python進行矩陣計算原理解析,真正的單位矩陣,只有對角線元素為1,其他元素為0,用 np.identity(N) 生成單位矩陣,需要的朋友可以參考下
    2023-08-08
  • pycharm修改file type方式

    pycharm修改file type方式

    今天小編就為大家分享一篇pycharm修改file type方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-11-11
  • Python常用內置函數(shù)總結

    Python常用內置函數(shù)總結

    這篇文章主要介紹了Python常用內置函數(shù)總結,本文羅列了數(shù)學相關 、功能相關、類型轉換、字符串處理、序列處理函數(shù)等常用內置函數(shù),需要的朋友可以參考下
    2015-02-02
  • Python中屬性和描述符的正確使用

    Python中屬性和描述符的正確使用

    Python的描述符和屬性是接觸到Python核心編程中一個比較難以理解的內容,自己在學習的過程中也遇到過很多的疑惑,通過google和閱讀源碼,現(xiàn)將自己的理解和心得記錄下來,也為正在為了該問題苦惱的朋友提供一個思考問題的參考。
    2016-08-08
  • python中的二維列表實例詳解

    python中的二維列表實例詳解

    這篇文章主要介紹了python中的二維列表實例詳解,文中給大家介紹了python 二維列表按列取元素的方法,需要的朋友可以參考下
    2018-06-06
  • python中numpy包使用教程之數(shù)組和相關操作詳解

    python中numpy包使用教程之數(shù)組和相關操作詳解

    這篇文章主要給大家介紹了關于python中numpy包的使用教程,包含數(shù)組和相關操作等內容,文中通過示例代碼介紹的非常詳細,對大家具有一定的參考學習價值,需要的朋友們下面來跟著小編一起學習學習吧。
    2017-07-07
  • 使用GPT-3訓練垃圾短信分類器示例詳解

    使用GPT-3訓練垃圾短信分類器示例詳解

    這篇文章主要為大家介紹了使用GPT-3訓練垃圾短信分類器示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-02-02
  • 分享Pytest fixture參數(shù)傳遞的幾種方式

    分享Pytest fixture參數(shù)傳遞的幾種方式

    這篇文章主要分享的是Pytest fixture參數(shù)傳遞的幾種方式,文章基于python的相關資料展開對主題的詳細介紹,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-04-04
  • python實現(xiàn)下載整個ftp目錄的方法

    python實現(xiàn)下載整個ftp目錄的方法

    這篇文章主要介紹了python實現(xiàn)下載整個ftp目錄的方法,文中給出了詳細的示例代碼,相信對大家的理解和學習具有一定的參考借鑒價值,有需要的朋友可以一起來學習學習。
    2017-01-01

最新評論