Введение:

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

Итак, у нас есть аппроксимация функции, и мы уже знаем, что нейронная сеть может изучать нелинейную функцию в большом масштабе, если вы еще не знакомы с Deep Q-Learning, я бы посоветовал вам сначала изучить это.

Итак, краткое введение в Deep Q-Learning заключается в том, что мы в основном пытаемся аппроксимировать функцию с помощью нейронной сети, которая может отображать состояния в вероятности действий.

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

Теперь это ключевое понятие в семантической сегментации, мы хотим найти сегменты в изменении контекста, а, как мы знаем, «изменения постоянны».

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

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

Выполнение:

Итак, теперь углубимся в мой подход и реализацию:

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

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

Таким образом, в основном происходит то, что мы загружаем в контекстное окно nпредложений, и агент решает, где в индексе (от 0 до n-1) находится сегмент ложь, или сегмента нет вообще.

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

Если вам интересно узнать, как это было реализовано, посмотрите код в моем репозитории.

Некоторые ключевые детали реализации:

Класс среды:

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

  1. Мы загружаем вложения предложений нашего соответствующего обучающего текста.
  2. Мы определяем механизм указателя, который определяет, где в наших предложениях мы проходим в данный момент.
  3. Мы загружаем наши метки, в которых перечислены все фактические сегменты указанных данных.

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

Нажмите здесь, чтобы проверить код в моем репозитории.

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

Спасибо за чтение!