国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【大語言模型LLM】-基礎(chǔ)語言模型和指令微調(diào)的語言模型

這篇具有很好參考價(jià)值的文章主要介紹了【大語言模型LLM】-基礎(chǔ)語言模型和指令微調(diào)的語言模型。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

【大語言模型LLM】-基礎(chǔ)語言模型和指令微調(diào)的語言模型,大語言模型,語言模型,人工智能,自然語言處理

??博客主頁西瓜WiFi

??系列專欄《大語言模型》

很多非常有趣的模型,值得收藏,滿足大家的收集癖! 如果覺得有用,請三連?????,謝謝!

長期不定時(shí)更新,歡迎watch和fork!??????

??感謝大家點(diǎn)贊?? 收藏? 評論?


??大語言模型LLM基礎(chǔ)-系列文章

【大語言模型LLM】- AI工具收錄集合,一篇就夠了!
【大語言模型LLM】-大語言模型如何編寫Prompt?
【大語言模型LLM】-如何使用大語言模型提高工作效率?
【大語言模型LLM】-使用大語言模型搭建點(diǎn)餐機(jī)器人

?持續(xù)更新中…


基于ChatGPT Training Pipeline,大語言模型訓(xùn)練一般包含三個(gè)階段:

  • 第一階段:PT(Continue PreTraining)增量預(yù)訓(xùn)練,在海量領(lǐng)域文檔數(shù)據(jù)上二次預(yù)訓(xùn)練GPT模型,以適應(yīng)領(lǐng)域數(shù)據(jù)分布(可選)
  • 第二階段:SFT(Supervised Fine-tuning)有監(jiān)督微調(diào),構(gòu)造指令微調(diào)數(shù)據(jù)集,在預(yù)訓(xùn)練模型基礎(chǔ)上做指令精調(diào),以對齊指令意圖,并注入領(lǐng)域知識
  • 第三階段
    • **RLHF(Reinforcement Learning from Human Feedback)**基于人類反饋對語言模型進(jìn)行強(qiáng)化學(xué)習(xí),分為兩步:
      • RM(Reward Model)獎(jiǎng)勵(lì)模型建模,構(gòu)造人類偏好排序數(shù)據(jù)集,訓(xùn)練獎(jiǎng)勵(lì)模型,用來建模人類偏好,主要是"HHH"原則,具體是"helpful, honest, harmless"
      • RL(Reinforcement Learning)強(qiáng)化學(xué)習(xí),用獎(jiǎng)勵(lì)模型來訓(xùn)練SFT模型,生成模型使用獎(jiǎng)勵(lì)或懲罰來更新其策略,以便生成更高質(zhì)量、更符合人類偏好的文本
    • DPO(Direct Preference Optimization)直接偏好優(yōu)化方法,DPO通過直接優(yōu)化語言模型來實(shí)現(xiàn)對其行為的精確控制,而無需使用復(fù)雜的強(qiáng)化學(xué)習(xí),也可以有效學(xué)習(xí)到人類偏好,DPO相較于RLHF更容易實(shí)現(xiàn)且易于訓(xùn)練,效果更好。
    • ORPO不需要參考模型的優(yōu)化方法,通過ORPO,LLM可以同時(shí)學(xué)習(xí)指令遵循和滿足人類偏好。

一、基礎(chǔ)語言模型到指令微調(diào)的語言模型

大語言模型(LLM)是通過預(yù)測下一個(gè)詞的監(jiān)督學(xué)習(xí)方式進(jìn)行訓(xùn)練的。具體來說,首先準(zhǔn)備一個(gè)包含數(shù)百億甚至更多詞的大規(guī)模文本數(shù)據(jù)集。然后,可以從這些文本中提取句子或句子片段作為模型輸入。模型會根據(jù)當(dāng)前輸入 Context 預(yù)測下一個(gè)詞的概率分布。通過不斷比較模型預(yù)測和實(shí)際的下一個(gè)詞,并更新模型參數(shù)最小化兩者差異,語言模型逐步掌握了語言的規(guī)律,學(xué)會了預(yù)測下一個(gè)詞。

