語音調整

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

自動語音調整

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

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

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

主控台

  1. 開啟 Dialogflow CX 控制台
  2. 選擇 GCP 專案。
  3. 選取代理程式。
  4. 按一下「服務專員設定」
  5. 按一下「語音和 IVR」分頁標籤。
  6. 將「啟用自動語音調整功能」切換為開啟或關閉。
  7. 按一下 [儲存]

API

請參閱 Agent 類型的 getpatch/update 方法。

為代理程式參照選取通訊協定和版本:

通訊協定 V3 V3beta1
REST 服務專員資源 服務專員資源
RPC Agent 介面 Agent 介面
C++ AgentsClient 不適用
C# AgentsClient 不適用
Go AgentsClient 不適用
Java AgentsClient AgentsClient
Node.js AgentsClient AgentsClient
PHP 不適用 不適用
Python AgentsClient AgentsClient
Ruby 不適用 不適用

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

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

訓練詞組

  • 如果您使用「stuffy nose」(鼻塞) 之類的詞組來定義訓練詞組,系統會將聽起來類似的使用者話語內容可靠地辨識為「stuffy nose」(鼻塞) 而非「stuff he knows」(他知道的事情)。
  • 如果您有必要參數,會強制將 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 做為參數。

手動語音調整

手動語音調整功能可讓您手動設定流程或頁面的語音調整短語。這項屬性也會在啟用自動語音調整功能時,覆寫自動語音調整功能產生的隱含語音背景資訊。

流程層級和頁面層級的語音調整設定具有階層關係,也就是說,頁面會預設繼承流程層級的語音調整設定,如果頁面有自訂設定,則更精細的頁面層級一律會覆寫流程層級。

如要啟用語音調整設定,可以分別啟用流程層級設定和頁面層級設定。如果未啟用流程層級調整設定,您仍可在頁面層級選擇「自訂」,為該特定頁面啟用手動語音調整功能。同樣地,如果您在流程層級設定中停用手動語音調整功能,流程中選取「自訂」的頁面就不會受到影響。

不過,流程層級設定和頁面層級設定無法個別停用。如果流程已啟用手動語音調整功能,您就無法透過「自訂」選項,為流程下方的頁面停用這項功能。因此,如果您想在流程中為網頁同時使用手動語音調整和自動語音調整,請勿在流程層級啟用手動語音調整功能,而應改為只使用網頁層級的調整設定。您可以參考下表,瞭解在調整情況下,應使用哪些流程和網頁設定組合。

目標效果 建議的調整設定用法
停用流程的自動調整功能 啟用流程,但沒有片語組合 (流程中的網頁預設會使用流程設定)。
停用頁面的自動調整功能 流程已停用,且頁面已啟用 (已選取「自訂」),但沒有字詞集。
僅針對流程中的所有頁面使用手動語音調整 已啟用流程。自訂需要使用不同於流程的詞組集合的頁面。
在流程中同時使用自動和手動調整 流程已停用。自訂要套用手動調整的頁面。
僅針對流程中的所有頁面使用自動語音調整功能 流程已停用。

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

如要在流程或頁面層級啟用或停用手動語音調整功能,請按照下列步驟操作:

流程設定

  1. 開啟 Dialogflow CX 控制台
  2. 選擇 GCP 專案。
  3. 將滑鼠游標懸停在「流程」部分的流程中。
  4. 按一下選項 按鈕。
  5. 在下拉式選單中選取「流程設定」
  6. 勾選或取消勾選「Enable manual speech adaptation」(啟用手動語音調整) 核取方塊。
  7. 在字詞組合表格中編輯、新增或刪除字詞組合
  8. 按一下 [儲存]

頁面設定

  1. 開啟 Dialogflow CX 控制台
  2. 選擇 GCP 專案。
  3. 將滑鼠游標懸停在「頁面」部分的頁面上。
  4. 按一下選項 按鈕。
  5. 在下拉式選單中選取「頁面設定」
  6. 系統預設會選擇「使用流程層級」,如果您選擇這個選項,系統就會將流程層級的適應詞彙重複用於這個頁面。您可以選擇「自訂」,設定與流程層級設定不同的適應詞。即使在流程層級停用手動語音調整功能,您仍可透過「自訂」選項,為該流程中的頁面啟用及設定手動語音調整功能。
  7. 在適應詞組集資料表中編輯、新增或刪除詞組集
  8. 按一下 [儲存]

手動設定詞組集,改善語音辨識功能

1. 字詞和詞組

