Как Мы Делали Систему Извлечения Информации Из Текста На Естественном Языке Для Ао «Банк Центркредит» (Казахстан)

Некоторое время назад к нам обратился представитель АО «Банк ЦентрКредит» (Казахстан) с интересной задачей.

В конвейер обработки данных пришлось интегрировать дополнительный инструмент обработки — текст на естественном языке.

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

Заказчик был не против осветить технологические аспекты задачи и способы их реализации, что мы, собственно, и хотим сделать в рамках данной статьи.

В общем, задача заключалась в извлечении каких-то сущностей из большого массива текстов.

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

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

Входные данные В то время на русском языке не было размеченных и доступных корпусов названных лиц.

И даже если бы они были, сущности не были бы точно такими же.

Или совершенно разные сущности.

Подобные решения были, но они оказывались либо плохими (мы нашли, например, такие организации, как «Задняя обложка» в предложении «После года работы сломалась задняя крышка»), либо очень хорошими, но подчеркивающими не то (были требования относительно того, какие сущности нужно различать и относительно границ этих сущностей).

Начало работы Мне пришлось самому маркировать данные.

На основе предоставленных конкретных текстов был создан обучающий набор.

За неделю усилиями полутора экскаваторов удалось разметить выборку объемом 112 000 слов, содержащую около 9 000 упоминаний необходимых сущностей.

После обучения нескольких классификаторов на проверочном наборе мы получили следующее:

Метод Ф1
CRF (базовый набор функций) 67.5
Двунаправленная многоуровневая сеть 68.5
Двунаправленный LSTM 74.5
Для простых по содержанию сущностей это не очень хорошо; для сопоставимых задач специализированные системы часто дают F1 около 90-94 (по опубликованным работам).

Но это на примере более чем миллиона словоформ и при условии тщательного отбора функций.

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

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

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

День 1. Регуляризация Основная проблема нейронных сетей с небольшими выборками — переобучение.

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

Мы пробовали сайзинг, регуляризацию max-norm на разных слоях, выбор постоянных значений и отсев.

Мы получили красные глаза, головную боль и пару процентов выигрыша.

Метод Ф1
Уменьшение размера сети до оптимального размера 69.3
Макс-норма 71.1
Выбывать 69.0
Dropout нам никак не помог, сеть учится медленнее, и результат не очень.

Макс-норма и изменение размера сети показали себя лучше всего.

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

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

RelU — простая функция, если x> 0, то x, иначе 0. Ничего не улучшилось.

Оптимизация с ними вообще не работает или результаты ужасные.

Мы провели день, пытаясь понять, почему.

Не понял.

День №3. LSTM-подобные монстры Можно ли сделать его похожим на LSTM, но на обычных слоях? После некоторых раздумий мое воображение подсказало конструкцию (рис.

1).

Перед рекуррентным слоем был добавлен один слой прямой связи (он должен контролировать, какая информация поступает в сеть), а сверху еще есть структура для управления выходом:

Как мы делали систему извлечения информации из текста на естественном языке для АО «Банк ЦентрКредит» (Казахстан)

Рисунок 1. Архитектура специальной нейронной сети для извлечения терминов из текста Как ни странно, при правильном подборе параметров данная конструкция дала прирост F1 до 72,2, что неплохо для совершенно фиктивной архитектуры.

День №4. РелУ возвращается Из упрямства опробовали RelU на «монстре».

Оказалось, что если RelU установлен только на рекуррентном слое, то оптимизация не просто сходится, а приводит к F1 73,8! Откуда это чудо? Давайте разберемся.

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

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

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

этот контекст. В типичной Lman RNN мы не можем увеличить «объем памяти» без значительного увеличения способности сети к переобучению.

Если мы посмотрим на картинку новой архитектуры, то увидим, что здесь мы разделили модуль хранения информации и модуль «решения».

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

Это дает нам возможность контролировать степень относительной важности памяти и информации в текущем окне для конкретной задачи.

День №5. Диагональные элементы Следуя идее, описанной в [1], мы исключили из рекуррентного слоя все рекуррентные связи, кроме от других нейронов, оставив на входе каждого нейрона только собственное предыдущее состояние.

Кроме того, мы добавили и сделали также повторяющимся верхний слой (рис.

2).

Это дало нам F1 74,8, что для этой задачи было лучшим результатом, чем мы могли получить изначально с помощью LSTM. День №6. Размер образца Поскольку всю неделю мы продолжали размечать данные, в этот день мы перешли на использование новой выборки двойного размера, что позволило нам (после нового раунда отбора гиперпараметров) получить F1 83,7. Нет ничего лучше, чем выборка большего размера, когда ее легко получить.

Правда, удвоить объем размеченных данных обычно совсем непросто.

Вот что мы имеем в итоге:

Метод Ф1
CRF (базовый набор функций) 76.1
Двунаправленная многоуровневая сеть 77.8
Двунаправленный LSTM 83.2
Наша архитектура 83.7
Выводы и сравнение с аналогами Невозможно адекватно сравнить нашу систему распознавания с аналогичными реализациями упомянутых выше веб-API, поскольку определения самих сущностей и границ различаются.

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

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

Вот что произошло:

Метод Ф1
Наша система 76.1
Аналог №1 77.8
Аналог №2 83.2
Аналог №2 имеет лишь небольшое преимущество по этому показателю, а Аналог №1 показал себя еще хуже.

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

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

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

Литература 1. Миколов Т.

, Жулен А.

, Чопра С.

, Матье М.

, Ранзато М.

Обучение более длительной памяти в рекуррентные нейронные сети Теги: #Машинное обучение #обработка естественного языка #обработка текста #обработка текста #нейронные сети #Семантика #Интеллектуальный анализ данных #Алгоритмы #Машинное обучение

Вместе с данным постом часто просматривают: