Você ainda não disse a palavra "olá" e já sabemos quem você é

Nossa rede neural pode fazer isso, reconhecendo uma pessoa por uma sílaba pronunciada. No entanto, o tópico deste artigo não está diretamente relacionado à identificação por voz, embora esteja relacionado a ele. Falaremos sobre os recursos da rede neural, o chamado vetor-d, que pode ser usado em tarefas de processamento de som: da verificação ao reconhecimento de fala e emoções.

imagem


Material


Dependendo da taxa de amostragem, um segundo de som pode conter de 8 a 48 mil números. Eles podem ser representados como desvios da posição de equilíbrio da membrana ou microfone do alto-falante. De fato, essa descrição do som é redundante: a amplitude do sinal no momento seguinte depende fortemente da anterior, o que sugere que esse sinal pode ser efetivamente compactado sem muita perda de informação. Existem inúmeras maneiras de reduzir a dimensão de um sinal, e a maioria delas se baseia nas propriedades físicas do som e nas características da audição humana.

imagem

Meme 1.

Antes de as redes neurais funcionarem bem (em um sentido amplo), a comunidade trabalhava com os chamados atributos artesanais. Os mais famosos e amplamente utilizados deles são o Pitch e o MFCC . O primeiro tem um significado físico da frequência de oscilações das cordas vocais, que diferem, por exemplo, para pessoas diferentes, e também dependem da entonação. A ideia dos coeficientes cepstrais (MFCC) baseia-se na não linearidade da percepção humana do som, ou seja, frequência e volume. Parece a uma pessoa que um som é mais alto que outro em certa medida, se, na realidade, suas frequências diferem um certo número de vezes.

Esses e outros recursos calculados manualmente são irreversíveis no sentido de que parte do sinal é perdida para sempre. Em algumas tarefas, isso não é crítico, mas eu gostaria de apresentar uma abordagem mais universal e de trabalho.

A chave para resolver esse problema é a transformação de Fourier. Usando-o, você pode imaginar um sinal de áudio como a soma de ondas com diferentes frequências e amplitudes. De fato, a fala não é estacionária no sentido de que seu espectro será qualitativamente diferente em diferentes momentos no tempo. Isso nos permite considerá-lo na representação de frequência e tempo, usando espectrogramas .

Para construir um espectrograma, você precisa dividir o som em seções que se cruzam (quadros sobrepostos) com várias dezenas de milissegundos de comprimento, para cada um deles calcular a transformação de Fourier e escrever seus módulos em colunas nos espectrogramas. Além disso, essa transformação é quase inversa entre si, ou seja, usando a transformada inversa de Fourier e o algoritmo Griffin-Lim, você pode restaurar o sinal sonoro original (de fato, há perda de informações, pois a transformação de Fourier é complexa no caso geral e o espectrograma é de valor real e, para aproximar a recuperação de fase, o algoritmo iterativo Griffin-Lim é geralmente usado). Total, se tomarmos o logaritmo das amplitudes, obtemos as seguintes imagens:

imagem

Espectrograma de 5 segundos de fala.

E eles são convenientemente processados ​​por redes convolucionais.

Esse hack é frequentemente usado em tarefas de processamento de imagens: existem grandes bancos de dados com exemplos de objetos diferentes (por exemplo, ImageNet). Você pode treinar uma grade grande para reconhecê-los e treiná-la novamente em nossa tarefa específica ou obter o resultado da saída de uma das camadas internas totalmente conectadas. Acredita-se que essa arquitetura calcule boas características informativas para imagens de entrada. A experiência sugere que quase sempre os resultados serão melhores do que se treinássemos a rede neural do zero.

A idéia de vetores-d (geralmente vetores-d, mas às vezes denominados vetores-x) é semelhante ao uso de grades pré-treinadas no ImageNet, exceto pelo fato de não haver bases semelhantes para espectrogramas. Como uma possível saída, os codificadores automáticos podem ser considerados, mas a priori não sabem o que procurar no espectrograma; portanto, eles funcionam de maneira insatisfatória.

Precisamos ir mais fundo


Atenção, a parte principal deste artigo começa.

A tarefa de verificar uma pessoa por voz é amplamente conhecida, onde é necessário determinar pelo segmento de entrada de fala qual das pessoas no banco de dados o disse. De fato, a construção de tais sistemas é uma ciência separada e existem muitos complementos diferentes (duração da fala; é necessário que todos falem o mesmo texto; encenando um contra um ou um contra todos), que são críticos sob condições diferentes, mas para nós você precisa prestar atenção em outra coisa.

