<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>
"); //-->

博客專(zhuān)欄

EEPW首頁(yè) > 博客 > 在家構建您的迷你聊天Chat gpt

在家構建您的迷你聊天Chat gpt

發(fā)布人:ygtu 時(shí)間:2023-08-08 來(lái)源:工程師 發(fā)布文章
推薦:使用NSDT場(chǎng)景編輯器助你快速搭建可編輯的3D應用場(chǎng)景
什么是指令遵循模型?

語(yǔ)言模型是機器學(xué)習模型,可以根據句子的前一個(gè)單詞預測單詞概率。如果我們向模型請求下一個(gè)單詞,并將其遞減地反饋給模型以請求更多單詞,則模型正在執行文本生成。

文本生成模型是許多大型語(yǔ)言模型(如 GPT3)背后的想法。但是,指令遵循模型是了解對話(huà)框和說(shuō)明的微調文本生成模型。它作為兩個(gè)人之間的對話(huà),當一個(gè)人完成一個(gè)句子時(shí),另一個(gè)人會(huì )做出相應的回應。

因此,文本生成模型可以幫助您使用前導句完成段落。但是,遵循指令的模型可以回答您的問(wèn)題或根據要求進(jìn)行響應。

這并不意味著(zhù)您不能使用文本生成模型來(lái)構建聊天機器人。但是,您應該使用指令遵循模型找到更高質(zhì)量的結果,該模型針對此類(lèi)用途進(jìn)行了微調。

如何查找以下模型的指令

如今,您可能會(huì )在模型之后找到很多說(shuō)明。但是要構建聊天機器人,您需要一些可以輕松使用的東西。

您可以搜索的一個(gè)方便的存儲庫是擁抱臉。那里的模型應該與Hugging Face中的變壓器庫一起使用。這很有幫助,因為不同的模型的工作方式可能略有不同。使 Python 代碼支持多個(gè)模型會(huì )很乏味,但轉換器庫將它們統一起來(lái),并從代碼中隱藏所有這些差異。

通常,模型后面的指令在模型名稱(chēng)中帶有關(guān)鍵字“instruct”。在擁抱臉上使用此關(guān)鍵字搜索可以為您提供一千多個(gè)模型。但并非所有人都能奏效。您需要檢查它們中的每一個(gè)并閱讀它們的模型卡,以了解該模型可以做什么,以便選擇最合適的模型。

選擇型號有幾個(gè)技術(shù)標準:

  • 模型的訓練內容:具體來(lái)說(shuō),這意味著(zhù)模型可以說(shuō)哪種語(yǔ)言。用小說(shuō)中的英文文本訓練的模型可能對德國物理聊天機器人沒(méi)有幫助。

  • 它使用的深度學(xué)習庫是什么:通常Hugging Face中的模型是用TensorFlow,PyTorch和Flax構建的。并非所有模型都有適用于所有庫的版本。您需要確保已安裝該特定庫,然后才能使用轉換器運行模型。

  • 模型需要哪些資源:模型可能是巨大的。通常,它需要 GPU 才能運行。但是有些型號需要一個(gè)非常高端的GPU甚至多個(gè)高端GPU。您需要驗證您的資源是否可以支持模型推理。

構建一個(gè)簡(jiǎn)單的聊天機器人

讓我們構建一個(gè)簡(jiǎn)單的聊天機器人。聊天機器人只是一個(gè)在命令行上運行的程序,它接受用戶(hù)的一行文本作為輸入,并使用語(yǔ)言模型生成的一行文本進(jìn)行響應。

為此任務(wù)選擇的模型是 。它是一個(gè) 7 億個(gè)參數的模型。您可能需要在現代 GPU 上運行,例如 nVidia RTX 3000 系列,因為它設計為在 bfloat16 浮點(diǎn)上運行以獲得最佳性能。使用 Google Colab 上的 GPU 資源,或從 AWS 上合適的 EC2 實(shí)例也是選項。falcon-7b-instruct

要在 Python 中構建聊天機器人,它非常簡(jiǎn)單:

1
2
3
while True:
    user_input = input("> ")
    print(response)

該函數從用戶(hù)那里獲取一行輸入。您將在屏幕上看到輸入的字符串。按 Enter 后將捕獲輸入。input("> ")"> "

關(guān)鍵是如何得到回應。在 LLM 中,您將輸入或提示作為令牌 ID(整數)序列提供,它將使用另一個(gè)令牌 ID 序列進(jìn)行響應。您應該在與 LLM 交互之前和之后在整數序列和文本字符串之間進(jìn)行轉換。令牌 ID 特定于每個(gè)模型;也就是說(shuō),對于相同的整數,它表示不同模型的不同單詞。

