סקירה כללית
אתם יכולים להשתמש בתכונה התאמת המודל כדי לעזור ל-Cloud Speech-to-Text לזהות מילים או ביטויים ספציפיים בתדירות גבוהה יותר מאשר אפשרויות אחרות שאולי יוצעו אחרת. לדוגמה, נניח שנתוני האודיו שלכם כוללים לעיתים קרובות את המילה "מזג אוויר". כש-Cloud STT מזהה את המילה "weather", אתם רוצים שהמילה הזו תתועתק כ-"weather" ולא כ-"whether". במקרה כזה, אפשר להשתמש בהתאמת מודל כדי להטות את Cloud STT לזיהוי המילה 'weather'.
התאמת המודל שימושית במיוחד בתרחישי השימוש הבאים:
שיפור הדיוק של מילים וביטויים שמופיעים לעיתים קרובות בנתוני האודיו. לדוגמה, אתם יכולים להגדיר התראות במודל הזיהוי לגבי פקודות קוליות שבדרך כלל נאמרות על ידי המשתמשים שלכם.
הרחבת אוצר המילים שמזוהה על ידי Cloud STT. Cloud STT כולל אוצר מילים גדול מאוד. עם זאת, אם נתוני האודיו שלכם מכילים לעיתים קרובות מילים נדירות בשימוש בשפה הכללית (כמו שמות פרטיים או מילים ספציפיות לתחום), אתם יכולים להוסיף אותן באמצעות התאמת המודל.
שיפור הדיוק של תמלול הדיבור כשהאודיו שסופק מכיל רעשים או לא ברור במיוחד.
כדי לבדוק אם התכונה להתאמת המודל זמינה בשפה שלכם, אפשר לעיין בדף השפות הנתמכות.
שיפור הזיהוי של מילים וביטויים
כדי להגדיל את הסבירות ש-Cloud STT יזהה את המילה weather (מזג אוויר) כשהוא מתמלל את נתוני האודיו, אפשר להעביר את המילה weather בתוך האובייקט PhraseSet במשאב SpeechAdaptation.
כשמספקים ביטוי שמורכב מכמה מילים, יש סיכוי גבוה יותר ש-Cloud STT יזהה את המילים האלה ברצף. אם מספקים ביטוי, גדל הסיכוי לזיהוי חלקים מהביטוי, כולל מילים בודדות. בדף המגבלות על תוכן מפורטות המגבלות על מספר הביטויים האלה ועל הגודל שלהם.
אופציונלית, אתם יכולים לכוונן את עוצמת ההתאמה של המודל באמצעות התכונה 'הגברת ההתאמה של המודל'.
שיפור הזיהוי באמצעות מחלקות
מחלקות מייצגות מושגים נפוצים שמופיעים בשפה טבעית, כמו יחידות כספיות ותאריכים ביומן. מחלקות מאפשרות לשפר את דיוק התמלול של קבוצות גדולות של מילים שמתייחסות למושג משותף, אבל לא תמיד כוללות מילים או ביטויים זהים.
לדוגמה, נניח שנתוני האודיו כוללים הקלטות של אנשים שאומרים את כתובת הרחוב שלהם. יכול להיות שתהיה לכם הקלטת אודיו של מישהו שאומר "הבית שלי נמצא ברחוב הראשי 123, הבית הרביעי משמאל". במקרה הזה, רוצים ש-Cloud STT יזהה את הרצף הראשון של הספרות (123) ככתובת ולא כמספר סודר (one-hundred twenty-third). אבל לא כל האנשים גרים ברחוב הראשי מספר 123. אי אפשר לפרט כל כתובת רחוב אפשרית במשאב PhraseSet. במקום זאת, אפשר להשתמש במחלקה כדי לציין שמערכת Cloud STT צריכה לזהות מספר רחוב בלי קשר למספר עצמו. בדוגמה הזו, מערכת Cloud STT תוכל לתמלל בצורה מדויקת יותר ביטויים כמו 123 Main Street ו-987 Grand Boulevard כי שניהם מזוהים כמספרי כתובות.
טוקנים של כיתות
כדי להשתמש במחלקה בהתאמת מודל, צריך לכלול אסימון מחלקה בשדה phrases של משאב PhraseSet. כאן אפשר לעיין ברשימת הטוקנים הנתמכים של מחלקות כדי לראות אילו טוקנים זמינים בשפה שלכם. לדוגמה, כדי לשפר את התמלול של מספרי כתובות מאודיו המקור, צריך לספק את הערך $ADDRESSNUM באובייקט SpeechContext.
אפשר להשתמש בערכים של מאפיין הכיתה כפריטים עצמאיים במערך phrases, או להטמיע טוקן אחד או יותר של כיתה בביטויים ארוכים יותר של כמה מילים. לדוגמה, אפשר לציין מספר כתובת בתוך ביטוי ארוך יותר על ידי הכללת טוקן המחלקה במחרוזת: ["my address is $ADDRESSNUM"]. עם זאת, הביטוי הזה לא יעזור במקרים שבהם האודיו מכיל ביטוי דומה אבל לא זהה, כמו "I am at 123 Main Street". כדי לעזור למערכת לזהות ביטויים דומים, חשוב להוסיף גם את טוקן הסיווג לבד: ["my address is $ADDRESSNUM",
"$ADDRESSNUM"]. אם משתמשים בטוקן מחלקה לא תקין או מעוצב בצורה לא נכונה, Cloud STT מתעלם מהטוקן בלי להפעיל שגיאה, אבל עדיין משתמש בשאר הביטוי כדי להבין את ההקשר.
שיעורים בהתאמה אישית
אפשר גם ליצור CustomClass משלכם, כלומר מחלקה שמורכבת מרשימה מותאמת אישית של פריטים או ערכים קשורים. לדוגמה, אתם רוצים לתמלל נתוני אודיו שסביר להניח שיכללו את השם של אחת מכמה מאות מסעדות אזוריות. שמות של מסעדות הם יחסית נדירים בדיבור באופן כללי, ולכן יש סיכוי נמוך יותר שהם ייבחרו כתשובה 'נכונה' על ידי מודל הזיהוי. אתם יכולים להטות את מודל הזיהוי לטובת זיהוי נכון של השמות האלה כשהם מופיעים באודיו באמצעות מחלקה בהתאמה אישית.
כדי להשתמש בכיתה בהתאמה אישית, יוצרים משאב CustomClass שכולל את שם כל מסעדה כ-ClassItem. כיתות מותאמות אישית פועלות באותו אופן כמו אסימונים של כיתות מוכנות מראש. phrase יכול לכלול גם טוקנים של מחלקות מוכנות מראש וגם מחלקות בהתאמה אישית.
דקדוק ABNF
אפשר גם להשתמש בדקדוקים בפורמט Backus–Naur מורחב (ABNF) כדי לציין תבניות של מילים. הכללת דקדוק ABNF בהתאמת המודל של הבקשה תגדיל את הסבירות ש-Cloud STT יזהה את כל המילים שתואמות לדקדוק שצוין.
כדי להשתמש בתכונה הזו, צריך לכלול אובייקט ABNF
grammar בשדה SpeechAdaptation של הבקשה. דקדוקי ABNF יכולים לכלול גם הפניות למשאבים CustomClass ו-PhraseSet. מידע נוסף על התחביר של השדה הזה זמין בקטע Speech
Recognition Grammar Specification וcode
sample שבהמשך.
שיפור התוצאות של התמלול באמצעות משבצות לייצור מזון
כברירת מחדל, התאמת המודל כבר אמורה לספק השפעה מספקת ברוב המקרים. התכונה שיפור התאמת המודל מאפשרת להגדיל את הטיית מודל הזיהוי על ידי הקצאת משקל גבוה יותר לביטויים מסוימים מאשר לאחרים. מומלץ להטמיע את התכונה 'שיפור' רק אם 1) כבר הטמעתם התאמה של המודל, ו-2) אתם רוצים לשנות עוד את עוצמת ההשפעות של התאמת המודל על תוצאות התמלול.
לדוגמה, יש לכם הרבה הקלטות של אנשים ששואלים על "מחיר הכרטיס של כרטיס כניסה ליריד המחוזי", והמילה "יריד" מופיעה בתדירות גבוהה יותר מהמילה "מחיר הכרטיס". במקרה כזה, אפשר להשתמש בהתאמת מודל כדי להגדיל את ההסתברות שהמודל יזהה גם את המילה "fair" וגם את המילה "fare". לשם כך, מוסיפים אותן כ-phrases במשאב PhraseSet. ההגדרה הזו תגרום ל-Cloud STT לזהות את המילים fair ו-fare בתדירות גבוהה יותר מאשר את המילים hare או lair, למשל.
עם זאת, המילה "fair" צריכה להיות מזוהה בתדירות גבוהה יותר מהמילה "fare", כי היא מופיעה בתדירות גבוהה יותר באודיו. יכול להיות שכבר תמללתם את האודיו באמצעות Cloud Speech-to-Text API וגיליתם מספר גבוה של שגיאות בזיהוי המילה הנכונה (fair). במקרה כזה, כדאי להשתמש בנוסף בביטויים עם הגדלה כדי להקצות ערך הגדלה גבוה יותר למילה fair מאשר למילה fare. הערך המשוקלל הגבוה יותר שמוקצה למילה fair גורם להטיה ב-Cloud Speech-to-Text API לבחירה במילה fair בתדירות גבוהה יותר מאשר במילה fare. בלי ערכי הגברה, מודל הזיהוי יזהה את המילים fair ו-fare בהסתברות שווה.
מידע בסיסי על הגברה
כשמשתמשים בהגברה, מקצים ערך משוקלל ל-phrase פריטים במשאב PhraseSet. כששירות ה-STT בענן בוחר תמלול אפשרי למילים בנתוני האודיו, הוא מתייחס לערך המשוקלל הזה. ככל שהערך גבוה יותר, כך גדל הסיכוי ש-Cloud STT יבחר במילה או בביטוי הזה מתוך החלופות האפשריות.
לדוגמה, רוצים להקצות ערך של הגדלת החשיפה לביטוי "My favorite exhibit
at the American Museum of Natural History is the blue whale". אם מוסיפים את הביטוי הזה לאובייקט phrase ומקצים לו ערך של הגברה, סביר יותר שהמודל לזיהוי יזהה את הביטוי הזה במלואו, מילה במילה.
אם לא קיבלתם את התוצאות שחיפשתם אחרי שהגברתם את הביצועים של ביטוי שמורכב מכמה מילים, מומלץ להוסיף את כל הביגרמות (2 מילים, לפי הסדר) שמרכיבות את הביטוי כפריטים נוספים של phrase ולהקצות לכל אחת מהן ערכי הגברה. בהמשך לדוגמה הקודמת, אפשר לבדוק הוספה של ביגרמות ו-N-גרמות נוספות (יותר מ-2 מילים) כמו 'האהוב עליי', 'המוצג האהוב עליי', 'המוצג האהוב', 'המוצג האהוב עליי במוזיאון האמריקאי להיסטוריה של הטבע', 'המוזיאון האמריקאי להיסטוריה של הטבע' או 'לווייתן כחול'. לאחר מכן, סביר יותר שמודל הזיהוי של Cloud STT יזהה ביטויים קשורים באודיו שמכילים חלקים מהביטוי המקורי שהוגבר, אבל לא זהים לו מילה במילה.
הגדרת ערכי הבוסט
ערכי ההגברה חייבים להיות מספרים ממשיים גדולים מ-0. המגבלה המעשית המקסימלית של ערכי ההגברה היא 20. כדי לקבל את התוצאות הטובות ביותר, כדאי להתנסות עם תוצאות התמלול על ידי שינוי ערכי ההגברה כלפי מעלה או מטה עד שתקבלו תוצאות תמלול מדויקות.
ערכים גבוהים יותר של הגברת עוצמה יכולים להוביל לפחות תוצאות שליליות שגויות, כלומר למקרים שבהם המילה או הביטוי הופיעו באודיו אבל לא זוהו בצורה נכונה על ידי Cloud STT. עם זאת, שימוש בתכונה 'הגברת ההסתברות' יכול גם להגדיל את הסיכוי לתוצאות חיוביות שגויות, כלומר מקרים שבהם המילה או הביטוי מופיעים בתמליל למרות שהם לא נאמרו באודיו.
קבלת התראות על פסק זמן
התשובות של Cloud STT כוללות את השדה SpeechAdaptationInfo, שמספק מידע על התנהגות ההתאמה של המודל במהלך הזיהוי. אם התרחש פסק זמן שקשור להתאמת המודל, הערך של adaptationTimeout יהיה true, וב-timeoutMessage יצוין איזו הגדרת התמה גרמה לפסק הזמן. כאשר מתרחש זמן קצוב לתפוגה, להתאמת המודל אין השפעה על התמליל שמוחזר.
תרחיש שימוש לדוגמה באמצעות התאמת מודל
בדוגמה הבאה מוסבר איך להשתמש בהתאמת מודל כדי לתמלל הקלטת אודיו של מישהו שאומר "call me fionity and oh my gosh what do we have here ionity". במקרה הזה, חשוב שהמודל יזהה את המילים fionity ו-ionity בצורה נכונה.
הפקודה הבאה מבצעת זיהוי באודיו בלי התאמה של המודל. התמליל שנוצר לא נכון: "call me Fiona tea and oh my gosh what do we have here I own a day".
curl -H "Authorization: Bearer $(gcloud auth --impersonate-service-account=$SA_EMAIL print-access-token)" -H "Content-Type: application/json; charset=utf-8" "https://speech.googleapis.com/v1p1beta1/speech:recognize" -d '{"config": {"languageCode": "en-US"}, "audio": {"uri":"gs://biasing-resources-test-audio/call_me_fionity_and_ionity.wav"}}'
דוגמה לבקשה:
{ "config":{ "languageCode":"en-US" }, "audio":{ "uri":"gs://biasing-resources-test-audio/call_me_fionity_and_ionity.wav" } }
שיפור התמלול באמצעות PhraseSet
יצירת
PhraseSet:curl -X POST -H "Authorization: Bearer $(gcloud auth --impersonate-service-account=$SA_EMAIL print-access-token)" -H "Content-Type: application/json; charset=utf-8" "https://speech.googleapis.com/v1p1beta1/projects/project_id/locations/global/phraseSets" -d '{"phraseSetId": "test-phrase-set-1"}'
דוגמה לבקשה:
{ "phraseSetId":"test-phrase-set-1" }
מורידים את
PhraseSet:curl -X GET -H "Authorization: Bearer $(gcloud auth --impersonate-service-account=$SA_EMAIL print-access-token)" -H "Content-Type: application/json; charset=utf-8" "https://speech.googleapis.com/v1p1beta1/projects/project_id>/locations/global/phraseSets/test-phrase-set-1"\
מוסיפים את הביטויים fionity ו-ionity ל-
PhraseSetומקצים לכל אחד מהם ערך של 10 ב-boost:curl -X PATCH -H "Authorization: Bearer $(gcloud auth --impersonate-service-account=$SA_EMAIL print-access-token)" -H "Content-Type: application/json; charset=utf-8" "https://speech.googleapis.com/v1p1beta1/projects/project_id/locations/global/phraseSets/test-phrase-set-1?updateMask=phrases"\ -d '{"phrases": [{"value": "ionity", "boost": 10}, {"value": "fionity", "boost": 10}]}'
הפרטים של
PhraseSetעודכנו. הפרטים החדשים:{ "phrases":[ { "value":"ionity", "boost":10 }, { "value":"fionity", "boost":10 } ] }
מזהים שוב את האודיו, הפעם באמצעות התאמת המודל ו
PhraseSetשנוצר קודם. התוצאות המתומללות נכונות עכשיו: 'call me fionity and oh my gosh what do we have here ionity'.curl -H "Authorization: Bearer $(gcloud auth --impersonate-service-account=$SA_EMAIL print-access-token)" -H "Content-Type: application/json; charset=utf-8" "https://speech.googleapis.com/v1p1beta1/speech:recognize" -d '{"config": {"adaptation": {"phrase_set_references": ["projects/project_id/locations/global/phraseSets/test-phrase-set-1"]}, "languageCode": "en-US"}, "audio": {"uri":"gs://biasing-resources-test-audio/call_me_fionity_and_ionity.wav"}}'
דוגמה לבקשה:
{ "config":{ "adaptation":{ "phrase_set_references":[ "projects/project_id/locations/global/phraseSets/test-phrase-set-1" ] }, "languageCode":"en-US" }, "audio":{ "uri":"gs://biasing-resources-test-audio/call_me_fionity_and_ionity.wav" } }
שיפור תוצאות התמלול באמצעות CustomClass
יצירת
CustomClass:curl -X POST -H "Authorization: Bearer $(gcloud auth --impersonate-service-account=$SA_EMAIL print-access-token)" -H "Content-Type: application/json; charset=utf-8" "https://speech.googleapis.com/v1p1beta1/projects/project_id/locations/global/customClasses" -d '{"customClassId": "test-custom-class-1"}'
דוגמה לבקשה:
{ "customClassId": "test-custom-class-1" }
מורידים את
CustomClass:curl -X GET -H "Authorization: Bearer $(gcloud auth --impersonate-service-account=$SA_EMAIL print-access-token)" -H "Content-Type: application/json; charset=utf-8" "https://speech.googleapis.com/v1p1beta1/projects/project_id/locations/global/customClasses/test-custom-class-1"
לזהות את קטע האודיו לבדיקה. התג
CustomClassריק, ולכן התמליל שמוחזר עדיין שגוי: "call me Fiona tea and oh my gosh what do we have here I own a day":curl -H "Authorization: Bearer $(gcloud auth --impersonate-service-account=$SA_EMAIL print-access-token)" -H "Content-Type: application/json; charset=utf-8" "https://speech.googleapis.com/v1p1beta1/speech:recognize" -d '{"config": {"adaptation": {"phraseSets": [{"phrases": [{"value": "${projects/project_idlocations/global/customClasses/test-custom-class-1}", "boost": "10"}]}]}, "languageCode": "en-US"}, "audio": {"uri":"gs://biasing-resources-test-audio/call_me_fionity_and_ionity.wav"}}'
דוגמה לבקשה:
{ "config":{ "adaptation":{ "phraseSets":[ { "phrases":[ { "value":"${projects/project_id/locations/global/customClasses/test-custom-class-1}", "boost":"10" } ] } ] }, "languageCode":"en-US" }, "audio":{ "uri":"gs://biasing-resources-test-audio/call_me_fionity_and_ionity.wav" } }
מוסיפים את הביטויים fionity ו-ionity לכיתה המותאמת אישית:
curl -X PATCH -H "Authorization: Bearer $(gcloud auth --impersonate-service-account=$SA_EMAIL print-access-token)" -H "Content-Type: application/json; charset=utf-8" "https://speech.googleapis.com/v1p1beta1/projects/project_id/locations/global/customClasses/test-custom-class-1?updateMask=items" -d '{"items": [{"value": "ionity"}, {"value": "fionity"}]}'
הפעולה הזו מעדכנת את המחלקה המותאמת אישית כך שתכלול את הפרטים הבאים:
{ "items":[ { "value":"ionity" }, { "value":"fionity" } ] }
לזהות שוב את דגימת האודיו, הפעם עם המילים fionity ו-ionity ב
CustomClass. התמליל עכשיו נכון: "call me fionity and oh my gosh what do we have here ionity".curl -H "Authorization: Bearer $(gcloud auth --impersonate-service-account=$SA_EMAIL print-access-token)" -H "Content-Type: application/json; charset=utf-8" "https://speech.googleapis.com/v1p1beta1/speech:recognize" -d '{"config": {"adaptation": {"phraseSets": [{"phrases": [{"value": "${projects/project_id/locations/global/customClasses/test-custom-class-1}", "boost": "10"}]}]}, "languageCode": "en-US"}, "audio": {"uri":"gs://biasing-resources-test-audio/call_me_fionity_and_ionity.wav"}}'
דוגמה לבקשה:
{ "config":{ "adaptation":{ "phraseSets":[ { "phrases":[ { "value":"${projects/project_id/locations/global/customClasses/test-custom-class-1}", "boost":"10" } ] } ] }, "languageCode":"en-US" }, "audio":{ "uri":"gs://biasing-resources-test-audio/call_me_fionity_and_ionity.wav" } }
הפניה אל CustomClass בPhraseSet
מעדכנים את משאב
PhraseSetשנוצר קודם כך שיפנה אלCustomClass:curl -X PATCH -H "Authorization: Bearer $(gcloud auth --impersonate-service-account=$SA_EMAIL print-access-token)" -H "Content-Type: application/json; charset=utf-8" "https://speech.googleapis.com/v1p1beta1/projects/project_id/locations/global/phraseSets/test-phrase-set-1?updateMask=phrases" -d '{"phrases": [{"value": "${projects/project_id/locations/global/customClasses/test-custom-class-1}", "boost": 10}]}'
דוגמה לבקשה:
{ "config":{ "adaptation":{ "phraseSets":[ { "phrases":[ { "value":"${projects/project_id/locations/global/customClasses/test-custom-class-1}", "boost":"10" } ] } ] }, "languageCode":"en-US" }, "audio":{ "uri":"gs://biasing-resources-test-audio/call_me_fionity_and_ionity.wav" } }
מזהים את האודיו באמצעות המשאב
PhraseSet(שמפנה אלCustomClass). התמליל נכון: "call me fionity and oh my gosh what do we have here ionity".curl -H "Authorization: Bearer $(gcloud auth --impersonate-service-account=$SA_EMAIL print-access-token)" -H "Content-Type: application/json; charset=utf-8" "https://speech.googleapis.com/v1p1beta1/speech:recognize" -d '{"config": {"adaptation": {"phrase_set_references": ["projects/project_id/locations/global/phraseSets/test-phrase-set-1"]}, "languageCode": "en-US"}, "audio": {"uri":"gs://biasing-resources-test-audio/call_me_fionity_and_ionity.wav"}}'
דוגמה לבקשה:
{ "phrases":[ { "value":"${projects/project_id/locations/global/customClasses/test-custom-class-1}", "boost":10 } ] }
מחיקת CustomClass וPhraseSet
מחיקת
PhraseSet:curl -X DELETE -H "Authorization: Bearer $(gcloud auth --impersonate-service-account=$SA_EMAIL print-access-token)" -H "Content-Type: application/json; charset=utf-8" "https://speech.googleapis.com/v1p1beta1/projects/project_id/locations/global/phraseSets/test-phrase-set-1"
מחיקת
CustomClass:curl -X DELETE -H "Authorization: Bearer $(gcloud auth --impersonate-service-account=$SA_EMAIL print-access-token)" -H "Content-Type: application/json; charset=utf-8" "https://speech.googleapis.com/v1p1beta1/projects/project_id/locations/global/customClasses/test-custom-class-1"
שיפור תוצאות התמלול באמצעות ABNF Grammar
לזהות את האודיו באמצעות
abnf_grammar. בדוגמה הזו יש הפניה למשאבCustomClass: projects/project_id/locations/global/customClasses/test-custom-class-1,CustomClassמוטבע: test-custom-class-2, טוקן של מחלקה: ADDRESSNUM, ומשאבPhraseSet: projects/project_id/locations/global/phraseSets/test-phrase-set-1. הכלל הראשון במחרוזות (אחרי הצהרות חיצוניות) ייחשב כשורש.דוגמה לבקשה:
{ "config":{ "adaptation":{ "abnf_grammar":{ "abnf_strings": [ "external ${projects/project_id/locations/global/phraseSets/test-phrase-set-1}" , "external ${projects/project_id/locations/global/customClasses/test-custom-class-1}" , "external ${test-custom-class-2}" , "external $ADDRESSNUM" , "$root = $test-phrase-set-1 $name lives in $ADDRESSNUM;" , "$name = $title $test-custom-class-1 $test-custom-class-2" , "$title = Mr | Mrs | Miss | Dr | Prof ;" ] } } } }