在訓(xùn)練過程中,研究人員會準(zhǔn)備大量句子或句子片段作為訓(xùn)練樣本,要求模型一次次預(yù)測下一個(gè)詞,通過反復(fù)訓(xùn)練促使模型參數(shù)收斂,使其預(yù)測能力不斷提高。經(jīng)過在海量文本數(shù)據(jù)集上的訓(xùn)練,語言模型可以達(dá)到十分準(zhǔn)確地預(yù)測下一個(gè)詞的效果。這種以預(yù)測下一個(gè)詞為訓(xùn)練目標(biāo)的方法使得語言模型獲得強(qiáng)大的語言生成能力。

基礎(chǔ)語言模型(Base LLM)通過反復(fù)預(yù)測下一個(gè)詞來訓(xùn)練的方式進(jìn)行訓(xùn)練,沒有明確的目標(biāo)導(dǎo)向。因此,如果給它一個(gè)開放式的 prompt ,它可能會通過自由聯(lián)想生成戲劇化的內(nèi)容。而對于具體的問題,基礎(chǔ)語言模型也可能給出與問題無關(guān)的回答。例如,給它一個(gè) Prompt ,比如”中國的首都是哪里?“,很可能它數(shù)據(jù)中有一段互聯(lián)網(wǎng)上關(guān)于中國的測驗(yàn)問題列表。這時(shí),它可能會用“中國最大的城市是什么?中國的人口是多少?”等等來回答這個(gè)問題。但實(shí)際上,您只是想知道中國的首都是什么,而不是列舉所有這些問題。

相比之下,指令微調(diào)的語言模型(Instruction Tuned LLM)則進(jìn)行了專門的訓(xùn)練,以便更好地理解問題并給出符合指令的回答。例如,對“中國的首都是哪里?”這個(gè)問題,經(jīng)過微調(diào)的語言模型很可能直接回答“中國的首都是北京”,而不是生硬地列出一系列相關(guān)問題。指令微調(diào)使語言模型更加適合任務(wù)導(dǎo)向的對話應(yīng)用。它可以生成遵循指令的語義準(zhǔn)確的回復(fù),而非自由聯(lián)想。因此,許多實(shí)際應(yīng)用已經(jīng)采用指令調(diào)優(yōu)語言模型。熟練掌握指令微調(diào)的工作機(jī)制,是開發(fā)者實(shí)現(xiàn)語言模型應(yīng)用的重要一步。

from openai import OpenAI

# 免費(fèi)KEY
client = OpenAI(
    base_url='https://api.chatanywhere.com.cn/v1',
    api_key='your_openai_api_key',
    )

# 下文第一個(gè)函數(shù)即tool工具包中的同名函數(shù),此處展示出來以便于讀者對比
def get_completion(prompt, model="gpt-3.5-turbo"):
    messages = [{"role": "user", "content": prompt}]
    response = client.chat.completions.create(
        model=model,
        messages=messages,
        temperature=0, # 控制模型輸出的隨機(jī)程度
    )
    return response.choices[0].message.content

def get_completion_from_messages(messages, model="gpt-3.5-turbo", temperature=0):
    response = client.chat.completions.create(
        model=model,
        messages=messages,
        temperature=temperature, # 控制模型輸出的隨機(jī)程度
    )
    return response.choices[0].message.content

response = get_completion("中國的首都是哪里?")
print(response)
中國的首都是北京。

