2016-04-08 74 views
1

我很困惑我應該採取的方法來實現一個使用Bot框架的FAQ。我考慮使用LUIS,但發現我必須爲每個問題創建一個意圖。由於可能有很多這樣的(比如100),我想知道是否有更好的方法?如何在Bot框架上實現FAQ?

回答

1

我不認爲你需要爲每個問題創建一個意圖,那個信息設計是不可接受的。你需要做的是分類你的問題類型,這些分類應該是你的意圖。

我們幾乎做同樣的事情,所以在我的情況下,我創建了一個名爲「定義」的意圖,通常以「什麼是...」開頭。然後,我嘗試用所有可能的問題來詢問定義。

由於您在處理常見問題解答,因此它是一組有限的信息。基本上,您可以使用所有常見問題解答並將它們作爲話語提交,並將其歸類爲適當的意圖。

+0

是的,這應該大大減少意圖的數量,謝謝。 –

+1

因爲他從根本上說是正確的,所以我會把它放在羅馬人的答案上。只需創建一個像「常見問題解答」的單一意圖,然後培訓一個LUIS實體來提取用戶問題。從那裏使用標準的搜索技術來找到最相關的定義。如果你有大量的FAQ,你可以使用像Lucene這樣的搜索引擎來搜索答案。 –

2

如果你正在做的是返回常見問題,目前還不清楚你是否需要LUIS。只需使用搜索技術。如果您只有幾百個常見問題解答,您可以使用像Lucene這樣的搜索引擎,或者使用更簡單的搜索引擎來編寫您自己的排序器,以便根據與該文檔匹配的用戶查詢中的單詞數量來選擇答案。

一個相當簡單的排名算法就是將用戶話語分解爲令牌,然後爲每個文檔搜索文檔中的每個令牌。通過計算文檔中匹配的令牌數量並計算覆蓋率得分來生成您的得分。覆蓋範圍基本上是用戶查詢中條款的百分比與文檔匹配的百分比。

有幾種方法可以計算覆蓋率,但這裏有一個相當簡單的方法。將所有匹配的令牌長度相加,然後將其除以正搜索的文檔/字段的總長度。因此,讓我們說我們有一個問題「向亞洲展示我的狗」,我們有一個名爲「亞洲狗」的文件。我們會在用戶話語中匹配「狗」和「亞洲」兩個令牌。它們的總長度爲8,標題長度爲10.因此(8/10)將爲標題字段提供0.8的覆蓋率分數。

在搜索文檔時,您可以使用相同的基本技巧,但是您想要說明術語匹配的次數。基本上我們想要一個文件,有5個「狗」和10個「亞洲」出現排名文件,每個文件只有一個出現。

有很多其他的東西,你可以添加到你的排名算法,如干擾& TF-IDF的支持,但在這一點上,你應該只使用搜索引擎。