執行偵測意圖要求時,您可以選擇提供語音內容,為語音辨識器提供提示。這些提示可協助系統在特定對話狀態中進行辨識。
自動語音調整
自動語音調整功能會自動使用對話狀態,將相關實體和訓練片語傳遞給所有意圖偵測要求,做為語音內容提示,藉此提高代理程式的語音辨識準確度。這項功能預設為啟用。
啟用或停用自動語音調整功能
如要啟用或停用自動語音調整功能,請按照下列步驟操作:
- 前往 Dialogflow ES 主控台
- 選取左側欄選單頂部附近的代理程式
- 按一下代理程式名稱旁邊的設定 settings 按鈕
- 選取 [Speech] (語音) 分頁標籤
- 捲動至「Improve Speech Recognition Quality」(改善語音辨識品質) 專區
- 將「啟用自動語音調整功能」切換為開啟或關閉
改善語音辨識功能的代理程式設計
啟用自動語音調整功能後,您就可以建構代理程式來利用這項功能。以下各節說明如何對代理程式的訓練詞組、情境和實體進行特定變更,以改善語音辨識結果。
訓練詞組和語境
- 如果您使用「stuffy nose」(鼻塞) 之類的詞組來定義訓練詞組,系統會將聽起來類似的使用者話語內容可靠地辨識為「stuffy nose」(鼻塞) 而非「stuff he knows」(他知道的事情)。
如果會話中有有效的背景資訊,自動語音調整功能會將大部分偏好值設為意圖的訓練詞組,其中所有輸入背景資訊都處於有效狀態。舉例來說,如果有兩個有效的背景資訊「pay-bill」和「confirmation」,下列所有意圖都會影響自動語音調整:含有單一輸入背景資訊「pay-bill」的意圖、含有單一輸入背景資訊「confirmation」的意圖,以及含有兩個輸入背景資訊「pay-bill」和「confirmation」的意圖。
如果會話階段沒有任何有效的背景資訊,自動語音調整功能就會偏向沒有輸入背景資訊的意圖訓練詞組。
- 如果您有必要參數,會強制 Dialogflow 進入填入方塊提示,自動語音調整功能會偏向要填入的實體。
無論情況為何,自動語音調整功能只會偏向語音辨識,不會限制語音辨識。舉例來說,即使 Dialogflow 會提示使用者提供必要參數,使用者仍可觸發其他意圖,例如頂層「與服務專員交談」意圖。
系統實體
如果您定義的訓練詞組使用 @sys.number
系統實體,當使用者說出「I want two」(我要兩個) 時,系統可能會將其辨識為「to」(至)、「too」(也)、「2」或「two」(二)。
啟用自動語音調整功能後,Dialogflow 會在語音辨識期間使用 @sys.number
實體做為提示,而系統更有可能將參數擷取為「2」。
自訂實體
如果您為貴公司提供的產品或服務名稱定義自訂實體,當使用者在話語內容中提到這些字詞時,系統就更有可能辨識出這些字詞。訓練詞組「I love Dialogflow」,其中「Dialogflow」已加註為 @product 實體,會告知自動語音調整功能偏好「I love Dialogflow」、「I love Cloud Speech」以及 @product 實體中的所有其他項目。
使用 Dialogflow 偵測語音時,定義清楚的實體同義詞尤其重要。假設您有兩個 @product 實體項目:「Dialogflow」和「Dataflow」。「Dialogflow」的同義詞可能是「Dialogflow」、「對話流程」、「對話建立工具」、「Speaktoit」、「speak to it」、「API.ai」、「API dot AI」。這些是良好的同義字,因為涵蓋最常見的變化形式。您不需要新增「對話方塊建構工具」,因為「對話方塊」已涵蓋這個項目。
- 使用者發出的語音內容如果包含連續但不同的數字實體,可能會造成歧義。舉例來說,「我要兩個十六包裝」可能表示 16 包裝的數量為 2,或 216 個包裝。如果您設定的實體含有拼寫值,語音調整功能就能協助釐清這些情況:
- 定義含有項目的
quantity
實體:zero
one
...
twenty
- 定義含有項目的
product
或size
實體:sixteen pack
two ounce
...
five liter
- 語音調整功能只會使用實體同義詞,因此您可以使用參照值
1
和單一同義詞one
定義實體,以簡化執行邏輯。
- 定義含有項目的
規則運算式實體
規則運算式實體可在適當設定及測試後,針對「ABC123」或「12345」等英數字元和數字序列觸發自動語音調整功能。如要透過語音辨識這些序列,請實作下列所有四項規定:
1. 正規表示式輸入要求
雖然任何規則運算式都能用於從文字輸入內容中擷取實體,但只有特定運算式會在辨識語音時,將自動語音調整功能偏向以字母或數字序列拼寫的字詞。
在正規表示式實體中,至少有一項項目必須遵循以下所有規則:
- 應符合部分英數字元,例如:
\d
、\w
、[a-zA-Z0-9]
- 不得包含空白
\s
,但允許使用\s*
和\s?
- 不含有擷取或非擷取群組
()
- 不嘗試比對任何特殊字元或標點符號,例如:
` ~ ! @ # $ % ^ & * ( ) - _ = + , . < > / ? ; ' : " [ ] { } \ |
這個項目可以包含字元集 []
和重複量詞,例如 *
、?
、+
、{3,5}
。
請參閱範例。
2. 參數定義規定
將規則運算式實體標示為必要的意圖參數,以便在運算單元填充期間收集。這樣一來,自動語音調整功能就能將重點放在序列辨識上,而非同時嘗試辨識意圖和序列。否則「我的 ABC123 包裹在哪裡?」可能會被誤認為「我的包裹 4ABC123 在哪裡?」
3. 訓練詞組註解規定
請勿將規則運算式實體用於意圖訓練詞組註解。這可確保參數會在填入空白時解析。
4. 測試規定
請參閱「測試語音調整功能」。
範例
舉例來說,如果規則運算式實體包含單一項目 ([a-zA-Z0-9]\s?){5,9}
,就不會觸發語音序列辨識器,因為它包含擷取群組。如要修正這個問題,只要為 [a-zA-Z0-9]{5,9}
新增另一個項目即可。這樣一來,當您要比對「ABC123」時,就能使用序列辨識器,但 NLU 仍會比對「ABC 123」這類含有空格的輸入內容,因為原始規則允許空格。
以下是適合英數字元序列的規則運算式範例:
^[A-Za-z0-9]{1,10}$ WAC\d+ 215[2-8]{3}[A-Z]+ [a-zA-Z]\s?[a-zA-Z]\s?[0-9]\s?[0-9]\s?[0-9]\s?[a-zA-Z]\s?[a-zA-Z]
以下是數字序列的規則運算式範例:
\d{2,8} ^[0-9]+$ 2[0-9]{7} [2-9]\d{2}[0-8]{3}\d{4}
規則運算式的解決方法
自動語音調整功能內建的規則運算式實體支援功能因語言而異。請參閱「語音類別符記」,瞭解 $OOV_CLASS_ALPHANUMERIC_SEQUENCE
和 $OOV_CLASS_DIGIT_SEQUENCE
支援哪些語言。
如果您的語言未列於其中,可以採取其他方式。舉例來說,如果您希望系統能夠正確辨識由三個字母加上三個數字組成的員工 ID,您可以使用下列實體和參數來建構代理程式:
- 定義一個包含 10 個實體項目 (含同義詞) 的
digit
實體:0, 0
1, 1
...
9, 9
- 定義一個包含 26 個實體項目 (含同義詞) 的
letter
實體:A, A
B, B
...
Z, Z
- 定義一個包含單一實體項目 (不含同義詞) 的
employee-id
實體:@letter @letter @letter @digit @digit @digit
- 在訓練詞組中使用
@employee-id
做為參數。
測試語音調整
測試代理程式針對特定訓練詞組或實體比對的語音適應功能時,請勿直接跳到測試對話中第一個語音發言的比對結果。在要測試的對話開始前,請只使用語音或事件輸入內容進行整個對話。以這種方式測試時,代理程式的行為會類似於實際的正式對話。
限制
限制如下:
- 語音調整功能不適用於所有語音模型和語言組合。請參閱 Cloud Speech 支援的語言頁面,確認語音模型和語言組合是否支援「模型調整」功能。
- 自動語音調整功能不適用於 Actions on Google (Google 助理),因為語音辨識作業是在將資料傳送至 Dialogflow 之前由 Actions on Google 執行的。
- 辨識長字元序列相當困難。單一回合中擷取的字元數量,會直接取決於輸入音訊的品質。舉例來說,如果整合功能會處理電話通話音訊,您需要啟用強化語音模型,才能可靠地辨識長度超過四或五個英數字元的字元序列,或長度超過 10 個半形字元的數字序列。如果您已遵循所有規則運算式實體規範,但仍無法在單一回合中擷取整個序列,不妨考慮使用其他對話替代方案:
- 驗證序列是否與資料庫相符時,請考慮交叉比對其他收集到的參數,例如日期、姓名或電話號碼,以便允許不完全相符的情況。舉例來說,除了要求使用者提供訂單號碼,也請要求他們提供電話號碼。如今,當 webhook 查詢資料庫以取得訂單狀態時,可以先依據電話號碼,然後傳回該帳戶最相符的訂單。這可能會導致 Dialogflow 將「ABC」誤聽為「AVC」,但仍會為使用者傳回正確的訂單狀態。
- 如果是超長的序列,建議您設計流程,鼓勵使用者在過程中暫停,以便對話方塊隨時確認。 詳情請參閱這份教學課程。