A saber: quão boas serão as características se pré-treinarmos a grade para reconhecer uma pessoa. Tudo é feito por uma questão de sinais.

Isso nos ajudará a intuição e artigo de 2015. Nele, os autores ensinam a grade a reconhecer uma pessoa pelo rosto (reconhecimento de rosto). A chave para este trabalho é usar a perda de trigêmeos.

Sua ideia é muito simples: normalizamos os recursos da penúltima camada para que eles fiquem em uma esfera unitária e exigimos que os pontos de uma classe fiquem próximos e distantes de diferentes. Isso pode ser alcançado da seguinte forma: para cada exemplo de treinamento (âncora), encontramos mais dois da mesma e de outra classe na amostra - positiva e negativa. Então, para esses triplos pontos, formamos uma perda:

\ begin {equation}
\ Big [\ Vert f (x ^ a) - f (x ^ p) \ Vert - \ Vert f (x ^ a) - f (x ^ n) \ Vert + \ alpha \ Big] _ +,
\ end {equação}

onde x é a imagem de entrada, f é a saída da grade após a normalização, alfa é o parâmetro selecionado manualmente, [] _ ​​{+} é a função ReLU. Qualitativamente, o valor dessa perda é zero se a distância entre a âncora e os pontos positivos for maior que a distância entre a âncora e a negativa por pelo menos alfa, e quanto maior, menor a diferença entre duas classes diferentes.

imagem

Uma ilustração do que acontece com os recursos após o treinamento com Triplet Loss.

A propósito, você pode formar triplos de maneira inteligente. Em algum momento, a magnitude da perda se tornará pequena e, para acelerar o aprendizado, você pode procurar exemplos negativos não entre todas as outras classes, mas considerar apenas aqueles próximos à âncora. Porém, para conjuntos de dados grandes, isso é difícil, porque é necessário considerar as distâncias entre pares que mudam após cada iteração do aprendizado de rede.

A perda de trigêmeos tem uma vantagem sobre a entropia cruzada categórica, usada na classificação convencional. Um modelo treinado com entropia cruzada tentará colocar todos os pontos de uma classe em uma área cada vez menor, e informações supérfluas para uma tarefa específica podem ser perdidas. Mas não queremos isso, porque vamos usar a rede neural como um gerador de recursos, e não para verificação. Triplet Loss tem essa propriedade em uma extensão muito menor: é mais importante espalhar classes diferentes em áreas diferentes em uma única esfera do que gerar uma classe.

imagem

Meme 2.

A última coisa a fazer antes de treinar o gerador de recursos em espectrogramas é determinar seus tamanhos. Obviamente, a precisão da classificação será maior, maior será o período de tempo que consideraremos, mas mais sinais "médios" aparecerão. Portanto, é razoável usar esse comprimento de sinal para que 1-3 fonemas (sílabas) caiam nele - meio segundo parece apropriado.

Para treinamento, tomamos o conjunto de dados VoxCeleb2 , onde para cada um dos 6300 alto-falantes há várias gravações de áudio separadas de vários minutos cada (feitas em diferentes condições). Usamos parte dos arquivos de áudio para treinamento e o restante para validação, selecionamos a arquitetura de rede de convolução, adicionamos Triplet Loss a ela e aprendemos.

Os resultados foram muito legais. Em quase duas semanas de treinamento em 1080Ti (sim, por tanto tempo), a precisão da classificação atingiu 55%. Parece que não muito, mas a precisão do top 5 é de 78%, e se considerarmos apenas a metade mais alta dos fragmentos, que são principalmente vogais estressadas, a precisão do top 5 aumentará para 91%. Podemos dizer que podemos identificar uma pessoa por uma de suas frases com precisão razoável. Mas isso não importa.

imagem

Meme 3.

Afinal, tudo foi iniciado para recursos que podem ser obtidos como uma saída do penúltimo antes de classificar a camada de rede neural. Nós os testamos em nossas tarefas, e em todos os lugares os resultados foram melhores do que usar abordagens clássicas para calcular atributos. Por exemplo, no problema do reconhecimento de emoções, o uso de vetores-d permitiu-nos ignorar o estado da arte em 4%, e o artigo correspondente foi aceito na conferência da FICC 2019. No entanto, o reconhecimento de emoções é uma história completamente diferente, sobre a qual falaremos mais adiante.

Publicado por Gregory Sterling sterling239 , Especialista em Deep Learning, Neurodata Lab.

Source: https://habr.com/ru/post/pt422635/


All Articles