ai_transcribe Função

Aplica-se a:seleção marcada como sim Databricks SQL seleção marcada como sim Databricks Runtime

A ai_transcribe() função transcreve um arquivo de áudio em texto. Ele retorna a transcrição como um conjunto de segmentos com carimbo de data e rotula cada segmento com um alto-falante usando diarização automática do alto-falante. A saída é um VARIANT valor, então você pode encadeá-la em outras Funções de IA.

Importante

Esse recurso está em Beta. Para usá-lo, um administrador de espaço de trabalho deve ativar a transcrição AI a partir da página de Prévias . Consulte Gerenciar visualizações do Azure Databricks.

Segurança de dados

Os dados do documento são processados dentro do perímetro de segurança do Databricks. O Databricks não armazena os parâmetros que são passados para as chamadas de função de IA, mas mantém detalhes de execução de metadados, como a versão de Runtime do Databricks utilizada.

Requisitos

  • Essa função só está disponível em algumas regiões, consulte a disponibilidade da função de IA.
  • Se você estiver usando a computação sem servidor, o seguinte também será necessário:
    • A versão do ambiente sem servidor deve ser definida como 3 ou superior, pois isso permite recursos como VARIANT.
    • Deve usar Python ou SQL. Para obter recursos e limitações adicionais sem servidor, consulte limitações de computação sem servidor.
  • A ai_transcribe função está disponível usando notebooks do Databricks, editor de SQL, fluxos de trabalho do Databricks, trabalhos ou pipelines do Lakeflow.
  • ai_transcribe os custos são registrados como parte do AI_FUNCTIONS produto.

Formatos de arquivo de entrada com suporte

Para dados de entrada, use uma expressão do tipo FILE que faça referência a um arquivo de áudio ou uma BINARY expressão que contenha os bytes do arquivo de áudio. Se os arquivos-fonte estiverem armazenados em um volume do Unity Catalog, gere a coluna binária usando o leitor de formato Spark binaryFile , como mostrado nos exemplos.

ai_transcribe transcreve apenas áudio. Arquivos de vídeo não são suportados. Durante a Beta, os seguintes formatos de áudio são suportados:

  • MP3
  • WAV
  • FLAC
  • Opus
  • M4A

Linguagens suportadas

Durante a versão beta, ai_transcribe suporta áudio em inglês e espanhol. Áudio em outros idiomas pode devolver transcrições imprecisas.

Sintaxe

ai_transcribe(content)

Arguments

content é o único argumento necessário.

  • content: Uma expressão do tipo FILE que faz referência a um arquivo de áudio, ou uma BINARY expressão que contém os bytes do arquivo de áudio, como a content coluna produzida por read_files(..., format => 'binaryFile').

Returns

ai_transcribe retorna um VARIANT valor com a transcrição dividida em segmentos com carimbo de tempo. Cada segmento também carrega uma speaker_id etiqueta de diarização automática por alto-falantes. Veja Diarização do Alto-falante.

A saída possui o seguinte esquema:

{
  "error_message": STRING,          // null on success; an error message string on failure
  "response": {
    "duration_seconds": DOUBLE,     // total audio duration, in seconds
    "segments": [
      {
        "start": DOUBLE,            // segment start time, in seconds
        "end": DOUBLE,              // segment end time, in seconds
        "speaker_id": STRING,       // speaker label ("1", "2", ...)
        "text": STRING              // transcript text for the segment
      }
    ]
  }
}

Os campos de resposta são os seguintes:

  • error_message: null quando a chamada é bem-sucedida, ou uma string descrevendo a falha.
  • response.duration_seconds: A duração total do áudio, em segundos.
  • response.segments: Uma matriz de segmentos de transcrição, em ordem temporal. Para obter a transcrição completa, concatene os valores dos text segmentos em ordem.
  • segments[].start e segments[].end: O horário de início e término do segmento, em segundos.
  • segments[].speaker_id: O rótulo do alto-falante do segmento. Veja Diarização do Alto-falante.
  • segments[].text: O texto da transcrição do segmento.

Diarização do falante

ai_transcribe Executa a diarização automática dos alto-falantes: ele detecta alto-falantes distintos no áudio e rotula cada segmento com um speaker_id. A diarização está sempre ativada durante a Beta e não pode ser ativada ou desligada pelos usuários, então não é necessária configuração. Os alto-falantes são rotulados "1", "2", "3", e assim por diante na ordem em que falam pela primeira vez, e os rótulos são consistentes ao longo de toda a gravação.

Limitações

As seguintes limitações se aplicam durante o Beta:

  • Cada chamada aceita no máximo 1 hora de áudio. Áudio mais longo retorna um erro.
  • Cada chamada aceita um arquivo de entrada de no máximo 512 MB. Um arquivo maior retorna um erro.
  • ai_transcribe transcreve apenas áudio; arquivos de vídeo não são suportados.

Exemplos

O exemplo a seguir passa uma coluna de tipo FILE nomeada audio diretamente de uma tabela para ai_transcribe.

SELECT
  audio.uri AS path,
  ai_transcribe(audio) AS transcription
FROM my_catalog.my_schema.audio_files;

Note

O tipo FILE está em Beta.

O exemplo a seguir transcreve todos os arquivos de áudio em um volume do Unity Catalog. Ele lê os arquivos como dados binários com read_files(..., format => 'binaryFile') e passa a content coluna para ai_transcribe.

SELECT
  path,
  ai_transcribe(content) AS transcription
FROM READ_FILES('/Volumes/catalog/schema/volume/audio/', format => 'binaryFile');

O próximo exemplo expande a transcrição para uma linha por segmento, com o rótulo do falante, carimbos de data e texto como colunas separadas. Ele usa variant_explode a função de valor de tabela para des-aninhar o segments array.

WITH transcribed AS (
  SELECT
    path,
    ai_transcribe(content) AS result
  FROM READ_FILES('/Volumes/catalog/schema/volume/audio/', format => 'binaryFile')
)
SELECT
  transcribed.path,
  segment.value:start::DOUBLE AS start_seconds,
  segment.value:end::DOUBLE AS end_seconds,
  segment.value:speaker_id::STRING AS speaker_id,
  segment.value:text::STRING AS text
FROM
  transcribed,
  LATERAL variant_explode(transcribed.result:response.segments) AS segment;