課程簡介
“手把手帶你學NLP”是基于飛槳的系列實戰項目。本系列由百度多位資深工程師精心打造,提供了從詞向量、預訓練語言模型,到信息抽取、情感分析、文本問答、結構化數據問答、文本翻譯、機器同傳、對話系統等實踐項目的全流程講解,旨在幫助開發者更全面清晰地掌握百度飛槳框架在NLP領域的用法,并能夠舉一反三、靈活使用飛槳框架和進行NLP深度學習實踐。
6月,百度飛槳 & 自然語言處理部攜手推出了12節NLP視頻課,課程中詳細講解了本實踐項目。
觀看課程回放請戳:
歡迎來課程QQ群(群號:)交流吧~~
聊天機器人的“前世今生”
在 1964 年至 1966 年間,麻省理工學院人工智能實驗室的德裔美國計算機科學家約瑟夫·維森鮑姆( )開發了歷史上第一個聊天機器人—— Eliza。
Eliza 的名字源于愛爾蘭劇作家蕭伯納的戲劇作品《賣花女》中的角色,劇中出身貧寒的賣花女 Eliza 通過學習與上流社會溝通的方式,變成大使館舞會上人人艷羨的“匈牙利王家公主”。作為世界上第一個聊天機器人,Eliza 被其作者賦予了充滿戲劇性的內涵。
盡管在當時已經存在一些基本的數字語言生成器(可以輸出一些連貫文本的程序),但 Eliza 是第一個明確設計用于與人互動的程序。用戶可以使用打字機輸入人類的自然語言,獲得來自機器的響應。正如維森鮑姆解釋的那樣qq群聊對話生成器在線制作,Eliza 使“人與計算機之間的對話成為可能 ”。
隨著深度學習技術的不斷發展,聊天機器人變得越來越智能。我們可以通過機器人來完成一些機械性的問答工作,也可以在閑暇時和智能機器人進行對話,他們的出現讓生活變得更豐富多彩。如今通過飛槳與的結合就可實現一個簡單的聊天機器人。
如下圖就是基于 + 的微信閑聊機器人demo。通過獲取微信接收的消息,然后使用的plato-mini模型根據對話的上下文生成新的對話文本,最終以微信消息的形式發送,實現閑聊的交互。
下圖是基于 + 的微信情感識別機器人demo。通過獲取微信接收的消息,然后使用的模型對輸入的文本進行情感判斷,最終以微信消息的形式返回,實現對文本情感的識別。
感興趣的同學可參照此demo在自己微信上實現一個情感識別機器人哦~
Demo鏈接:
是不是很有趣。如果你還不滿足于此,歡迎前來報名 聯合開源聊天機器人框架 和設計師社區 帶來的創意賽。為各位參賽選手提供了豐富的深度學習預訓練模型,也為大家提供了便捷的搭建SDK,大家可參照已有demo使用實現自動寫詩、彩虹屁,起名、自動對聯等好玩的功能。
比賽報名鏈接:
今天我們要帶大家使用飛槳實現詩歌的對答和一個簡單的閑聊機器人,一起來吧!
快速實踐
針對生成式任務提供了()函數,內嵌于所有的生成式模型。支持 、Beam 和解碼策略,用戶只需指定解碼策略以及相應的參數即可完成預測解碼,得到生成的的token ids以及概率得分。
2.1 GPT模型使用生成API的小示例
1.加載..用于數據處理
文本數據在輸入預訓練模型之前,需要經過數據處理轉化為。這一過程通常包括分詞,token to id,add token等步驟。
對于各種預訓練模型已經內置了相應的,指定想要使用的模型名字即可加載對應的。
調用的方法即可將我們說的話轉為模型可接受的輸入。
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.使用一鍵加載預訓練模型
提供了GPT,等中文預訓練模型,可以通過預訓練模型名稱完成一鍵加載。
GPT以 的編碼器為網絡基本組件,采用單向注意力機制,適用于長文本生成任務。
目前提供多種中英文GPT預訓練模型qq群聊對話生成器在線制作,我們這次用的是一個小的中文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的用法也是非常的簡便。
2.2
模型和生成式API完成閑聊對話
1.加載..用于數據處理
的調用方式與GPT相同,但數據處理的API略有不同。
調用的方法即可將我們說的話轉為模型可接受的輸入。
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.使用一鍵加載預訓練模型
與GPT相同,我們可以一鍵調用預訓練模型。
以的編碼器為網絡基本組件,采用靈活的注意力機制,并在模型輸入中加入了標識不同對話技能的 token,使得模型能同時支持閑聊對話、推薦對話和知識對話。
目前為提供了三個中文預訓練模型:
from?paddlenlp.transformers?import?UnifiedTransformerLMHeadModel
model?=?UnifiedTransformerLMHeadModel.from_pretrained(model_name)
下一步我們將處理好的輸入傳入函數,并配置解碼策略。
這里我們使用的是TopK加的解碼策略。即從概率最大的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歲了']
的中提供了搭建完整對話系統的代碼(人機交互),感興趣可以去終端里嘗試一下哦~
人機交互地址:
#%E4%BA%BA%E6%9C%BA%E4%BA%A4%E4%BA%92
動手試一試
是不是覺得很有趣呀。小編強烈建議初學者參考上面的代碼親手敲一遍,因為只有這樣,才能加深你對代碼的理解呦。
本次項目對應的代碼:
更多信息,歡迎訪問點star收藏后體驗:
加入交流群,一起學習吧
如果你在學習過程中遇到任何問題或疑問,歡迎加入的QQ技術交流群!
回顧往期
如有飛槳相關技術有問題,歡迎在飛槳論壇中提問交流:
歡迎加入官方QQ群獲取最新活動資訊:。