En el procesamiento de señales , la regresión lineal de máxima verosimilitud en el espacio de características ( fMLLR ) es una transformación de características globales que se aplica normalmente de forma adaptativa al hablante, donde fMLLR transforma las características acústicas en características adaptadas al hablante mediante una operación de multiplicación con una matriz de transformación. En alguna literatura, fMLLR también se conoce como regresión lineal de máxima verosimilitud restringida ( cMLLR ).
Las transformaciones fMLLR se entrenan en un sentido de máxima verosimilitud sobre datos de adaptación. Estas transformaciones se pueden estimar de muchas maneras, pero solo se considera la estimación de máxima verosimilitud (ML) en fMLLR. La transformación fMLLR se entrena sobre un conjunto particular de datos de adaptación, de modo que maximice la verosimilitud de esos datos de adaptación dado un conjunto de modelos actual.
Esta técnica es un enfoque ampliamente utilizado para la adaptación del hablante en el reconocimiento de voz basado en HMM . [1] [2] Investigaciones posteriores [3] también muestran que fMLLR es una característica acústica excelente para los modelos de reconocimiento de voz híbridos DNN/HMM [4] .
Las ventajas de fMLLR incluyen lo siguiente:
Principales problemas y desventajas de fMLLR:
La transformación de características de fMLLR se puede calcular fácilmente con la herramienta de voz de código abierto Kaldi ; el script Kaldi utiliza el esquema de estimación estándar descrito en el Apéndice B del artículo original, [1] en particular la sección Apéndice B.1 "Método directo sobre filas".
En la formulación de Kaldi, fMLLR es una transformación de característica afín de la forma → , que se puede escribir en la forma →W , donde = es la característica acústica con un 1 añadido. Tenga en cuenta que esto difiere de parte de la literatura donde el 1 viene primero como = .
Las estadísticas suficientes almacenadas son:
donde es la matriz de covarianza inversa.
Y para donde esta la dimensión característica:
Para una revisión exhaustiva que explica fMLLR y las técnicas de estimación comúnmente utilizadas, consulte el artículo original "Transformaciones lineales de máxima verosimilitud para el reconocimiento de voz basado en HMM [1] ".
Tenga en cuenta que el script Kaldi que realiza las transformaciones de características de fMLLR difiere de [1] al utilizar una columna de la inversa en lugar de la fila del cofactor. En otras palabras, se ignora el factor del determinante, ya que no afecta el resultado de la transformación y puede causar un peligro potencial de desbordamiento o subdesbordamiento numérico.
El resultado del experimento muestra que al utilizar la función fMLLR en el reconocimiento de voz, se obtiene una mejora constante con respecto a otras funciones acústicas en varios conjuntos de datos de referencia comúnmente utilizados ( TIMIT , LibriSpeech, etc.).
En particular, las características de fMLLR superan los coeficientes MFCC y FBANK , lo que se debe principalmente al proceso de adaptación del hablante que realiza fMLLR. [3]
En [3] se informa la tasa de error de fonemas (PER, %) para el conjunto de pruebas de TIMIT con varias arquitecturas neuronales:
Como se esperaba, las características fMLLR superan los coeficientes MFCC y FBANK a pesar del uso de una arquitectura de modelo diferente.
Mientras que MLP (perceptrón multicapa) sirve como una línea de base simple, por otro lado, RNN , LSTM y GRU son modelos recurrentes bien conocidos.
La arquitectura Li-GRU [5] se basa en una sola puerta y, por lo tanto, ahorra un 33 % de los cálculos en comparación con un modelo GRU estándar; por lo tanto, Li-GRU aborda de manera efectiva el problema de desaparición del gradiente de los modelos recurrentes.
Como resultado, el mejor rendimiento se obtiene con el modelo Li-GRU en las características fMLLR.
fMLLR se puede extraer como se informa en la receta s5 de Kaldi.
Los scripts Kaldi ciertamente pueden extraer características fMLLR en diferentes conjuntos de datos; a continuación se presentan los pasos de ejemplo básicos para extraer características fMLLR del corpus de voz de código abierto Librispeech.
Tenga en cuenta que las instrucciones a continuación son para los subconjuntos train-clean-100
, train-clean-360
, dev-clean
, y test-clean
,
pero se pueden ampliar fácilmente para admitir los otros conjuntos dev-other
, test-other
ytrain-other-500.
$KALDI_ROOT/egs/librispeech/s5/
con los archivos en el repositorio.$KALDI_ROOT/egs/librispeech/s5/cmd.sh
para reemplazarlas queue.pl
por run.pl
:exportar train_cmd = "run.pl --mem 2G" exportar decode_cmd = "run.pl --mem 4G" exportar mkgraph_cmd = "run.pl --mem 8G"
data
ruta a run.sh
la ruta de datos de LibriSpeech; el directorio LibriSpeech/
debería estar en esa ruta. Por ejemplo:data = /media/user/SSD # ruta de ejemplo
flac
con:sudo apt-get install flac
run.sh
para LibriSpeech al menos hasta la Etapa 13 (incluida), para simplificar puede usar el run.sh modificado.exp/tri4b/trans.*
los archivos exp/tri4b/decode_tgsmall_train_clean_*/
con el siguiente comando:mkdir exp/tri4b/decodificar_tgsmall_train_clean_100 && cp exp/tri4b/trans.* exp/tri4b/decodificar_tgsmall_train_clean_100/
#!/bin/bash. ./cmd.sh ## Querrá cambiar cmd.sh a algo que funcione en su sistema. . ./path.sh ## Fuente de las herramientas/utilidades (importa el queue.pl) gmmdir = exp/tri4bpara el fragmento en dev_clean test_clean train_clean_100 train_clean_360 ; hacer dir = fmllr/ $fragmento pasos/nnet/make_fmllr_feats.sh --nj 10 --cmd " $train_cmd " \ --transform-dir $gmmdir /decode_tgsmall_ $chunk \ $dir datos/ $fragmento $gmmdir $dir /log $dir /datos || salida 1 computar-cmvn-stats --spk2utt = ark:data/ $fragmento /spk2utt scp:fmllr/ $fragmento /feats.scp ark: $dir /data/cmvn_speaker.arkhecho
# alineaciones en dev_clean y test_cleanpasos/align_fmllr.sh --nj 10 datos/dev_clean datos/lang exp/tri4b exp/tri4b_ali_dev_clean pasos/align_fmllr.sh --nj 10 datos/prueba_limpia datos/lang exp/tri4b exp/tri4b_ali_prueba_limpia pasos/align_fmllr.sh --nj 30 datos/train_clean_100 datos/lang exp/tri4b exp/tri4b_ali_clean_100 pasos/align_fmllr.sh --nj 30 datos/train_clean_360 datos/lang exp/tri4b exp/tri4b_ali_clean_360
#!/bin/bashdata = /user/kaldi/egs/librispeech/s5 ## Querrá cambiar esta ruta a algo que funcione en su sistema. rm -rf $datos /fmllr_cmvn/ mkdir $datos /fmllr_cmvn/ para la parte de dev_clean test_clean train_clean_100 train_clean_360 ; hacer mkdir $datos /fmllr_cmvn/ $parte / aplicar-cmvn --utt2spk = ark: $datos /fmllr/ $parte /utt2spk ark: $datos /fmllr/ $parte /datos/cmvn_speaker.ark scp: $datos /fmllr/ $parte /feats.scp ark:- | agregar-deltas --delta-order = 0 ark:- ark: $datos /fmllr_cmvn/ $parte /fmllr_cmvn.ark hechodu -sh $datos /fmllr_cmvn/* eco "¡Hecho!"
Python ark2libri.py