在調整詞組集中,您可以使用選用的語音類別符記參照,定義單字或多字詞組。舉例來說,您可以加入「great rate」、「tracking number is $OOV_CLASS_ALPHANUMERIC_SEQUENCE」或「$FULLPHONENUM」等字詞。這些提供的詞組會比其他音近的詞組,更有可能被轉錄。當您新增多字詞組合而未加以提升時,偏差會套用至整個詞組和詞組內的連續部分。一般來說,詞組數量應保持在較少的程度,且您只應加入語音辨識在未經語音調整的情況下難以正確辨識的詞組。如果語音轉文字功能已能正確辨識某個字詞組,就不需要將該字詞組加入語音調整設定。如果您發現 Speech-to-Text 在某個頁面或流程中經常誤認某些詞組,可以將正確的詞組新增至相應的調整設定。

辨識錯誤修正範例

以下範例說明如何使用語音調整功能修正辨識問題。假設您正在設計手機裝置交易服務代理,當服務代理詢問「你需要什麼協助?」時,使用者可能會在回應時說出「賣手機」或「手機」等字詞。那麼,我們該如何使用語音調整功能,提高這兩個詞組的辨識準確率?

如果在調整設定中加入這兩個詞組,Speech-to-Text 仍可能會混淆,因為兩者聽起來很相似。如果您只提供其中一個詞組,Speech-to-Text 可能會將一個詞組誤認為另一個詞組。為提高這兩個詞組的語音辨識準確度,您需要為語音轉文字提供更多上下文線索,以便系統區分何時應聽取「sell phones」,何時應聽取「cell phone」。舉例來說,您可能會發現使用者經常在「如何賣手機」、「想賣手機」或「你賣手機嗎」等句子中使用「賣手機」一詞,而在「購買手機」、「手機帳單」和「手機服務」等句子中使用「手機」一詞。如果您向模型提供這些更精確的詞組,而不是「cell phone」和「sell phones」等短短的原始詞組,Speech-to-Text 就會學習到「sell phone」這個動詞詞組較有可能出現在「how to」、「want to」和「do you」等字詞後方,而「cell phone」這個名詞詞組則較有可能出現在「purchase」或「bill」和「service」等字詞後方。因此,在設定調整字詞時,建議提供更精確的字詞,例如「how to sell phones」或「do you sell phones」,而非只包含「sell phone」。

2. Speech 類別符記

除了自然語言字詞外,您也可以將語音類別符號參照嵌入字詞中。語音類別符記代表常見的概念,通常會遵循特定的書寫格式。舉例來說,如果地址中含有「123 Main Street」這類的地址編號,使用者通常會預期看到地址編號的數字格式「123」,而不是完整拼寫的版本「one-hundred twenty-three」。如果您希望轉錄結果採用特定格式,尤其是英數字序列,請參閱支援的類別符號清單,瞭解哪些符號適用於您的語言和用途。

如果網頁已包含意圖路徑或參照系統實體參數,請參閱以下常見系統實體和語音類別符記之間對應關係的參考表格:

系統實體 Speech 類別符記
@sys.date $MONTH $DAY $YEAR
@sys.date-time $MONTH $DAY $YEAR
@sys.date-period $MONTH $DAY $YEAR
@sys.time $TIME
@sys.time-period $TIME
@sys.age $OPERAND
@sys.number $OPERAND
@sys.number-integer $OPERAND
@sys.cardinal $OPERAND
@sys.ordinal $OPERAND
@sys.percentage $OPERAND
@sys.duration $OPERAND
@sys.currency-name $MONEY
@sys.unit-currency $MONEY
@sys.phone-number $FULLPHONENUM
@sys.zip-code $POSTALCODE$OOV_CLASS_POSTALCODE
@sys.address $ADDRESSNUM $STREET $POSTALCODE
@sys.street-address $ADDRESSNUM $STREET $POSTALCODE
@sys.temperature $OOV_CLASS_TEMPERATURE
@sys.number-sequence $OOV_CLASS_DIGIT_SEQUENCE
@sys.flight-number $OOV_CLASS_ALPHANUMERIC_SEQUENCE

3. 增強值

如果不使用加強值新增字詞,偏差效果就不會太明顯,您可以使用加強值進一步強化語音調整偏差效果。

當 Boost 設為大於 0 且不超過 20 的值時,會套用額外偏差。當增強值為空白或 0 時,預設偏差效果有助於辨識整個詞組以及詞組中的連續部分。舉例來說,未經強化的詞組「are you open」(「你是否願意」) 可協助系統辨識該詞組,以及「I sell phones」(「我要賣手機」) 和「Hi are you open」(「你好,你是否願意」) 等類似詞組。

套用正向加強時,偏好效果會更強,但只會套用於完全相符的字詞。舉例來說,如果使用「sell phones」這類強化字詞,系統就能辨識「can you sell phones」,但無法辨識「do you sell any phones」。

因此,如果您同時提供有/無加強功能的字詞,就能獲得最佳成效。

