日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

想聊天?自己搭建个聊天机器人吧!

發(fā)布時(shí)間:2024/10/12 编程问答 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 想聊天?自己搭建个聊天机器人吧! 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

1、聊天機(jī)器人的“前世今生”

在 1964 年至 1966 年間,麻省理工學(xué)院人工智能實(shí)驗(yàn)室的德裔美國(guó)計(jì)算機(jī)科學(xué)家約瑟夫·維森鮑姆(Joseph Weizenbaum)開發(fā)了歷史上第一個(gè)聊天機(jī)器人 —— Eliza。

Eliza 的名字源于愛爾蘭劇作家蕭伯納的戲劇作品《賣花女》中的角色,劇中出身貧寒的賣花女 Eliza 通過(guò)學(xué)習(xí)與上流社會(huì)溝通的方式,變成大使館舞會(huì)上人人艷羨的“匈牙利王家公主”。作為世界上第一個(gè)聊天機(jī)器人,Eliza 被其作者賦予了充滿戲劇性的內(nèi)涵。

盡管在當(dāng)時(shí)已經(jīng)存在一些基本的數(shù)字語(yǔ)言生成器(可以輸出一些連貫文本的程序),但 Eliza 是第一個(gè)明確設(shè)計(jì)用于與人互動(dòng)的程序。用戶可以使用打字機(jī)輸入人類的自然語(yǔ)言,獲得來(lái)自機(jī)器的響應(yīng)。正如維森鮑姆解釋的那樣,Eliza 使“人與計(jì)算機(jī)之間的對(duì)話成為可能 ”。

隨著深度學(xué)習(xí)技術(shù)的不斷發(fā)展,聊天機(jī)器人變得越來(lái)越智能。我們可以通過(guò)機(jī)器人來(lái)完成一些機(jī)械性的問(wèn)答工作,也可以在閑暇時(shí)和智能機(jī)器人進(jìn)行對(duì)話,他們的出現(xiàn)讓生活變得更豐富多彩。如今通過(guò)飛槳與Wechaty的結(jié)合就可實(shí)現(xiàn)一個(gè)簡(jiǎn)單的聊天機(jī)器人。

如下圖就是基于 PaddleHub + Wechaty 的微信閑聊機(jī)器人demo。通過(guò)Wechaty獲取微信接收的消息,然后使用PaddleHub的plato-mini模型根據(jù)對(duì)話的上下文生成新的對(duì)話文本,最終以微信消息的形式發(fā)送,實(shí)現(xiàn)閑聊的交互。

下圖是基于 PaddleNLP + Wechaty 的微信情感識(shí)別機(jī)器人demo。通過(guò)Wechaty獲取微信接收的消息,然后使用PaddleNLP的TextCNN模型對(duì)輸入的文本進(jìn)行情感判斷,最終以微信消息的形式返回,實(shí)現(xiàn)對(duì)文本情感的識(shí)別。

感興趣的同學(xué)可參照此demo在自己微信上實(shí)現(xiàn)一個(gè)情感識(shí)別機(jī)器人哦~

Demo鏈接:

https://github.com/mawenjie8731/paddlenlp-wechaty-demo

今天我們要帶大家使用飛槳PaddleNLP實(shí)現(xiàn)詩(shī)歌的對(duì)答和一個(gè)簡(jiǎn)單的閑聊機(jī)器人,一起來(lái)吧!

2、快速實(shí)踐

PaddleNLP針對(duì)生成式任務(wù)提供了generate()函數(shù),內(nèi)嵌于PaddleNLP所有的生成式模型。支持Greedy Search、Beam Search和Sampling解碼策略,用戶只需指定解碼策略以及相應(yīng)的參數(shù)即可完成預(yù)測(cè)解碼,得到生成的sequence的token ids以及概率得分。

GPT模型使用生成API的小示例

1.加載 paddlenlp.transformers.GPTChineseTokenizer用于數(shù)據(jù)處理

文本數(shù)據(jù)在輸入預(yù)訓(xùn)練模型之前,需要經(jīng)過(guò)數(shù)據(jù)處理轉(zhuǎn)化為Feature。這一過(guò)程通常包括分詞,token to id,add special token等步驟。

PaddleNLP對(duì)于各種預(yù)訓(xùn)練模型已經(jīng)內(nèi)置了相應(yīng)的tokenizer,指定想要使用的模型名字即可加載對(duì)應(yīng)的tokenizer。

調(diào)用GPTChineseTokenizer的__call__方法即可將我們說(shuō)的話轉(zhuǎn)為模型可接受的輸入。

from paddlenlp.transformers import GPTChineseTokenizer # 設(shè)置想要使用模型的名稱 model_name = 'gpt-cpm-small-cn-distill' tokenizer = GPTChineseTokenizer.from_pretrained(model_name) import paddle user_input = "花間一壺酒,獨(dú)酌無(wú)相親。舉杯邀明月," # 將文本轉(zhuǎn)為ids input_ids = tokenizer(user_input)['input_ids'] print(input_ids) # 將轉(zhuǎn)換好的id轉(zhuǎn)為tensor input_ids = paddle.to_tensor(input_ids, dtype='int64').unsqueeze(0)

2.使用PaddleNLP一鍵加載預(yù)訓(xùn)練模型

PaddleNLP提供了GPT,UnifiedTransformer等中文預(yù)訓(xùn)練模型,可以通過(guò)預(yù)訓(xùn)練模型名稱完成一鍵加載。

