Независимая от языка модель преобразования текста в предложения.
Разделение текстовых данных на предложения, возможно, является простой задачей, а текст можно разделить на предложения с помощью символов '.' или '/n'. Однако в данных произвольного текста этот шаблон непостоянен, и авторы могут разрывать строку в середине предложения или использовать «.» в неправильном месте. Это явление часто встречается в кратких текстах медицинских визитов и текстах разговоров / сообщений, например.
Чтобы преодолеть эту проблему и разработать общую модель, которую можно использовать на любом языке, в этом посте мы поделимся моделью глубокого обучения, чтобы решить, нужно ли объединять два предложения.
Сначала мы разделим текст на все распространенные символы, такие как «.» и «/n», затем, учитывая два предложения, модель решит, нужно ли их объединить. Поэтому модель даст нам новую сегментацию текстовых подпредложений.
Создать набор данных
Чтобы создать набор данных для обучения, рассмотрите список статей/кейсов/диалогов, например, список статей из Википедии. Мы определим положительную пару как пару предложений, которые следует разделить и сохранить два отдельных предложения с «.» между ними. Отрицательная пара — это пара предложений, которые следует объединить и рассматривать как одно предложение без «.» между ними. Мы воспользуемся функцией _nltk.send_tokenize_ для создания пар положительных чисел, разделим текст символом «.», что верно в большинстве случаев, и позволим модели изучить механизм и роль символа «.». Мы создадим отрицательные пары, разделив предложение посередине, что означает, что на самом деле мы не хотим разделять предложение. Мы используем параметр _min_sentence_length_for_splitting_, чтобы определить минимальную длину предложения, которое мы хотим разбить на отрицательные пары (мы не хотим разбивать слишком короткие предложения). Пример кода для создания набора данных.
Пример облицовки.
Примеры отрицательных пар.
Модель
Мы обучили модель глубокого обучения с двумя предложениями в качестве входных данных. Для первого предложения мы применяем прямой слой LSTM, а для второго предложения применяем обратный слой LSTM. Мы используем прямой слой и задний слой, чтобы предсказать, должен ли быть '.' в середине, поэтому мы хотим, чтобы передний слой первого предложения встраивал шаблон в конце первого предложения, а задний слой второе предложение для встраивания шаблона в конце первого предложения Шаблон в начале второго предложения.
Затем мы объединяем два вложения, чтобы представить, чем заканчиваются два предложения, и начинаем с того, чтобы предсказать, должны ли они быть разделены (если между ними должен быть '.').
Структура модели
Приведенный ниже код подготавливает корпус и обучает токенизатор для преобразования предложений разного размера в последовательности одинакового размера.
Набор данных X представляет собой массив numpy размером _[количество выборок, 2, длина предложения]_, _ y представляет собой массив, где 1- представляет разделенные предложения, а 0- представляет объединенные предложения.
Затем мы обучаем модель глубокого обучения.
Наконец, мы хотим применить нашу модель к новому невидимому тексту. Мы используем страницу Википедии для _Olympic Games_ и извлекаем из нее предложения.
Приведенная ниже функция преобразования принимает список разделенных предложений и возвращает объединенные предложения в виде нового списка предложений, разделенного текстом.
Например, мы случайным образом разделяем предложения и ожидаем, что модель объединит их в одно предложение.
Выход есть.
означает, что модель правильно решила объединить все три предложения.
В качестве другого примера мы даем модели два отдельных предложения и хотим, чтобы они оставались разделенными.
Выход: .
означает, что модель правильно решила разделить два предложения.
в заключении
Приведенную выше модель можно обучить на любом языке, все, что требуется, — это создать набор данных. Затем модель обучается решать, нужно ли ей объединить два предложения в одно предложение или оставить его как два отдельных предложения. Модель можно использовать для прогнозирования разделения/слияния новой пары предложений и ее можно применять к любому тексту, который разбит на предложения общими символами и обеспечивает новое разделение предложений.
Мы суммируем весь приведенный выше код в классе SentenceSplitter.
medium.com/Media/ Ah 8 отправить 0 oh…
Пожалуйста, наслаждайтесь!