Использование сиамских сетей, чтобы узнать сходство между именами и прозвищами. Преобразование текста в речь улучшает результаты.

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

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

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

Подробнее об экспериментах ниже можно узнать на странице проекта на GitHub здесь.

Введение

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

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

У сиамских сетей есть несколько интересных вариантов использования. Они использовались для обнаружения смены сцены (Baraldi, Grana and Cucchiara (2015) [1]). В этой отличной записи в блоге Лей использует сиамскую сеть для кластеризации цифр MNIST. Изучая сходство (и, следовательно, несходство) между различными видами входных данных, сиамские сети используются для обучения с нулевым/несколько выстрелов, где мы пытаемся сказать, знакомы ли входные данные с входными данными, с которыми знакома сеть. Для более подробного ознакомления с этой темой посетите эту запись в блоге.

В то время как большинство онлайн-примеров используют сиамские сети для компьютерного зрения, у сиамских сетей также есть несколько интересных приложений в области НЛП. Гарсия, Альваро и др. (2021) [2] используют сиамские сети для проверки фактов, создавая семантически осведомленную модель, которая может оценивать уровень сходства между двумя текстами, один из которых является фактом. Глейз, Мартин и др. (2019) [3] используют сиамские сети, чтобы найти более убедительные аргументы. Их данные содержат как пары предложений с одинаковыми позициями, так и пары предложений с перекрестными позициями (т. Е. Одно поддерживает, а другое оспаривает тему). Их сетевая задача — выбрать, какая сторона дебатов была более убедительной. Neculoiu, Versteegh and Rotaru (2016) [4] представляют глубокую архитектуру для изучения метрики подобия последовательностей символов переменной длины. Их модель применяется для изучения сходства между названиями должностей («программист Java» должен быть ближе к «разработчику Java», но дальше от «специалист по персоналу»). Их архитектура включает в себя четыре слоя BLSTM, за которыми следует линейный слой, и они используют контрастные потери на косинусном сходстве между их вложениями. Это была моя первоначальная архитектура, но она работала не очень хорошо, вероятно, из-за небольшого объема данных.

О псевдонимах

Псевдоним – это замена имени собственного знакомого человека, места или предмета. Обычно используется для выражения привязанности, формы нежности, а иногда и для развлечения, но также может использоваться для выражения клеветы на характер. (Источник: википедия, здесь)

Псевдонимы могут включаться в имя или быть включены в имя. Иногда связь между именем и прозвищем не сразу бросается в глаза. Средневековые англичане любили рифмовать. Таким образом, Роберт стал Робом, а затем, поскольку оно рифмуется с Бобом, прозвище прижилось. Посмотрите увлекательный ответ Оскара Тея на этот вопрос Quora.

В значительном количестве случаев можно увидеть подстроки имени в никнейме и наоборот, также принято менять гласные, сохраняя при этом звук никнейма похожим (например, «i» на «ea»). Другое стандартное изменение — замена конца имени на «ie» (например, «Саманта» на «Сэмми»).

Задача создания меры сходства между именами и никнеймами состоит, прежде всего, в получении удовольствия от обучения. Некоторые варианты использования такой модели могут включать оценку доверия — насколько вероятно, что псевдоним/имя пользователя, которое человек использует, например, в своей онлайн-учетной записи, совпадает с его именем, которое было связано с транзакцией. Оценка надежности пароля. Использование собственного имени может привести к слабому паролю, также может привести и использование собственного псевдонима.

Данные

Данные для этого проекта были созданы с использованием нескольких источников:

  1. Мужской/Женский уменьшительные от здесь
  2. Secure Enterprise Master Patient Index (SOEMPI), здесь
  3. common_nickname_csv, здесь

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

Самым наивным подходом к проверке правдоподобия псевдонима для данного имени было бы использование сопоставления подстрок. В некоторых случаях подстрока имени полностью содержится в никнейме и наоборот. Удивительно, но второе встречается гораздо чаще (2,2% против 26,5%!).

