最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

使用 Python 創(chuàng)建一個(gè)基于規(guī)則的聊天機(jī)器人

 更新時(shí)間:2021年10月29日 09:09:41   作者:deephub  
這篇文章主要介紹了使用 Python 創(chuàng)建一個(gè)基于規(guī)則的聊天機(jī)器人,使用 Python 創(chuàng)建一個(gè)簡(jiǎn)單的基于規(guī)則的聊天機(jī)器人 聊天機(jī)器人本身是一種機(jī)器或軟件,它通過(guò)文本或句子模仿人類交互。 簡(jiǎn)而言之,可以使用類似于與人類對(duì)話的軟件進(jìn)行聊天。

前言:

還記得這個(gè)價(jià)值一個(gè)億的AI核心代碼?

while True: 
  AI = input('我:') 
  print(AI.replace("嗎", " ").replace('?','!').replace('?','!')) 

以上這段代碼就是我們今天的主題,基于規(guī)則的聊天機(jī)器人

1、聊天機(jī)器人

聊天機(jī)器人本身是一種機(jī)器或軟件,它通過(guò)文本或句子模仿人類交互。 簡(jiǎn)而言之,可以使用類似于與人類對(duì)話的軟件進(jìn)行聊天。

為什么要嘗試創(chuàng)建聊天機(jī)器人? 也許你對(duì)一個(gè)新項(xiàng)目感興趣,或者公司需要一個(gè),或者想去拉投資。 無(wú)論動(dòng)機(jī)是什么,本文都將嘗試解釋如何創(chuàng)建一個(gè)簡(jiǎn)單的基于規(guī)則的聊天機(jī)器人。

2、基于規(guī)則的聊天機(jī)器人

什么是基于規(guī)則的聊天機(jī)器人?它是一種基于特定規(guī)則來(lái)回答人類給出的文本的聊天機(jī)器人。由于它基于強(qiáng)加的規(guī)則所以這個(gè)聊天機(jī)器人生成的響應(yīng)幾乎是準(zhǔn)確的;但是,如果我們收到與規(guī)則不匹配的查詢,聊天機(jī)器人將不會(huì)回答。與它相對(duì)的另一個(gè)版本是基于模型的聊天機(jī)器人,它通過(guò)機(jī)器學(xué)習(xí)模型來(lái)回答給定的查詢。(二者的區(qū)別就是基于規(guī)則的需要我們指定每一條規(guī)則,而且基于模型的會(huì)通過(guò)訓(xùn)練模型自動(dòng)生成規(guī)則,還記得我們上一篇的”機(jī)器學(xué)習(xí)介紹“嗎,"機(jī)器學(xué)習(xí)為系統(tǒng)提供無(wú)需明確編程就能根據(jù)經(jīng)驗(yàn)自動(dòng)學(xué)習(xí)和改進(jìn)的能力。")

基于規(guī)則的聊天機(jī)器人可能基于人類給出的規(guī)則,但這并不意味著我們不使用數(shù)據(jù)集。聊天機(jī)器人的主要目標(biāo)仍然是自動(dòng)化人類提出的問(wèn)題,所以我們還是需要數(shù)據(jù)來(lái)制定特定的規(guī)則。

在本文中,我們將利用余弦相似距離作為基礎(chǔ)開(kāi)發(fā)基于規(guī)則的聊天機(jī)器人。余弦相似度是向量(特別是內(nèi)積空間的非零向量)之間的相似度度量,常用于度量?jī)蓚€(gè)文本之間的相似度。

我們將使用余弦相似度創(chuàng)建一個(gè)聊天機(jī)器人,通過(guò)對(duì)比查詢與我們開(kāi)發(fā)的語(yǔ)料庫(kù)之間的相似性來(lái)回答查詢提出的問(wèn)題。這也是我們最初需要開(kāi)發(fā)我們的語(yǔ)料庫(kù)的原因。

3、創(chuàng)建語(yǔ)料庫(kù)

對(duì)于這個(gè)聊天機(jī)器人示例,我想創(chuàng)建一個(gè)聊天機(jī)器人來(lái)回答有關(guān)貓的所有問(wèn)題。 為了收集關(guān)于貓的數(shù)據(jù),我會(huì)從網(wǎng)上抓取它。

import bs4 as bs 
import urllib.request#Open the cat web data page 
cat_data = urllib.request.urlopen('https://simple.wikipedia.org/wiki/Cat').read() 
#Find all the paragraph html from the web page 
cat_data_paragraphs = bs.BeautifulSoup(cat_data,'lxml').find_all('p') 
#Creating the corpus of all the web page paragraphs 
cat_text = '' 
#Creating lower text corpus of cat paragraphs 
for p in cat_data_paragraphs: 
cat_text += p.text.lower() 
print(cat_text) 