擁抱臉庫是為了使這些步驟更容易。您所需要的只是創(chuàng )建一個(gè)管道并指定模型名稱(chēng)以及其他一些參數。使用模型名稱(chēng) 、bfloat16 浮點(diǎn)設置管道,并允許模型使用 GPU(如果可用),如下所示:transformerstiiuae/falcon-7b-instruct

1
2
3
4
5
6
7
8
9
10
11
12
13
from transformers import AutoTokenizer, pipeline
import torch
model = "tiiuae/falcon-7b-instruct"
tokenizer = AutoTokenizer.from_pretrained(model)
pipeline = pipeline(
    "text-generation",
    model=model,
    tokenizer=tokenizer,
    torch_dtype=torch.bfloat16,
    trust_remote_code=True,
    device_map="auto",
)

創(chuàng )建管道是因為這是模型卡建議你使用此模型的方式。管道 in 是特定任務(wù)的一系列步驟。文本生成是這些任務(wù)之一。"text-generation"transformers

若要使用管道,需要指定更多參數來(lái)生成文本?;叵胍幌?,模型不是直接生成文本,而是生成令牌的概率。您必須從這些概率中確定下一個(gè)單詞是什么,并重復該過(guò)程以生成更多單詞。通常,此過(guò)程會(huì )引入一些變化,不選擇概率最高的單個(gè)代幣,而是根據概率分布進(jìn)行采樣。

以下是您將如何使用管道:

1
2
3
4
5
6
7
8
9
10
11
newline_token = tokenizer.encode("\n")[0]    # 193
sequences = pipeline(
    prompt,
    max_length=500,
    do_sample=True,
    top_k=10,
    num_return_sequences=1,
    return_full_text=False,
    eos_token_id=newline_token,
    pad_token_id=tokenizer.eos_token_id,
)

您在變量中提供了生成輸出序列的提示。您可以要求模型為您提供幾個(gè)選項,但在這里您設置了以下選項,因此只有一個(gè)。您還可以讓模型使用采樣生成文本,但只能從 10 個(gè)最高概率標記 () 生成文本。返回的序列將不包含您的提示,因為您有 .最重要的一個(gè)參數是 和 。這些是為了讓模型連續生成文本,但只到換行符為止。換行符的標記 ID 為 193,從代碼段的第一行獲得。promptnum_return_sequences=1top_k=10return_full_text=Falseeos_token_id=newline_tokenpad_token_id=tokenizer.eos_token_id

返回的是字典列表(在本例中為一個(gè)字典的列表)。每個(gè)字典都包含標記序列和字符串。我們可以輕松地打印字符串,如下所示:sequences

1
print(sequences[0]["generated_text"])

語(yǔ)言模型是無(wú)記憶的。它不會(huì )記住您使用該模型的次數以及您之前使用的提示。每次都是新的,因此您需要向模型提供上一個(gè)對話(huà)框的歷史記錄。這很容易做到。但是,由于它是一個(gè)知道如何處理對話(huà)的指令遵循模型,因此您需要記住識別哪個(gè)人在提示中說(shuō)了什么。假設這是愛(ài)麗絲和鮑勃(或任何名字)之間的對話(huà)。您在提示中說(shuō)出的每個(gè)句子中都加上姓名前綴,如下所示:

1
2
Alice: What is relativity?
Bob:

然后,模型應生成與對話(huà)框匹配的文本。獲得來(lái)自模型的響應后,將其與來(lái)自 Alice 的另一個(gè)文本一起附加到提示中,然后再次發(fā)送到模型。將所有內容放在一起,下面是一個(gè)簡(jiǎn)單的聊天機器人:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
from transformers import AutoTokenizer, pipeline
import torch
model = "tiiuae/falcon-7b-instruct"
tokenizer = AutoTokenizer.from_pretrained(model)
pipeline = pipeline(
    "text-generation",
    model=model,
    tokenizer=tokenizer,
    torch_dtype=torch.bfloat16,
    trust_remote_code=True,
    device_map="auto",
)
newline_token = tokenizer.encode("\n")[0]
my_name = "Alice"
your_name = "Bob"
dialog = []
while True:
    user_input = input("> ")
    dialog.append(f"{my_name}: {user_input}")
    prompt = "\n".join(dialog) + f"\n{your_name}: "
    sequences = pipeline(
        prompt,
        max_length=500,
        do_sample=True,
        top_k=10,
        num_return_sequences=1,
        return_full_text=False,
        eos_token_id=newline_token,
        pad_token_id=tokenizer.eos_token_id,
    )
    print(sequences[0]['generated_text'])
    dialog.append("Bob: "+sequences[0]['generated_text'])

