מידע על תכונות זיהוי הדיבור

‫Speech-to-Text הוא אחד משלושת ממשקי ה-API של Vertex AI שאומנו מראש במכשיר Air-gapped של Google Distributed Cloud‏ (GDC). שירות המרת הדיבור לטקסט מזהה דיבור בקובצי אודיו ומתמלל אודיו לטקסט. השירות Speech-to-Text עומד בדרישות לגבי מיקום הנתונים ותאימות.

בטבלה הבאה מתוארות היכולות העיקריות של Speech-to-Text:

יכולות עיקריות
תמלול יישום אלגוריתמים מתקדמים של רשתות נוירונים ללמידה עמוקה לזיהוי אוטומטי של דיבור.
מודלים פריסת מודלים לזיהוי שגודלם קטן מ-1GB וצורכים מינימום משאבים.
תואם ל-API משתמשים ב-Speech-to-Text API ובספריות הלקוח שלו כדי לשלוח אודיו ולקבל תמלול טקסט משירות Speech-to-Text.

קידודי האודיו הנתמכים בהמרת דיבור לטקסט

ממשק Speech-to-Text API תומך במספר קידודים שונים. בטבלה הבאה מפורטים רכיבי codec של אודיו שנתמכים:

קודק שם ללא אובדן מידע הערות שימוש
FLAC Free Lossless Audio Codec כן נדרש 16 ביט או 24 ביט לסטרימינג
LINEAR16 Linear PCM כן קידוד של 16 ביט עם אפנון קוד-דופק ליניארי (PCM). הכותרת חייבת להכיל את קצב הדגימה.
MULAW ‫μ-law לא קידוד PCM‏ 8 ביט
OGG_OPUS פריימים של אודיו מקודד בשיטת Opus במאגר מסוג Ogg לא תדירות הדגימה חייבת להיות אחת מהאפשרויות הבאות: ‎8000 Hz, 12000 Hz, 16000 Hz, 24000 Hz, or 48000 Hz

‫FLAC הוא גם קודק אודיו וגם פורמט של קובץ אודיו. כדי לתמלל קובצי אודיו באמצעות קידוד FLAC, צריך לספק אותם בפורמט הקובץ .FLAC, שכולל כותרת עם מטא-נתונים.

התכונה 'המרת דיבור לטקסט' תומכת בקובצי WAV עם אודיו מקודד בפורמט LINEAR16 או MULAW.

אם יש לכם אפשרות בחירה כשמקודדים את חומר המקור, כדאי להשתמש בקידוד ללא אובדן נתונים, כמו FLAC או LINEAR16, כדי לשפר את זיהוי הדיבור.

תכונות של המרת דיבור לטקסט (STT)

ל-Speech-to-Text במכשיר GDC עם air gap יש שלוש שיטות לביצוע זיהוי דיבור:

  • זיהוי סינכרוני: נתוני אודיו נשלחים אל Speech-to-Text API, מתבצע זיהוי של הנתונים והתוצאות מוחזרות אחרי עיבוד האודיו. בקשות סינכרוניות לזיהוי מוגבלות לנתוני אודיו באורך של דקה אחת או פחות.

  • זיהוי אסינכרוני: נתוני אודיו נשלחים אל Speech-to-Text API ומתחילה פעולה ממושכת. באמצעות הפעולה הזו, אפשר לבצע דגימה תקופתית של תוצאות הזיהוי. אפשר להשתמש בבקשות אסינכרוניות לנתוני אודיו בכל משך זמן של עד 480 דקות.

  • זיהוי בסטרימינג: זיהוי שמבוצע על נתוני אודיו שמועברים בסטרימינג דו-כיווני. בקשות סטרימינג מיועדות לזיהוי בזמן אמת, למשל ללכידת אודיו בזמן אמת ממיקרופון. זיהוי בסטרימינג מספק תוצאות ביניים בזמן שהאודיו נלכד, וכך מאפשר לתוצאות להופיע, למשל, בזמן שמשתמש עדיין מדבר.

הבקשות מכילות פרמטרים של הגדרות ונתוני אודיו. בקטעים הבאים נסביר בפירוט על בקשות הזיהוי האלה, על התשובות שהן יוצרות ועל אופן הטיפול בתשובות האלה.

בקשות ותגובות סינכרוניות

בקשת זיהוי סינכרוני של דיבור לטקסט היא השיטה הפשוטה ביותר לזיהוי נתוני אודיו של דיבור. השירות Speech-to-Text יכול לעבד עד דקה של נתוני אודיו של דיבור שנשלחים בבקשה סינכרונית. אחרי ש-Speech-to-Text מעבד ומזהה את כל האודיו, הוא מחזיר תגובה.

