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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人工智能 > ChatGpt >内容正文

ChatGpt

自然语言处理--基于规则(AIML)的问答机器人

發布時間:2023/12/31 ChatGpt 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 自然语言处理--基于规则(AIML)的问答机器人 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

基于規則(AIML)的問答機器人

一個完整的智能應答語音機器人可以大致分成幾個組成部分,以下為一個簡單的流程,后續每個過程的細節可以拓展。

  • 首先我們需要接受到用戶的語音;
  • 通過第三方的接口將語音轉為文本;
  • 對文本分詞和糾錯;
  • 基于規則(正則表達式)的應答和基于檢索的應答(或seq2seq,但這一般應用于自由場景);
  • 將生成的答案轉語音;

本篇博客主要講的是基于規則(正則表達式的應答),因為在一般的實際項目應用中,我們可以基于固定的場景進行語音話術的設計,如果我們這個語音應答機器人只是為了做電銷,去代替現有的電銷人員。

假設目前為理財場景,我們通過智能語音機器人去推薦我們的理財產品,詢問客戶有沒有理財需求,那這時我們機器人需要做的就是首先來一段開場白:

AI:(開場白)您好,我們是XXX,請問最近您有理財的需求嗎?客戶:嗯,可以了解一下。AI:(詳細介紹理財產品)我們的產品是XXX,大概的年化利率為7%左右,您考慮嗎?客戶:暫時不需要。AI:好的,謝謝,非常抱歉打擾你。

這只是簡單的模擬了一輪人機對話,當然實際的場景中對話往往比這要復雜的多。那我們怎么基于規則的應答來實現上述簡單的一輪對話呢。

AIML

這里我們用到一個已經很成熟的基于規則應答實現的一個三方庫(python),此三方庫下載下來后就是一個簡單的應答機器人了,你可以盡情的調戲她。庫名叫【aiml】,功能實現并不復雜,很容易理解,大概包含三個方面:

  • 自定義的XML文件,它內部文件后綴名是.aiml文件;
  • 解釋器,用于解釋識別自定義的xml文件中的標簽代替的含義;
  • 唯一一個調用的接口;

我們可以通過pip安裝庫:

pip install aiml

運行時找到庫目錄下Lib\site-packages中的aiml文件夾,將其中的botdata文件夾單獨拷貝出來,放到我們的自建項目中,botdata文件夾下的alice里就是機器人的應答語料庫,都是通過自定義的XML文件配置好的,如下:

<?xml version="1.0" encoding="ISO-8859-1"?> <aiml version="1.0"> <!-- --> <!-- Free software (c) 2011 ALICE A.I. Foundation. --> <!-- This program is open source code released under --> <!-- the terms of the GNU General Public License --> <!-- as published by the Free Software Foundation. --> <!-- Complies with AIML 1.0 Tag Set Specification --> <!-- as adopted by the ALICE A.I. Foundation. --> <!-- Last modified 11/23/2011 --> <!-- --> <category> <pattern>WHO IS LAUREN</pattern> <template><set name="she">Lauren</set> is a bot on Pandorabots.</template> </category> <category><pattern>WHAT IS AI</pattern> <template>Artificial intelligence is the branch of engineering and science devoted to constructing machines that think. <think> <set name="it"><set name="topic">Artificial Intelligence</set> </set></think> </template> </category> <category><pattern>WHO CREATED AIML</pattern> <template>Dr. Richard S. Wallace created AIML.</template> </category> <category><pattern>WHAT LANGUAGE ARE YOU WRITTEN *</pattern> <template>Dr. Wallace created AIML to write me. The underlying technology is Lisp.</template> </category>

這里只粘貼了部分,我們可以發現它就是自定義的XML文件,<pattern>就是配置的問題,就是我們可能問到的問題,<template>就是機器人要回答我們的話,每個<category>之間就是一對對應的問答,當然自定義的XML有20多種標簽即20多種語法,可以實現很復雜的對話管理,還可以實現上下文的對話,即下一輪對話可以記住上一輪客戶的答案,只要愿意,復雜的對話場景都可以實現,但是相應的要研究清楚其中每種標簽代表的含義,且對話語料的維護成本也不低。

