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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

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

1、聊天機器人的“前世今生”

在 1964 年至 1966 年間,麻省理工學院人工智能實驗室的德裔美國計算機科學家約瑟夫·維森鮑姆(Joseph Weizenbaum)開發了歷史上第一個聊天機器人 —— Eliza。

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

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

隨著深度學習技術的不斷發展,聊天機器人變得越來越智能。我們可以通過機器人來完成一些機械性的問答工作,也可以在閑暇時和智能機器人進行對話,他們的出現讓生活變得更豐富多彩。如今通過飛槳與Wechaty的結合就可實現一個簡單的聊天機器人。

如下圖就是基于 PaddleHub + Wechaty 的微信閑聊機器人demo。通過Wechaty獲取微信接收的消息,然后使用PaddleHub的plato-mini模型根據對話的上下文生成新的對話文本,最終以微信消息的形式發送,實現閑聊的交互。

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

感興趣的同學可參照此demo在自己微信上實現一個情感識別機器人哦~

Demo鏈接:

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

今天我們要帶大家使用飛槳PaddleNLP實現詩歌的對答和一個簡單的閑聊機器人,一起來吧!

2、快速實踐

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

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

1.加載 paddlenlp.transformers.GPTChineseTokenizer用于數據處理

文本數據在輸入預訓練模型之前,需要經過數據處理轉化為Feature。這一過程通常包括分詞,token to id,add special token等步驟。

PaddleNLP對于各種預訓練模型已經內置了相應的tokenizer,指定想要使用的模型名字即可加載對應的tokenizer。

調用GPTChineseTokenizer的__call__方法即可將我們說的話轉為模型可接受的輸入。

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

2.使用PaddleNLP一鍵加載預訓練模型

PaddleNLP提供了GPT,UnifiedTransformer等中文預訓練模型,可以通過預訓練模型名稱完成一鍵加載。

GPT以Transformer Decoder的編碼器為網絡基本組件,采用單向注意力機制,適用于長文本生成任務。

PaddleNLP目前提供多種中英文GPT預訓練模型,我們這次用的是一個小的中文GPT預訓練模型。

from paddlenlp.transformers import GPTLMHeadModel # 一鍵加載中文GPT模型 model = GPTLMHeadModel.from_pretrained(model_name) # 調用生成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轉為文本 generated_text = tokenizer.convert_ids_to_string(generated_ids) print(generated_text)對影成三人。

可以看到生成的效果還不錯,生成式API的用法也是非常的簡便。

UnifiedTransformer 模型和生成式API完成閑聊對話

1.加載paddlenlp.transformers.UnifiedTransformerTokenizer用于數據處理

UnifiedTransformerTokenizer的調用方式與GPT相同,但數據處理的API略有不同。

調用UnifiedTransformerTokenizer的dialogue_encode方法即可將我們說的話轉為模型可接受的輸入。

from paddlenlp.transformers import UnifiedTransformerTokenizer # 設置想要使用模型的名稱 model_name = 'plato-mini' tokenizer = UnifiedTransformerTokenizer.from_pretrained(model_name) user_input = ['你好啊,你今年多大了'] # 調用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一鍵加載預訓練模型

與GPT相同,我們可以一鍵調用UnifiedTransformer預訓練模型。

UnifiedTransformer以Transformer的編碼器為網絡基本組件,采用靈活的注意力機制,并在模型輸入中加入了標識不同對話技能的special token,使得模型能同時支持閑聊對話、推薦對話和知識對話。

PaddleNLP目前為UnifiedTransformer提供了三個中文預訓練模型:

  • unified_transformer-12L-cn 該預訓練模型是在大規模中文會話數據集上訓練得到的。
  • unified_transformer-12L-cn-luge 該預訓練模型是unified_transformer-12L-cn在千言對話數據集上進行微調得到的。
  • plato-mini 該模型使用了十億級別的中文閑聊對話數據進行預訓練。
from paddlenlp.transformers import UnifiedTransformerLMHeadModel model = UnifiedTransformerLMHeadModel.from_pretrained(model_name)

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

這里我們使用的是TopK加sampling的解碼策略。即從概率最大的k個結果中按概率進行采樣。

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

簡單根據概率選取最佳回復

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

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

人機交互地址:

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

3、動手試一試

是不是覺得很有趣呀。小編強烈建議初學者參考上面的代碼親手敲一遍,因為只有這樣,才能加深你對代碼的理解呦。

本次項目對應的代碼:

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

更多PaddleNLP信息,歡迎訪問GitHub點star收藏后體驗:

https://github.com/PaddlePaddle/PaddleNLP

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

總結

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

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。