那么,如何將基礎(chǔ)語言模型轉(zhuǎn)變?yōu)橹噶钗⒄{(diào)語言模型呢?

這也就是訓(xùn)練一個(gè)指令微調(diào)語言模型(例如ChatGPT)的過程。首先,在大規(guī)模文本數(shù)據(jù)集上進(jìn)行無監(jiān)督預(yù)訓(xùn)練,獲得基礎(chǔ)語言模型。這一步需要使用數(shù)千億詞甚至更多的數(shù)據(jù),在大型超級計(jì)算系統(tǒng)上可能需要數(shù)月時(shí)間。之后,使用包含指令及對應(yīng)回復(fù)示例的小數(shù)據(jù)集對基礎(chǔ)模型進(jìn)行有監(jiān)督 fine-tune,這讓模型逐步學(xué)會遵循指令生成輸出,可以通過雇傭承包商構(gòu)造適合的訓(xùn)練示例。接下來,為了提高語言模型輸出的質(zhì)量,常見的方法是讓人類對許多不同輸出進(jìn)行評級,例如是否有用、是否真實(shí)、是否無害等。然后,您可以進(jìn)一步調(diào)整語言模型,增加生成高評級輸出的概率。這通常使用基于人類反饋的強(qiáng)化學(xué)習(xí)(RLHF)技術(shù)來實(shí)現(xiàn)。相較于訓(xùn)練基礎(chǔ)語言模型可能需要數(shù)月的時(shí)間,從基礎(chǔ)語言模型到指令微調(diào)語言模型的轉(zhuǎn)變過程可能只需要數(shù)天時(shí)間,使用較小規(guī)模的數(shù)據(jù)集和計(jì)算資源。

二、什么是Tokens?

到目前為止對 LLM 的描述中,我們將其描述為一次預(yù)測一個(gè)單詞,但實(shí)際上還有一個(gè)更重要的技術(shù)細(xì)節(jié)。即 LLM 實(shí)際上并不是重復(fù)預(yù)測下一個(gè)單詞,而是重復(fù)預(yù)測下一個(gè) token 。對于一個(gè)句子,語言模型會先使用分詞器將其拆分為一個(gè)個(gè) token ,而不是原始的單詞。對于生僻詞,可能會拆分為多個(gè) token 。這樣可以大幅降低字典規(guī)模,提高模型訓(xùn)練和推斷的效率。例如,對于 “Learning new things is fun!” 這句話,每個(gè)單詞都被轉(zhuǎn)換為一個(gè) token ,而對于較少使用的單詞,如 “Prompting as powerful developer tool”,單詞 “prompting” 會被拆分為三個(gè) token,即"prom"、“pt"和"ing”。

# 為了更好展示效果,這里就沒有翻譯成中文的 Prompt
# 注意這里的字母翻轉(zhuǎn)出現(xiàn)了錯(cuò)誤,吳恩達(dá)老師正是通過這個(gè)例子來解釋 token 的計(jì)算方式
response = get_completion("Take the letters in lollipop \
and reverse them")
print(response)
The reversed letters of "lollipop" are "pillipol".

但是,“l(fā)ollipop” 反過來應(yīng)該是 “popillol”。

分詞方式也會對語言模型的理解能力產(chǎn)生影響。當(dāng)您要求 ChatGPT 顛倒 “l(fā)ollipop” 的字母時(shí),由于分詞器(tokenizer) 將 “l(fā)ollipop” 分解為三個(gè) token,即 “l(fā)”、“oll”、“ipop”,因此 ChatGPT 難以正確輸出字母的順序。這時(shí)可以通過在字母間添加分隔,讓每個(gè)字母成為一個(gè)token,以幫助模型準(zhǔn)確理解詞中的字母順序。

response = get_completion("""Take the letters in \
l-o-l-l-i-p-o-p and reverse them""")

print(response)
p-o-p-i-l-l-o-l

因此,語言模型以 token 而非原詞為單位進(jìn)行建模,這一關(guān)鍵細(xì)節(jié)對分詞器的選擇及處理會產(chǎn)生重大影響。開發(fā)者需要注意分詞方式對語言理解的影響,以發(fā)揮語言模型最大潛力。

??? 對于英文輸入,一個(gè) token 一般對應(yīng) 4 個(gè)字符或者四分之三個(gè)單詞;對于中文輸入,一個(gè) token 一般對應(yīng)一個(gè)或半個(gè)詞。不同模型有不同的 token 限制,需要注意的是,這里的 token 限制是輸入的 Prompt 和輸出的 completion 的 token 數(shù)之和,因此輸入的 Prompt 越長,能輸出的 completion 的上限就越低。 ChatGPT3.5-turbo 的 token 上限是 4096。

三、語言模型的提問格式

語言模型提供了專門的“提問格式”,可以更好地發(fā)揮其理解和回答問題的能力。

【大語言模型LLM】-基礎(chǔ)語言模型和指令微調(diào)的語言模型,大語言模型,語言模型,人工智能,自然語言處理

這種提問格式區(qū)分了“系統(tǒng)消息”和“用戶消息”兩個(gè)部分。系統(tǒng)消息是我們向語言模型傳達(dá)訊息的語句,用戶消息則是模擬用戶的問題。例如:

系統(tǒng)消息:你是一個(gè)能夠回答各類問題的助手。

用戶消息:太陽系有哪些行星?

通過這種提問格式,我們可以明確地角色扮演,讓語言模型理解自己就是助手這個(gè)角色,需要回答問題。這可以減少無效輸出,幫助其生成針對性強(qiáng)的回復(fù)。本章將通過OpenAI提供的輔助函數(shù),來演示如何正確使用這種提問格式與語言模型交互。掌握這一技巧可以大幅提升我們與語言模型對話的效果,構(gòu)建更好的問答系統(tǒng)。

import openai
def get_completion_from_messages(messages, 
                                 model="gpt-3.5-turbo", 
                                 temperature=0, 
                                 max_tokens=500):
    '''
    封裝一個(gè)支持更多參數(shù)的自定義訪問 OpenAI GPT3.5 的函數(shù)

    參數(shù): 
    messages: 這是一個(gè)消息列表,每個(gè)消息都是一個(gè)字典,包含 role(角色)和 content(內(nèi)容)。角色可以是'system'、'user' 或 'assistant’,內(nèi)容是角色的消息。
    model: 調(diào)用的模型,默認(rèn)為 gpt-3.5-turbo(ChatGPT),有內(nèi)測資格的用戶可以選擇 gpt-4
    temperature: 這決定模型輸出的隨機(jī)程度,默認(rèn)為0,表示輸出將非常確定。增加溫度會使輸出更隨機(jī)。
    max_tokens: 這決定模型輸出的最大的 token 數(shù)。
    '''
    response = openai.ChatCompletion.create(
        model=model,
        messages=messages,
        temperature=temperature, # 這決定模型輸出的隨機(jī)程度
        max_tokens=max_tokens, # 這決定模型輸出的最大的 token 數(shù)
    )
    return response.choices[0].message["content"]

在上面,我們封裝一個(gè)支持更多參數(shù)的自定義訪問 OpenAI GPT3.5 的函數(shù) get_completion_from_messages 。

messages =  [  
{'role':'system', 
 'content':'你是一個(gè)助理, 并以 Seuss 蘇斯博士的風(fēng)格作出回答。'},    
{'role':'user', 
 'content':'就快樂的小鯨魚為主題給我寫一首短詩'},  
] 
response = get_completion_from_messages(messages, temperature=1)
print(response)
在大海的廣漠深處,
有一只小鯨魚歡樂自由;
它的身上披著光彩斑斕的袍,
跳躍飛舞在波濤的傍。

它不知煩惱,只知?dú)g快起舞,
陽光下閃亮,活力無邊疆;
它的微笑如同璀璨的星辰,
為大海增添一片美麗的光芒。