Эксперименты

Эксперимент 1. Сначала я применил модель из [4]. Модель состоит из четырех двунаправленных слоев LSTM со скрытыми состояниями длиной 64. Скрытые состояния последнего слоя BLSM (одно прямое и одно обратное) усредняются («временное усреднение»), а затем вектор длиной 64 пропускается через плотный слой. В исходной статье в модель вводятся два входа, названия должностей, а в нашем случае передаются имена и никнеймы.

Эксперимент 2. Заставить сеть LSTM работать сложно, и это может быть невозможно для имеющегося у нас объема данных. Затем я использовал сиамскую сеть 1d-CNN для текстов. Одно ограничение использования CNN для данных временных рядов (например, задача сопоставления двух последовательностей букв) заключается в том, что она не сохраняет никакой информации о рекуррентных отношениях между элементами в последовательности. Чтобы объяснить это, я использую как буквенное, так и позиционное встраивание (Gehring et al. (2017) [5]).

Эксперимент 3. Поскольку псевдонимы обычно придумываются в социальных сетях, более вероятно, что некоторые имена звучат более похоже, чем пишутся. Например, Рельеф и Листья являются парой в обучающих данных. Хотя часть имени lief пишется иначе, чем часть Leaf в прозвище, они звучат очень похоже. Для этого я преобразовываю все имена и никнеймы в речь через библиотеку Google gtts. Затем конвертирую полученные файлы .mp3 в спектрограммы с помощью пакета librosa.

Как в эксперименте 2, так и в эксперименте 3 скрытые слои 1d/2d-CNN построены таким образом, чтобы они возвращали тензоры той же размерности, что и входные данные. Затем входные данные и результаты суммируются по принципу ResNet (He et al., (2016a)) [6].

Эксперимент 4. Наконец, в качестве эталона я сравниваю приведенные выше модели с методами, не связанными с обучением, такими как Яро, Джаро-Винклер и Расстояние Левинштейна( см. William, Ravikumar and Fienberg (2003) [7] для получения дополнительной информации).

Сравнение результатов

Печальные результаты показывают, что необучаемые алгоритмы работали лучше, чем любая из сетей (но в чем же тут веселье!). BLSTM не смог ничего узнать, даже после попыток уменьшить его (удалить некоторые слои BLSTM и вывести гораздо более короткую длину скрытого состояния). 1d-CNN дала хорошие результаты, но 2d CNN показала лучшие результаты для гораздо меньшего числа параметров.

В итоге Яро Винклер добился лучших результатов.

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

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

Анализ результатов

Результаты в этой части относятся к модели 1d-CNN. Интересно посмотреть, какие случаи были классифицированы правильно, но тщательный анализ неправильных классификаций мог бы сказать нам кое-что о предполагаемом сходстве.

Правильные случаи. В таблице ниже представлены результаты для пар, которые были классифицированы правильно. Неудивительно, что большинство действительно положительных случаев были простыми случаями, например, когда имя было включено в прозвище или наоборот. Точно так же истинно-отрицательные парные случаи с наименьшими баллами сильно различаются как по буквам, так и по тому, как они звучат, за одним исключением «Кимберли» и «Бекки» (я мог бы поверить, что «Бекки» — это прозвище «Кимберли»). ", но, может быть, это только я).

Неправильные регистры: более интересная группа. Кажется, что большинство случаев FP являются разумными парами. Можно было бы предположить, что «Мэтти» (а не «Мэти», что может звучать иначе) — настоящее прозвище «Марты». То же самое касается «Мэри» и «Марги». Элли и Маргарет представляют особый интерес. Имеющиеся у меня данные включают пару «Маргарет» и «Мeggie». «Элли» в качестве имени имеет только «Али» в качестве прозвища. «Элли» как прозвище — это прозвище «Алан», «Алиса» и т. д. Эти примеры могут означать, что сеть смогла изучить некоторую базовую логику между именами и псевдонимами. С другой стороны, смотреть на 10 самых низких ложноотрицательных случаев грустно, так как многие из имен этой группы включают их прозвища или наоборот.

