Criar aplicativos do Home windows que aproveitem modelos de IA no dispositivo pode parecer uma tarefa assustadora. Há muito trabalho envolvido na definição do seu caso de uso, na escolha e no ajuste dos modelos certos e no refinamento da lógica em torno dos modelos.
Embora não haja um caminho rápido e fácil para aprender os meandros da IA no Home windows, vamos analisar um exemplo de aplicativo que foi apresentado no Construct para ajudar você a ver como os modelos no dispositivo podem ser aproveitados para potencializar seus aplicativos.
O exemplo que veremos é um Editor de Áudio com IA, criado com WinUI3 e WinAppSDK. A funcionalidade do aplicativo em si é mínima, mas fornece uma boa estrutura para mostrar a parte de IA do aplicativo.
![Visualização do aplicativo editor de áudio](https://i0.wp.com/blogs.windows.com/wp-content/uploads/prod/sites/3/2024/07/hero-1024x685.png?resize=780%2C522&ssl=1)
Corte inteligente de áudio
O aplicativo Audio Editor usa vários modelos para habilitar o “corte inteligente” de áudio, que tem um fluxo como este:
- O usuário carrega um arquivo de áudio que inclui fala reconhecível
- Eles fornecem uma palavra-chave ou frase temática e uma duração de corte
- O Editor de Áudio gera um clipe de áudio recortado que contém o segmento de áudio mais relevante relacionado ao tema fornecido
A interface de entrada para esse fluxo ajuda a visualizar exatamente o que é esperado no exemplo:
![Visualização do aplicativo editor de áudio](https://i0.wp.com/blogs.windows.com/wp-content/uploads/prod/sites/3/2024/07/image1-1024x685.png?resize=780%2C522&ssl=1)
Uma vez Gerar novo clipe é clicado, o novo clipe de áudio é carregado no aplicativo e pode ser reproduzido para validação:
![Visualização do aplicativo editor de áudio](https://i0.wp.com/blogs.windows.com/wp-content/uploads/prod/sites/3/2024/07/image2-1024x685.png?resize=780%2C522&ssl=1)
Agora vamos dê uma olhada nos modelos que foram usados para fazer este trabalho.
Habilitando o Sensible Trimming com Silero, Whisper e MiniLML6v2
Para a tarefa de “good trimming”, são necessários três modelos diferentes, todos eles ONNX, para processar os dados de áudio de entrada na saída que estamos esperando. Vamos detalhar o que cada modelo faz, o que ele realiza para nosso caso de uso e onde você pode encontrar mais informações sobre os modelos.
Em ordem de uso:
Detecção de atividade de voz Silero (VAD)
Usamos esse modelo para “dividir” nosso áudio em pedaços menores para que ele possa ser processado pelo nosso modelo de transcrição.
Isso é necessário porque o Whisper (nosso modelo de transcrição) só consegue processar trechos de áudio de trinta segundos por vez. Não podemos ingenuamente cortar o áudio em intervalos de 30 segundos porque isso cortaria as frases no meio, resultando em uma transcrição que não refletia com precisão a estrutura e a gramática do áudio falado.
Como solução, usamos o Silero VAD para detectar atividade de voz e cortar interrupções na fala, resultando em blocos de áudio pequenos o suficiente para o Whisper processar, mas que ainda são partes devidamente seccionadas da fala.
Você pode aprender mais sobre o Silero VAD no GitHub.
Sussurro Pequeno
Depois que nosso áudio foi dividido em pedaços, pegamos a saída e a alimentamos para o modelo Whisper Tiny. Este modelo transcreve a fala para texto e é provavelmente o passo mais direto em nosso pipeline: pedaços de áudio entram, e pedaços transcritos saem.
Usamos a versão Tiny do Whisper para otimizar o desempenho, mas ela vem com algumas desvantagens, como ser limitada ao inglês e uma possível queda na precisão. No entanto, para o nosso caso de uso, funciona muito bem.
Você pode aprender mais sobre o Whisper Tiny, ou suas variantes, no HuggingFace.
MiniLM
O último modelo que usamos é um modelo de incorporação de texto chamado MiniLM. O MiniLM mapeia sentenças escritas para um espaço vetorial multidimensional que encapsula todas as informações semânticas contidas em uma sentença. Em outras palavras, esse modelo mapeia todas as coisas que entendemos inerentemente sobre a linguagem (como significado, gramática, vocabulário, and many others.) para uma representação numérica dessas informações. Isso é útil para todos os tipos de tarefas, mas o usaremos para pesquisa semântica.
Para este exemplo, pegamos o texto transcrito do nosso modelo Whisper, nossa frase temática de entrada para pesquisar e usamos o MiniLM para gerar embeddings de texto para ambos. Uma vez que temos nossos embeddings, podemos calcular a similaridade de cosseno entre nossa frase temática e seções incorporadas do nosso texto de áudio para obter a seção semanticamente mais related do nosso áudio.
A partir daí, só precisamos cortar nosso áudio com base nos carimbos de information e hora, carregá-lo no participant e pronto!
Você pode aprender mais sobre o MiniLM no HuggingFace.
Executando o exemplo e verificando o código
Se você quiser executar o exemplo por si mesmo ou se aprofundar na implementação para obter mais detalhes sobre como tudo isso funciona, acesse este repositório onde o exemplo está.
Também temos um documento de Passo a Passo do Código caso você queira um ponto de entrada sobre como este exemplo foi escrito.
Há um bocado de configuração para configurar todos os modelos no projeto (já que eles não podem ser verificados no controle de origem), mas todas as etapas de pré-requisito são definidas no README. Vá conferir!
Se você quiser aprender mais sobre como usar modelos locais no Home windows, vá para esta documentação para saber mais.