大海是它的天地,自由是它的伴,
快樂是它永恒的干草堆;
在浩瀚無垠的水中自由暢游,
小鯨魚的歡樂讓人心中溫暖。

所以啊,讓我們感受那歡樂的鯨魚,
盡情舞動(dòng),讓快樂自由流;
無論何時(shí)何地,都保持微笑,
像鯨魚一樣,活出自己的光芒。

在上面,我們使用了提問范式與語言模型進(jìn)行對話:

系統(tǒng)消息:你是一個(gè)助理, 并以 Seuss 蘇斯博士的風(fēng)格作出回答。

用戶消息:就快樂的小鯨魚為主題給我寫一首短詩

下面讓我們再看一個(gè)例子:

# 長度控制
messages =  [  
{'role':'system',
 'content':'你的所有答復(fù)只能是一句話'},    
{'role':'user',
 'content':'寫一個(gè)關(guān)于快樂的小鯨魚的故事'},  
] 
response = get_completion_from_messages(messages, temperature =1)
print(response)
從小鯨魚的快樂笑聲中,我們學(xué)到了無論遇到什么困難,快樂始終是最好的解藥。

將以上兩個(gè)例子結(jié)合起來:

在海洋的深處住著一只小鯨魚,它總是展開笑容在水中翱翔,快樂無邊的時(shí)候就會跳起華麗的舞蹈。

