iT邦幫忙

2024 iThome 鐵人賽

DAY 10
0

我們從前面兩天瞭解了Chatbot 以NLU任務解析話語中的含義,
以及將有意義的資訊擷取出來。

但是如果你今天到一間旅館,要求住宿,
總不可能只率性的說一句「今晚我要住下來」吧?

訂房除了需告知意圖外,
還需要提供入住日期、入住天數、入住人數等資訊才能完成訂房。

既然要提供那麼多資訊,就很難在一句話內就講完
那交互對話的結果,就會造成對話落落長,要讓Chatbot一次總結也難

那Chatbot要如何在對話過程中記錄你提到的資訊並總結呢?
這時候,我們就要用到對話狀態追蹤了!!!

對話狀態追蹤-紀錄對話中有用的資訊

對話狀態追蹤(DST,Dialogue State Tracking),就是將對話中有用的資訊視為槽(Slot)槽值(Value),並將其紀錄為狀態(State),直到對話結束前,都會不斷的將槽值更新至狀態中。

你可以理解成DST目標是把使用者說的話簡化為一個有用的資訊庫,也可以理解為做了對話摘要。

DST的做法為以下:

  • 使用者意圖識別(Intention Classification):分析使用者輸入,識別其意圖,如預訂餐廳、查詢航班等。
  • 槽位填充(slot-Filling):提取與意圖相關的具體資訊(如日期、時間、地點等),並將其儲存在相應的插槽中。
  • 對話管理:維護對話的上下文,以便系統能夠在多輪對話中保持一致性。

交互對話的過程中,DST將每輪對話提供的資訊記錄下來,並整理成類似Python字典的資料結構。

使用情境-以CrossWOZ語料為例

若我詢問: 「我想找有健身房价格为600评分为4以上的酒店」
DST會將价格评分視為槽(Slot),並將
那DST就會將對話總結成以下狀態格式:

{
    "名称": "",
    "酒店类型": "",
    "地址": "",
    "地铁": "",
    "电话": "",
    "酒店设施": "健身房",
    "价格": "600",
    "评分": "4",
    "周边景点": "",
    "周边餐馆": "",
    "周边酒店": ""
}

若Chatbot詢問: 「请问你想要的酒店附近有哪些景点呢?」
你則回: 「法源寺民族文化宫附近」
對話狀態又會紀錄成以下:

{
    "名称": "",
    "酒店类型": "",
    "地址": "",
    "地铁": "",
    "电话": "",
    "酒店设施": "健身房",
    "价格": "600",
    "评分": "4",
    "周边景点": [
        "法源寺",        # 對話狀態會隨著對話做累加
        "民族文化宫"
    ],
    "周边餐馆": "",
    "周边酒店": ""
}

看懂了嗎? 簡單來說只要有資訊被DST認為是要紀錄的,他就會更新狀態。
若是打招呼或其他與話題無關的資訊則會被排除掉。

BERT-DST: 專用於做對話狀態追蹤的BERT

那其實現在對於TOD(任務導向對話)或DST的研究皆以LLMs為主要模型
解決了BERT及其他語言模型OOV(Out-Of-Vocabulary)的問題。
但BERT-DST的概念較為簡單,我們還是以此為範例來簡介一下~

BERT-DST先辨識目前話語(Utterance)是否包含槽或槽值,如果有就把它們的範圍標記起來

[CLS]標籤位置用來辨識該句子裡有沒有重要資訊,
[CLS]到[SEP]之間為對話歷史,即上下文對話,用來加強DST辨識能力用
[SEP]後的句子為當前話語,對應的位置用來辨識該字詞(token)是否為重要資訊(slot)的範圍

Reference.
INTERSPEECH 2019-BERT-DST: Scalable End-to-End Dialogue State Tracking with Bidirectional Encoder Representations from Transformer
李宏毅-Dialogue State Tracking as Question Answering


上一篇
Day9: 以Chatbot NLU來讀懂你的心❤️
下一篇
Day11: 貼心小助理之實作T5對話追蹤器
系列文
軟體工程師的脫魯日誌-持續介紹hardcore AI研究直到脫魯🥹13
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言