使用上面的代碼,會(huì)得到來(lái)自wikipedia頁(yè)面的段落集合。 接下來(lái),需要清理文本以去除括號(hào)編號(hào)和空格等無(wú)用的文本。

 import re 
cat_text = re.sub(r'\s+', ' ',re.sub(r'\[[0-9]*\]', ' ', cat_text)) 

上述代碼將從語(yǔ)料庫(kù)中刪除括號(hào)號(hào)。我特意沒(méi)有去掉這些符號(hào)和標(biāo)點(diǎn)符號(hào),因?yàn)楫?dāng)與聊天機(jī)器人進(jìn)行對(duì)話時(shí),這樣聽(tīng)起來(lái)會(huì)很自然。

最后,我將根據(jù)之前創(chuàng)建的語(yǔ)料庫(kù)創(chuàng)建一個(gè)句子列表。

import nltk 
cat_sentences = nltk.sent_tokenize(cat_text) 

我們的規(guī)則很簡(jiǎn)單:將聊天機(jī)器人的查詢文本與句子列表中的每一個(gè)文本之間的進(jìn)行余弦相似性的度量,哪個(gè)結(jié)果產(chǎn)生的相似度最接近(最高余弦相似度)那么它就是我們的聊天機(jī)器人的答案。

4、創(chuàng)建一個(gè)聊天機(jī)器人

我們上面的語(yǔ)料庫(kù)仍然是文本形式,余弦相似度不接受文本數(shù)據(jù);所以需要將語(yǔ)料庫(kù)轉(zhuǎn)換成數(shù)字向量。通常的做法是將文本轉(zhuǎn)換為詞袋(單詞計(jì)數(shù))或使用TF-IDF方法(頻率概率)。在我們的例子中,我們將使用TF-IDF。

我將創(chuàng)建一個(gè)函數(shù),它接收查詢文本,并根據(jù)以下代碼中的余弦相似性給出一個(gè)輸出。讓我們看一下代碼。

from sklearn.metrics.pairwise import cosine_similarity 
from sklearn.feature_extraction.text import TfidfVectorizer 
def chatbot_answer(user_query): 
 
#Append the query to the sentences list 
cat_sentences.append(user_query)  
#Create the sentences vector based on the list 
vectorizer = TfidfVectorizer() 
sentences_vectors = vectorizer.fit_transform(cat_sentences) 
 
#Measure the cosine similarity and take the second closest index because the first index is the user query 
vector_values = cosine_similarity(sentences_vectors[-1], sentences_vectors) 
answer = cat_sentences[vector_values.argsort()[0][-2]]  
#Final check to make sure there are result present. If all the result are 0, means the text input by us are not captured in the corpus 
input_check = vector_values.flatten() 
input_check.sort() 
 
if input_check[-2] == 0: 
return "Please Try again" 
else:  
return answer 

我們可以把上面的函數(shù)使用下面的流程圖進(jìn)行表示:

最后,使用以下代碼創(chuàng)建一個(gè)簡(jiǎn)單的回答交互。

print("Hello, I am the Cat Chatbot. What is your meow questions?:") 
while(True): 
query = input().lower() 
if query not in ['bye', 'good bye', 'take care']: 
print("Cat Chatbot: ", end="") 
print(chatbot_answer(query)) 
cat_sentences.remove(query) 
else: 
print("See You Again") 
break 

上面的腳本將接收查詢,并通過(guò)我們之前開(kāi)發(fā)的聊天機(jī)器人處理它們。

從上面的圖片中看到的,結(jié)果還是可以接受的,但有也有些奇怪的回答。但是我們要想到,目前只從一個(gè)數(shù)據(jù)源中得到的結(jié)果,并且也沒(méi)有做任何的優(yōu)化。如果我們用額外的數(shù)據(jù)集和規(guī)則來(lái)改進(jìn)它,它肯定會(huì)更好地回答問(wèn)題。

5、總結(jié)

聊天機(jī)器人項(xiàng)目是一個(gè)令人興奮的數(shù)據(jù)科學(xué)項(xiàng)目,因?yàn)樗谠S多領(lǐng)域都有幫助。在本文中,我們使用從網(wǎng)頁(yè)中獲取的數(shù)據(jù),利用余弦相似度和TF-IDF,用Python創(chuàng)建了一個(gè)簡(jiǎn)單的聊天機(jī)器人項(xiàng)目,真正的將我們的1個(gè)億的項(xiàng)目落地。其實(shí)這里面還有很多的改進(jìn):