較高的加強值可減少偽陰性情形,也就是音訊中出現的字詞或詞組未被語音轉文字正確辨識 (偏差不足) 的情況。不過,提高值也會提高出現偽陽性的機率,也就是在轉錄稿中出現某個字詞或詞組,但實際上音訊中並未出現該字詞或詞組的情況 (過度偏誤)。您通常需要微調偏見詞組,才能在兩個偏見問題之間取得良好的取捨點。

如要進一步瞭解如何微調字詞的加強值,請參閱 Cloud Speech 關於加強功能的說明文件

使用自動或手動語音調整功能的時機

一般來說,如果您不確定語音調整功能是否能改善語音辨識品質 (沒有明確的轉錄錯誤模式),建議您先嘗試自動語音調整功能,再改用手動語音調整功能。如要做出更精細的決定,請考量下列因素,決定採用自動語音調整功能或手動語音調整功能:

1. 填寫表單

自動語音調整功能非常適合表單填寫功能,因為這項功能會為表單參數使用 ABNF 文法內容,並根據實體類型強制執行文法規則。由於手動語音調整功能尚不支援 ABNF 文法,因此在填寫表單的頁面中,通常會優先採用自動語音調整功能,而非手動語音調整功能。不過,如果頁面只包含系統實體參數,以及語音類別符記支援的簡單正規表示式實體,您也可以使用手動語音調整功能,取得類似自動語音調整的偏差效果,而無需調整正規表示式實體

2. 頁面或流程轉換的複雜度

如果是含有少量意圖路徑的簡單頁面或流程,自動語音調整功能可能會產生代表性偏差短語,並且運作得相當良好。

不過,如果網頁或流程含有大量意圖路徑 (針對網頁,請一併考量流程層級路徑的數量),或是任何意圖含有過長或過短的非必要訓練片語 (例如整個句子或只有一或兩個音節的單字),語音調整模型很可能無法順利處理這些片語。您應先嘗試為複雜度高的開放式網頁停用語音調整功能,方法是啟用空白詞組集 (空白調整覆寫) 的手動語音調整功能。接著,評估是否仍有需要提供給 Speech-to-Text 的特殊不含歧義字詞,以改善辨識品質。

這個複雜性問題的另一個症狀,是啟用自動語音調整功能時,會出現許多偏差不足或偏差過多的問題。與上述情況類似,您也必須先針對特定網頁停用語音調整功能進行測試。如果在停用語音調整功能後,錯誤行為仍持續發生,您可以將要修正的詞組加入語音調整設定,甚至在必要時新增加強值,進一步強化偏差效果。

測試語音調整

測試代理程式針對特定訓練詞組或實體比對的語音適應功能時,請勿直接跳到測試對話中第一個語音發言的比對結果。在要測試的對話開始前,請只使用語音或事件輸入內容進行整個對話。以這種方式測試時,代理程式的行為會類似於實際的正式對話。

限制

限制如下:

  • 語音調整功能不適用於所有語音模型和語言組合。請參閱 Cloud Speech 支援的語言頁面,確認語音模型和語言組合是否支援「模型調整」功能。
  • 目前手動語音調整功能不支援自訂類別ABNF 文法。您可以啟用自動語音調整功能,或使用執行階段檢測意圖要求,運用這些調整功能。

  • 相同的加強值在不同語音模型和語言的表現可能不同,因此請謹慎為使用多種語言或語音模型的服務機器人手動設定這些值。目前,手動語音調整功能適用於代理程式中的所有語言,因此多語代理程式應只使用不區分語言的詞組,或將每種語言分成個別代理程式。由於預設偏差行為 (不提供增強或 0 增強) 通常可為所有語言和模型提供合理的效能,因此除非辨識用途需要更強的偏差,否則您不需要設定語言專屬的增強值。如要進一步瞭解如何微調提升值,請參閱這份 Cloud Speech-to-Text 指南

  • 辨識長字元序列相當困難。單一回合中擷取的字元數量,會直接取決於輸入音訊的品質。如果您已遵循所有 規則運算式實體指南,並嘗試在手動語音調整設定中使用相關的語音類別符記,但仍無法在單一回合中擷取整個序列,不妨考慮其他對話替代方案:
    • 驗證序列是否與資料庫相符時,請考慮交叉比對其他收集到的參數,例如日期、姓名或電話號碼,以便允許不完全相符的情況。舉例來說,除了要求使用者提供訂單號碼,也請要求他們提供電話號碼。如今,當 webhook 查詢資料庫以取得訂單狀態時,可以先依據電話號碼,然後傳回該帳戶最相符的訂單。這可能會導致 Dialogflow 將「ABC」誤聽為「AVC」,但仍會為使用者傳回正確的訂單狀態。
    • 如果是超長序列,建議設計流程,鼓勵使用者在過程中暫停,以便對話方塊隨時確認。