Toplu transkripsiyonu kullanma

Batch dökümü, depolamada büyük miktarda ses eklemenizi sağlayan bir REST API işlemleri kümesidir. Tipik bir URI veya paylaşılan erişim imzası (SAS) URI 'si kullanarak ses dosyalarını işaret edebilir ve zaman uyumsuz olarak alma sonuçlarını alabilirsiniz. V 3.0 API 'SI ile bir veya daha fazla ses dosyası verebilir veya bir depolama kapsayıcısını tamamen işleyebilirsiniz.

Aşağıdaki yöntemleri çağırmak için Batch transcripts REST API 'Lerini kullanabilirsiniz:

Toplu iş dökümü Işlemi Yöntem REST API çağrısı
Yeni bir döküm oluşturur. POST speechtotext/v 3.0/döküm
Kimliği doğrulanmış aboneliğin dökümlerini listesini alır. GET speechtotext/v 3.0/döküm
Çevrimdışı döküm için desteklenen yerel ayarların bir listesini alır. GET speechtotext/v 3.0/transcripts/yerel ayarlar
KIMLIĞI tarafından tanımlanan dökümün değişebilir ayrıntılarını günceller. DÜZELTMESI speechtotext/v 3.0/Transcriptions/{id}
Belirtilen döküm görevini siler. DELETE speechtotext/v 3.0/Transcriptions/{id}
Verilen KIMLIK tarafından tanımlanan dökümü alır. GET speechtotext/v 3.0/Transcriptions/{id}
Verilen KIMLIK tarafından tanımlanan döküm sonuç dosyalarını alır. GET speechtotext/v 3.0/Transcriptions/{id}/dosya

Swagger belgesiolarak KULLANıLABILEN ayrıntılı API 'yi gözden geçirebilir ve test edebilirsiniz.

Toplu transkripsiyon işleri mümkün olan en iyi çaba temelinde zamanlanır. Bir işin ne zaman çalışma durumuna geçeceğini tahmin edemezsiniz ama normal sistem yükü altında dakikalar içinde gerçekleşmesi gerekir. Çalışma durumunda olduğunda, transkripsiyon ses çalışma zamanı kayıttan yürütme hızından daha hızlı gerçekleşir.

Önkoşullar

Konuşma hizmetinin tüm özelliklerinde olduğu gibi, kullanmaya başlama kılavuzumuzuizleyerek Azure Portal bir abonelik anahtarı oluşturursunuz.

Not

Toplu iş dökümünü kullanmak için, konuşma hizmeti için standart bir abonelik (S0) gereklidir. Ücretsiz abonelik anahtarları (F0) çalışmaz. Daha fazla bilgi için bkz. fiyatlandırma ve sınırlar.

Modelleri özelleştirmeyi planlıyorsanız, akustik özelleştirme ve dil özelleştirmebölümündeki adımları izleyin. Toplu iş dökümlerinde oluşturulan modelleri kullanmak için model konumuyla ihtiyacınız vardır. Modelin ayrıntılarını inceleyebileceğiniz zaman model konumunu alabilirsiniz ( self özellik). Toplu iş dökümü hizmeti için dağıtılan özel bir uç nokta gerekli değildir .

Not

REST API bir parçası olarak toplu Iş dökümü, gözden geçirmeyi teşvik ettiğimiz bir Kotalar ve sınırlarkümesine sahiptir. toplu geçiş yeteneğinin çok sayıda ses dosyası olmasını verimli bir şekilde almak için, istek başına birden çok dosya göndermeyi veya bir Blob Depolama bir Blob 'a işaret etmek için ses dosyalarıyla bir Blob 'u işaret etmenizi öneririz. Hizmet, dosyaları aynı anda azaltma süresini azaltır. Tek bir istekte birden çok dosya kullanılması çok basittir ve kolay bir şekilde yapılandırma bölümüne bakın.

Toplu iş dökümü API 'SI

Toplu iş dökümü API 'SI aşağıdaki biçimleri destekler:

Biçimlendir Bileşeni Örnek başına bit sayısı Örnek hız
WAV PCM 16 bit 8 kHz veya 16 kHz, mono veya stereo
ÇA PCM 16 bit 8 kHz veya 16 kHz, mono veya stereo
OGG OPUS 'LAR 16 bit 8 kHz veya 16 kHz, mono veya stereo

Stereo ses akışları için, sol ve sağ kanallar, döküm sırasında bölünür. Her kanal için bir JSON sonuç dosyası oluşturuluyor. Sıralı bir son döküm oluşturmak için, utterance başına oluşturulan zaman damgalarını kullanın.

Yapılandırma

Yapılandırma parametreleri JSON olarak sağlanır.