Дополнительные примеры решения и границы см. в приложении.

Приложение: Функция потерь, обучение и уточнение

Функция потерь. Во время экспериментов я использовал несколько функций потерь. Сначала я использовал функцию потерь, описанную в [4]. Затем я пошел исследовать различные функции. Я использовал контрастный проигрыш, вдохновленный этой реализацией. Затем я также использовал потерю BCE, вдохновленный [8], который использовал средневзвешенное значение потери контраста и потери BCE для прогнозирования эпилептических припадков. В целом контрастные потери дали несколько худшие результаты с точки зрения ROC AUC, чем потери BCE, но их цель несколько иная. Цель контрастных потерь состоит в том, чтобы различать особенности входных векторов, приближая отрицательные оценки к нулю по мере уменьшения альфа в следующем уравнении.

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

На рисунке ниже показано, насколько хорошо контрастные потери могут различать классы.

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

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

  1. Обучите сеть на несколько эпох
  2. Обозначая d(A,P) расстояние между парой двух входов одного класса и d(A,N) расстояние между двумя элементами разных классов. На втором шаге мы должны брать только тяжелые случаи, такие, что

3. Тренируйтесь только на тяжелых случаях.

Уточнение сети позволило добиться немного улучшенных результатов, но не изменило сеть до неузнаваемости.

Граница принятия решения. На приведенном ниже графике представлены распределения оценок для каждого класса. Распределения были нормализованы отдельно, чтобы мы могли смотреть на данные, как если бы они были сбалансированы. Я решил использовать границу решения 0,4.

Ниже приведены 10 образцов ниже порога, за ними следуют 10 ближайших примеров (к порогу), а затем еще 10 примеров из области выше порога.

Мы видим, что примеры, наиболее близкие к 0,3, в основном являются недопустимыми парами. Четыре из 10 пар, которые находятся ближе всего к порогу принятия решения, действительны, а семь из 10 пар, которые ближе всего к 0,5, являются действительными парами. Более того, мы видим, что в большинстве положительных примеров имена не включают в себя прозвища и наоборот.

Библиография

[1] Баральди, Лоренцо, Костантино Грана и Рита Куккьяра. «Глубокая сиамская сеть для обнаружения сцен в широковещательных видео». Материалы 23-й международной конференции ACM по мультимедиа. 2015.

[2] Уэртас-Гарсия, Альваро и др. «Противодействие дезинформации с помощью многоязычных моделей с учетом семантики». Международная конференция по интеллектуальной обработке данных и автоматизированному обучению. Спрингер, Чам, 2021 г.

[3] Глейз, Мартин и др. «Вы убеждены? выбирая более убедительные доказательства с сиамской сетью». препринт arXiv arXiv:1907.08971 (2019 г.).

[4] Некулойу, Пол, Маартен Верстиг и Михай Ротару. «Изучение сходства текста с сиамскими рекуррентными сетями». Материалы 1-го семинара по репрезентативному обучению для НЛП. 2016.

[5] Геринг, Джонас и др. «Сверточная последовательность для обучения последовательности». Международная конференция по машинному обучению. ПМЛР, 2017.

[6] Хе, Кайминг и др. «Глубокое остаточное обучение для распознавания изображений». Материалы конференции IEEE по компьютерному зрению и распознаванию образов. 2016.

[7] Коэн, Уильям В., Прадип Равикумар и Стивен Э. Финберг. «Сравнение метрик расстояния между строками для задач сопоставления имен». IIWeb. Том. 3. 2003.

[8] Диссанаяке, Теекшана и др. «Независимое от пациента прогнозирование эпилептических припадков с использованием моделей глубокого обучения». препринт arXiv arXiv:2011.09581 (2020 г.).