我們在下面定義了一個(gè) get_completion_and_token_count 函數(shù),它實(shí)現(xiàn)了調(diào)用 OpenAI 的 模型生成聊天回復(fù), 并返回生成的回復(fù)內(nèi)容以及使用的 token 數(shù)量。

def get_completion_and_token_count(messages, 
                                   model="gpt-3.5-turbo", 
                                   temperature=0, 
                                   max_tokens=500):
    """
    使用 OpenAI 的 GPT-3 模型生成聊天回復(fù),并返回生成的回復(fù)內(nèi)容以及使用的 token 數(shù)量。

    參數(shù):
    messages: 聊天消息列表。
    model: 使用的模型名稱。默認(rèn)為"gpt-3.5-turbo"。
    temperature: 控制生成回復(fù)的隨機(jī)性。值越大,生成的回復(fù)越隨機(jī)。默認(rèn)為 0。
    max_tokens: 生成回復(fù)的最大 token 數(shù)量。默認(rèn)為 500。

    返回:
    content: 生成的回復(fù)內(nèi)容。
    token_dict: 包含'prompt_tokens'、'completion_tokens'和'total_tokens'的字典,分別表示提示的 token 數(shù)量、生成的回復(fù)的 token 數(shù)量和總的 token 數(shù)量。
    """
    response = openai.ChatCompletion.create(
        model=model,
        messages=messages,
        temperature=temperature, 
        max_tokens=max_tokens,
    )

    content = response.choices[0].message["content"]

    token_dict = {
'prompt_tokens':response['usage']['prompt_tokens'],
'completion_tokens':response['usage']['completion_tokens'],
'total_tokens':response['usage']['total_tokens'],
    }

    return content, token_dict

下面,讓我們調(diào)用剛創(chuàng)建的 get_completion_and_token_count 函數(shù),使用提問范式去進(jìn)行對話:

messages =  [  
{'role':'system', 
 'content':'你是一個(gè)助理, 并以 Seuss 蘇斯博士的風(fēng)格作出回答。'},    
{'role':'user', 
 'content':'就快樂的小鯨魚為主題給我寫一首短詩'},  
] 
response, token_dict = get_completion_and_token_count(messages)
print(response)
在大海的深處,有一只小鯨魚,
它快樂地游來游去,像一只小小的魚。
它的皮膚光滑又湛藍(lán),像天空中的云朵,
它的眼睛明亮又溫柔,像夜空中的星星。

它和海洋為伴,一起跳躍又嬉戲,
它和魚兒們一起,快樂地游來游去。
它喜歡唱歌又跳舞,給大家?guī)須g樂,
它的聲音甜美又動(dòng)聽,像音樂中的節(jié)奏。

小鯨魚是快樂的使者,給世界帶來笑聲,
它的快樂是無窮的,永遠(yuǎn)不會停止。
讓我們跟隨小鯨魚,一起快樂地游來游去,
在大海的寬闊中,找到屬于我們的快樂之地。

