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

python機(jī)器學(xué)習(xí)創(chuàng)建基于規(guī)則聊天機(jī)器人過程示例詳解

 更新時間:2021年11月02日 11:28:38   作者:deephub  
這篇文章主要為大家介紹了python實(shí)現(xiàn)基于規(guī)則聊天機(jī)器人的過程示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步早日升職加薪

還記得這個價值一個億的AI核心代碼?

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

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

聊天機(jī)器人

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

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

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

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

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

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

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

創(chuàng)建語料庫

對于這個聊天機(jī)器人示例,我想創(chuàng)建一個聊天機(jī)器人來回答有關(guān)貓的所有問題。 為了收集關(guān)于貓的數(shù)據(jù),我會從網(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)

使用上面的代碼,會得到來自wikipedia頁面的段落集合。 接下來,需要清理文本以去除括號編號和空格等無用的文本。

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

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

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

import nltk
cat_sentences = nltk.sent_tokenize(cat_text)

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

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

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

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

讓我們看一下代碼。

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)建一個簡單的回答交互。

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

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

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

總結(jié)

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

向量化的選擇,除了TF-IDF還可以使用word2vec,甚至使用預(yù)訓(xùn)練的bert提取詞向量。

回答環(huán)節(jié),其實(shí)就是通過某種特定的算法或者規(guī)則從我們的語料庫中搜索最匹配的答案,本文中使用的相似度top1的方法其實(shí)就是一個最簡單的類greedsearch的方法,對于答案結(jié)果的優(yōu)化還可以使用類beamsearch 的算法提取回答的匹配項(xiàng)。

等等很多

在端到端的深度學(xué)習(xí)興起之前,很多的聊天機(jī)器人都是這樣基于規(guī)則來運(yùn)行的并且也有很多落地案例,如果你想快速的做一個POC展示,這種基于規(guī)則方法還是非常有用的。

方法,對于答案結(jié)果的優(yōu)化還可以使用類beamsearch 的算法提取回答的匹配項(xiàng)。

等等很多

在端到端的深度學(xué)習(xí)興起之前,很多的聊天機(jī)器人都是這樣基于規(guī)則來運(yùn)行的并且也有很多落地案例,如果你想快速的做一個POC展示,這種基于規(guī)則方法還是非常有用的。

以上就是python實(shí)現(xiàn)基于規(guī)則聊天機(jī)器人過程示例詳解的詳細(xì)內(nèi)容,更多關(guān)于python實(shí)現(xiàn)基于規(guī)則聊天機(jī)器人的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 解決Pyinstaller打包為可執(zhí)行文件編碼錯誤的問題

    解決Pyinstaller打包為可執(zhí)行文件編碼錯誤的問題

    這篇文章主要介紹了解決Pyinstaller打包為可執(zhí)行文件編碼錯誤的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-03-03
  • Python實(shí)現(xiàn)對圖像加噪(高斯噪聲 椒鹽噪聲)

    Python實(shí)現(xiàn)對圖像加噪(高斯噪聲 椒鹽噪聲)

    這篇文章主要介紹了展示通過Python給圖像疊加不同等級的椒鹽噪聲和高斯噪聲的代碼,相應(yīng)的疊加噪聲的已編為對應(yīng)的類,可實(shí)例化使用。感興趣的同學(xué)可以看看
    2021-11-11
  • python庫使用Fire庫生成命令行參數(shù)

    python庫使用Fire庫生成命令行參數(shù)

    Python Fire是一個開源庫,能把Python對象轉(zhuǎn)換為命令行界面,F(xiàn)ire庫是一個非常有用的工具,它可以幫助開發(fā)人員創(chuàng)建命令行界面,并且可以將任何Python對象轉(zhuǎn)換為命令行界面,這篇文章主要介紹了python庫使用Fire庫生成命令行參數(shù),需要的朋友可以參考下
    2024-02-02
  • Pygame實(shí)戰(zhàn)練習(xí)之飛機(jī)大戰(zhàn)游戲

    Pygame實(shí)戰(zhàn)練習(xí)之飛機(jī)大戰(zhàn)游戲

    飛機(jī)大戰(zhàn)想必是很多人童年時期的經(jīng)典游戲,我們依舊能記得抱個老人機(jī)娛樂的場景,下面這篇文章主要給大家介紹了關(guān)于如何利用python寫一個簡單的飛機(jī)大戰(zhàn)小游戲的相關(guān)資料,需要的朋友可以參考下
    2021-09-09
  • Python中時間類型的JSON數(shù)據(jù)轉(zhuǎn)換

    Python中時間類型的JSON數(shù)據(jù)轉(zhuǎn)換

    在Python中,處理時間和日期數(shù)據(jù)以及與JSON數(shù)據(jù)的相互轉(zhuǎn)換是常見的任務(wù),本文主要為大家詳細(xì)如何在Python中處理時間類型的JSON數(shù)據(jù)轉(zhuǎn)換,需要的小伙伴可以參考下
    2024-02-02
  • 基于循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)實(shí)現(xiàn)影評情感分類

    基于循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)實(shí)現(xiàn)影評情感分類

    這篇文章主要為大家詳細(xì)介紹了基于循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)實(shí)現(xiàn)影評情感分類,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-03-03
  • python通過BF算法實(shí)現(xiàn)關(guān)鍵詞匹配的方法

    python通過BF算法實(shí)現(xiàn)關(guān)鍵詞匹配的方法

    這篇文章主要介紹了python通過BF算法實(shí)現(xiàn)關(guān)鍵詞匹配的方法,實(shí)例分析了BF算法的原理與Python實(shí)現(xiàn)技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-03-03
  • Python實(shí)現(xiàn)網(wǎng)站文件的全備份和差異備份

    Python實(shí)現(xiàn)網(wǎng)站文件的全備份和差異備份

    這篇文章主要介紹了Python實(shí)現(xiàn)網(wǎng)站文件的全備份和差異備份,需要的朋友可以參考下
    2014-11-11
  • OpenCV中VideoCapture類的使用詳解

    OpenCV中VideoCapture類的使用詳解

    這篇文章主要介紹了OpenCV中VideoCapture類的使用詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-02-02
  • 怎么使用python繪制3D瀑布圖

    怎么使用python繪制3D瀑布圖

    這篇文章主要介紹了怎么使用python繪制3D瀑布圖的相關(guān)資料,瀑布圖是由麥肯錫顧問公司所獨(dú)創(chuàng)的圖表類型,因?yàn)樾嗡破俨剂魉Q之為瀑布圖(Waterfall Plot),文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-09-09

最新評論

永寿县| 常德市| 青冈县| 广元市| 章丘市| 吉木萨尔县| 邢台市| 汕头市| 濉溪县| 饶平县| 通渭县| 墨竹工卡县| 开阳县| 南安市| 敦化市| 林芝县| 宜章县| 尖扎县| 古浪县| 湛江市| 顺平县| 苏尼特左旗| 沂水县| 大足县| 灯塔市| 南昌县| 南丹县| 营山县| 都兰县| 临湘市| 长春市| 怀安县| 栾城县| 北宁市| 永新县| 新津县| 盐亭县| 衡阳县| 景洪市| 揭阳市| 本溪市|