Så här använder du batch-transkription
Batch-transkription är en uppsättning REST API åtgärder som gör att du kan transkribera en stor mängd ljud i lagringen. Du kan peka på ljudfiler med en typisk URI eller en SAS-URI (signatur för delad åtkomst) och asynkront ta emot transkriptionsresultat. Med v3.0-API:et kan du transkribera en eller flera ljudfiler eller bearbeta en hel lagringscontainer.
Du kan använda REST-API:er för batchtranskribering för att anropa följande metoder:
| Batch-transkription | Metod | REST API anrop |
|---|---|---|
| Skapar en ny transkription. | POST | speechtotext/v3.0/transkriptioner |
| Hämtar en lista över transkriptioner för den autentiserade prenumerationen. | GET | speechtotext/v3.0/transkriptioner |
| Hämtar en lista över språk som stöds för offline-transkriptioner. | GET | speechtotext/v3.0/transkriptioner/språk |
| Uppdaterar den föränderliga informationen om transkriptionen som identifieras med dess ID. | PATCH | speechtotext/v3.0/transcriptions/{id} |
| Tar bort den angivna transkriptionsaktiviteten. | DELETE | speechtotext/v3.0/transcriptions/{id} |
| Hämtar transkriptionen som identifieras av det angivna ID:t. | GET | speechtotext/v3.0/transcriptions/{id} |
| Hämtar resultatfilerna för transkriptionen som identifieras av det angivna ID:t. | GET | speechtotext/v3.0/transcriptions/{id}/files |
Du kan granska och testa det detaljerade API:et, som är tillgängligt som ett Swagger-dokument.
Batch-transkriptionsjobb schemaläggs efter bästa förmåga. Du kan inte uppskatta när ett jobb kommer att ändras till körningstillståndet, men det bör ske inom några minuter under normal systembelastning. Väl i körningstillståndet sker transkriptionen snabbare än ljudkörningens uppspelningshastighet.
Förutsättningar
Precis som med alla funktioner i Speech-tjänsten skapar du en prenumerationsnyckel från Azure Portal genom att följa guiden Kom igång.
Anteckning
En standardprenumeration (S0) för Speech-tjänsten krävs för att använda batch-transkription. Kostnadsfria prenumerationsnycklar (F0) fungerar inte. Mer information finns i priser och gränser.
Om du planerar att anpassa modeller följer du stegen i Akustisk anpassning och Språkanpassning. Om du vill använda de skapade modellerna i batch-transkription behöver du deras modellplats. Du kan hämta modellplatsen när du inspekterar information om modellen ( self -egenskapen). En distribuerad anpassad slutpunkt behövs inte för batchtranskriberingstjänsten.
Anteckning
Som en del av REST API batch-transkription en uppsättning kvoteroch begränsningar , som vi rekommenderar att du granskar. Om du vill dra full nytta av Batch Transcription-möjligheten att effektivt transkribera ett stort antal ljudfiler rekommenderar vi att du alltid skickar flera filer per begäran eller pekar på en Blob Storage-container med ljudfilerna som ska transkriberas. Tjänsten transkriberar filerna samtidigt, vilket minskar tiden för bearbetning. Det är mycket enkelt och enkelt att använda flera filer i en enskild begäran – se konfigurationsavsnittet.
API för batch-transkription
BATCH-transkriptions-API:et stöder följande format:
| Format | Codec | Bitar per exempel | Samplingsfrekvens |
|---|---|---|---|
| WAV | PCM | 16-bitars | 8 kHz eller 16 kHz, mono eller stereo |
| MP3 | PCM | 16-bitars | 8 kHz eller 16 kHz, mono eller stereo |
| OGG | OPUS | 16-bitars | 8 kHz eller 16 kHz, mono eller stereo |
För stereoljudströmmar delas de vänstra och högra kanalerna upp under transkriptionen. En JSON-resultatfil skapas för varje kanal. Om du vill skapa en sorterad slutlig avskrift använder du de tidsstämplar som genereras per uttryck.
Konfiguration
Konfigurationsparametrar tillhandahålls som JSON.
Transkribera en eller flera enskilda filer. Om du har fler än en fil att transkribera rekommenderar vi att du skickar flera filer i en begäran. Exemplet nedan använder tre filer:
{
"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"
}
Bearbeta en hel lagringscontainer. Container-SAS ska innehålla r behörigheter (läsa) l och (lista):
{
"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"
}
Använd en anpassad tränad modell i en batch-transkription. Exemplet använder tre filer:
{
"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"
}
Konfigurationsegenskaper
Använd dessa valfria egenskaper för att konfigurera transkription:
Parameter
Beskrivning
profanityFilterMode
Valfritt, standardvärdet Masked är . Anger hur svordomar ska hanteras i igenkänningsresultat. Godkända värden är att inaktivera filtrering av svordomar, ersätta svordomar med asterisker, ta bort alla svordomar från resultatet eller lägga till None Masked taggar för Removed Tags "svordomar".
punctuationMode
Valfritt, standardvärdet DictatedAndAutomatic är . Anger hur skiljetecken ska hanteras i igenkänningsresultat. Godkända värden är att inaktivera skiljetecken för att ange explicita (talade) skiljetecken, låta avkodaren hantera skiljetecken eller använda dikterade och automatiska None Dictated Automatic DictatedAndAutomatic skiljetecken.
wordLevelTimestampsEnabled
Valfritt false som standard. Anger om tidsstämplar på ordnivå ska läggas till i utdata.
diarizationEnabled
Valfritt false som standard. Anger att diariseringsanalys ska utföras på indata, som förväntas vara en monokanal som innehåller två röster. Obs! Kräver wordLevelTimestampsEnabled att anges till true .
channels
Valfritt 0 och 1 transkriberas som standard. En matris med kanalnummer som ska bearbetas. Här kan en delmängd av de tillgängliga kanalerna i ljudfilen anges att bearbetas (till 0 exempel endast).
timeToLive
Valfritt, ingen borttagning som standard. En varaktighet för att automatiskt ta bort transkriptioner när transkriptionen har slutförts. är användbart i transkriptioner för massbearbetning för att säkerställa att de så småningom tas bort timeToLive PT12H (till exempel i 12 timmar).
destinationContainerUrl
Valfri URL med ad hoc-SAS till en skrivbar container i Azure. Resultatet lagras i den här containern. SAS med lagrad åtkomstprincip stöds inte. Om inget anges lagrar Microsoft resultatet i en lagringscontainer som hanteras av Microsoft. När transkriptionen tas bort genom att anropa Ta bort transkriptiontas även resultatdata bort.
Storage
Batch-transkription kan läsa ljud från en offentligt synlig Internet-URI och kan läsa ljud- eller skrivtranskriber med hjälp av en SAS-URI med Azure Blob Storage.
Batch-transkriptionsresultat
För varje ljudindata skapas en transkriptionsresultatfil.
Åtgärden Hämta transkriptionsfiler returnerar en lista med resultatfiler för den här transkriptionen.
Om du vill hitta transkriptionsfilen för en specifik indatafil filtrerar du alla returnerade filer kind == Transcription med och name == {originalInputName.suffix}.json .
Varje transkriptionsresultatfil har följande format:
{
"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
}
]
}
]
}
]
}
Resultatet innehåller följande fält:
Fält
Innehåll
lexical
De faktiska ord som känns igen.
itn
Inverterad text-normaliserad form av den tolkade texten. Förkortningar ("läkare smed" till "dr smith"), telefonnummer och andra omvandlingar tillämpas.
maskedITN
ITN-formuläret med svordomsmaskning tillämpat.
display
Visningsformen för den tolkade texten. Skiljetecken och versaler har lagts till.
Talarseparation (diarisering)
Diarisering är processen att separera talare i ett ljud. Batch-pipelinen stöder diarisering och kan känna igen två talare på monokanalinspelningar. Funktionen är inte tillgänglig på stereoinspelningar.
Utdata från transkription med diarisering aktiverat innehåller en Speaker post för varje transkriberad fras. Om diarisering inte används finns Speaker inte egenskapen i JSON-utdata. För diarisering stöder vi två röster, så talarna identifieras som 1 eller 2 .
Om du vill begära diarisering lägger du till ange diarizationEnabled egenskapen till true som HTTP-begäran visas nedan.
{
"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"
}
Tidsstämplar på ordnivå måste aktiveras som parametrarna i begäran ovan anger.
Bästa praxis
Batch-transkriptionstjänsten kan hantera ett stort antal skickade transkriptioner. Du kan fråga efter statusen för dina transkriptioner med Hämta transkriptioner.
Anropa Ta bort transkription regelbundet från tjänsten när du har hämtat resultatet. Du kan också ange timeToLive egenskapen för att säkerställa eventuell borttagning av resultaten.
Tips
Du kan använda inmatningsklientverktyget och den resulterande lösningen för att bearbeta stora mängder ljud.
Exempelkod
Fullständiga exempel är tillgängliga i GitHub exempeldatabasen i samples/batch underkatalogen.
Uppdatera exempelkoden med din prenumerationsinformation, tjänstregion, URI som pekar på ljudfilen att transkribera och modellplats om du använder en anpassad modell.
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}");
Exempelkoden uppsättningar klienten och skickar transkriptionsbegäran. Sedan söker den efter statusinformation och skriver ut information om transkriptionsförloppet.
// 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);
}
Fullständig information om de föregående anropen finns i vårt Swagger-dokument. Det fullständiga exemplet som visas här finns GitHub i samples/batch underkatalogen.
I det här exemplet används en asynkron konfiguration för att publicera ljud och ta emot transkriptionsstatus.
Metoden PostTranscriptions skickar information om ljudfilen och metoden tar emot GetTranscriptions tillstånden.
PostTranscriptions returnerar en referens och GetTranscriptions använder den för att skapa en referens för att hämta transkriptionsstatusen.
Den här exempelkoden anger inte någon anpassad modell. Tjänsten använder baslinjemodellen för att transkribera filen eller filerna. Om du vill ange modellen kan du skicka samma metod som modellreferensen för den anpassade modellen.
Anteckning
För baslinjetranskriskriptioner behöver du inte deklarera ID:t för baslinjemodellen.