diff --git a/ga/generate_plots.py b/ga/generate_plots.py index 9491b61..cedc338 100644 --- a/ga/generate_plots.py +++ b/ga/generate_plots.py @@ -89,20 +89,6 @@ def plot_wer_der_scatter(all_configs: list[dict], img_dir: Path): label=f'Лучшая ({best["wer"]:.1f}%, {best["der"]:.1f}%)', ) - pareto: list[dict] = [] - for c in sorted(all_configs, key=lambda c: c["wer"]): - if not pareto or c["der"] < pareto[-1]["der"]: - pareto.append(c) - if len(pareto) > 1: - ax.plot( - [c["wer"] for c in pareto], - [c["der"] for c in pareto], - "k--", - alpha=0.5, - linewidth=1.2, - label="Парето-фронт", - ) - ax.set_xlabel("WER, %", fontsize=12) ax.set_ylabel("DER, %", fontsize=12) ax.legend(fontsize=11) diff --git a/presentation/presentation.tex b/presentation/presentation.tex index 04249f2..398f75f 100644 --- a/presentation/presentation.tex +++ b/presentation/presentation.tex @@ -188,18 +188,21 @@ clustering\_threshold & дискретный & \{0.3, 0.45, 0.6, 0.75, 0.9\} \\ % ===== 9. Best configurations ===== \begin{frame}{Результаты: лучшие конфигурации} +\footnotesize Для каждой уникальной комбинации моделей транскрибации и диаризации --- лучшая найденная конфигурация параметров. + +\vspace{0.5em} \small \begin{table} \centering -\begin{tabular}{c l l c c c} +\begin{tabular}{c l l c c c c} \toprule -\textbf{\#} & \textbf{Транскрибация} & \textbf{Диаризация} & \textbf{WER} & \textbf{DER} & $f(\mathbf{x})$ \\ +\textbf{\#} & \textbf{Транскр.} & \textbf{Диариз.} & \textbf{WER} & \textbf{DER} & \textbf{T} & $f(\mathbf{x})$ \\ \midrule -1 & GigaAM-RNN-T & Sortformer & 5.32\% & 19.07\% & 11.25 \\ -2 & GigaAM-CTC & Sortformer & 6.54\% & 19.07\% & 11.30 \\ -3 & GigaAM-RNN-T & pyannote C.-1 & 5.32\% & 20.50\% & 11.60 \\ -4 & GigaAM-CTC & pyannote C.-1 & 6.54\% & 20.50\% & 11.66 \\ -5 & F.-Whisper l.-v3 & Sortformer & 7.59\% & 19.01\% & 11.84 \\ +1 & GigaAM-RNN-T & Sortformer & 5.32\% & 19.07\% & 7.5' & 11.25 \\ +2 & GigaAM-CTC & Sortformer & 6.54\% & 19.07\% & 5.3' & 11.30 \\ +3 & GigaAM-RNN-T & pya. C.-1 & 5.32\% & 20.50\% & 6.4' & 11.60 \\ +4 & GigaAM-CTC & pya. C.-1 & 6.54\% & 20.50\% & 4.2' & 11.66 \\ +5 & F.-Whisper & Sortformer & 7.59\% & 19.01\% & 6.0' & 11.84 \\ \bottomrule \end{tabular} \end{table} @@ -236,8 +239,8 @@ beam\_size=1, vad\_thr=0.5, min\_speech\_dur=0.5~с, clustering\_thr=0.6 \midrule Полный перебор & 9375 & --- & --- & --- \\ Случ. поиск (15) & 15 & 13.03 & 6.99\% & 23.35\% \\ -Случ. поиск (93) & 93 & 11.81 & 5.57\% & 20.27\% \\ -Случ. поиск (375) & 375 & 11.32 & 5.57\% & 19.15\% \\ +Случ. поиск (60) & 60 & 12.20 & 6.54\% & 21.50\% \\ +Случ. поиск (120) & 120 & 11.60 & 5.57\% & 19.80\% \\ \textbf{ГА (25 пок.)} & \textbf{93 мод.} & \textbf{11.25} & \textbf{5.32\%} & \textbf{19.07\%} \\ \bottomrule \end{tabular} @@ -245,7 +248,7 @@ beam\_size=1, vad\_thr=0.5, min\_speech\_dur=0.5~с, clustering\_thr=0.6 \vspace{0.3cm} \begin{itemize} - \item ГА с 93 модульными вычислениями лучше случайного поиска с 375 оценками + \item ГА с 93 мод. выч. ($\sim$4~ч) лучше случайного поиска со 120 оценками (10~ч) \item $93 / 9375 \approx 1\%$ пространства поиска \item Оценочное время: $\sim$4 часа вместо 780 часов --- \textbf{ускорение $>$100$\times$} \end{itemize} diff --git a/report/img/wer_der_scatter.png b/report/img/wer_der_scatter.png index e2adba9..127cc93 100644 Binary files a/report/img/wer_der_scatter.png and b/report/img/wer_der_scatter.png differ diff --git a/report/report.tex b/report/report.tex index 736a10d..3c53ab0 100755 --- a/report/report.tex +++ b/report/report.tex @@ -412,21 +412,22 @@ clustering\_threshold & дискретный & \{0.3, 0.45, 0.6, 0.75, 0.9\} \\ \subsection{Лучшие найденные конфигурации} -В таблице~\ref{tab:top-configs} представлены лучшие конфигурации, найденные алгоритмом, с различными сочетаниями моделей. +В таблице~\ref{tab:top-configs} для каждой уникальной комбинации моделей транскрибации и диаризации представлена лучшая найденная конфигурация параметров. \begin{table}[H] \centering -\caption{Лучшие конфигурации, найденные генетическим алгоритмом} +\small +\caption{Лучшие конфигурации для каждой уникальной комбинации моделей} \label{tab:top-configs} -\begin{tabular}{c l l c c c} +\begin{tabular}{c l l c c c c} \toprule -\textbf{\#} & \textbf{Транскрибация} & \textbf{Диаризация} & \textbf{WER, \%} & \textbf{DER, \%} & $f(\mathbf{x})$ \\ +\textbf{\#} & \textbf{Транскрибация} & \textbf{Диаризация} & \textbf{WER,\,\%} & \textbf{DER,\,\%} & \textbf{T,\,мин} & $f(\mathbf{x})$ \\ \midrule -1 & GigaAM-RNN-T & Sortformer & 5.32 & 19.07 & 11.25 \\ -2 & GigaAM-CTC & Sortformer & 6.54 & 19.07 & 11.30 \\ -3 & GigaAM-RNN-T & pyannote Comm.-1 & 5.32 & 20.50 & 11.60 \\ -4 & GigaAM-CTC & pyannote Comm.-1 & 6.54 & 20.50 & 11.66 \\ -5 & F.-Whisper large-v3 & Sortformer & 7.59 & 19.01 & 11.84 \\ +1 & GigaAM-RNN-T & Sortformer & 5.32 & 19.07 & 7.45 & 11.25 \\ +2 & GigaAM-CTC & Sortformer & 6.54 & 19.07 & 5.29 & 11.30 \\ +3 & GigaAM-RNN-T & pyannote Comm.-1 & 5.32 & 20.50 & 6.36 & 11.60 \\ +4 & GigaAM-CTC & pyannote Comm.-1 & 6.54 & 20.50 & 4.20 & 11.66 \\ +5 & F.-Whisper large-v3 & Sortformer & 7.59 & 19.01 & 6.01 & 11.84 \\ \bottomrule \end{tabular} \end{table} @@ -461,8 +462,6 @@ clustering\_threshold & дискретный & \{0.3, 0.45, 0.6, 0.75, 0.9\} \\ За 25 поколений алгоритм выполнил 93 уникальных модульных вычисления: 27 конфигураций транскрибации и 66 конфигураций диаризации. При этом было оценено 121 уникальное сочетание параметров (полная конфигурация пайплайна). Без модульного кэширования потребовалось бы 242 модульных вычисления (121~$\times$~2), то есть кэширование сократило объём вычислений в 2.6 раза. -На рисунке~\ref{fig:convergence} видно, что начиная с 8-го поколения число новых вычислений резко сокращается (0--4 за поколение), так как большинство конфигураций уже присутствуют в кэше. - \subsection{Сравнение с другими стратегиями поиска} Для оценки эффективности генетического алгоритма проведено сравнение со случайным поиском. Результаты представлены в таблице~\ref{tab:comparison}. @@ -477,14 +476,14 @@ clustering\_threshold & дискретный & \{0.3, 0.45, 0.6, 0.75, 0.9\} \\ \midrule Полный перебор & 9375 & --- & --- & --- \\ Случ. поиск (15 конф.) & 15 & 13.03 & 6.99 & 23.35 \\ -Случ. поиск (93 конф.) & 93 & 11.81 & 5.57 & 20.27 \\ -Случ. поиск (375 конф.) & 375 & 11.32 & 5.57 & 19.15 \\ +Случ. поиск (60 конф.) & 60 & 12.20 & 6.54 & 21.50 \\ +Случ. поиск (120 конф.) & 120 & 11.60 & 5.57 & 19.80 \\ ГА (25 поколений) & 93 мод. выч. & 11.25 & 5.32 & 19.07 \\ \bottomrule \end{tabular} \end{table} -Генетический алгоритм с 93 модульными вычислениями нашёл конфигурацию лучше, чем случайный поиск с 375 оценками полного пайплайна ($f = 11{,}25$ против $f = 11{,}32$). При этом ГА использовал значительно меньший вычислительный бюджет. +Генетический алгоритм с 93 модульными вычислениями нашёл конфигурацию лучше, чем случайный поиск со 120 оценками полного пайплайна ($f = 11{,}25$ против $f = 11{,}60$). При этом случайный поиск со 120 конфигурациями занимает $120 \times 5 = 600$ минут (10 часов) --- весь доступный вычислительный бюджет, тогда как ГА укладывается в~4 часа. По сравнению с полным перебором, генетический алгоритм оценил лишь $93 / 9375 \approx 1\%$ от общего числа модульных конфигураций. При оценочном времени выполнения одного модульного вычисления около 2.5 минуты, общее время работы алгоритма составляет около 4 часов, что более чем в~100 раз быстрее полного перебора (780 часов). @@ -497,7 +496,7 @@ clustering\_threshold & дискретный & \{0.3, 0.45, 0.6, 0.75, 0.9\} \\ Реализованный алгоритм включает модульное кэширование результатов, позволяющее избежать повторных вычислений при изменении параметров одного из модулей, а также пакетное планирование вычислений, группирующее конфигурации по модели для минимизации затрат на загрузку и выгрузку нейросетевых моделей. -Экспериментальная апробация показала, что алгоритм сходится к близкому к оптимальному решению за 4--10 поколений, выполняя при этом лишь 93 модульных вычисления --- около 1\% от полного пространства поиска в 9375 конфигураций. Лучшая найденная конфигурация (GigaAM-RNN-T + Sortformer, WER~=~5.32\%, DER~=~19.07\%) превосходит результат случайного поиска с четырёхкратно бо\'{л}ьшим числом оценок. Оценочное время работы алгоритма составляет около 4 часов на Tesla~T4, что более чем в 100 раз быстрее полного перебора. +Экспериментальная апробация показала, что алгоритм сходится к близкому к оптимальному решению за 4--10 поколений, выполняя при этом лишь 93 модульных вычисления --- около 1\% от полного пространства поиска в 9375 конфигураций. Лучшая найденная конфигурация (GigaAM-RNN-T + Sortformer, WER~=~5.32\%, DER~=~19.07\%) превосходит результат случайного поиска, использующего весь 10-часовой вычислительный бюджет (120 конфигураций). Оценочное время работы алгоритма составляет около 4 часов на Tesla~T4, что более чем в 100 раз быстрее полного перебора. В дальнейшем, в рамках дипломной работы, планируется расширение подхода на этап суммаризации при условии увеличения вычислительных ресурсов, а также апробация алгоритма на реальных данных с использованием полного датасета.