Tek bir veya daha fazla dosyayı bir veya daha fazla dosyaya dönüştürme. Daha fazla bilgi almak için birden fazla dosyanız varsa, tek bir istekte birden çok dosya gönderilmesini öneririz. Aşağıdaki örnekte üç dosya kullanılıyor:

{
  "contentUrls": [
    "<URL to an audio file 1 to transcribe>",
    "<URL to an audio file 2 to transcribe>",
    "<URL to an audio file 3 to transcribe>"
  ],
  "properties": {
    "wordLevelTimestampsEnabled": true
  },
  "locale": "en-US",
  "displayName": "Transcription of file using default model for en-US"
}

Tüm depolama kapsayıcısı işleniyor. Kapsayıcı SAS r (okuma) ve l (liste) izinlerini içermelidir:

{
  "contentContainerUrl": "<SAS URL to the Azure blob container to transcribe>",
  "properties": {
    "wordLevelTimestampsEnabled": true
  },
  "locale": "en-US",
  "displayName": "Transcription of container using default model for en-US"
}

Toplu iş dökümde özel eğitilen bir model kullanın. Örnek üç dosya kullanmaktır:

{
  "contentUrls": [
    "<URL to an audio file 1 to transcribe>",
    "<URL to an audio file 2 to transcribe>",
    "<URL to an audio file 3 to transcribe>"
  ],
  "properties": {
    "wordLevelTimestampsEnabled": true
  },
  "locale": "en-US",
  "model": {
    "self": "https://westus.api.cognitive.microsoft.com/speechtotext/v3.0/models/{id}"
  },
  "displayName": "Transcription of file using default model for en-US"
}

Yapılandırma özellikleri

Dökümü yapılandırmak için bu isteğe bağlı özellikleri kullanın:

Parametre

Açıklama

profanityFilterMode

İsteğe bağlı, varsayılan olarak olur Masked . Tanıma sonuçlarında küfür nasıl işleneceğini belirtir. Kabul edilen değerler, küfür None filtrelemeyi devre dışı bırakmak, Masked küfür ile Removed tüm küfür kaldırmak veya Tags "küfür" etiketleri eklemek için.

punctuationMode

İsteğe bağlı, varsayılan olarak olur DictatedAndAutomatic . Tanıma sonuçlarında noktalama işaretlerinin nasıl işleneceğini belirtir. Kabul edilen değerler None , Dictated Açık (konuşulan) noktalama işareti, Automatic kod çözücüsünün noktalama ile uğraşmasına veya DictatedAndAutomatic Dikte ve otomatik noktalama kullanımına izin vermek için noktalama işaretlerini devre dışı bırakır.

wordLevelTimestampsEnabled

İsteğe bağlı, false Varsayılan olarak. Sözcük düzeyi tarih damgalarının çıktıya eklenip eklenmesinin gerekip gerekmediğini belirtir.

diarizationEnabled

İsteğe bağlı, false Varsayılan olarak. Giriş analizinin, iki ses içeren mono kanalı olması beklenen girişte gerçekleştirilmesi gerektiğini belirtir. Note: wordLevelTimestampsEnabled olarak ayarlanması gerekir true .

channels

İsteğe bağlı 0 ve 1 Varsayılan olarak yeniden yapılır. İşlenecek bir kanal numaraları dizisi. Burada, ses dosyasındaki kullanılabilir kanalların bir alt kümesinin işlenmek üzere belirtilenebilir (örneğin, 0 yalnızca).

timeToLive

İsteğe bağlı, varsayılan olarak silme yok. Dökümü tamamladıktan sonra otomatik olarak döküm silme süresi. , timeToLive Sonunda silindiklerinden emin olmak için toplu işleme (örneğin, PT12H 12 saat) yararlı olur.

destinationContainerUrl

Azure'da yazılabilir bir kapsayıcıya geçici SAS ile isteğe bağlı URL. Sonuç bu kapsayıcıda depolanır. Depolanmış erişim ilkesine sahip SAS desteklenmiyor. Belirtilmezse, Microsoft sonuçları Microsoft tarafından yönetilen bir depolama kapsayıcısı içinde depolar. Transkripsiyon Silme transkripsiyonu çağrılaraksilindiğinde sonuç verileri de silinir.

Depolama

Toplu transkripsiyon genel olarak görünür bir internet URI'lerinden ses okuyabilir ve Azure Blob depolama ile SAS URI'sı kullanarak ses okuyabilir veya transkripsiyon yazabilir.

Toplu transkripsiyon sonucu

Her ses girişi için bir transkripsiyon sonuç dosyası oluşturulur. Transkripsiyon dosyalarını al işlemi, bu transkripsiyon için sonuç dosyalarının listesini döndürür. Belirli bir giriş dosyasına yönelik transkripsiyon dosyasını bulmak için ve ile döndürülen tüm dosyaları kind == Transcription name == {originalInputName.suffix}.json filtrenin.

