溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

python機器學(xué)習(xí)創(chuàng)建基于規(guī)則聊天機器人過程是什么

發(fā)布時間:2021-11-02 14:04:15 來源:億速云 閱讀:167 作者:iii 欄目:開發(fā)技術(shù)

這篇文章主要講解了“python機器學(xué)習(xí)創(chuàng)建基于規(guī)則聊天機器人過程是什么”,文中的講解內(nèi)容簡單清晰,易于學(xué)習(xí)與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“python機器學(xué)習(xí)創(chuàng)建基于規(guī)則聊天機器人過程是什么”吧!

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

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

    聊天機器人

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

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

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

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

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

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

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

    創(chuàng)建語料庫

    對于這個聊天機器人示例,我想創(chuàng)建一個聊天機器人來回答有關(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)

    python機器學(xué)習(xí)創(chuàng)建基于規(guī)則聊天機器人過程是什么

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

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

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

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

    import nltk
    cat_sentences = nltk.sent_tokenize(cat_text)

    python機器學(xué)習(xí)創(chuàng)建基于規(guī)則聊天機器人過程是什么

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

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

    我們上面的語料庫仍然是文本形式,余弦相似度不接受文本數(shù)據(jù);所以需要將語料庫轉(zhuǎn)換成數(shù)字向量。通常的做法是將文本轉(zhuǎn)換為詞袋(單詞計數(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ù)使用下面的流程圖進行表示:

    python機器學(xué)習(xí)創(chuàng)建基于規(guī)則聊天機器人過程是什么

    最后,使用以下代碼創(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ā)的聊天機器人處理它們。

    python機器學(xué)習(xí)創(chuàng)建基于規(guī)則聊天機器人過程是什么

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

    感謝各位的閱讀,以上就是“python機器學(xué)習(xí)創(chuàng)建基于規(guī)則聊天機器人過程是什么”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對python機器學(xué)習(xí)創(chuàng)建基于規(guī)則聊天機器人過程是什么這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關(guān)知識點的文章,歡迎關(guān)注!

    向AI問一下細(xì)節(jié)

    免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

    AI