打印 token 字典看一下使用的 token 數(shù)量,我們可以看到:提示使用了67個(gè) token ,生成的回復(fù)使用了293個(gè) token ,總的使用 token 數(shù)量是360。

print(token_dict)
{'prompt_tokens': 67, 'completion_tokens': 293, 'total_tokens': 360}

在AI應(yīng)用開發(fā)領(lǐng)域,Prompt技術(shù)的出現(xiàn)無疑是一場革命性的變革。然而,這種變革的重要性并未得到廣泛的認(rèn)知和重視。傳統(tǒng)的監(jiān)督機(jī)器學(xué)習(xí)工作流程中,構(gòu)建一個(gè)能夠分類餐廳評論為正面或負(fù)面的分類器,需要耗費(fèi)大量的時(shí)間和資源。

首先,我們需要收集并標(biāo)注大量帶有標(biāo)簽的數(shù)據(jù)。這可能需要數(shù)周甚至數(shù)月的時(shí)間才能完成。接著,我們需要選擇合適的開源模型,并進(jìn)行模型的調(diào)整和評估。這個(gè)過程可能需要幾天、幾周,甚至幾個(gè)月的時(shí)間。最后,我們還需要將模型部署到云端,并讓它運(yùn)行起來,才能最終調(diào)用您的模型。整個(gè)過程通常需要一個(gè)團(tuán)隊(duì)數(shù)月時(shí)間才能完成。

相比之下,基于 Prompt 的機(jī)器學(xué)習(xí)方法大大簡化了這個(gè)過程。當(dāng)我們有一個(gè)文本應(yīng)用時(shí),只需要提供一個(gè)簡單的 Prompt ,這個(gè)過程可能只需要幾分鐘,如果需要多次迭代來得到有效的 Prompt 的話,最多幾個(gè)小時(shí)即可完成。在幾天內(nèi)(盡管實(shí)際情況通常是幾個(gè)小時(shí)),我們就可以通過API調(diào)用來運(yùn)行模型,并開始使用。一旦我們達(dá)到了這個(gè)步驟,只需幾分鐘或幾個(gè)小時(shí),就可以開始調(diào)用模型進(jìn)行推理。因此,以前可能需要花費(fèi)六個(gè)月甚至一年時(shí)間才能構(gòu)建的應(yīng)用,現(xiàn)在只需要幾分鐘或幾個(gè)小時(shí),最多是幾天的時(shí)間,就可以使用Prompt構(gòu)建起來。這種方法正在極大地改變AI應(yīng)用的快速構(gòu)建方式。

需要注意的是,這種方法適用于許多非結(jié)構(gòu)化數(shù)據(jù)應(yīng)用,特別是文本應(yīng)用,以及越來越多的視覺應(yīng)用,盡管目前的視覺技術(shù)仍在發(fā)展中。但它并不適用于結(jié)構(gòu)化數(shù)據(jù)應(yīng)用,也就是那些處理 Excel 電子表格中大量數(shù)值的機(jī)器學(xué)習(xí)應(yīng)用。然而,對于適用于這種方法的應(yīng)用,AI組件可以被快速構(gòu)建,并且正在改變整個(gè)系統(tǒng)的構(gòu)建工作流。構(gòu)建整個(gè)系統(tǒng)可能仍然需要幾天、幾周或更長時(shí)間,但至少這部分可以更快地完成。

總的來說, Prompt 技術(shù)的出現(xiàn)正在改變AI應(yīng)用開發(fā)的范式,使得開發(fā)者能夠更快速、更高效地構(gòu)建和部署應(yīng)用。然而,我們也需要認(rèn)識到這種技術(shù)的局限性,以便更好地利用它來推動(dòng)AI應(yīng)用的發(fā)展。文章來源地址http://www.zghlxwxcb.cn/news/detail-861366.html

到了這里,關(guān)于【大語言模型LLM】-基礎(chǔ)語言模型和指令微調(diào)的語言模型的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包