Набор данных для RNN-LSTM как средство проверки орфографии в python

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

Когда я погуглил пакеты исправления орфографии в python, я получил такие пакеты, как autocorrect, textblob, hunspell и т. д. и метод Питера Норвига

Ниже приведен образец моего набора данных

Id      description
 1      switvch for air conditioner..............
 2      control tfrmr...........
 3      coling pad.................
 4      DRLG machine
 5      hair smothing kit...............

Я попробовал функцию исправления орфографии с помощью вышеуказанных пакетов, используя код

dataset['description']=dataset['description'].apply(lambda x: list(set([spellcorrection_function(item) for item in x])))

Для всего набора данных потребовалось более 12 часов для завершения исправления орфографии, а также он вносит мало шума (для 20% от общего числа слов, которые важны)

например: в последней строке «сглаживание» исправлено как «что-то», но оно должно быть «сглаживанием» (я не понимаю «что-то» в этом контексте)

Приближаемся дальше

Когда я наблюдал за набором данных, не все время написание слова было неправильным, где-то в наборе данных также были правильные экземпляры написания. Поэтому я токенизировал весь набор данных и разделил правильные слова и неправильные слова, используя словарь , применил метод сходства Яровинклера между всеми парами слов и выбранными парами, имеющими значение сходства 0,93 и более

  Wrong word   correct word  similarity score
    switvch      switch           0.98
    coling       cooling          0.98
    smothing     smoothing        0.99

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

Я также сохранил слова с их списком сокращений (~ 3k пар) в словаре

 key     value
 tfrmr   transformer
 drlg    drilling

Поиск и замена пары ключ-значение с помощью кода

dataset['description']=dataset['description'].replace(similar_word_dictionary,regex=true)



dataset['description']=dataset['description'].replace(abbreviation_dictionary,regex=true)

Этот код занял больше дня только для 10% всего моего набора данных, который я нашел неэффективным.

Наряду с пакетами Python я также нашел глубокую проверку правописания, которая является очень эффективным способом исправления правописания. .Было очень четкое объяснение RNN-LSTM как средства проверки орфографии.

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

Вопрос

Я запутался, как считать поезда для RNN моей проблемой, будь то

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

или как-то иначе? может кто-нибудь, пожалуйста, скажите мне, как я могу подойти дальше


person Ranjana Girish    schedule 26.02.2018    source источник


Ответы (1)


Не могли бы вы дать больше информации о модели, которую вы строите? Имеет смысл использовать модель последовательности символов для последовательности, аналогичную модели вы бы использовали для перевода. Уже есть несколько подходов, пытающихся сделать то же самое (1 , 2, 3). Может быть, почерпнуть их для вдохновения?

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

Простым подходом было бы получить существующий набор данных и ввести в него случайный шум. В блоге, посвященном глубокому правописанию, рассказывается о том, как сделать это с существующим текстовым корпусом. Кроме того, я бы посоветовал использовать в качестве тренировочного набора небольшие отдельные предложения. Их можно найти в наборах данных машинного перевода (например, в проекте tatoeba) и использовать только английский фразы. Из них вы можете создать пары (input_phrase, target_phrase), где input_phrase потенциально шумные (но не всегда).

Что касается производительности, во-первых, 12-часовое обучение для 1 прохода набора данных 5M звучит примерно так, как для домашнего ПК. Вы можете использовать графический процессор или облачное решение (1, 2) для более быстрого обучения.

Теперь для ложноположительной коррекции действительно может пригодиться созданный вами словарь: если слово существует в этом словаре, не принимайте «исправление» его от модели.

person cmantas    schedule 11.09.2018