Her transkripsiyon sonuç dosyası şu biçimdedir:

{
  "source": "...",                      // sas url of a given contentUrl or the path relative to the root of a given container
  "timestamp": "2020-06-16T09:30:21Z",  // creation time of the transcription, ISO 8601 encoded timestamp, combined date and time
  "durationInTicks": 41200000,          // total audio duration in ticks (1 tick is 100 nanoseconds)
  "duration": "PT4.12S",                // total audio duration, ISO 8601 encoded duration
  "combinedRecognizedPhrases": [        // concatenated results for simple access in single string for each channel
    {
      "channel": 0,                     // channel number of the concatenated results
      "lexical": "hello world",
      "itn": "hello world",
      "maskedITN": "hello world",
      "display": "Hello world."
    }
  ],
  "recognizedPhrases": [                // results for each phrase and each channel individually
    {
      "recognitionStatus": "Success",   // recognition state, e.g. "Success", "Failure"
      "speaker": 1,                     // if `diarizationEnabled` is `true`, this is the identified speaker (1 or 2), otherwise this property is not present
      "channel": 0,                     // channel number of the result
      "offset": "PT0.07S",              // offset in audio of this phrase, ISO 8601 encoded duration
      "duration": "PT1.59S",            // audio duration of this phrase, ISO 8601 encoded duration
      "offsetInTicks": 700000.0,        // offset in audio of this phrase in ticks (1 tick is 100 nanoseconds)
      "durationInTicks": 15900000.0,    // audio duration of this phrase in ticks (1 tick is 100 nanoseconds)

      // possible transcriptions of the current phrase with confidences
      "nBest": [
        {
          "confidence": 0.898652852,    // confidence value for the recognition of the whole phrase
          "lexical": "hello world",
          "itn": "hello world",
          "maskedITN": "hello world",
          "display": "Hello world.",

          // if wordLevelTimestampsEnabled is `true`, there will be a result for each word of the phrase, otherwise this property is not present
          "words": [
            {
              "word": "hello",
              "offset": "PT0.09S",
              "duration": "PT0.48S",
              "offsetInTicks": 900000.0,
              "durationInTicks": 4800000.0,
              "confidence": 0.987572
            },
            {
              "word": "world",
              "offset": "PT0.59S",
              "duration": "PT0.16S",
              "offsetInTicks": 5900000.0,
              "durationInTicks": 1600000.0,
              "confidence": 0.906032
            }
          ]
        }
      ]
    }
  ]
}

Sonuç aşağıdaki alanları içerir:

Alan

İçerik

lexical

Tanınan gerçek sözcükler.

itn

Tanınan metnin ters metin normalleştirilmiş biçimi. Kısaltmalar ("doktor smith" -"dr smith"), telefon numaraları ve diğer dönüştürmeler uygulanır.

maskedITN

Küfür maskeleme uygulanmış ITN formu.

display

Tanınan metnin görüntüleme biçimi. Noktalama işaretleri ve büyük/küçük harf eklendi.

Konuşmacı ayrımı (kişiselleştirme)

Kişiselleştirme, konuşmacıları bir ses parçasına ayırma işlemidir. Toplu işlem hattı, sabitlemeyi destekler ve mono kanal kayıtları üzerinde iki konuşmacıyı tanıyabilir. Bu özellik stereo kayıtlarda kullanılamaz.

İfade alma etkinken transkripsiyon çıktısı, transkripsiyona Speaker tabi her bir tümcecik için bir girdi içerir. Eğer birleştirme kullanılmazsa, Speaker JSON çıkışında özelliği mevcut değildir. Kişiselleştirme için iki sesi destekliyoruz, bu nedenle konuşmacılar veya olarak 1 2 tanımlanır.

Başlatma isteğinde etmek için özelliğini http diarizationEnabled isteğinin true aşağıda olduğu gibi olarak ayarlayın.

{
  "contentUrls": [
    "<URL to an audio file to transcribe>",
  ],
  "properties": {
    "diarizationEnabled": true,
    "wordLevelTimestampsEnabled": true,
    "punctuationMode": "DictatedAndAutomatic",
    "profanityFilterMode": "Masked"
  },
  "locale": "en-US",
  "displayName": "Transcription of file using default model for en-US"
}

Yukarıdaki istekte parametreler belirtildiği gibi sözcük düzeyinde zaman damgası etkinleştirilmelidir.

En iyi uygulamalar

Toplu transkripsiyon hizmeti çok sayıda gönderilen transkripsiyonu işebilir. Transkripsiyonları al ile transkripsiyonların durumunu sorguabilirsiniz. Sonuçları alındıktan sonra hizmetten düzenli olarak Delete transkripsiyonu çağrısında bulundurabilirsiniz. Alternatif olarak, timeToLive sonuçların nihai silinmesini sağlamak için özelliğini ayarlayın.