向量化的選擇,除了TF-IDF還可以使用word2vec,甚至使用預(yù)訓(xùn)練的bert提取詞向量。
回答環(huán)節(jié),其實(shí)就是通過(guò)某種特定的算法或者規(guī)則從我們的語(yǔ)料庫(kù)中搜索最匹配的答案,本文中使用的相似度TOP1的方法其實(shí)就是一個(gè)最簡(jiǎn)單的類greedsearch的方法,對(duì)于答案結(jié)果的優(yōu)化還可以使用類beamsearch 的算法提取回答的匹配項(xiàng)。
等等很多
在端到端的深度學(xué)習(xí)興起之前,很多的聊天機(jī)器人都是這樣基于規(guī)則來(lái)運(yùn)行的并且也有很多落地案例,如果你想快速的做一個(gè)POC展示,這種基于規(guī)則方法還是非常有用的。

到此這篇關(guān)于使用 Python 創(chuàng)建一個(gè)基于規(guī)則的聊天機(jī)器人的文章就介紹到這了,更多相關(guān)Python 創(chuàng)建聊天機(jī)器人內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • python 全文檢索引擎詳解

    python 全文檢索引擎詳解

    這篇文章主要介紹了python 全文檢索引擎詳解的相關(guān)資料,需要的朋友可以參考下
    2017-04-04
  • 用python介紹4種常用的單鏈表翻轉(zhuǎn)的方法小結(jié)

    用python介紹4種常用的單鏈表翻轉(zhuǎn)的方法小結(jié)

    這篇文章主要介紹了用python介紹4種常用的單鏈表翻轉(zhuǎn)的方法小結(jié),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-02-02
  • python字典的遍歷3種方法詳解

    python字典的遍歷3種方法詳解

    這篇文章主要介紹了python字典的遍歷相關(guān)知識(shí)詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-08-08
  • 基于python實(shí)現(xiàn)rpc遠(yuǎn)程過(guò)程調(diào)用

    基于python實(shí)現(xiàn)rpc遠(yuǎn)程過(guò)程調(diào)用

    本文主要介紹了基于python實(shí)現(xiàn)rpc遠(yuǎn)程過(guò)程調(diào)用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-06-06
  • Python OrderedDict字典排序方法詳解

    Python OrderedDict字典排序方法詳解

    這篇文章主要介紹了Python OrderedDict字典使用方法詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-05-05
  • python模擬斗地主發(fā)牌

    python模擬斗地主發(fā)牌

    這篇文章主要為大家詳細(xì)介紹了python模擬斗地主發(fā)牌,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-04-04
  • Python 的 vars() 函數(shù)功能

    Python 的 vars() 函數(shù)功能

    本文將深入探討如何利用 vars() 函數(shù)的靈活性和功能,以提高代碼調(diào)試的效率和準(zhǔn)確性,感興趣的朋友跟隨小編一起看看吧
    2024-06-06
  • Python爬蟲(chóng)實(shí)戰(zhàn)之爬取京東商品數(shù)據(jù)并實(shí)實(shí)現(xiàn)數(shù)據(jù)可視化

    Python爬蟲(chóng)實(shí)戰(zhàn)之爬取京東商品數(shù)據(jù)并實(shí)實(shí)現(xiàn)數(shù)據(jù)可視化

    今天再帶大家簡(jiǎn)單爬一波京東的商品數(shù)據(jù)唄,廢話不多說(shuō),文中有非常詳細(xì)的代碼示例,需要的朋友可以參考下
    2021-06-06
  • python3+PyQt5泛型委托詳解

    python3+PyQt5泛型委托詳解

    這篇文章主要為大家詳細(xì)介紹了python3+PyQt5泛型委托的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-04-04
  • Python入門教程之變量與數(shù)據(jù)類型

    Python入門教程之變量與數(shù)據(jù)類型

    這篇文章主要介紹了Python入門教程之變量與數(shù)據(jù)類型的相關(guān)知識(shí),文中給大家提到了變量的基本概念和數(shù)據(jù)類型的相關(guān)實(shí)例代碼,需要的朋友可以參考下
    2022-02-02

最新評(píng)論

济宁市| 库伦旗| 库尔勒市| 安福县| 大安市| 怀化市| 双牌县| 涪陵区| 温泉县| 若尔盖县| 延安市| 甘德县| 南昌县| 晋中市| 太保市| 靖宇县| 麻江县| 北流市| 房产| 阜新市| 安仁县| 儋州市| 襄垣县| 永年县| 东阳市| 仁布县| 富顺县| 农安县| 和硕县| 浦江县| 肃北| 西藏| 抚顺县| 荣昌县| 东乌珠穆沁旗| 宁远县| 陕西省| 大安市| 从江县| 台南县| 广东省|