當然這個庫也存在一些問題

它的正則表達式解釋設計的很簡單,只支持*模糊匹配,當然一句話可能有很多種不同的問法,比如多少錢,我們可以問多少錢?多少錢啊?這個東西多少錢?這個東西多少錢啊?如果是正常的正則表達式可能我們配置 .*多少錢.* 就可以匹配出上面的所有問法,但是在他自定義的問答對里,要配置很多種情況,才可以應對以上的提問。

它是基于英文實現的,而英文的每個詞之間都是空格分開的,但是中文不行,比如在XML文件里配置 who create *,我們輸入who create aiml,它的解釋器是可以找到who create *的并提取出答案,Dr. Richard S. Wallace created AIML.,可是當我們中文配置成“你是*”時,我們輸入“你是誰?”,它匹配不到任何的答案,并提示找不到“你是誰?“,所以換言之它內部的解釋器是不支持中文的。

那要解決怎么解決這些問題

對應的,對于正則表達式的不夠豐富,我們可以自定義一個正則表達式的接口,也就是將正則的模塊放到python中去匹配,因為python的正則語法肯定是很豐富的,支持所有的場景。

對于不支持中文這一點,我們可以對中文的每句話進行人為的“分字”,即在每個漢字之間加一個空格,也就是我們在配置XML文件時,我們對應的問題“你是*”配置為“你 是 *”,這樣就解決了解釋器不支持中文的問題,當然此處我們在維護XML文件中的問題時進行空格分割處理,在我們輸入問題時也需要進行空格分割處理。

代碼實現

接下來我們看看怎么應用這個三方庫去做我們的規則的應答:

import os import aimldef get_alice():os.chdir('./botdata/alice') #首先配置的語料庫地址alice = aiml.Kernel()alice.learn("startup.xml") #此處加載XML文件,即語料alice.respond('LOAD ALICE')return alicedef sentence_add_space(sentence):'''對輸入的每句話進行隔字加空格處理'''list01 = list(sentence)list02 = []for i in range(len(list01)):if i == 0:list02.append(list01[i])else:list02.append(" ")list02.append(list01[i])str_sentence = str()for i in list02:str_sentence += ireturn str_sentence alice = get_alice() aiml_sentence = "你好啊!" alice.respond(sentence_add_space(aiml_sentence))

運行得到結果:

alice = get_alice() aiml_sentence = "你好啊!" alice.respond(sentence_add_space(aiml_sentence)) Loading startup.xml...done (0.00 seconds) Loading BY_BaoXian_yewu.aiml...done (0.00 seconds) Out[4]: '你好,我是機器人小雅!'

總結

當然基于規則的應答只是智能機器人中很小的一個功能,主要解決的場景問題是:一些常見的問題;一些特定答案的業務問題;一些簡單的場景應答。比如,對于用戶的回答“不需要”時,那我們就將不需要配置在否定應答里面,只要用戶的一句話中有不需要三個字,那我們就將我們否定應答的答案回答給用戶就可以,而對于能用規則(正則表達式)解決的問題其實已經占了正常對話中的很大一部分對話了。

對于特定領域的智能客服機器人而言,目前主要是基于規則(正則表達式)和基于關鍵詞的檢索這兩種算法來實現自由的對話,一般不會用到seq2seq,因為自動生成模式一般是自由的對話場景,如Siri,但是對于客服來說只要懂得特定領域的對話就可以了,所以基于規則的主要難點在,正則話術的設計,我們要設計特定的話術去回答不同的問題,且回答時還要考慮到上下文的問題,當然這些aiml就可以實現,所以我們大部分的工作量都是在設計正則表達式,設計一般話術,設計上下文應答話術,邏輯策略的設計。

后續會介紹基于檢索的模式,去解決剩下的問題,讓機器人變得更加智能,更加像人,而且我堅用簡單的模型就能解決的問題就不要用負責的模型。

總結

以上是生活随笔為你收集整理的自然语言处理--基于规则(AIML)的问答机器人的全部內容,希望文章能夠幫你解決所遇到的問題。

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