ai_transcribe Função

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

A ai_transcribe() função transcreve um ficheiro de áudio para texto. Devolve a transcrição como um conjunto de segmentos com carimbo temporal e rotula cada segmento com um altifalante usando diarização automática do altifalante. A saída é um VARIANT valor, por isso pode encadeá-lo noutras Funções de IA.

Importante

Este recurso está em versão Beta. Para o usar, um administrador de espaço de trabalho deve ativar o AI Transcribe a partir da página de Pré-visualizações . Ver Gerir as pré-visualizações de Azure Databricks.

Segurança de dados

Os dados do documento são processados dentro do perímetro de segurança 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

  • Esta função está disponível apenas em algumas regiões, veja disponibilidade de funções de IA.
  • Se você estiver usando computação sem servidor, o seguinte também é 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 recursos e limitações adicionais sem servidor, consulte Limitações de computação sem servidor.
  • A ai_transcribe função está disponível através de cadernos Databricks, editor SQL, fluxos de trabalho Databricks, trabalhos ou pipelines Lakeflow.
  • ai_transcribe os custos são registados como parte do AI_FUNCTIONS produto.

Formatos de ficheiro de entrada suportados

Para dados de entrada, use uma expressão do tipo FILE que faça referência a um ficheiro de áudio ou uma BINARY expressão que contenha os bytes do ficheiro de áudio. Se os ficheiros fonte estiverem armazenados num 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. Ficheiros de vídeo não são suportados. Durante a Beta, são suportados os seguintes formatos de áudio:

  • MP3
  • WAV
  • FLAC
  • Opus
  • M4A

Línguas suportadas

Durante a Beta, ai_transcribe suporta áudio em inglês e espanhol. O áudio noutras línguas pode devolver transcrições imprecisas.

Syntax

ai_transcribe(content)

Arguments

content é o único argumento obrigatório.

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

Devoluções

ai_transcribe devolve um VARIANT valor com a transcrição dividida em segmentos com carimbo temporal. Cada segmento também transporta uma speaker_id etiqueta de diarização automática por altifalantes. Ver Diarização do orador.

A saída tem 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 cadeia que descreve a falha.
  • response.duration_seconds: A duração total do áudio, em segundos.
  • response.segments: Uma série de segmentos de transcrição, por ordem temporal. Para obter a transcrição completa, concatene os valores dos text segmentos por ordem.
  • segments[].start e segments[].end: A hora de início e fim do segmento, em segundos.
  • segments[].speaker_id: A etiqueta do altifalante para o segmento. Ver Diarização do orador.
  • segments[].text: O texto da transcrição do segmento.

Diarização do altifalante

ai_transcribe Executa automaticamente a diarização dos altifalantes: deteta altifalantes distintos no áudio e rotula cada segmento com um speaker_id. A diarização está sempre ativa durante a Beta e não pode ser ativada ou desligada pelos utilizadores, pelo que não é necessária qualquer configuração. As colunas são rotuladas "1"com , "2", "3", e assim sucessivamente na ordem em que falam pela primeira vez, e as etiquetas são consistentes ao longo de toda a gravação.

Limitations

As seguintes limitações aplicam-se durante a Beta:

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

Exemplos

O exemplo seguinte passa uma coluna de tipo FICHEIRO 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 de ficheiro está em Beta.

O exemplo seguinte transcreve todos os ficheiros de áudio num volume do Unity Catalog. Lê os ficheiros como dados binários com read_files(..., format => 'binaryFile') e passa a coluna content para ai_transcribe.

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

O exemplo seguinte expande a transcrição para uma linha por segmento, com o rótulo do orador, carimbos temporais e texto como colunas separadas. Utiliza 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;