前面幾篇介紹了rasa-nlu-gao中自定義的幾個(gè)模塊劳曹,最近也沒(méi)有怎么新增特別的模塊奴愉,只是在詞向量這塊不斷在嘗試。后續(xù)項(xiàng)目里用了google的bert做詞向量生成铁孵,當(dāng)然這個(gè)也已經(jīng)集成到了rasa-nlu-gao里面了锭硼。項(xiàng)目里是采用了bert-as-service,使用這個(gè)repo提供bert model的service蜕劝。具體的用法可以參照config_embedding_bilstm.yml這個(gè)配置文件檀头。
- name: "bert_vectors_featurizer"
ip: '172.16.10.46'
port: 5555
然而這篇想講的不是模塊的編寫和使用。現(xiàn)在做的這個(gè)對(duì)話系統(tǒng)是在特定領(lǐng)域的耳聾遺傳咨詢岖沛,然而前天給老板匯報(bào)暑始,老板說(shuō)要支持閑聊的功能,我當(dāng)時(shí)是拒絕的婴削。然后經(jīng)過(guò)一天的思考廊镜,現(xiàn)在已經(jīng)能夠?qū)崿F(xiàn)了:)
所以呢,這里說(shuō)說(shuō)集成第三方閑聊接口的實(shí)現(xiàn)方法唉俗。這里的閑聊模型我們沒(méi)有自己訓(xùn)練嗤朴,因?yàn)榇鷥r(jià)太大效果也不見(jiàn)得多好。所以調(diào)用的圖靈機(jī)器人openapi互躬,當(dāng)然你可以調(diào)用其他第三方的接口播赁。那怎么集成到rasa-core之中呢?
這里我的思路是(后面可能會(huì)做些調(diào)整)吼渡,如果在意圖識(shí)別和action識(shí)別低于某個(gè)閾值時(shí)候容为,將調(diào)用第三方api。這里需要在train_dialogue里面加上FallbackPolicy這個(gè)方法,
def train_dialogue(domain_file, model_path, training_folder):
agent = Agent(domain_file, policies=[
MemoizationPolicy(max_history=8),
KerasPolicy(MaxHistoryTrackerFeaturizer(BinarySingleStateFeaturizer(),
max_history=8)),
FallbackPolicy(nlu_threshold=0.7, core_threshold=0.3, fallback_action_name="action_default_fallback")])
training_data = agent.load_data(training_folder)
agent.train(training_data, epochs=100)
agent.persist(model_path)
比如這里坎背,給意圖的閾值為0.7替劈,action的閾值為0.3,就是說(shuō)意圖和預(yù)測(cè)的action分別低于這兩個(gè)值的時(shí)候得滤,會(huì)調(diào)用action_default_fallback這個(gè)自定義的action陨献。而action_default_fallback在rasa-core寫法如下:
class ActionDefaultFallback(Action):
def name(self):
return "action_default_fallback"
def run(self, dispatcher, tracker, domain):
text = tracker.latest_message.get('text')
message = get_response(text)
if message['code'] == 100000:
dispatcher.utter_message("{}".format(message['text']))
else:
dispatcher.utter_template('utter_default', tracker)
return [UserUtteranceReverted()]
這里需要去看rasa-core中action的文檔了。而圖靈機(jī)器人api的調(diào)用懂更,網(wǎng)上也有好多教程眨业,我這里用的是v1的api
def get_response(msg):
key = apikey
api = 'http://www.tuling123.com/openapi/api?key={}&info={}'.format(
key, msg)
return requests.get(api).json()
apikey獲取需要去圖靈官網(wǎng)注冊(cè)獲取,每天有1000次免費(fèi)調(diào)用,想更多需要付費(fèi)了,如果有自己的閑聊模型或者更好的第三方那再好不過(guò)誓沸。
這里就已經(jīng)完成在rasa系統(tǒng)里面集成閑聊的功能了励两,是不是有點(diǎn)簡(jiǎn)單嚼锄,肯定還會(huì)有坑,還要繼續(xù)踩啊,也是醉了。最后展示下效果
這里的“今天天氣怎么樣奸腺?”意圖不在我的模型中,所以這里會(huì)調(diào)用第三方閑聊的api血久,并將結(jié)果返回突照。好吧,這個(gè)坑還要繼續(xù)踩洋魂,先聊到這兒吧绷旗。
原創(chuàng)文章,轉(zhuǎn)載請(qǐng)說(shuō)明出處