ה-API של Speech-to-Text חייב להחזיר תגובה לפני עיבוד הבקשה הבאה. אפשר לתמלל עד שבע דקות של אודיו בכל דקה, שזה שווה לתמלול של שבע שניות של אודיו בכל שנייה בכל יחידת מכשיר. במקרים של איכות שמע ירודה, בקשת הזיהוי עשויה להימשך הרבה יותר זמן.

בקשות לזיהוי דיבור

בקשת API סינכרונית ל-Speech-to-Text כוללת הגדרה של זיהוי דיבור ונתוני אודיו. בדוגמה הבאה מוצגת בקשה:

{
    "config": {
        "encoding": "LINEAR16",
        "sample_rate_hertz": 16000,
        "language_code": "en-US",
    },
    "audio": {
        "content": "ZkxhQwAAACIQABAAAAUJABtAA+gA8AB+W8FZndQvQAyjv..."
    }
}

כל הבקשות לזיהוי סינכרוני של דיבור לטקסט חייבות לכלול שדה config מסוג RecognitionConfig של זיהוי דיבור. אובייקט RecognitionConfig מכיל את שדות המשנה הנדרשים הבאים:

  • ‫encoding: מציין את סכמת הקידוד של האודיו שסופק. השדה הזה הוא מסוג AudioEncoding. אם יש לכם אפשרות לבחור קודק, מומלץ לבחור קידוד ללא אובדן נתונים כמו FLAC או LINEAR16 כדי לקבל את הביצועים הכי טובים. רשימת פורמטים נתמכים של קידוד אודיו מופיעה במאמר בנושא קידודי אודיו נתמכים ל-Speech-to-Text. השדה encoding הוא אופציונלי בקובצי FLAC ו-WAV, שכוללים את הקידוד בכותרת הקובץ.
  • ‫sample_rate_hertz: מציין את קצב הדגימה של האודיו שסופק בהרץ. מידע נוסף על תעריפי דגימה זמין במאמר בנושא תעריפי דגימה. השדה sample_rate_hertz הוא אופציונלי בקבצים מסוג FLAC ו-WAV, שכוללים את תדירות הדגימה בכותרת הקובץ.
  • ‫language_code: מכיל את השפה והאזור שבהם יש להשתמש לזיהוי דיבור של האודיו שסופק. קוד השפה צריך להיות מזהה BCP-47. קודי שפה מורכבים מתגי שפה ראשיים ומתגי משנה משניים של אזור, שמציינים ניבים. בדוגמה, en מייצג אנגלית ו-US מייצג את ארצות הברית. כאן אפשר לעיין ברשימת השפות הנתמכות.

מספקים אודיו להמרת דיבור לטקסט באמצעות הפרמטר audio מסוג RecognitionAudio. השדה audio מכיל את שדה המשנה הבא:

  • ‫content: מכיל את האודיו שצריך להעריך, מוטמע בתוך הבקשה. בייטים של נתוני אודיו מקודדים באמצעות ייצוג בינארי טהור. ייצוגי JSON משתמשים ב-Base64. מידע נוסף זמין במאמר בנושא תוכן אודיו מוטמע. האודיו שמועבר ישירות בשדה הזה מוגבל לאורך של דקה אחת.

תדירויות דגימה

מציינים את קצב הדגימה של האודיו בשדה sample_rate_hertz של הגדרות הבקשה, והוא צריך להיות זהה לקצב הדגימה של תוכן האודיו המשויך. ‫Speech-to-Text תומך בקצב דגימה של 8,000 הרץ עד 48,000 הרץ. אפשר לציין את קצב הדגימה לקובץ FLAC או WAV בכותרת של הקובץ במקום להשתמש בשדה sample_rate_hertz. עם זאת, השדה sample_rate_hertz הוא חובה בכל שאר פורמטי האודיו.

אם יש לכם אפשרות בחירה כשאתם מקודדים את חומר המקור, כדאי להקליט את האודיו באמצעות קצב דגימה של 16,000 הרץ. ערכים נמוכים יותר עלולים לפגוע בדיוק של זיהוי הדיבור, וערכים גבוהים יותר לא משפיעים באופן משמעותי על איכות זיהוי הדיבור.

עם זאת, אם הקלטתם את נתוני האודיו בקצב דגימה שונה מ-16,000 הרץ, אל תבצעו דגימה מחדש של האודיו ל-16,000 הרץ. רוב האודיו של טלפוניה מדור קודם, למשל, משתמש בקצב דגימה של 8,000 הרץ, מה שעשוי להניב תוצאות פחות מדויקות. אם אתם חייבים להשתמש באודיו כזה, אתם צריכים לספק אותו ל-Speech-to-Text API בקצב הדגימה המקורי שלו.