GPT以Transformer Decoder的編碼器為網(wǎng)絡(luò)基本組件,采用單向注意力機(jī)制,適用于長(zhǎng)文本生成任務(wù)。

PaddleNLP目前提供多種中英文GPT預(yù)訓(xùn)練模型,我們這次用的是一個(gè)小的中文GPT預(yù)訓(xùn)練模型。

from paddlenlp.transformers import GPTLMHeadModel # 一鍵加載中文GPT模型 model = GPTLMHeadModel.from_pretrained(model_name) # 調(diào)用生成API升成文本 ids, scores = model.generate(input_ids=input_ids,max_length=16,min_length=1,decode_strategy='greedy_search') generated_ids = ids[0].numpy().tolist() #使用tokenizer將生成的id轉(zhuǎn)為文本 generated_text = tokenizer.convert_ids_to_string(generated_ids) print(generated_text)對(duì)影成三人。

可以看到生成的效果還不錯(cuò),生成式API的用法也是非常的簡(jiǎn)便。

UnifiedTransformer 模型和生成式API完成閑聊對(duì)話

1.加載paddlenlp.transformers.UnifiedTransformerTokenizer用于數(shù)據(jù)處理

UnifiedTransformerTokenizer的調(diào)用方式與GPT相同,但數(shù)據(jù)處理的API略有不同。

調(diào)用UnifiedTransformerTokenizer的dialogue_encode方法即可將我們說(shuō)的話轉(zhuǎn)為模型可接受的輸入。

from paddlenlp.transformers import UnifiedTransformerTokenizer # 設(shè)置想要使用模型的名稱 model_name = 'plato-mini' tokenizer = UnifiedTransformerTokenizer.from_pretrained(model_name) user_input = ['你好啊,你今年多大了'] # 調(diào)用dialogue_encode方法生成輸入 encoded_input = tokenizer.dialogue_encode(user_input,add_start_token_as_response=True,return_tensors=True,is_split_into_words=False)

2.使用PaddleNLP一鍵加載預(yù)訓(xùn)練模型

與GPT相同,我們可以一鍵調(diào)用UnifiedTransformer預(yù)訓(xùn)練模型。

UnifiedTransformer以Transformer的編碼器為網(wǎng)絡(luò)基本組件,采用靈活的注意力機(jī)制,并在模型輸入中加入了標(biāo)識(shí)不同對(duì)話技能的special token,使得模型能同時(shí)支持閑聊對(duì)話、推薦對(duì)話和知識(shí)對(duì)話。

PaddleNLP目前為UnifiedTransformer提供了三個(gè)中文預(yù)訓(xùn)練模型:

  • unified_transformer-12L-cn 該預(yù)訓(xùn)練模型是在大規(guī)模中文會(huì)話數(shù)據(jù)集上訓(xùn)練得到的。
  • unified_transformer-12L-cn-luge 該預(yù)訓(xùn)練模型是unified_transformer-12L-cn在千言對(duì)話數(shù)據(jù)集上進(jìn)行微調(diào)得到的。
  • plato-mini 該模型使用了十億級(jí)別的中文閑聊對(duì)話數(shù)據(jù)進(jìn)行預(yù)訓(xùn)練。
from paddlenlp.transformers import UnifiedTransformerLMHeadModel model = UnifiedTransformerLMHeadModel.from_pretrained(model_name)

下一步我們將處理好的輸入傳入generate函數(shù),并配置解碼策略。

這里我們使用的是TopK加sampling的解碼策略。即從概率最大的k個(gè)結(jié)果中按概率進(jìn)行采樣。

ids, scores = model.generate(input_ids=encoded_input['input_ids'],token_type_ids=encoded_input['token_type_ids'],position_ids=encoded_input['position_ids'],attention_mask=encoded_input['attention_mask'],max_length=64,min_length=1,decode_strategy='sampling',top_k=5,num_return_sequences=20)from utils import select_response

簡(jiǎn)單根據(jù)概率選取最佳回復(fù)

result = select_response(ids, scores, tokenizer, keep_space=False, num_return_sequences=20) print(result) ['你好啊,我今年23歲了']

PaddleNLP的example中提供了搭建完整對(duì)話系統(tǒng)的代碼(人機(jī)交互),感興趣可以去終端里嘗試一下哦~

人機(jī)交互地址:

https://github.com/PaddlePaddle/PaddleNLP/tree/develop/examples/dialogue/unified_transformer#%E4%BA%BA%E6%9C%BA%E4%BA%A4%E4%BA%92

3、動(dòng)手試一試

是不是覺得很有趣呀。小編強(qiáng)烈建議初學(xué)者參考上面的代碼親手敲一遍,因?yàn)橹挥羞@樣,才能加深你對(duì)代碼的理解呦。

本次項(xiàng)目對(duì)應(yīng)的代碼:

https://aistudio.baidu.com/aistudio/projectdetail/2017173

更多PaddleNLP信息,歡迎訪問(wèn)GitHub點(diǎn)star收藏后體驗(yàn):

https://github.com/PaddlePaddle/PaddleNLP

原文鏈接:https://developer.baidu.com/article.html#/articleDetailPage?id=293487?from=020811

總結(jié)

以上是生活随笔為你收集整理的想聊天?自己搭建个聊天机器人吧!的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。