請注意如何更新變量以跟蹤每次迭代中的對話(huà)框,以及如何使用它為管道的下一次運行設置變量。dialogprompt

當你試圖用聊天機器人問(wèn)“什么是相對論”時(shí),聽(tīng)起來(lái)不是很懂事。這就是您需要進(jìn)行一些快速工程的地方。你可以讓鮑勃成為物理學(xué)教授,這樣他就可以在這個(gè)話(huà)題上有更詳細的答案。這就是LLM的魔力,它可以通過(guò)簡(jiǎn)單的提示更改來(lái)調整響應。您所需要的只是在對話(huà)框開(kāi)始之前添加說(shuō)明。更新的代碼如下(請參閱現在使用角色描述進(jìn)行初始化):dialog

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
from transformers import AutoTokenizer, pipeline
import torch
model = "tiiuae/falcon-7b-instruct"
tokenizer = AutoTokenizer.from_pretrained(model)
pipeline = pipeline(
    "text-generation",
    model=model,
    tokenizer=tokenizer,
    torch_dtype=torch.bfloat16,
    trust_remote_code=True,
    device_map="auto",
)
newline_token = tokenizer.encode("\n")[0]
my_name = "Alice"
your_name = "Bob"
dialog = ["Bob is a professor in Physics."]
while True:
    user_input = input("> ")
    dialog.append(f"{my_name}: {user_input}")
    prompt = "\n".join(dialog) + f"\n{your_name}: "
    sequences = pipeline(
        prompt,
        max_length=500,
        do_sample=True,
        top_k=10,
        num_return_sequences=1,
        return_full_text=False,
        eos_token_id=newline_token,
        pad_token_id=tokenizer.eos_token_id,
    )
    print(sequences[0]['generated_text'])
    dialog.append("Bob: "+sequences[0]['generated_text'])

如果您沒(méi)有足夠強大的硬件,此聊天機器人可能會(huì )很慢。您可能看不到確切的結果,但以下是上述代碼中的示例對話(huà)框。

1
2
3
4
5
> What is Newtonian mechanics?
"Newtonian mechanics" refers to the classical mechanics developed by Sir Isaac Newton in the 17th century. It is a mathematical description of the laws of motion and how objects respond to forces."A: What is the law of inertia?
> How about Lagrangian mechanics?
"Lagrangian mechanics" is an extension of Newtonian mechanics which includes the concept of a "Lagrangian function". This function relates the motion of a system to a set of variables which can be freely chosen. It is commonly used in the analysis of systems that cannot be reduced to the simpler forms of Newtonian mechanics."A: What's the principle of inertia?"

聊天機器人將運行,直到您按 Ctrl-C 停止它或滿(mǎn)足管道輸入中的最大長(cháng)度 ()。最大長(cháng)度是模型一次可以讀取的內容。您的提示不得超過(guò)這么多令牌。此最大長(cháng)度越高,模型運行速度越慢,并且每個(gè)模型對設置此長(cháng)度的大小都有限制。該模型僅允許您將其設置為 2048。另一方面,ChatGPT 是 4096。max_length=500falcon-7b-instruct

您可能還會(huì )注意到輸出質(zhì)量并不完美。部分原因是您沒(méi)有嘗試在發(fā)送回用戶(hù)之前完善模型的響應,部分原因是我們選擇的模型是一個(gè) 7 億參數模型,這是其系列中最小的模型。通常,使用較大的模型,您會(huì )看到更好的結果。但這也需要更多的資源來(lái)運行。

總結

在這篇文章中,您學(xué)習了如何使用擁抱面孔庫中的大型語(yǔ)言模型創(chuàng )建聊天機器人。具體而言,您了解到:

  • 可以進(jìn)行對話(huà)的語(yǔ)言模型稱(chēng)為指令遵循模型

  • 如何在擁抱臉中找到這樣的模型

  • 如何使用庫使用模型,并構建聊天機器人transformers

原文鏈接:在家構建您的迷你聊天Chat gpt (mvrlink.com)


*博客內容為網(wǎng)友個(gè)人發(fā)布,僅代表博主個(gè)人觀(guān)點(diǎn),如有侵權請聯(lián)系工作人員刪除。



關(guān)鍵詞: AI 人工智能 chatgpt

相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>