NLP — Сегментация свободных текстовых данных на любом языке

искусственный интеллект

Независимая от языка модель преобразования текста в предложения.

Разделение текстовых данных на предложения, возможно, является простой задачей, а текст можно разделить на предложения с помощью символов '.' или '/n'. Однако в данных произвольного текста этот шаблон непостоянен, и авторы могут разрывать строку в середине предложения или использовать «.» в неправильном месте. Это явление часто встречается в кратких текстах медицинских визитов и текстах разговоров / сообщений, например.

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

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

Создать набор данных

Чтобы создать набор данных для обучения, рассмотрите список статей/кейсов/диалогов, например, список статей из Википедии. Мы определим положительную пару как пару предложений, которые следует разделить и сохранить два отдельных предложения с «.» между ними. Отрицательная пара — это пара предложений, которые следует объединить и рассматривать как одно предложение без «.» между ними. Мы воспользуемся функцией _nltk.send_tokenize_ для создания пар положительных чисел, разделим текст символом «.», что верно в большинстве случаев, и позволим модели изучить механизм и роль символа «.». Мы создадим отрицательные пары, разделив предложение посередине, что означает, что на самом деле мы не хотим разделять предложение. Мы используем параметр _min_sentence_length_for_splitting_, чтобы определить минимальную длину предложения, которое мы хотим разбить на отрицательные пары (мы не хотим разбивать слишком короткие предложения). Пример кода для создания набора данных.

medium.com/Media/78 да...

Пример облицовки.

Примеры отрицательных пар.

Модель

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

Затем мы объединяем два вложения, чтобы представить, чем заканчиваются два предложения, и начинаем с того, чтобы предсказать, должны ли они быть разделены (если между ними должен быть '.').

Структура модели

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

medium.com/Media/wipe 3 oh 4…

Набор данных X представляет собой массив numpy размером _[количество выборок, 2, длина предложения]_, _ y представляет собой массив, где 1- представляет разделенные предложения, а 0- представляет объединенные предложения.

Затем мы обучаем модель глубокого обучения.

medium.com/Media/6451 о…

Наконец, мы хотим применить нашу модель к новому невидимому тексту. Мы используем страницу Википедии для _Olympic Games_ и извлекаем из нее предложения.

Приведенная ниже функция преобразования принимает список разделенных предложений и возвращает объединенные предложения в виде нового списка предложений, разделенного текстом.

medium.com/Media/32 О, 31…

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

9 на medium.com/Media/0 аааа…

Выход есть.

означает, что модель правильно решила объединить все три предложения.

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

medium.com/Media/1791…

Выход: .

означает, что модель правильно решила разделить два предложения.

в заключении

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

Мы суммируем весь приведенный выше код в классе SentenceSplitter.

medium.com/Media/ Ah 8 отправить 0 oh…

Пожалуйста, наслаждайтесь!