שפות

מנוע הזיהוי של Speech-to-Text תומך במגוון שפות וניבים. מציינים את השפה של האודיו (ואת הניב האזורי או הלאומי) בשדה language_code של הגדרת הבקשה באמצעות מזהה BCP-47.

בדף שפות נתמכות מופיעה רשימה מלאה של השפות הנתמכות לכל תכונה.

בחירת מודל

כששולחים בקשה לתמלול אודיו ל-Speech-to-Text, אפשר לעבד את קובצי האודיו באמצעות מודל למידת מכונה שאומן לזיהוי אודיו של דיבור מסוג המקור הספציפי הזה.

כדי לציין מודל לזיהוי דיבור, צריך לכלול את השדה model באובייקט RecognitionConfig של הבקשה ולציין את המודל שרוצים להשתמש בו. המרת דיבור לטקסט במכשיר GDC עם air gap תומכת רק במודל default.

תוכן אודיו מוטמע

אודיו מוטמע נכלל בבקשה לזיהוי דיבור כשמעבירים פרמטר content בשדה audio של הבקשה. אם האודיו המוטמע מסופק כתוכן בבקשת REST, הוא צריך להיות תואם לסריאליזציה של JSON.

אפשר לשלוח נתונים ישירות בשדה content לזיהוי סינכרוני רק אם נתוני האודיו הם באורך של עד 60 שניות ובגודל של עד 10MB. כל נתוני האודיו בשדה content חייבים להיות בפורמט Base64.

כשיוצרים בקשה באמצעות ספריית לקוח, כותבים את הנתונים הבינאריים או את הנתונים שמקודדים ב-Base64 ישירות בשדה content.

רוב סביבות הפיתוח מגיעות עם כלי base64לקידוד קובץ בינארי לנתוני טקסט בפורמט ASCII, ומספקות לכם את הכלים והתמיכה הנדרשים. בנוסף, ב-Python יש מנגנונים מובנים לקידוד תוכן ב-Base64. בדוגמאות הבאות אפשר לראות איך מקודדים קובץ:

Linux

מקודדים את הקובץ באמצעות כלי שורת הפקודה base64. כדי למנוע גלישת שורות, משתמשים בדגל -w 0:

base64 INPUT_FILE -w 0 > OUTPUT_FILE

Python

ב-Python, מקודדים קובצי אודיו בקידוד Base64 באופן הבא:

# Import the base64 encoding library.
import base64

# Pass the audio data to an encoding function.
def encode_audio(audio):
  audio_content = audio.read()
  return base64.b64encode(audio_content)

תגובות של זיהוי דיבור

יכול להיות שיעבור זמן עד שתתקבל תגובה סינכרונית מ-Speech-to-Text API. אחרי העיבוד, ה-API מחזיר תגובה כמו בדוגמה הבאה:

{
  "results": [
    {
      "alternatives": [
        {
          "transcript": "how old is the Brooklyn Bridge",
          "words": [
            {
              "word": "how"
            },
            {
              "word": "old"
            },
            {
              "word": "is"
            },
            {
              "word": "the"
            },
            {
              "word": "Brooklyn"
            },
            {
              "word": "Bridge"
            }
          ]
        }
      ]
    }
  ]
}

כל התגובות של זיהוי סינכרוני ב-Speech-to-Text API כוללות תוצאות של זיהוי דיבור מהסוג RecognizeResponse. אובייקט RecognizeResponse מכיל את השדות הבאים:

  • ‫results: מכיל את רשימת התוצאות מסוג SpeechRecognitionResult, כאשר כל תוצאה מתאימה לקטע אודיו. כל תוצאה מורכבת משדה משנה אחד או יותר מהשדות הבאים:

    • ‫alternatives: מכיל רשימה של תמלילים אפשריים מסוג SpeechRecognitionAlternative. החלופה הראשונה בתשובה היא תמיד הסבירה ביותר. כל חלופה מורכבת משדות המשנה הבאים:

      • ‫transcript: מכיל את הטקסט המתומלל. אם מקבלים חלופות עוקבות, אפשר לשרשר את התמלילים האלה.
      • ‫words: מכיל רשימה של מידע ספציפי למילה עבור כל מילה מזוהה.

בקשות ותשובות אסינכרוניות

