מידע על שלבים לפתרון בעיות שיכולים לעזור לכם אם נתקלתם בבעיות בשימוש ב-Cloud Speech-to-Text.
לא ניתן לבצע אימות ב-Cloud STT
יכול להיות שתקבלו הודעת שגיאה שמציינת שאי אפשר לגשת לפרטי ברירת המחדל של האפליקציה. או אולי אתם רוצים לדעת איך לקבל מפתח API כדי להשתמש בו כשמפעילים את Cloud STT.
ב-Cloud STT נעשה שימוש ב-Application Default Credentials (ADC) לאימות.
פרטי הכניסה ל-ADC צריכים להיות זמינים בהקשר שבו מתבצעת קריאה ל-Cloud Speech-to-Text API. לדוגמה, אם הגדרתם ADC במסוף אבל הפעלתם את הקוד במאבחן הבאגים של סביבת הפיתוח המשולבת, יכול להיות שלקוד לא תהיה גישה לפרטי הכניסה בהקשר הביצוע שלו. במקרה כזה, יכול להיות שהבקשה שלכם ל-Cloud STT תיכשל.
במאמר הגדרת Application Default Credentials מוסבר איך לספק פרטי כניסה ל-ADC.
Cloud STT מחזיר תגובה ריקה
יכולות להיות כמה סיבות לכך ש-Cloud STT יחזיר תגובה ריקה. יכול להיות שהבעיה היא בRecognitionConfig או באודיו עצמו.
פתרון בעיות RecognitionConfig
אובייקט RecognitionConfig (או StreamingRecognitionConfig) הוא חלק מבקשת זיהוי של Cloud STT. כדי לבצע תמלול בצורה נכונה, צריך להגדיר את השדות ששייכים לקטגוריות הראשיות הבאות:
- הגדרת האודיו
- מודל ושפה
סיבה נפוצה לתשובות ריקות (כמו תשובת JSON ריקה {}) היא הזנת מידע שגוי לגבי מטא-נתונים של אודיו. אם שדות הגדרות האודיו לא מוגדרים בצורה נכונה, סביר להניח שהתמלול ייכשל ומודל הזיהוי יחזיר תוצאות ריקות.
הגדרת האודיו מכילה את המטא-נתונים של האודיו שסופק. אפשר לקבל את המטא-נתונים של קובץ האודיו באמצעות הפקודה ffprobe, שהיא חלק מ-FFMPEG.
בדוגמה הבאה מוצג שימוש בפקודה כדי לקבל את המטא-נתונים של דוגמת הדיבור הזו.
$ ffprobe commercial_mono.wav
[...]
Input #0, wav, from 'commercial_mono.wav':
Duration: 00:00:35.75, bitrate: 128 kb/s
Stream #0:0: Audio: pcm_s16le ([1][0][0][0] / 0x0001), 8000 Hz, 1 channels, s16, 128 kb/s
בקובץ מצוין בבירור שהוא בפורמט 8,000 Hz, עם ערוץ אחד וקידוד LINEAR16 (s16), ואפשר להשתמש במידע הזה בRecognitionConfig.
פתרון בעיות שקשורות לקידוד
כדי לפתור בעיות שגורמות לתשובה ריקה, אפשר לבצע את השלבים הבאים:
מפעילים את הקובץ ומאזינים לפלט. האם האודיו ברור והדיבור מובן?
כדי להפעיל קבצים, אפשר להשתמש בפקודה
playשל SoX (Sound eXchange). בהמשך מופיעות כמה דוגמאות שמבוססות על קידודי אודיו שונים.קבצי FLAC כוללים כותרת שמציינת את קצב הדגימה, סוג הקידוד ומספר הערוצים, ואפשר להפעיל אותם באופן הבא:
play audio.flacקבצים מסוג LINEAR16 לא כוללים כותרת. כדי להפעיל אותם, צריך לציין את קצב הדגימה, סוג הקידוד ומספר הערוצים. קידוד LINEAR16 צריך להיות 16 ביט, מספר שלם עם סימן ו-little-endian.
play --channels=1 --bits=16 --rate=16000 --encoding=signed-integer \ --endian=little audio.raw
קבצים בפורמט MULAW גם לא כוללים כותרת, ולרוב משתמשים בקצב דגימה נמוך יותר.
play --channels=1 --rate=8000 --encoding=u-law audio.raw
בודקים שקידוד האודיו של הנתונים תואם לפרמטרים ששלחתם ב-
RecognitionConfig. לדוגמה, אם בבקשה שלכם צוינו"encoding":"FLAC"ו-"sampleRateHertz":16000, הפרמטרים של נתוני האודיו שמופיעים בפלט של הפקודהplayשל SoX צריכים להיות זהים לפרמטרים האלה, באופן הבא:play audio.flacצריך לכלול:
Encoding: FLAC Channels: 1 @ 16-bit Sampleratehertz: 16000 Hz
אם ברשימת ה-SoX מופיע
Sampleratehertzשונה מ-16000Hz, צריך לשנות את"sampleRateHertz"ב-InitialRecognizeRequestכך שיתאים. אם הערך שלEncodingהוא לאFLACאו שהערך שלChannelsהוא לא1 @ 16-bit, אי אפשר להשתמש בקובץ הזה ישירות, וצריך להמיר אותו לקידוד תואם (ראו את השלב הבא).אם קובץ האודיו לא מקודד ב-FLAC, נסו להמיר אותו ל-FLAC באמצעות SoX. חוזרים על השלבים כדי להפעיל את הקובץ ולבדוק את הקידוד, את sampleRateHertz ואת הערוצים. דוגמאות להמרת פורמטים שונים של קובצי אודיו לקידוד FLAC:
sox audio.wav --channels=1 --bits=16 audio.flac sox audio.ogg --channels=1 --bits=16 audio.flac sox audio.au --channels=1 --bits=16 audio.flac sox audio.aiff --channels=1 --bits=16 audio.flac
כדי להמיר קובץ RAW ל-FLAC, צריך לדעת את קידוד האודיו של הקובץ. לדוגמה, כדי להמיר סטריאו, 16 ביט, חתום, little-endian ב-16,000 הרץ ל-FLAC, פועלים לפי הדוגמה הבאה:
sox --channels=2 --bits=16 --rate=16000 --encoding=signed-integer \ --endian=little audio.raw --channels=1 --bits=16 audio.flac
מריצים את הדוגמה Quickstart או אחת מהדוגמאות לאפליקציות עם קובץ האודיו לדוגמה שסופק. אחרי שהדוגמה תפעל בהצלחה, מחליפים את קובץ האודיו לדוגמה בקובץ האודיו שלכם.
הגדרת המודל והשפה
בחירת המודל חשובה מאוד כדי לקבל תוצאות תמלול באיכות גבוהה. Cloud STT מספק כמה מודלים שעברו התאמה לתרחישי שימוש שונים, וצריך לבחור את המודל שהכי מתאים לאודיו שלכם.
לדוגמה, חלק מהמודלים (כמו latest_short ו-command_and_search) הם מודלים של תוכן קצר, כלומר הם מתאימים יותר להנחיות ולתכנים קצרים.
סביר להניח שהמודלים האלה יחזירו תוצאות ברגע שהם יזהו תקופה של שקט. לעומת זאת, מודלים של טקסט ארוך (כמו latest_short, phone_call, video and default) מתאימים יותר לאודיו ארוך, והם לא רגישים כמו מודלים של טקסט קצר לפרשנות של שקט כסוף האודיו.
אם הזיהוי מסתיים בפתאומיות או לא חוזר במהירות, כדאי לנסות מודלים אחרים באמצעות ממשק המשתמש של Speech כדי לשפר את איכות התמלול.
שגיאות שקשורות לפסק זמן
ברוב המקרים, הבעיות האלה נגרמות בגלל הגדרה שגויה או שימוש לא נכון ב-Cloud Speech-to-Text.
LongRunningRecognize או BatchRecognize
הבעיה: קיבלתם
TimeoutError: Operation did not complete within the designated timeout.פתרון: אפשר לשלוח תמליל לקטגוריה של Cloud Storage או להאריך את הזמן הקצוב לתפוגה בבקשה.
הבעיה הזו מתרחשת כשהבקשה LongRunningRecognize או BatchRecognize לא מסתיימת בפרק הזמן שהוגדר לזמן קצוב לתפוגה, וזו לא שגיאה שמצביעה על כשל בתמלול הדיבור. המשמעות היא שתוצאות התמלול לא מוכנות לחילוץ.
StreamingRecognize
הבעיה: קיבלתם
Timeout Error: Long duration elapsed without audio. Audio should be sent close to real time.פתרון: צריך להקטין את הזמן בין חלקי האודיו שנשלחים. אם Cloud Speech-to-Text לא מקבל נתח חדש כל כמה שניות, הוא יסגור את החיבור ויפעיל את השגיאה הזו.
StreamingRecognize 409 aborted
הבעיה: מופיעה השגיאה
409 Max duration of 5 minutes reached for stream.הפתרון: הגעתם למגבלת הזיהוי בסטרימינג של חמש דקות של אודיו. כשמתקרבים למגבלה הזו, צריך לסגור את השידור ולפתוח שידור חדש.
איכות נמוכה של התמליל
זיהוי אוטומטי של דיבור (ASR) תומך במגוון רחב של תרחישי שימוש. ברוב המקרים, אפשר לפתור בעיות באיכות על ידי ניסיון של אפשרויות שונות של API. כדי לשפר את דיוק הזיהוי, מומלץ לפעול לפי ההנחיות שבקטע שיטות מומלצות.
לא מזוהות אמירות קצרות
הבעיה: המערכת לא מתעדת ב-API אמירות קצרות של משתמשי קצה כמו כן, לא והבא, והן לא מופיעות בתמליל.
פתרון: מבצעים את השלבים הבאים.
בודקים את אותה בקשה עם מודלים שונים.
להוסיף התאמה של הדיבור והגברה של מילים חסרות.
אם משתמשים בקלט סטרימינג, כדאי לנסות להגדיר את
single_utterance=true.
מילה או ביטוי שלא מזוהים באופן עקבי
בעיה: מילים או ביטויים מסוימים מזוהים באופן שגוי באופן עקבי, למשל a מזוהה כ-8.
פתרון: מבצעים את השלבים הבאים.
בודקים את אותה בקשה עם מודלים שונים.
להוסיף התאמה של הדיבור והגברה של מילים חסרות. אתם יכולים להשתמש בטוקנים של כיתות כדי לשפר קבוצות שלמות של מילים, כמו רצפים של ספרות או כתובות. בודקים את האסימונים הזמינים לכיתות.
כדאי לנסות להגדיל את
max_alternatives. לאחר מכן בודקים את SpeechRecognitionResultalternativesובוחרים את הראשון שתואם לפורמט הרצוי.
עיצוב יכול להיות מאתגר ל-ASR. התאמת הדיבור יכולה לעזור לכם לקבל את הפורמט הנדרש, אבל יכול להיות שתצטרכו לערוך את התוצאה כדי להתאים אותה לפורמט הנדרש.
קלט בשפה מעורבת או בכמה שפות
בעיה: האודיו מכיל דיבור בכמה שפות, כמו שיחה בין דובר אנגלית לדובר ספרדית, ולכן התמלול שגוי.
פתרון: התכונה הזו לא נתמכת. המרת דיבור לטקסט יכולה לתמלל רק שפה אחת בכל בקשה.
ארטיפקטים במהלך שקט או מוזיקה עם מודלים של Chirp
הבעיה: כשמעבירים אודיו עם קטעי שקט או מוזיקה, התמלול מכיל מספרים אקראיים או מילים שהומצאו.
פתרון: מפעילים את המסנן להפחתת רעשים ואת המסנן לסינון יחס אות לרעש, ומנסים שילובים שונים של סף יחס אות לרעש.
ההרשאה נדחתה
הבעיה: מוצגת השגיאה הבאה.
Permission denied to access GCS object BUCKET-PATH. Source error: PROJECT-ID@gcp-sa-speech.iam.gserviceaccount.com does not have storage.buckets.get access to the Google Cloud Storage bucket. Permission 'storage.buckets.get' denied on resource (or it may not exist).
פתרון: צריך לתת הרשאה ל-PROJECT_ID@gcp-sa-speech.iam.gserviceaccount.comלגשת לקובץ בקטגוריה BUCKET-PATH.
ארגומנט לא חוקי
הבעיה: מוצגת השגיאה הבאה.
{ "error": { "code": 400, "message": "Request contains an invalid argument.", "status": "INVALID_ARGUMENT" } }
פתרון: בודקים את הארגומנטים, משווים אותם למאמרי העזרה של ה-API ומוודאים שהם נכונים. מוודאים שנקודת הקצה שנבחרה תואמת למיקום בבקשה או במשאב.
המשאב מוצה
הבעיה: מוצגת השגיאה הבאה.
RESOURCE_EXHAUSTED: Resource has been exhausted (e.g. check quota)
פתרון: קראו את המאמר בנושא איך שולחים בקשה לשינוי המכסות.
חלק מהסטרימינג גדול מדי
הבעיה: מוצגת השגיאה הבאה.
INVALID_ARGUMENT: Request audio can be a maximum of 10485760 bytes. [type.googleapis.com/util.MessageSetPayload='[google.rpc.error_details_ext] { message: "Request audio can be a maximum of 10485760 bytes." }']
פתרון: צריך להקטין את הגודל של קטעי האודיו שנשלחים. כדי להשיג את זמן האחזור הטוב ביותר ולהימנע מהגעה למגבלת האודיו, מומלץ לשלוח נתונים במנות של 100 אלפיות השנייה.
רישום נתונים
בעיה: Speech-to-Text לא מספק Cloud Logging.
פתרון: רישום נתונים מושבת כברירת מחדל ב-Speech-to-Text, ולכן הלקוחות צריכים להפעיל אותו ברמת הפרויקט.