Авторы Нитья Кастури и Аникет Далал

Примечание. В этом отчете мы ссылаемся на несколько внутренних документов и сценариев. Свяжитесь с нами, если вас интересуют упомянутые файлы.

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

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

Мы решили рассматривать эту проблему как проблему распознавания именованных объектов (NER), помечая известные компоненты в нашем обучении.

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

Введение

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

Мы решили рассматривать эту проблему как проблему распознавания именованных объектов (NER). NER включает в себя сначала идентификацию имен собственных в текстах, а затем их классификацию в набор предопределенных категорий интересов. В нашем случае предопределенной категорией будет «Компонент».

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

A. Условные случайные поля

Условные случайные поля — это класс методов статистического моделирования, которые часто применяются для прогнозирования. По сути, CRF — это неориентированная графическая модель, узлы которой можно разделить ровно на два непересекающихся набора X и Y, наблюдаемых и выходных переменных соответственно. Затем моделируется условное распределение p(Y X).

B. Рекуррентные нейронные сети

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

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

Более конкретно, мы используем долговременную кратковременную память (LSTM) в нашей рекуррентной нейронной сети. Блок LSTM состоит из четырех основных компонентов: ячейки, входного вентиля, выходного вентиля и вентиля забывания. Ячейка отвечает за «запоминание» значений через произвольные промежутки времени. Каждый из трех вентилей можно рассматривать как «обычный» искусственный нейрон, поскольку они вычисляют активацию взвешенной суммы.

С. Формат данных

Данные предоставляются в файле CSV, где каждая строка соответствует одному рабочему заданию. Мы извлекаем только заметки об обслуживании и ремонте, чтобы использовать их в качестве данных для обучения и тестирования. Следует отметить, что данные не всегда представляют собой полное предложение, поэтому необходимо удалить много ненужных символов. Кроме того, большая часть данных должна быть отформатирована в форме данных, которую могут прочитать Tensorflow и NeuroNER, что будет обсуждаться позже.

D. Tensorflow и NeuroNER

Основное программное обеспечение, используемое для обучения, — это Tensorflow, библиотека программного обеспечения Google с открытым исходным кодом для машинного обучения и анализа данных. Более конкретно, мы использовали найденную в Интернете архитектуру под названием NeuroNER, которая представляет собой программу распознавания именованных сущностей, использующую Tensorflow для своих приложений нейронной сети. NeuroNER принимает текстовые документы с файлами аннотаций, состоящими из слова, типа объекта и диапазона символов в указанном текстовом документе. Результат аналогичен; он возвращает слово и его классификацию. Если несколько слов классифицируются как один объект, вывод представляет это, указывая, что он является продолжением последнего объекта.

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

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

II. Выполнение

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

A. Резюме конвейера

Сначала файл CSV передается через скрипт с именем extract.py, который аннотирует текст и создает текстовые файлы и файлы аннотаций в формате, который может прочитать NeuroNER. Оттуда данные передаются в NeuroNER. Чтобы посмотреть на наши результаты, мы используем несколько сценариев для анализа результатов на частоты компонентов и сравнения с результатами модели CRF. get-component-names.py извлекает выходные данные NeuroNER в список компонентов с частотами каждого компонента. sort.py сортирует этот список по наибольшей частоте, а compare.py создает CSV-файл, который сравнивает любые два заданных списка частот.

B. Предварительная обработка данных

В начале нашего процесса обучения мы поняли, что предварительная обработка данных необходима, если мы хотим извлечь полезные имена компонентов. Без какой-либо предварительной обработки модель, хотя и показывала высокие проценты точности 90% и выше, не могла извлечь полезные имена компонентов с 15 эпохами. Наиболее частым компонентом обучения NeuroNER был «пакет» с 1833 случаями.

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

Слова были аннотированы в четырех категориях: компоненты, стоп-слова, глаголы, относящиеся к компоненту, и другие. Кроме того, чтобы упростить обучение, мы сохраняем более длинные компоненты, если у обоих есть аннотации. Например, если в тексте есть «мощность батареи», но оба компонента являются «батарея» и «мощность батареи», это будет аннотировано как «мощность батареи» в учебных целях.

C. Структура кода

Код был структурирован таким образом, что все до обучения находится в одном файле, а все после обучения — в другом. Вот что было выполнено перед тренировкой:

  1. Предварительно обработайте текст
  2. Разделите текст на предложения
  3. Аннотируйте каждое предложение предоставленными аннотациями, какие слова являются компонентами
  4. Создайте файлы аннотаций для каждого предложения
  5. Разделите предложения на категории обучения, проверки и тестирования (50%, 25% и 25% соответственно).

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

D. Результаты обработки

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

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

ИНЖИР. 1. Архитектура модели искусственной нейронной сети (ИНС). n — количество токенов, а xii токен. l(i) — количество символов, а xi,jj-й символ в i-йтокен.yi — прогнозируемая метка i-готокена.

III. Результаты

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

А. Численный анализ обучения

С нашей последней итерацией обучения с четырьмя категориями классификации мы смогли достичь общей точности 84,31% на тестовом наборе и правильно определили 125007 фраз. На рис. 2 показано, как точность выросла в процессе обучения для набора для обучения, тестирования и проверки.

Наиболее часто идентифицируемым компонентом являются «упаковки» с частотой 2066 и «лотки» с частотой 1221. Первым идентифицируемым компонентом из двух слов является «герметизирующая лента» с частотой 279. Чтобы проверить точность результаты с точки зрения частоты, мы также отмечаем частоту каждого из этих терминов в данных. По сравнению с фактической частотой найденных слов NeuroNER с аннотированными данными обучения показал себя довольно хорошо с точностью около 51%, учитывая некоторые посторонние слова, которые имели высокую частоту в данных.

NeuroNER обнаружил около 51 нового компонента из предварительно обработанных данных из 240 найденных полезных компонентов. Остальные были подмножеством обучающих данных. Пожалуйста, обратитесь к приложенным документам для более глубокого анализа с точки зрения точности модели. Results.xlsx содержит гистограмму распределения точности компонентов, а также частоту, найденную в NeuroNER, и фактическую частоту найденных компонентов. NewComponents.txt содержит все новые компоненты, обнаруженные в процессе обучения.

ИНЖИР. 2. Рост точности за 25 эпох.

IV. Вывод

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

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

Не забудьте подписаться на нашу публикацию, чтобы не пропустить ни одной статьи!