語音調整

執行偵測意圖要求時,您可以選擇提供語音內容,為語音辨識器提供提示。這些提示可協助系統在特定對話狀態中進行辨識。

自動語音調整

自動語音調整功能會自動使用對話狀態,將相關實體和訓練片語傳遞給所有意圖偵測要求,做為語音內容提示,藉此提高代理程式的語音辨識準確度。這項功能預設為啟用。

啟用或停用自動語音調整功能

如要啟用或停用自動語音調整功能,請按照下列步驟操作:

  1. 前往 Dialogflow ES 主控台
  2. 選取左側欄選單頂部附近的代理程式
  3. 按一下代理程式名稱旁邊的設定 按鈕
  4. 選取 [Speech] (語音) 分頁標籤
  5. 捲動至「Improve Speech Recognition Quality」(改善語音辨識品質) 專區
  6. 將「啟用自動語音調整功能」切換為開啟或關閉

改善語音辨識功能的代理程式設計

啟用自動語音調整功能後,您就可以建構代理程式來利用這項功能。以下各節說明如何對代理程式的訓練詞組、情境和實體進行特定變更,以改善語音辨識結果。

訓練詞組和語境

  • 如果您使用「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
    • 定義含有項目的 productsize 實體:
      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」,但仍會為使用者傳回正確的訂單狀態。
    • 如果是超長的序列,建議您設計流程,鼓勵使用者在過程中暫停,以便對話方塊隨時確認。 詳情請參閱這份教學課程