執行偵測意圖要求時,您可以選擇提供phrase_hints,為語音辨識器提供提示。這些提示有助於在特定對話狀態中辨識語音。
自動語音調整
自動語音調整功能會自動使用對話狀態,將相關實體和訓練詞組做為語音內容提示,傳遞至所有偵測意圖要求,藉此提高代理程式的語音辨識準確率。這項功能預設為停用。
啟用或停用自動語音調整功能
如要啟用或停用自動語音調整功能,請按照下列步驟操作:
控制台
- 開啟 Dialogflow CX 控制台。
- 選擇 GCP 專案。
- 選取代理程式。
- 按一下「代理程式設定」。
- 按一下「語音和 IVR」分頁標籤。
- 開啟或關閉「啟用自動語音調整功能」。
- 按一下 [儲存]。
API
請參閱 Agent 類型的 get 和 patch/update 方法。
為代理程式參照選取通訊協定和版本:
| 通訊協定 | V3 | V3beta1 |
|---|---|---|
| REST | 服務專員資源 | 服務專員資源 |
| RPC | 服務專員介面 | 服務專員介面 |
| 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),其中「Dialogflow」已加註為 @product 實體,會告知自動語音調整功能偏好「I love Dialogflow」、「I love Cloud Speech」和 @product 實體中的所有其他項目。
使用 Dialogflow 偵測語音時,請務必定義清楚的實體同義詞。假設您有兩個 @product 實體項目:「Dialogflow」和「Dataflow」。「Dialogflow」的同義字可能包括「Dialogflow」、「dialogue flow」、「dialogue builder」、「Speaktoit」、「speak to it」、「API.ai」、「API dot AI」。這些都是合適的同義字,因為涵蓋最常見的變化形式。您不需要加入「對話流程建構工具」,因為「對話流程」已涵蓋該工具。
- 如果使用者語音輸入連續但不同的數字實體,可能會造成語意不清。
舉例來說,「我要兩組十六入包裝」可能代表 2 組 16 入包裝,
或 216 組包裝。如果設定實體時使用拼音值,語音適應功能有助於消除這些情況的歧義:
- 定義含有項目的
quantity實體:zeroone...twenty - 定義含有項目的
product或size實體:sixteen packtwo ounce...five liter - 語音適應功能只會使用實體同義詞,因此您可以定義參考值為
1的實體,以及單一同義詞one,簡化完成邏輯。
- 定義含有項目的
規則運算式實體
Regexp 實體 可針對英數字元和數字序列 (例如「ABC123」或「12345」) 觸發自動語音適應功能,前提是已正確設定及測試。如要透過語音辨識這些序列,請實作下列所有四項規定:
1. Regexp entry requirement
雖然任何規則運算式都可用於從文字輸入內容擷取實體,但只有特定運算式會指示自動語音調整功能,在辨識語音時偏好以字母拼出的英數或數字序列。
在 regexp 實體中,至少一個項目必須符合所有這些規則:
- 應符合某些英數字元,例如:
\d、\w、[a-zA-Z0-9] - 不得包含空白字元
或\s,但允許使用\s*和\s? - 不得包含擷取或非擷取群組
() - 請勿嘗試比對任何特殊字元或標點符號,例如:
` ~ ! @ # $ % ^ & * ( ) - _ = + , . < > / ? ; ' : " [ ] { } \ |
這個項目可以包含字元集 [] 和重複量詞,例如 *、?、+、{3,5}。
請參閱範例。
2. 參數定義規定
將 Regexp 實體標示為必要的表單參數,以便在填寫表單時收集該實體。這樣一來,自動語音適應功能就會著重於辨識序列,而不是同時辨識意圖和序列。否則,「Where is my package for ABC123」(我的 ABC123 包裹在哪裡?) 可能會誤認成「Where is my package 4ABC123」(我的 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}
規則運算式解決方法
自動語音調整功能內建的 Regexp 實體支援因語言而異。
請參閱「語音類別符記」,瞭解 $OOV_CLASS_ALPHANUMERIC_SEQUENCE 和 $OOV_CLASS_DIGIT_SEQUENCE 支援的語言。
如果你的語言未列於其中,你可以解決這項限制。舉例來說,如果您希望系統能夠正確辨識出由三個字母加上三個數字組成的員工 ID,您可以使用下列實體和參數來建構代理程式:
- 定義一個包含 10 個實體項目 (含同義詞) 的
digit實體:0, 01, 1...9, 9 - 定義一個包含 26 個實體項目 (含同義詞) 的
letter實體:A, AB, B...Z, Z - 定義一個包含單一實體項目 (不含同義詞) 的
employee-id實體:@letter @letter @letter @digit @digit @digit - 在訓練詞組中使用
@employee-id做為參數。
手動語音調整
手動語音適應功能可讓您手動設定流程或頁面的語音適應片語。如果啟用自動語音調整功能,這項設定也會覆寫該功能產生的隱含語音背景資訊。
流程層級和頁面層級的語音適應設定具有階層式關係,也就是說,頁面預設會從流程層級繼承語音適應設定,如果頁面有自訂設定,更精細的頁面層級一律會覆寫流程層級。
語音調整設定、流程層級設定和頁面層級設定可以分別啟用。如果未啟用流程層級的適應設定,您仍可在頁面層級選擇「自訂」,針對特定頁面啟用手動語音適應功能。同樣地,如果您在流程層級設定中停用手動語音適應功能,流程中選取「自訂」的頁面不會受到影響。
不過,流程層級設定和網頁層級設定無法個別停用。 如果流程已啟用手動語音適應功能,您就無法透過「自訂」選項,為流程中的頁面停用這項功能。因此,如要混合使用手動語音調整和自動語音調整功能,請勿在流程層級啟用手動語音調整功能,而應只使用頁面層級的調整設定。請參閱下表,瞭解應根據改編案例使用哪些流程和頁面設定組合。
| 目標特效 | 建議使用的調整設定 |
|---|---|
| 停用流程的自動調整功能 | 已啟用流程,但沒有片語集 (根據預設,流程中的頁面會使用流程設定)。 |
| 停用網頁的自動調整功能 | 流程已停用,頁面已啟用 (選擇「自訂」),但沒有任何詞組集。 |
| 只對流程中的所有頁面使用手動語音調整功能 | 已啟用流程,自訂需要使用與流程不同片語集的頁面。 |
| 在流程中混合使用自動和手動調整功能 | 流程已停用。自訂要套用手動調整的頁面。 |
| 只對流程中的所有頁面使用自動語音調整功能 | 流程已停用。 |
啟用或停用手動語音調整功能
如要在流程或網頁層級啟用或停用手動語音調整功能,請按照下列步驟操作:
流程設定
- 開啟 Dialogflow CX 控制台。
- 選擇 GCP 專案。
- 將滑鼠游標懸停在「流程」部分中的流程上。
- 按一下選項 按鈕。
- 在下拉式選單中選取「流程設定」。
- 選取或取消選取「啟用手動語音適應」核取方塊。
- 在詞組集表格中編輯、新增或刪除詞組集
- 按一下 [儲存]。
頁面設定
- 開啟 Dialogflow CX 控制台。
- 選擇 GCP 專案。
- 將滑鼠游標懸停在「頁面」部分中的頁面上。
- 按一下選項 按鈕。
- 在下拉式選單中選取「頁面設定」。
- 系統預設會選擇「使用流程層級」,選取後,這個頁面會重複使用流程層級的改編片語。您可以選擇「自訂」,設定與流程層級設定不同的適應片語。即使在流程層級停用手動語音適應功能,您仍可透過「自訂」選項,為該流程中的頁面啟用及設定手動語音適應功能。
- 在改編詞組集表格中編輯、新增或刪除詞組集
- 按一下 [儲存]。
手動設定詞組集,提升語音辨識準確度
1. 字詞和詞組
在適應詞組集中,您可以定義單字或多字詞組,並選擇性參照語音類別符記。舉例來說,你可以加入「費率很划算」、「追蹤號碼為 $OOV_CLASS_ALPHANUMERIC_SEQUENCE」或「$FULLPHONENUM」等片語。系統會優先轉錄您提供的詞組,而非其他發音相似的詞組。如果新增多字詞組時未套用任何加成,系統會對整個詞組和詞組內的連續部分套用偏誤。一般來說,詞組數量應盡量減少,且只應新增語音辨識在沒有語音適應功能輔助的情況下,難以正確辨識的詞組。如果語音轉文字服務已能正確辨識某個詞組,就不必將該詞組加入語音適應設定。如果發現語音轉文字功能經常在特定頁面或流程中誤認幾個詞組,可以將正確的詞組新增至對應的適應設定。
辨識錯誤修正範例
以下範例說明如何使用語音適應功能修正辨識問題。假設您要設計手機交易代理程式,使用者在代理程式問完第一個問題「需要什麼協助?」後,可能會說出包含「賣手機」或「手機」的內容。那麼,我們該如何使用語音調整功能,提高這兩個詞組的辨識準確率?
如果在改編設定中同時加入這兩個片語, 語音轉文字服務可能仍會混淆,因為這兩個片語的發音相似。 如果只提供其中一個詞組,Speech-to-Text 可能會將一個詞組誤認為另一個。如要提高這兩個詞組的語音辨識準確度,您需要為語音轉文字服務提供更多情境線索,以便區分「sell phones」和「cell phone」。舉例來說,你可能會發現使用者經常在「如何賣手機」、「我想賣手機」或「你們賣手機嗎」等語句中使用「賣手機」,而「手機」則會出現在「購買手機」、「手機帳單」和「手機服務」等語句中。如果您向模型提供這些更精確的詞組,而不是「手機」和「賣手機」等簡短的原始詞組,語音轉文字就會瞭解「賣手機」這個動詞詞組更可能接在「如何」、「想要」和「你」等字詞後面,而「手機」這個名詞詞組更可能接在「購買」等字詞後面,或接在「帳單」或「服務」等字詞前面。因此,在設定改編片語時,一般來說,提供更精確的片語 (例如「如何銷售手機」或「你們銷售手機嗎」),會比只加入「銷售手機」更好。
2. 語音類別符記
除了自然語言字詞,您也可以在片語中嵌入語音類別權杖的參照。語音類別符記 代表常見概念,通常會遵循特定書寫格式。舉例來說,在「123 Main Street」這個地址中,一般人通常會看到「123」這個數字格式的地址號碼,而不是「one-hundred twenty-three」這個完整拼寫的版本。如果希望轉錄結果採用特定格式,尤其是英數序列,請參閱支援的類別權杖清單,瞭解您的語言和用途可使用哪些權杖。
如果網頁已含有參照系統實體的意圖路徑或參數,請參閱下表,瞭解常見系統實體與語音類別權杖之間的對應關係:
| 系統實體 | 語音類別符記 |
|---|---|
@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. 增強值
如果加入沒有升幅值的片語後,偏誤效果仍不夠強,您可以使用升幅值進一步加強語音適應偏誤效果。
如果將增強值設為大於 0 且不超過 20 的值,系統會套用額外的偏差。如果提升值為空白或 0,預設的偏誤效果有助於辨識整個詞組,以及詞組內的連續部分。舉例來說,未加強的詞組「are you open to sell phones」(你們營業嗎?我想賣手機) 有助於辨識該詞組,以及「I sell phones」(我想賣手機) 和「Hi are you open」(你好,你們營業嗎?) 等類似詞組。
套用正向加成後,偏誤效果會更強,但只適用於確切的詞組。舉例來說,如果提升「賣手機」這個詞組的權重,系統就能識別「可以賣手機嗎」,但無法識別「你們有賣手機嗎」。
因此,同時提供有和沒有加強功能的片語,可獲得最佳結果。
提高加成值可減少偽陰性,也就是音訊中出現的字詞或詞組未正確辨識 (低偏差) 的情況。不過,提高權重也可能增加誤判的機率,也就是說,即使音訊中沒有出現該字詞或詞組,轉錄稿中仍會顯示 (過度偏誤)。您通常需要微調偏見片語,在兩種偏見問題之間取得適當的平衡。
如要進一步瞭解如何微調詞組的提升值,請參閱 Cloud Speech 提升值說明文件。
自動或手動語音調整功能的使用時機
一般來說,如果您不確定語音調整功能是否能提升代理程式的語音辨識品質 (沒有明確的轉錄錯誤模式),建議先嘗試自動語音調整功能,再改用手動語音調整功能。如要做出更細緻的決策,請考量下列因素,決定要使用自動語音適應功能還是手動語音適應功能:
1. 填寫表單
自動語音適應功能非常適合用於填寫表單,因為這項功能會針對表單參數使用 ABNF 文法內容,並根據實體類型強制執行文法規則。由於手動語音調整功能目前不支援 ABNF 文法,因此一般來說,表單填寫頁面會偏好使用自動語音調整功能,而非手動語音調整功能。如果網頁只有系統實體參數和 語音類別權杖支援的簡單 Regexp 實體,您也可以使用手動語音調整功能,達到類似自動語音調整的偏誤效果,不必調整 Regexp 實體。
2. 頁面或流程轉換的複雜度
如果是簡單的頁面或流程,只有幾條意圖路徑,自動語音調整功能可能會產生代表性的偏誤片語,並提供合理的結果。
不過,如果網頁或流程有大量意圖路徑 (如果是網頁,也請考慮流程層級路徑的數量),或是任何意圖的訓練詞組過長或過短,且不重要 (例如一整句話或只有一兩個音節的單字),語音適應模型很可能無法順利處理這些詞組。您應先啟用手動語音適應功能,並使用空白詞組集 (空白適應覆寫),針對複雜度高的開放式頁面停用語音適應功能。然後評估是否仍需向語音轉文字服務提供特殊且明確的詞組,以提升辨識品質。
啟用自動語音調整功能時,如果出現各種低偏壓或高偏壓問題,也可能是複雜度問題所致。與上述情況類似,您也需要先停用特定網頁的語音適應功能,然後進行測試。如果停用語音適應功能後,錯誤行為仍持續發生,您可以將要修正的詞組加入語音適應設定,甚至視需要新增提升值,進一步強化偏誤效果。
測試語音調整功能
測試代理程式的語音適應功能時,請勿直接測試對話中第一個語音話語的比對結果,在要測試的相符項目之前,整個對話都應只使用語音或事件輸入。以這種方式測試代理程式時,代理程式的行為與實際工作環境對話中的行為類似。
限制
限制如下:
- 語音調整功能不適用於所有語音模型和語言組合。 請參閱 Cloud Speech 語言支援頁面,確認語音模型和語言組合是否支援「模型調整」功能。
目前手動語音適應功能尚不支援自訂類別或 ABNF 文法。您可以啟用自動語音調整功能,或使用執行階段偵測意圖要求,運用這些調整功能。
相同的提升值在不同語音模型和語言中可能會有不同效果,因此為使用多種語言或語音模型的代理程式手動設定提升值時,請務必謹慎。目前手動語音適應功能適用於代理程式中的所有語言,因此多語代理程式應只使用與語言無關的詞組,或將每種語言分割成個別代理程式。由於預設的偏誤行為 (不提供增幅或增幅為 0) 通常適用於所有語言和模型,因此除非辨識用途需要更強的偏誤,否則您不需要設定語言專屬的增幅值。如要進一步瞭解如何微調提升值,請參閱這篇 Cloud Speech-to-Text 指南。
- 辨識長字元序列並不容易。單次擷取的字元數與輸入音訊的品質直接相關。如果您已遵循所有正規運算式實體指南,並嘗試在手動語音調整設定中使用相關語音類別權杖,但仍無法在單一回合中擷取整個序列,則可考慮使用其他對話式替代方案:
- 根據資料庫驗證序號時,請考慮交叉參照其他收集到的參數,例如日期、姓名或電話號碼,以允許不完整的相符項目。舉例來說,除了要求使用者提供訂單編號,也請他們提供電話號碼。現在,當 Webhook 查詢資料庫中的訂單狀態時,可以先依據電話號碼,然後傳回該帳戶最接近的相符訂單。這可讓 Dialogflow 將「ABC」誤聽為「AVC」,但仍為使用者傳回正確的訂單狀態。
- 如果序列很長,建議設計流程,鼓勵使用者在中間暫停,讓機器人確認進度。