בקשת API אסינכרונית של המרת דיבור לטקסט זהה בצורה שלה לבקשה סנכרונית. עם זאת, במקום להחזיר תגובה, הבקשה לא סנכרונית מתחילה פעולה ממושכת ומחזירה את הפעולה הזו באופן מיידי. אתם יכולים להשתמש בזיהוי דיבור אסינכרוני עם אודיו בכל אורך שהוא עד 480 דקות.

דוגמה לתגובה של פעולה:

{
  "name": "OPERATION_NAME",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.speech_v1p1beta1.LongRunningRecognizeMetadata"
    "progressPercent": 34,
    "startTime": "2016-08-30T23:26:29.579144Z",
    "lastUpdateTime": "2016-08-30T23:26:29.826903Z"
  }
}

שימו לב שעדיין אין תוצאות. המרת הדיבור לטקסט ממשיכה לעבד את האודיו ומשתמשת בפעולה הזו כדי לאחסן את התוצאות. התוצאות מופיעות בשדה response של הפעולה שמוחזרת כשהבקשה LongRunningRecognize מסתיימת.

זוהי דוגמה לתשובה מלאה אחרי השלמת הבקשה:

{
  "name": "1268386125834704889",
  "metadata": {
    "lastUpdateTime": "2016-08-31T00:16:32.169Z",
    "@type": "type.googleapis.com/google.cloud.speech_v1p1beta1.LongRunningRecognizeMetadata",
    "startTime": "2016-08-31T00:16:29.539820Z",
    "progressPercent": 100
  }
  "response": {
    "@type": "type.googleapis.com/google.cloud.speech_v1p1beta1.LongRunningRecognizeResponse",
    "results": [{
      "alternatives": [{
        "transcript": "how old is the Brooklyn Bridge",
        "words": [
            {
              "word": "how"
            },
            {
              "word": "old"
            },
            {
              "word": "is"
            },
            {
              "word": "the"
            },
            {
              "word": "Brooklyn"
            },
            {
              "word": "Bridge"
            }
          ]
      }]}]
  },
  "done": True
}

שימו לב שהערך של done מוגדר כ-True ושהערך של response בפעולה מכיל קבוצת תוצאות מסוג SpeechRecognitionResult, אותו סוג שמוחזר על ידי בקשת זיהוי סינכרונית.

סטרימינג של בקשות ותגובות

קריאה לזיהוי באמצעות Speech-to-Text API בסטרימינג מיועדת ללכידה ולזיהוי של אודיו בזמן אמת בסטרימינג דו-כיווני. האפליקציה שלכם יכולה לשלוח אודיו בזרם הבקשה ולקבל תוצאות זיהוי סופיות וזמניות בזמן אמת בזרם התגובה. תוצאות הביניים מייצגות את תוצאת הזיהוי הנוכחית של קטע אודיו, ואילו תוצאת הזיהוי הסופית מייצגת את הניחוש האחרון והטוב ביותר לגבי קטע האודיו הזה.

בקשות לזיהוי בסטרימינג

בשונה מקריאות סינכרוניות ואסינכרוניות, שבהן שולחים את ההגדרה ואת האודיו בבקשה אחת, כשקוראים ל-API של Streaming Speech-to-Text צריך לשלוח כמה בקשות. התג הראשון StreamingRecognizeRequest חייב להכיל הגדרה מסוג StreamingRecognitionConfig.

השדה StreamingRecognitionConfig מכיל את השדה config, שכולל פרטי הגדרה של האודיו מהסוג RecognitionConfig, והוא זהה לזה שמוצג בבקשות סינכרוניות ואסינכרוניות.

סטרימינג של תשובות לזיהוי

תוצאות של זיהוי דיבור בסטרימינג מחזירות סדרה של תגובות מהסוג StreamingRecognizeResponse. תשובה כזו כוללת את השדות הבאים:

  • ‫speech_event_type: מכיל אירועים מסוג SpeechEventType. הערך של האירועים האלה מציין מתי הושלמה אמירה אחת. אירועי הדיבור משמשים כסמנים בתגובה של הזרם.
  • ‫results: מכיל את רשימת התוצאות, שיכולות להיות תוצאות ביניים או תוצאות סופיות מסוג StreamingRecognitionResult. הרשימה results כוללת את שדות המשנה הבאים:
    • ‫alternatives: מכיל רשימה של תמלילים חלופיים.
    • ‫is_final: מציין אם התוצאות שהתקבלו ברשומה הזו ברשימה הן תוצאות ביניים או תוצאות סופיות.
    • ‫result_end_time: מציין את היסט הזמן של סוף התוצאה ביחס לתחילת האודיו.