Научно-технический вебинар «Как использовать информацию о неопределенности в задаче распознавания диктора”

2 февраля 2021, 12:00 MCK

О вебинаре

  • Спикер

    Сильнова Анна, аспирант, исследователь, Технический университет Брно, Чехия

  • Тема

    Научно-технический вебинар «Как использовать информацию о неопределенности в задаче распознавания диктора”

  • Подробнее про вебинар

    Спикер о предстоящем вебинаре:

    Часто задача распознавания диктора формулируется как ответ на вопрос, содержат ли два аудио фрагмента запись голоса одного и того же человека, или разных.

    Интуитивно понятно, что сравнивая две длинные аудио записи хорошего качества следует ожидать более точный результат и большую в нем уверенность, чем когда сравниваются две короткие шумные записи. Однако большинство современных систем распознавания диктора не учитывают такой неоднородности во входных данных и относятся ко всем записям так, как будто они имеют одинаково высокое качество и достаточную длину. Более того, система может иметь очень высокую степень уверенности в своем решении, когда, на самом деле, лучше было бы дать понять пользователю, что аудио не позволяет надежно принять решение. Цель работ, о которых я расскажу — построить такую систему, которая могла бы оценивать уровень неопределённости, который несут в себе данные и использовать эту информацию при принятии решения.

    В своей презентации я расскажу о двух способах использования информации о неопределенности, над которыми я работала вместе с коллегами. Оба подхода модифицируют широко применяемый на практике метод: представление аудио в виде вектора фиксированной длины и моделирование таких векторов с помощью PLDA (вероятностный линейный дискриминантный анализ) модели. В первом случае мы модифицируем PLDA и показываем, что наша модификация позволяет использовать информацию о неопределенности, которая содержится в векторах представляющих аудио фрагменты. Во втором случае мы модифицируем векторное представление аудио так, чтобы в новой форме сохранялась неопределенность входных данных.

    Статьи, в которых детально описано то, о чем говорилось в докладе:

    http://www.fit.vutbr.cz/research/groups/speech/publi/2018/brummer_odyssey2018_51.pdf

    http://www.fit.vutbr.cz/research/groups/speech/publi/2018/silnova_interspeech2018_2128.pdf

    https://www.fit.vutbr.cz/research/groups/speech/publi/2020/silnova_odyssey2020_75.pdf

    Ссылка на HT-PLDA код:

    github.com/bsxfan/meta-embeddings/tree/master/code/Niko/matlab/clean/VB4HTPLDA

    Статья, которая упоминалась в вопросах спикеру:

    https://www.isca-speech.org/archive/Odyssey_2020/pdfs/65.pdf

    Видео: https://youtu.be/R0uXJTKjuCA

    Презентация: https://drive.google.com/file/d/1PWFg6rZNYn0lzf4VRJP9KoQGWn0HLt80/view?usp=sharing

    (00:00:00) (Начало записи) 

    Анна Сильнова: Здравствуйте. Как уже было сказано, меня зовут Анна Сильнова, и я учусь и работаю на факультете информационных технологий в техническом университете Брно, в группе, которая называется Speech _____, (00:00:14) это одна из, наверное, крупнейших таких исследовательских лабораторий в мире, которые занимаются речевыми технологиями. Соответственно, я, как часть этой лаборатории, занимаюсь тем же самым.

    Презентация называется «Как использовать информацию о неопределенности при решении задачи верификации диктора». Давайте уже перейдем к самой презентации.

    Моя презентация будет разделена на три части, как мы уже сказали. Сначала я очень быстро и без каких-либо деталей расскажу о том, что же это за задача такая, распознавание спикера или диктора, и расскажу о том, какие методы сейчас используются наиболее часто. Понятно, в существующих методах есть какие-то несовершенства, и основная часть моей презентации будет посвящена тому, как мы пытаемся бороться с этими несовершенствами, а именно, предлагаем два метода или два способа. Основная часть будет разделена на две, каждая будет посвящена одному из этих методов.

    Для начала начнем с задачи, что же такое распознавание диктора или спикера? Такую задачу можно сформулировать, она в себя включает довольно большой класс задач. Например, такая задача может быть, как идентификация. В этом случае мы предполагаем, что наша система знакома с каким-то количеством людей и знает, как звучит их голос, и мы предлагаем ей какую-то новую аудиозапись, и спрашиваем, кто из знакомых ей людей говорит на этой аудиозаписи. Либо, если это кто-то новый, она должна сказать, что «нет, я никого из них не знаю, это новый человек».

    Есть также задача диаризации, в которой предполагается, что у нас есть длинная аудиозапись, и мы не знаем, сколько человек на ней говорит, в какой момент. Тогда задача состоит в том, чтобы ее разделить, то есть сегментировать на такие отрезки, которые гомогенны по личности диктора, и потом кластеризовать эти отрезки так, чтобы мы знали, что здесь, здесь и здесь говорит один человек, а здесь, здесь и здесь говорит другой человек и, соответственно, как-то это обозначить для пользователя.

    Но, пожалуй, самая известная и популярная постановка задачи распознавания – это задача верификации, в которой мы спрашиваем, системе предлагается аудиозапись, и предлагается предполагаемая личность пользователя, и мы спрашиваем, правда ли этот человек говорит на этой аудиозаписи. Можно представить, что, например, я звоню в банк и говорю: «Здравствуйте, я Анна Сильнова», и они в это время должны проверить, соответствует ли мой голос той личности, которой я представляюсь, на самом деле.

    Эта же задача может быть сформулирована немножко по-другому. Можно сказать, что, например, в банке уже есть пример моего голоса, и тогда им надо проверить, эта новая запись принадлежит тому же человеку, то есть на ней говорит тот же самый человек, что и на той, которая у них уже есть, либо это какой-то новый человек. Это будет соответствовать этому сценарию.

    В современных методах на самом деле неважно, какая из записей референсная, а какая тестовая, то есть задача ставится так – просто если у нас есть две аудиозаписи, надо сказать, один и тот же там человек говорит или все-таки это разные люди. Так как эта задача наиболее базовая, что ли, то она может являться подзадачей для тех, о которых я уже говорила.

    (00:04:59)

    Например, для идентификации мы можем ее представить как набор попарных сравнений тестовой аудиозаписи с образцами голоса каждого пользователя, сохраненных в системе. То же самое в диаризации, мы можем попарно сравнивать отдельные сегменты и, таким образом, решить эту задачу. Поэтому в основном все методы сейчас концентрируются на решении задачи верификации.

    Что же мы хотим от системы для решения этой задачи? Желаемое поведение нашей системы состояло бы в том, чтобы она предоставляла нам, при данной паре аудиозаписей система должна была бы присвоить им какое-то числовое значение. Причем, хорошо бы, чтобы это число, чем оно больше, тем более система уверена в том, что это один и тот же человек, а чем меньше, тем более она уверена, что это разные люди. Соответственно, если бы у нас было какое-то пороговое значение, заранее заданное, то мы всегда бы могли сказать, во что система, грубо говоря, верит.

    К сожалению, такое пороговое значение установить в общем случае как-то надежно довольно сложно. Поэтому дополнительное требование, которое часто ставится перед системой, в том, чтобы это число, которое она присваивает, то есть мы его называем score, чтобы у него была какая-то вероятностная интерпретация. Часто предполагается, что система должна присваивать паре записей логарифм отношения правдоподобий, нулевой гипотезы, которая говорит о том, что это один и тот же человек на двух записях, и альтернативной гипотезы о том, что это разные люди. В целом всегда от системы будем ожидать, что она предоставляет нам этот LLR score на выходе. Тогда, если это правда, и действительно система справляется с этой задачей, то пороговое значение, с какого момента считать, что это один и тот же человек, а с какого момента считать, что это разные люди, можно было бы установить аналитически, и поэтому это очень удобно.

    Как же выглядит какая-нибудь типичная система сейчас? Так как нам, грубо говоря, неважно, какая из аудиозаписей референсная, а какая тестовая, поэтому, грубо говоря, система просто параллельно проводит одну и ту же операцию с обеими, которая состоит в следующем. Для начала аудио разбивается на очень короткие промежутки времени, и промежуток настолько короткий, что наше предположение состоит в том, что акустические свойства сигнала на этом маленьком отрезке времени не меняются, и тогда для каждого такого отрезка мы считаем вектор акустических признаков. Это операция детерминирована, то есть здесь мы ничего не обучаем, это зависит только от разработчика системы, какие именно признаки он захочет считать. Соответственно, на выходе этого шага мы получаем, что каждая запись представлена в виде матрицы, у которой ширина соответствует количеству таких признаков, которые мы считаем для одного сегмента, а высота матрицы будет соответствовать количеству этих сегментов. Соответственно, чем длиннее аудио, тем на большее количество сегментов мы будем разбивать и, соответственно, высота матрицы будет меняться.

    Напрямую сравнивать такие матрицы очень неудобно, потому что, во-первых, они очень большие, а во-вторых, для аудиозаписей разного размера они будут тоже иметь разную размерность, и как напрямую них сравнить, не очень понятно. Поэтому сейчас часто, в подавляющем большинстве случаев добавляют еще такую модель, которая называется Embedding Extractor, и смысл или предназначение этой модели в том, чтобы как-то суммаризировать информацию, содержащуюся в этих матрицах акустических признаков, и представить аудио в виде одного вектора.

    (00:10:07)

    Причем, этот вектор должен быть относительно невысокой размерности, типично это будет в районе 400-600 чисел, и после этого шага все аудиозаписи будут представлены в виде этих векторов. С векторами уже очень просто работать, их можно как сравнить напрямую, например, часто мы считаем просто косинус угла между векторами, и в зависимости от того, насколько большой угол или маленькие, считаем, разные это люди или одинаковые. Но понятно, что такой способ не соответствует нашему требованию о том, что нам бы хотелось вероятностно интерпретируемый этот score, поэтому чаще всего мы считаем теперь, что эти вектора, эмбеддинги, представляют у нас теперь наблюдаемые данные, и мы тренируем еще одну модель, backend-модель. Это такая вероятностная модель, которая уже смоделирует распределение этих векторов, и при положительном развитии событий предоставит нам тот самый LLR score, который мы бы от нее хотели. Требованием к этой модели стоит такое, что мы должны уметь считать те правдоподобия, которые нам нужны ли для того, чтобы найти score.

    Я сейчас чуть поподробнее остановлюсь на модели этого экстрактора эмбеддингов, потому что он будет нужен нам потом. Так как большая часть презентации будет посвящена этой backend-модели, пока что я пропущу и не буду особенно подробно о ней говорить, но в следующей части мы к ней вернемся.

    Итак, если говорить про модель для экстракции этих эмбеддингов, сейчас одна из самых популярных моделей называется x-vector extractor, и это нейросетевая модель. Сеть имеет такую специфическую структуру. Ее, грубо говоря, можно разделить на две части. Первая часть оперирует на уровне этих коротких сегментов, на которые мы разделили свою запись. Входом здесь будет служить матрица акустических признаков. Она будет трансформироваться с помощью нескольких слоев нейросети. Потом там появляется такой слой, который называется statistics pooling, то есть это слой, суммаризирующий информацию, которая в него поступила. Чаще всего это делается так, что считается просто средние и стандартные отклонения, и конкатенируются. В этот момент уже вся аудиозапись у нас представлена одним вектором, но пока что этот вектор довольно высокой размерности. Поэтому добавляется еще несколько нелинейных слоев, и чаще всего мы считаем, что embedding или x-vector – это активация после первого слоя, после этого суммаризирующего слоя. Но это может варьироваться от модели к модели. В той модели, которую я буду использовать, это будет так.

    Вся эта сеть во время обучения тренируется распознавать спикеров и дикторов из обучающего множества. Типично здесь будет около 4-5 тысяч классов, каждый из которых соответствует своему диктору.

    На этом я хотела бы закончить первую часть, такое вступление, и уже перейти к следующей. Так что, если у нас есть какие-то вопросы, то мы можем здесь остановиться.

    (00:15:05)

    Николай Михайловский: Коллеги, пожалуйста, вопросы, комментарии. У нас даже тут больше 30 человек, но это от того, что кто-то пятью лицами пришел.

    Анна, у меня есть несколько комментариев, пока коллеги с вопросами собираются. Можно на предыдущую картинку? Про Feature extraction, во-первых, там ведь сейчас много всяких работ, связанных не со стандартным MFCC, MFSC, а с работой напрямую с waveform-представлением, где можно и конволюционной сеткой из waveform-представления, и плотной сеткой, трансформероподобной или просто сеткой. Поэтому мы говорим, что здесь извлечение акустических фич – это точно нетренируемая вещь, это, наверное, немножечко отстает от текущего состояния.

    Анна Сильнова: Я, скорее, говорила о таком наиболее стандартном, что ли, подходе.

    Николай Михайловский: В массовом стандарте, наверное, да, там взяли MFSC, и погнали. Но, вообще говоря, говорить, что там необучаемая вещь, это, скорее, неправда, чем правда.

    На следующую картинку тоже можно? То, что здесь в конце Softmax, это… Тут же много-много всяких вариантов, кроме Softmax.

    Анна Сильнова: Да, конечно, очень много вариантов и по архитектуре сети, и по тем критериям, как ее можно обучить. Но я также представляю, во-первых, ту сеть, которую я буду использовать дальше, а во-вторых, такую наиболее стандартную, что ли, версию.

    Николай Михайловский: Если у вас там несколько тысяч классов, то почему вы используете Softmax, а не контрастивную или триплет-лоссы?

    Анна Сильнова: Есть такие работы, да, люди используют. Но пока, я бы сказала, что это не… Пока что Softmax – это наиболее надежный вариант. Все результаты, которые были получены с какими-то другими критериями, как это обучить, довольно противоречивы. В каких-то задачах это работает лучше, в каких-то это не работает совсем. А с такой архитектурой, с таким решением, кажется, это работает практически всегда.

    Николай Михайловский: Да, это просто, зато всегда работает, но при некотором умении готовить те же… Весь прошлый год – это был год Contrastive Learning. Во всех областях машинного обучения выходили работать с Contrastive Learning, иногда Triplet Loss, и достигались везде state of the art. Мне кажется, общий принцип состоит в том, что чем больше у вас классов, тем относительно хуже работает Softmax по сравнению с Contrastive Learning или Triplet Loss.

    Анна Сильнова: Да, возможно. Но я сейчас не могу припомнить никакой статьи, где это было бы показано, что да…

    Николай Михайловский: Я вам потом пришлю.

    Анна Сильнова: Хорошо.

    Николай Михайловский: Коллеги, пожалуйста, вопросы, комментарии. Можно руку поднять, чтобы голосом вопрос задать. О’кей. Давайте тогда двигаться дальше.

    (00:19:53)

    Анна Сильнова: Если вернуться к тому, о чем я говорила, это одна из наиболее стандартных процедур, как сейчас работает система верификации, например, диктора. У нее есть очень много преимуществ, как я уже сказала, работать с векторами, то есть представлять каждое аудио в виде одного вектора – это удобно, и их можно относительно быстро сравнивать между собой. Но, с другой стороны, у этого подхода есть такой очевидный недостаток, состоящий в том что, он никак не учитывает качество входных данных. Грубо говоря, в данном подходе система не имеет представления о том, были ли аудиозаписи, которые ей представили, длинными либо короткими, какого качества они были. Интуитивно понятно, что решение, основанное на сравнивании двух аудиозаписей 10-минутных, записанных на хороший микрофон, должно быть более надежным, чем решение при сравнивании двух записей длиной в секунду с большим шумом. Но в данном случае мы не имеем никаких рычагов давления на систему, чтобы заставить ее использовать эту информацию, как-то учитывать при принятии решения.

    Поэтому цель нашей работы была как раз привнести эту информацию о неопределенности, дать системе о ней знать, и дать ей возможность использовать эту информацию, когда она занимается верификацией.

    Мы работали над двумя подходами, о которых я сейчас расскажу. Первый подход называется «PLDA с тяжелыми хвостами», это еще сейчас обсудим. В этом подходе наше предположение состоит в том, что векторы, эти эмбеддинги уже содержат в себе информацию о неопределенности, просто наша существующая backend-модель не умеет ей пользоваться. Поэтому мы предлагаем модифицировать эту модель таким образом, чтобы эта неопределенность могла быть использована.

    Здесь я привела две ссылки на статьи, где мы в бо́льших подробностях и деталях описываем эту модель.

    Начать я бы хотела со стандартной backend-модели, которая используется намного чаще, и которая, как мы покажем, не умеет использовать эту неопределенность. Модель называется «вероятностный линейный дискриминантный анализ». В своем простейшем варианте она предполагает, что наши наблюдаемые данные, то есть эти эмбеддинги, вектора могут быть представлены в виде суммы двух компонентов. Один из этих компонентов зависит от личности диктора, а второй абсолютно от нее независим и представляет собой просто вектор шума. Причем, мы предполагаем, что этот шум имеет ту же размерность, что и наблюдаемый вектор, а зависимость от личности спикера моделируется с помощью скрытого случайного вектора диктора zi. Предположение модели состоит в том, что этот вектор может иметь как размерность наблюдаемых данных, так может жить и в каком-то подпространстве меньшей размерности. Соответственно, есть матрица, которая трансформирует этот скрытый вектор, транслирует его в пространство наблюдаемых векторов.

    В этой модели предполагается, что данные были сгенерированы следующим образом. Для каждого диктора первое, что мы делаем, мы генерируем случайный вектор, уникальный для этого диктора, и генерируем мы его из стандартного нормального распределения, а потом для каждой записи этого диктора мы независимо друг от друга генерируем векторы шума из нормального распределения, у которого будет нулевое среднее, но будет некая матрицы ковариации, отличная от единичной.

    (00:25:25)

    Но надо отметить, что в этой модели предполагается, что все векторы шума были сгенерированы из одного и того же распределения, то есть для каждого из них эта матрица была идентична. Тогда можно сказать, что и наши эмбеддинги, наблюдаемые вектора были сгенерированы из нормального распределения, у которого среднее зависит от личности диктора, от скрытого вектора диктора, а ковариация такая же, как и у шума.

    Мы же предлагаем слегка модифицировать эту модель, и в нашем варианте она называется «PLDA с тяжелыми хвостами». Уравнение остается абсолютно таким же, как и в предыдущем случае, и все обозначения такие же, меняется только то, как мы генерируем данные. Мы все так же для каждого диктора генерируем скрытый вектор из стандартного нормального распределения, но потом для каждой записи этого диктора мы делаем такой многоступенчатый процесс. Сначала мы генерируем скаляр, то есть это такой будет коэффициент масштабирования, который сгенерирован из гамма-распределения, а потом вектор шума генерируется из нормального распределения, все так же с нулевым средним, но теперь матрица концентрации, я думаю, это называется, для каждого из них будет умножена на тот самый масштабирующий коэффициент. Таким образом, получается, что вектор шума был сгенерирован из… Для каждого вектора шума распределение, из которого он был сгенерирован, будет свое. Тогда мы все так же можем сказать, что наблюдаемый вектор, эмбеддинг, сгенерирован из нормального распределения, но опять же, каждый из таких векторов имел свою матрицу ковариации или концентрации.

    Если мы попытаемся избавиться от этих масштабирующих коэффициентов, и просто интегрируем по ним, то мы увидим, что наши наблюдаемые вектора распределены по распределению Стьюдента, с такими параметрами. Здесь можно отметить, что этот последний параметр степени свободы, если бы мы его установили равным бесконечности, то есть в предельном случае, мы бы получили точно ту же стандартную модель, о которой я говорила на предыдущем слайде. Грубо говоря, стандартная модель является частным случаем той, о которой я говорю сейчас.

    Чем нам нравится стандартная модель не очень нравится наша? В стандартном случае все распределения нормальные, и поэтому там очень легко и удобно найти аналитическое решение для того, чтобы найти LLR score или даже для обучения. Распределение Стьюдента в этом плане не такое удобное, но мы находим такой трюк. Мы можем показать, что правдоподобие наблюдаемого вектора при данном скрытым векторе диктора, как я уже сказала, оно равно распределению Стьюдента как функция от наблюдаемых векторов, но в то же время мы можем показать, что оно пропорционально распределению Стьюдента как функция от скрытого вектора z. Параметры этого распределения выражаются через параметры модели и через наблюдаемый вектор rij. Пока что нам не очень важно, что это за параметры, как они выглядят, кроме последнего.

    (00:30:00)

    Последний параметр – это степени свободы, и он выражается через степени свободы оригинальной модели, через степень свободы той модели, о которой мы говорили, плюс разницу между размерностью наблюдаемого пространства и скрытого подпространства спикеров. Так как даже в стандартном варианте, PLDA-модели, очень часто предполагается, что наблюдаемое пространство намного больше, чем скрытое пространство. Если мы сделаем это требованием в нашей системе, то мы можем сказать, что эта степень свободы новая – это достаточно большое число. А распределение Стьюдента стремится к нормальному очень быстро с мерой того, как увеличивается этот параметр степени свободы. Наше предположение или утверждение состоит в том, что с практической точки зрения это распределение Стьюдента на самом деле очень близко к нормальному, и мы просто можем заменить его на нормальное распределение, и использовать его, что исключает тот недостаток, который был у нашей модели. Тогда мы можем найти в аналитической форме LLR score, в котором мы заинтересованы, и также найти относительно быстро удобные алгоритмы обучения этой модели.

    Почему же эта модель позволяет использовать информацию о неопределенности, в то время как оригинальная не могла? Все дело в том, как выглядит этот Bij, это матрица концентрации правдоподобия наблюдаемого вектора при данном векторе диктора. Эта матрица будет своей для каждого наблюдаемого вектора, но мы можем заметить, что она имеет очень специфическую форму. Это некая фиксированная матрица, умноженная на скалярный коэффициент опять же. Как раз этот коэффициент зависит от наблюдаемого вектора. Если бы мы предположили стандартную модель, то есть, как я говорила, степень свободы была бы бесконечностью, то в этой дроби у нас бы получилась бесконечность, деленная на бесконечность одного порядка, то есть все эти коэффициенты были бы равны одному, и никакой неопределенности здесь бы не было. Если же мы предполагаем это поведение с тяжелыми хвостами, то и предполагаем, что ν, степень свободы, это маленькое число, тогда наши наблюдаемые данные уже имели бы какой-то эффект на этом коэффициенте. Более того, мы можем показать, что этот коэффициент зависит от наблюдаемых данных только через этот компонент, и на самом деле, он зависит не от всего вектора наблюдаемых данных, а только от шумной его части, то есть, грубо говоря, только вектор шума влияет на этот коэффициент. Если мы предполагаем, что шум, например, очень большой, то есть должна быть относительно высокая неопределенность, то, соответственно, вся эта дробь будет маленькой, и концентрация будет соответственно маленькая, ковариация большая. Мы разрешаем довольно широкую область, где бы мог находиться наш вектор диктора. А если наоборот, шум маленький, то этот компонент будет тоже маленький, вся дробь будет расти и, соответственно, распределение будет относительно острым, то есть мы можем довольно точно, с большой степенью надежности, сказать, где находится скрытый вектор диктора для этой записи.

    Чтобы проверить, что это действительно так работает, как нам бы хотелось, я провела такой маленький эксперимент. Здесь я тренировала как раз нашу модель с тяжелыми хвостами, а потом для тестовых данных, которые не были использованы при обучении модели, посчитала эти коэффициенты, на которые мы умножаем матрицу концентрации для правдоподобия.

    (00:35:20)

    На графике они приведены в зависимости от продолжительности аудио. Мы видим, что для очень коротких записей этот коэффициент очень маленький. Это говорит о том, что неопределенность о том, где находится вектор диктора, у нас высокая. С тем, как растет длина аудио, также у нас увеличивается уверенность в том, где вектор диктора может находиться. Но после какого-то момента мы уже видим, что особой разницы нет, то есть дальше длина, начиная, скажем, с 60 секунд, не играет такой большой роли. Но тут надо сказать, что на этом графике мы смотрим только на длину аудио, и никак не учитываем другие характеристики. Например, что-нибудь, находящееся вот здесь, может быть очень длинной записью, но очень шумной, или там может совсем не быть даже никакой речи. То, что мы здесь видим, не отражает полной картины, скажем так.

    Хочу просто пару слов сказать об обучении этой модели. Параметры модели включают в себя две матрицы и степень свободы, то есть скаляр. Обычно мы предполагаем, что степень свободы зафиксирована, то есть мы сами можем решить, насколько тяжелые хвосты нам нужны в нашей модели, и обучаем только две матрицы параметров.

    Мы экспериментировали с довольно большим количеством различных методов обучения этой модели, включая несколько дискриминативных подходов и один генеративный, то есть это был метод по максимизации правдоподобия обучающих данных. Я должна сказать, что этот генеративный подход наиболее… Во-первых, он сильно быстрее, чем любой из дискриминативных, а во-вторых, наиболее надежный и лучше всего работает для большого количества задач. Поэтому, если кто-то заинтересован, то я рекомендую использовать его.

    Кроме того, мы опубликовали код как раз для этого подхода, по этой ссылке вы можете его найти. Там есть код для обучения модели и для ее тестирования.

    Наконец, несколько результатов. Здесь мы видим результаты системы или двух систем верификации диктора. Я не сказала об этом, но очень часто перед тем, как обучать backend-модель, входные данные еще каким-либо образом трансформируются. Например, их можно нормализовать по длине так, чтобы все векторы лежали на сфере единичного радиуса, либо можно понизить их размерность с помощью линейного дискриминантного анализа, либо сделать и то, и другое, и в разной комбинации, то есть в разной последовательности.

    Если мы посмотрим на результаты стандартной модели PLDA, то мы увидим, что ее результаты очень сильно зависят от как раз той трансформации, которую мы предприняли с нашими векторами до ее обучения. Тут обе метрики соответствуют, грубо говоря, количеству ошибок, которые система допускает, то есть в обоих случаях чем ниже, тем лучше. Здесь мы видим, что наши ошибки могут уменьшиться вдвое просто за счет того, что мы добавим, например, LDA перед нормализации длины. Но если мы сделали бы это в другой последовательности, то уже результат был бы сильно хуже. Здесь просто проблема состоит в том, что надо долго экспериментировать и находить правильную комбинацию так, чтобы получить оптимальный результат от своей системы.

    (00:40:19)

    В то время как в нашей модели мы такого разброса в результатах не видим, несмотря на то, что мы не обязательно можем получить наилучший возможный результат с помощью этой модели, но при этом мы можем быть относительно уверены, что что бы мы ни сделали, мы были бы не очень далеко от оптимальных результатов, которые можно было бы получить, в отличие от другой модели.

    На этом про HT-PLDA, то есть PLDA с тяжелыми хвостами, у меня, наверное, все. Я опять предлагаю остановиться, и можем ответить на какие-то вопросы.

    Николай Михайловский: Анна, спасибо. Коллеги, пожалуйста, ваши вопросы. Чат, QNA, поднимать руки. Кто-то у нас поднял руку. Сергей Новоселов. Добрый день.

    Сергей Новоселов: Я приветствую всех. Меня зовут Сергей Новоселов, я представляю Центр речевых технологий, из Санкт-Петербурга. Во-первых, хотел поблагодарить Аню и организаторов за такую хорошую тему и презентацию.

    А вопрос у меня связан вот с чем. Неопределенность в распознавании диктора действительно играет очень большую роль. Здорово, что мы сейчас на нее обращаем внимание. Но вот с точки зрения изначальной гипотезы, я правильно понимаю, что мы рассчитываем, что некоторая информация о неопределенности, в том числе, о шуме и, может быть, о длительности, она заложена в самом эмбеддинге? (00:42:31)

    Анна Сильнова: Да, это слабое место этого подхода. Мы осознаем, что, скорее всего, бо́льшая часть этой информации там уже не присутствует, но надеемся, что какие-то следы или что-то полезное все еще можно использовать.

    Сергей Новоселов: Судя по вашим результатам, получается, что это действительно так, и там что-то удается от этого подхода получить, то есть неопределенность учитывается как-то.

    Анна Сильнова: Ну да.

    Сергей Новоселов: Еще такой вопрос. В предыдущей секции говорилось о том, что эмбеддинг может быть извлечен из разных уровней нейронной сети, может быть из предпоследнего слоя, перед классификатором, может быть с последнего. Были ли эксперименты по поводу неопределенности или, может быть, учета информации о неопределенности с более низких слоев сетей, допустим, со статпулинга, где ее, наверное, больше?

    Анна Сильнова: Да, наверное, это было бы логично сделать, но как-то мы никогда не пробовали. Обычно мы все-таки фиксировали эти x-векторы и просто использовали все время одни и те же. Но, наверное, это интересно, можно было бы посмотреть, насколько меняется результат в зависимости от того, откуда мы берем…

    Сергей Новоселов: Да, я собственно почему спрашиваю? Поскольку нам известна работа из J2, (00:44:21) она называется «Магнето», по поводу калибровки, я думаю, что многие знакомы с ней, и там как раз таки, мне кажется, тоже происходит некоторым образом учет неопределенности через оптимизацию _____ (00:44:36) функции, и там это берется именно со статпулинга, и ребята вроде как получают приросты в качестве неплохие.

    Анна Сильнова: Во второй части того, о чем я буду говорить, это, может быть, немножко ответит на этот вопрос, или… Я даже не знаю.

    (00:44:57)

    Посмотрим. Я надеюсь, что это немножко прояснит ситуацию.

    Сергей Новоселов: Я понял, спасибо большое. Еще один вопрос, который я хотел бы задать, последний. Эта схема с учетом неопределенности, она обучается как бы разрывно, то есть сначала мы обучаем extractor, потом обучаем эту модель учета неопределенности, да?

    Анна Сильнова: Да.

    Сергей Новоселов: Или можно обучать совместно, дискриминативно? Вы пробовали это делать совместно?

    Анна Сильнова: Изначально идея была в том, что да, мы так и будем делать. Грубо говоря, этот эксперимент с backend и PLDA-моделью был как бы первым шагом к тому, чтобы сначала попробовать обучить только ее, а потом добавить еще и x-vector, extractor, и попробовать переобучить все вместе. Но так как дискриминативные подходы не очень хорошо работали уже даже здесь, и в целом это довольно тяжело и долго, поэтому мы так подумали, что навряд ли это принесет какие-то результаты, если мы попробуем добавить еще и extractor туда. Но да, такая идея была.

    Сергей Новоселов: Спасибо большое, да. Еще раз спасибо за презентацию, очень интересная тема. До свидания.

    Николай Михайловский: Сергей, а можно вас попросить в чат ссылочку на статью, про которую вы говорили?

    Сергей Новоселов: По поводу «Магнето», вы имеете в виду?

    Николай Михайловский: Да.

    Сергей Новоселов: Да, конечно, если найду. У меня, к сожалению, сейчас не очень есть возможность, но я постараюсь это сделать, да.

    Анна Сильнова: Либо я могу потом прислать.

    Сергей Новоселов: Либо Аня, да, если вы можете, пожалуйста, сделайте.

    Анна Сильнова: Хорошо.

    Сергей Новоселов: У меня все.

    Николай Михайловский: Да, Сергей, спасибо. Дмитрий Меньшиков спрашивает: «Можете чуть более подробно раскрыть тему генеративных моделей?»

    Анна Сильнова: Я бы не сказала, что это модель. Генеративная модель, понятно, эта модель, которая моделирует то, как мы верим, данные были сгенерированы. Соответственно, при генеративном подходе к их обучению мы как раз пытаемся обучить или подобрать параметры модели так, чтобы они наиболее правдиво, что ли, пытались объяснить то, как наши данные распределены, то есть так, чтобы было похоже, что эта модель сгенерировала эти данные. В то время как дискриминативный подход совсем не направлен на то, чтобы как-то моделировать распределение данных, а, скорее, направлен на то, чтобы построить границу, которая разделяет классы. Например, в случае с верификацией диктора мы можем обучать такую модель на парах аудио, которые принадлежат одному человеку, и парах, которые принадлежат другому человеку, и в этом случае мы просто хотим, чтобы параметры оптимизировались так, чтобы эти пары получались наиболее разделены. Я не знаю, если это был вопрос…

    Николай Михайловский: Дмитрий, получили вы ответ? Анна, у меня есть вопрос. Как только заходит речь о… Да, Дмитрий говорит, что получил он ответ на свой вопрос. Как только заходит речь о тяжелых хвостах, у меня возникают в принципе сомнения, что там есть гауссово распределение. Оно же может быть и вовсе не гауссово, оно же может быть совсем какое-то другое. Вы вообще проверяли, что там можно осмысленно говорить о гауссовских распределениях?

    Анна Сильнова: Мне кажется, это было довольно много раз показано, что эти векторы распределены довольно близко к гауссианам, но при этом все-таки не совсем. Они очень похожи на гауссианы, но с чуть более тяжелыми хвостами. Поэтому в данном случае мы и предполагаем, что так должно быть.

    (00:50:03)

    Николай Михайловский: О’кей, ну ладно. Так, коллеги, пожалуйста, еще вопросы. «Насколько хорошо работает излагаемый в презентации подход на более глубоких моделях, _____ (00:50:23) с 34, 101 и так далее?»

    Анна Сильнова: Я не знаю, как конкретно ответить на этот вопрос, потому что в каждом… Как я сказала, этот подход не обязательно гарантирует наилучший возможный результат, который можно получить, то есть со стандартным PLDA с гауссианами результат может быть лучше. Но для того, чтобы получить этот лучший результат, нужно потратить намного больше сил и постараться найти правильные параметры и трансформацию векторов для того, чтобы этот результат получить. Поэтому с точки зрения стабильности, я думаю, что наш метод работает хорошо, то есть он для любых, грубо говоря, входных данных не дает очень плохого решения. Но в то же время нельзя говорить о том, что если вы его будете использовать, то у вас всегда будет самый лучший результат, это тоже неправда. Но он может быть применен довольно успешно.

    Николай Михайловский: У меня еще вопрос, такая, скорее, ремарка. Скорее всего, то, сколько информации о неопределенности останется в эмбеддинге, также зависит от той функции потерь, с помощью которой мы этот эмбеддинг обучаем. По всей видимости, те же триплет-лоссы и контрастив-лоссы, о которых мы уже говорили, могут сохранять либо больше, либо меньше информации о неопределенности, нежели чем кросс-энтропия.

    Анна Сильнова: Да. Согласна.

    Николай Михайловский: Мы сейчас, конечно, не знаем, больше или меньше оно сохраняет, но было бы интересно узнать.

    Так, коллеги, еще вопросы, соображения. Похоже, вопросы заданы. Давайте двигаться дальше.

    Анна Сильнова: Давайте. Тогда мы переходим к последней части того, о чем я хотела рассказать, это как раз наша попытка ответить в какой-то мере на вопрос Сергея о том, что, скорее всего, эти эмбеддинги, бо́льшая часть информации о неопределенности в них уже утеряна. В данном случае мы предполагаем, что качество аудио напрямую влияет на нашу возможность найти тот самый правильный эмбеддинг. Поэтому мы предполагаем вместо того, чтобы рассматривать эти векторы как наблюдаемые, мы предлагаем рассматривать их или добавить их в нашу модель как скрытую переменную. Мы увидим по ходу моего рассказа, что мы предлагаем моделировать их как нормальные распределения, которые… Это распределение как раз показывает, где бы мог находиться настоящий этот эмбеддинг-вектор, если бы для его экстракции использовалось хорошее, длинное аудио высокого качества.

    Соответственно, мы предполагаем, что для более длинных, качественных аудио это распределение быть более острым, и для коротких и шумных оно должно быть таким более плоским, то есть у нас остается много неопределенности в том, где именно этот эмбеддинг-вектор мог находиться.

    (00:54:59)

    Тут тоже есть ссылка на статью, которая описывает в подробностях то, о чем я буду говорить.

    Мы тестировали эту модель на задаче диаризации, но вам надо сказать, что она может быть протестирована и на других, например, на верификации. Но так как наши тесты были про диаризацию, то все, о чем я буду говорить, будет немножко сдвинуто в эту сторону. Но в целом это не мешает использовать ее в более широком классе задач.

    Здесь мы предполагаем следующую графическую модель. Мы предполагаем, что мы наблюдаем уже не эмбеддинги, не x-vector, а какой-то сегмент речи. В нашем случае мы предполагаем, что эта речь представлена в виде матриц акустических признаков.

    В нашем предположении генеративная модель или процесс, как данные были сгенерированы, выглядит примерно следующим образом. Для каждого диктора опять же генерируется свой скрытый вектор, уникальный для каждого человека. Этот вектор влияет на генерацию скрытого вектора эмбеддинга, а уже этот скрытый вектор эмбеддинга каким-то образом влияет на генерацию наших наблюдаемых данных, то есть матриц акустических признаков.

    Кроме того, для обучающих данных у нас есть, мы наблюдаем лейблы дикторов. Мы знаем для каждого сегмента, кто был тот человек, который его произнес. В данном случае у нас есть n сегментов, и так как мы заинтересованы и в задаче диаризации, мы хотели бы кластеризовать эти сегменты, n сегментов в классы, каждый из которых представлял бы одного диктора.

    Чтобы это можно было сделать, нам нужно уметь считать такую апостериорную вероятность P(L) при данном S, то есть S – это набор всех сегментов речи, которые у нас есть, а L – это набор лейблов диктора. Этот вектор задает разбиение n сегментов на классы.

    Если мы посмотрим поближе на то, как выглядит эта вероятность, мы увидим, что это такая дробь. В числителе у нас, во-первых, априорная вероятность какого-либо разбиения n сегментов, и она умножена на правдоподобие всех наблюдаемых данных при этом разбиении. В знаменателе у нас сумма таких же точно выражений, где сумма взята по всем возможным разбиениям n сегментов на классы.

    Про априорную вероятность я говорить особо не буду, потому что мы просто используем, что называется, Chinese restaurant process для того, чтобы ее моделировать, просто из-за того, что это было удобно в наших экспериментах. Но абсолютно точно, можно с этим экспериментировать и попробовать использовать что-то другое. Скорее, я сконцентрируюсь на вот этом правдоподобии. Здесь я рассматриваю один из компонентов в произведении, то есть S(i) здесь обозначает все сегменты речи, которые относятся к диктору с номером i, определенному этим разбиением. Чтобы получить это правдоподобие, нам нужно интегрировать по всем скрытым векторам, так как они скрытые, мы не знаем их конкретного значения, то здесь у нас есть априорная вероятность этого скрытого вектора, и она умножена на произведение по всем отдельным кусочкам, сегментам речи, которые относятся к этому диктору.

    (01:00:00)

    Теперь, если мы посмотрим поближе как раз на это правдоподобие, то есть вероятность наблюдать сегмент st при каком-либо значении скрытого вектора диктора, так как в нашей модели они не соединены напрямую, а соединены через этот скрытый эмбеддинг-вектор, то мы должны интегрировать еще и по нему.

    Получается следующее выражение. У нас под интегралом произведение двух вероятностей. Первая моделирует зависимость скрытого эмбеддинга от скрытого вектора диктора. Мы предлагаем использовать стандартную PLDA-модель, как я рассказывала выше, для моделирования этой зависимости. Тогда эта первая часть будет гауссианом.

    Если мы предположим, что вторая часть тоже гауссиан, как функция от x, от эмбеддинга, то этот интеграл можно будет решить в аналитической форме. Поэтому это как раз то, что мы и делаем, мы предполагаем, что хорошо, давайте скажем, что вот это теперь будет гауссиан, как в этом выражении. Здесь у нас какой-то кусок от нормального распределения, и он умножен на некоторый множитель, который зависит только от наблюдаемых данных и не зависит от скрытого вектора эмбеддинга. В таком случае, если мы просто подставим теперь оба выражения сюда, то мы увидим, что это правдоподобие может быть найдено в аналитической форме, и оно выражается через параметры PLDA-модели F и W и через вектор xt с крышкой и Bt, матрицу концентрации для скрытого эмбеддинга x. Оба этих параметра, то есть xt с крышкой и Bt, они зависят от наблюдаемых данных, от st.

    Мы нашли, конечно, аналитическое выражение, и это уже очень хорошо, но все еще не очень удобно использовать, потому что здесь у нас есть такая операция по инвертированию матрицы W + Bt. Bt будет свое для каждой наблюдаемой точки, то, соответственно, нам нужно будет инвертировать матрицу для каждой наблюдаемой точки, что будет очень трудозатратно и долго. Поэтому нам бы хотелось все еще как-то упростить это выражение. Я не буду вдаваться в подробности, как мы это сделали, но, грубо говоря, мы можем сказать, что мы примем, что матрица F теперь будет единичной, то есть она будет квадратной в нашем случае и единичной. Матрицы W – диагональной. Матрицу B мы тоже будем искать такую, чтобы она была диагональной. В таком случае все очень сильно упрощается, и для этого правдоподобия нам находится вот такое простое выражение, где мы просто для каждой размерности нашего скрытого вектора считаем некоторые выражения и просто умножаем их между собой. Тогда и выражение для правдоподобия, или тут log правдоподобия для всех записей, относящихся к одному диктору, тоже будут найдены относительно просто. Соответственно, и апостериорная вероятность какого-то разбиения на классы может тоже находиться относительно просто и эффективно.

    Если попробовать подытожить, что нам нужно для того, чтобы посчитать эту апостериорную вероятность? Нам нужен один вектор, который будет служить диагональю для матрицы ковариации для людей PLDA-модели или, точнее, матрицы не ковариации, а обратной ковариации.

    (01:05:08)

    Потом для каждой наблюдаемой точки нам нужен будет один вектор, который будет служить диагональю матрицы концентрации для эмбеддинга, соответствующего этой точке. Также нам нужен будет вектор, который будет служить средним для этого распределения.

    Мы предлагаем использовать существующую модель, вот эту, x-vector extractor, как я показывала в самом начале презентации. Здесь эти серые блоки соответствуют той модели. Это та же самая сеть, у которой мы просто отрезали несколько последних слоев. Причем, эта сеть предобучена классифицировать дикторов в обучающих данных.

    Потом мы добавляем к этой сети несколько слоев. Например, обычно на выходе из этого слоя мы бы посчитали наш x-vector. Здесь мы добавляем еще один линейный слой и говорим, что теперь это линейное преобразование оригинального x-vector будет служить средним для нашего распределения скрытого эмбеддинга.

    Также мы добавляем такую подсеть, которая на вход принимает выход этого statistics pooling слоя, и также еще мы подаем ей на вход длину записи просто в количестве сегментов, из которых она состоит. После двух слоев нелинейных преобразований на выходе мы получаем вектор, который будет служить диагональю матрицы концентрации для скрытого эмбеддинга. Потом они поддаются еще на PLDA-модель с ее параметрами.

    Причем, при инициализации мы используем референсную PLDA-модель, которая была обучена каким-либо способом другим. При инициализации мы задаем параметры так, чтобы эта вся цепочка работала точно так же, как наш референс. Мы пытаемся инициализировать веса здесь так, чтобы эта концентрация была относительно большой, как можно ближе к бесконечности, насколько мы можем, и тогда получается, что то, как работает система в начале, соответствует просто стандартному подходу. Потом при переобучении, соответственно, веса будут меняться, и как раз наша неопределенность начнет играть какую-то роль.

    Обучать всю эту систему мы предлагаем с помощью кросс-энтропии. Здесь мы предлагаем скомпоновать наши обучающие данные так, сформировать из них примеры, состоящие из восьми сегментов речи. Соответственно, восемь сегментов можно разделить на классы примерно 4000 разных способов. Соответственно, вся эта модель обучается классифицировать правильно разбиение восьми сегментов на классы.

    Почему мы используем восемь сегментов, потому что это, грубо говоря, самое большое число сегментов, которое мы можем себе позволить. Количество возможных разбиений растет очень быстро с увеличением количества сегментов, поэтому если бы мы использовали больше, то у нас было бы уже очень много возможных разбиений, и это было бы просто сложно тренировать.

    (01:10:00)

    Таким образом, мы тренируем свою модель, и, как я сказала, тестируем ее для задач диаризации. Здесь эта табличка сравнивает референсный подход и наш, причем надо отметить, что и тот и другой используют один и тот же x-vector extractor, только наш, возможно, его перетренирует в дальнейшем.

    Изначально аудио, которое необходимо подвергнуть диаризации, мы делим на кусочки длиной полторы секунды с нахлестом в 0,75 секунды, для каждого из них считаем x-vector или в нашем случае этот вероятностный x-vector, возможно, делаем какие-то преобразования с ним, и используем PLDA-модель для того, чтобы составить матрицу попарных схожестей между этими сегментами. У нас получается матрица этих LLR scores, которая будет служить входом для алгоритма кластеризации.

    Алгоритм кластеризации работает следующим образом. При инициализации он предполагает, что каждому сегменту мы присваиваем свой лейбл класса, а потом, по мере того, как он работает, он начинает объединять наиболее похожие сегменты друг с другом, наиболее похожие классы друг с другом. Мы должны задать некоторое пороговое значение до начала кластеризации, и в тот момент, когда больше не будет этих LLR scores выше, чем наше пороговое значение, мы останавливаем кластеризацию, и считаем, что вот это и есть решение нашей задачи.

    В референсном подходе и в нашем мы используем несколько разный алгоритм как раз этой кластеризации. Я тоже не очень хочу останавливаться на том, в чем именно различие, но могу сказать, что наш подход нам нравится больше как раз тем, что он более теоретически правильный. В случае если модель действительно умеет считать правильные отношения правдоподобий нулевой гипотезы и альтернативной, то он должен работать лучше, чем тот, с которым мы сравниваем. Но, как мы увидим, это может быть не всегда так.

    Соответственно, к результатам. Здесь тоже все результаты приведены, это diarization array, то есть количество ошибок, процент ошибок, который допускает система при диаризации аудиофайлов. Если мы посмотрим на этот референсный подход, у нас тут есть две колонки результатов. Один соответствует оптимальному пороговому значению, когда остановить кластеризацию, этот последний шаг. Второй соответствует пороговому значению, равному нулю. Если наша PLDA-модель модель действительно предоставляет правильные LLR scores, то нулевое пороговое значение было бы оптимальным. Но по факту это не всегда так, и поэтому мы видим разницу между оптимальным и этим нулевым порогом.

    Если в референсном значении мы поменяем их алгоритм кластеризации нашим, который, как я сказала, должен быть более теоретически правильным, то при нулевом пороге мы увидим, что результат ухудшился значительно, и даже оптимальный результат тоже стал несколько хуже. Но если мы все в той же референсной модели позволим себе перетренировать PLDA-модель с тем критерием, о котором я говорила раньше, с кросс-энтропией, то эта проблема может быть преодолена, то есть уже и нулевой порог, и оптимальный результат слегка улучшается. Как мы видим, сильно уменьшается расстояние между этими двумя… разница между результатами в том и в другом случае.

    (01:15:02)

    Наконец, если мы в референсной модели разрешаем перетренировать PLDA-модель и одновременно мы добавляем к ней эту неопределенность, то есть мы теперь тренируем… До этого момента никакой информации о неопределенности у системы не было, а сейчас мы вместо наблюдаемых x-векторов делаем их скрытыми, то тогда мы видим, что как оптимальный, так и нулевой порог, опять же улучшаются результаты, хотя по сравнению с нашим бэйзлайном оптимальные результаты все еще несколько хуже, но для нулевых мы получили самый лучший результат. Что особенно хорошо, это то, что как раз разница между этим нулевым порогом и оптимальным наименьшая среди всех тех предыдущих систем, которые мы видели. Это означает, что эта система как раз предоставляет нам наиболее точные отношения правдоподобий, эти LLR scores, по сравнению со всеми другими системами.

    Наконец, если подводить какие-то итоги, то, как я сказала в начале, мы хотели найти какой-то способ, как использовать информацию о неопределенности в распознавании диктора, и нашли два способа, как это можно сделать, при преобразовании просто backend PLDA-модели либо добавляя неопределенность к эмбеддингу, к x-vector. Такой вывод можно сделать, что хотя использование этой информации не обязательно ведет к наилучшим возможным результатам, в то же время оно помогает построить более надежную систему, которая… Ну да, просто система будет более надежна, и ее результатам можно больше верить, чем без использования этой информации. На этом у меня, наверное, все. Спасибо. Если у нас есть вопросы по последней части, то можем на них ответить.

    Николай Михайловский: Анна, спасибо. Очень интересно. У нас уже не так много времени, мы и так немножко уже задержались относительно наших исходных планов. Коллеги, пожалуйста, ваши вопросы, комментарии. Так, у нас сегодня Церен Анджукаев. Пожалуйста.

    Церен Анджукаев: Здравствуйте. Спасибо большое организаторам и особенно Анне, очень интересный доклад. У меня ряд вопросов, я не знаю, насколько мы успеем все их обсудить, но я хотел бы, наверное, задать наиболее такие практические, с точки зрения именно попробовать повторить в экспериментах то, что Анна представила.

    Вопрос по слайду, наверное, где про обучение, это 23-й. Тут вкратце Анна, вы пояснили, что вы PLDA обучаете отдельно от этих трех слоев, которые… Вы же порезали х-векторную модельку и после статпулинга обучали, как я понимаю, эти три желтых слоя, и PLDA обучали. Это все обучалось совместно или по отдельности все-таки?

    Анна Сильнова: Да, эти все обучаются совместно. В том эксперименте, где я говорила, что мы переобучаем только эту PLDA-модель, то мы просто игнорируем вот эту часть, а на самом деле вот этот линейный слой и вот этот блок, они составляют PLDA -модель как бы изначальную, тогда мы переобучаем вот эти два блока. Это будет соответствовать только переобучению PLDA на x-векторах. А если мы будем переобучать все четыре блока вот этих совместно, то мы будем добавлять как раз неопределенность.

    (01:20:07)

    Церен Анджукаев: Понятно, спасибо. По слою, наверное, где про нарезку, вы говорили, по полторы секунды, с нахлестом 0,75. В случае если у нас довольно такой плотный разговор двух собеседников, и мы хотим это диаризовать, у нас же есть… Нахлест, то есть в один интервал может попасть речь и двух спикеров. С такими сегментами что будет, как будет вести себя?

    Анна Сильнова: А, то есть вы имеете в виду, что в одни и те же полторы секунды может попасть речь и того человека, и другого, да?

    Церен Анджукаев: Да, вот такие.

    Анна Сильнова: Да, наверное, это то, чем мы готовы пожертвовать. В данном случае у нас разрешение получается в 0,75, то есть три четверти секунды. Если уже внутри этого сегмента больше одного человека, то мы, получается, сразу признаем, что какую-то ошибку мы получим из-за этого. Сейчас, на самом деле, мы чаще всего используем четверть секунды нахлест, что несколько улучшает результаты, но не драматически.

    Церен Анджукаев: Спасибо большое. Тогда я, наверное, отдам слово другим участникам.

    Анна Сильнова: Что можно сказать про это как раз, что если получается такая ситуация, когда два человека говорят одновременно, то этот метод никак не может с этим ничего поделать. Мы всегда предполагаем, что в каждый момент времени у нас только один человек говорит, и если это не так, то мы просто автоматически делаем ошибку на другом.

    Николай Михайловский: Теоретически должна неопределенность сильно повышаться в этот момент.

    Анна Сильнова: Да.

    Николай Михайловский: Интересно, кстати, было бы это проверить.

    Анна Сильнова: Да, это было нашим планом, пока что мы до него не дошли, но мы хотели натренировать какой-нибудь детектор как раз этой речи, когда два или больше человек налагаются один на другой, и посмотреть, какая неопределенность будет в этих конкретных местах. Но пока еще…

    Николай Михайловский: Теоретически можно же даже синтетические данные сделать.

    Анна Сильнова: Да, это возможно. С другой стороны, наверное, на реальных данных…

    Николай Михайловский: На реальных данных всегда лучше, но в некоторых случаях синтетические данные позволяют довольно быстро проверить похожие вопросы.

    Церен Анджукаев: Спасибо, Анна, большое.

    Николай Михайловский: Так, коллеги, пожалуйста, еще вопросы. У меня еще вопрос, пока коллеги собираются. Вы не смотрели на дропауты как метрику неопределенности?

    Анна Сильнова: Нет, пока что нет. Тут есть тоже вопрос, что́ можно включить, какие…

    Николай Михайловский: Есть еще довольно старая, 2015 года, кембриджская статья, которая говорит, что с помощью дропаутов мы можем мерить уверенность модели в том, чего она предсказывает.

    Анна Сильнова: Нет, мы пока не пробовали. Но, наверное, можно попробовать.

    Николай Михайловский: Коллеги, пожалуйста, еще вопросы, соображения.

    Церен Анджукаев: А можно тогда мне еще один задать?

    Николай Михайловский: Да, пожалуйста.

    Церен Анджукаев: У меня по слайду 24 вопрос, по поводу обучения. Анна, вы говорили, что вы по восемь сегментов используете, как я понимаю, все-таки не один раз восемь сегментов, какой объем данных для обучения использовался?

    Анна Сильнова: Нет, понятно, что это не один раз восемь сегментов, да. Здесь мы это обучали на таком, как называется, AMI dataset, то есть это как раз база данных для диаризации, то есть внутри каждого файла там будет больше, чем один человек.

    (01:25:01)

    Соответственно, мы при обучении каждый раз случайным образом как раз… А, я упоминала про нашу априорную вероятность какого-то разбиения, то есть мы здесь делаем так. Мы генерируем разбиение из этой априорной вероятности, и потом из всего этого датасета случайно выбираем подходящие восемь сегментов, которые бы соответствовали этому разбиению, но так, чтобы все они были из одного файла. Соответственно, эти файлы переиспользуются, потому что там сегментов в каждом из них несколько сотен, я точно не помню, какой размер всей этой базы, но он довольно большой.

    Церен Анджукаев: Я правильно понимаю, вы оценивали общее количество для каждой фонограммы, как один спикер доминирует над другим, из этого считали априорную вероятность, и с учетом этой априорной вероятности подбирали по восемь сегментов этих, да?

    Анна Сильнова: Нет, априорную вероятность мы просто выбрали, какая нам нравится, и зафиксировали. Дальше наше предположение состоит в том, что если обучающие данные будут соответствовать той априорной вероятности, которую мы потом будем использовать, то модель научится считать правильные правдоподобия. Эта вероятность не была никак… Мы не искали никаких параметров на обучающих данных, а скорее, подбирали излучающие данные так, чтобы они соответствовали этой априорной вероятности, которую мы выбрали.

    Церен Анджукаев: Спасибо большое.

    Николай Михайловский: О’кей. Анна, а вот код последней работы, он опубликован где-то публично, или он закрытый?

    Анна Сильнова: Насколько я помню, нет. Мы так планировали-планировали, но так и не смогли его довести до какого-то публикуемого состояния. Но, возможно, это еще в планах.

    (01:27:38) (Конец записи)