İpucu

Yüksek ses hacmini işlemeye devam etmek için Alımı İstemcisi aracını ve sonuçta elde edilen çözümü kullanabilirsiniz.

Örnek kod

Tam örnekler, alt GitHub içindeki örnek samples/batch depoda mevcuttur.

Örnek kodu abonelik bilginiz, hizmet bölgeniz, URI'niz ile güncelleştirin ve özel bir model kullanıyorsanız ses dosyasının yerini ve model konumunu işaret edin.

var newTranscription = new Transcription
{
    DisplayName = DisplayName, 
    Locale = Locale, 
    ContentUrls = new[] { RecordingsBlobUri },
    //ContentContainerUrl = ContentAzureBlobContainer,
    Model = CustomModel,
    Properties = new TranscriptionProperties
    {
        IsWordLevelTimestampsEnabled = true,
        TimeToLive = TimeSpan.FromDays(1)
    }
};

newTranscription = await client.CreateTranscriptionAsync(newTranscription).ConfigureAwait(false);
Console.WriteLine($"Created transcription {newTranscription.Self}");

Örnek kod, istemciyi ayarlar ve transkripsiyon isteğini iletir. Ardından durum bilgilerini yoklar ve transkripsiyon ilerleme durumuyla ilgili ayrıntıları yazdırıyor.

// get the status of our transcriptions periodically and log results
int completed = 0, running = 0, notStarted = 0;
while (completed < 1)
{
    completed = 0; running = 0; notStarted = 0;

    // get all transcriptions for the user
    paginatedTranscriptions = null;
    do
    {
        // <transcriptionstatus>
        if (paginatedTranscriptions == null)
        {
            paginatedTranscriptions = await client.GetTranscriptionsAsync().ConfigureAwait(false);
        }
        else
        {
            paginatedTranscriptions = await client.GetTranscriptionsAsync(paginatedTranscriptions.NextLink).ConfigureAwait(false);
        }

        // delete all pre-existing completed transcriptions. If transcriptions are still running or not started, they will not be deleted
        foreach (var transcription in paginatedTranscriptions.Values)
        {
            switch (transcription.Status)
            {
                case "Failed":
                case "Succeeded":
                    // we check to see if it was one of the transcriptions we created from this client.
                    if (!createdTranscriptions.Contains(transcription.Self))
                    {
                        // not created form here, continue
                        continue;
                    }

                    completed++;

                    // if the transcription was successful, check the results
                    if (transcription.Status == "Succeeded")
                    {
                        var paginatedfiles = await client.GetTranscriptionFilesAsync(transcription.Links.Files).ConfigureAwait(false);

                        var resultFile = paginatedfiles.Values.FirstOrDefault(f => f.Kind == ArtifactKind.Transcription);
                        var result = await client.GetTranscriptionResultAsync(new Uri(resultFile.Links.ContentUrl)).ConfigureAwait(false);
                        Console.WriteLine("Transcription succeeded. Results: ");
                        Console.WriteLine(JsonConvert.SerializeObject(result, SpeechJsonContractResolver.WriterSettings));
                    }
                    else
                    {
                        Console.WriteLine("Transcription failed. Status: {0}", transcription.Properties.Error.Message);
                    }

                    break;

                case "Running":
                    running++;
                    break;

                case "NotStarted":
                    notStarted++;
                    break;
            }
        }

        // for each transcription in the list we check the status
        Console.WriteLine(string.Format("Transcriptions status: {0} completed, {1} running, {2} not started yet", completed, running, notStarted));
    }
    while (paginatedTranscriptions.NextLink != null);

    // </transcriptionstatus>
    // check again after 1 minute
    await Task.Delay(TimeSpan.FromMinutes(1)).ConfigureAwait(false);
}

Önceki çağrılarla ilgili tüm ayrıntılar için Swagger belgemize bakın. Burada gösterilen tam örnek için alt dizinde samples/batch GitHub'ye gidin.

Bu örnek, ses ve transkripsiyon durumunu almak için zaman uyumsuz bir kurulum kullanır. yöntemi PostTranscriptions ses dosyası ayrıntılarını gönderir ve yöntemi durumları GetTranscriptions alır. PostTranscriptions bir tanıtıcı döndürür ve GetTranscriptions transkripsiyon durumunu almak için bir tanıtıcı oluşturmak için kullanır.

Bu örnek kod özel bir model belirtmez. Hizmet, dosya veya dosyaları transklerken temel modeli kullanır. Modeli belirtmek için, özel model için model başvurusuyla aynı yöntemi kullanabilirsiniz.

Not

Temel transkripsiyonlar için temel modelin kimliğini bildir ihtiyacınız yok.

Sonraki adımlar