Введение

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

Машинное обучение с текстовыми данными

Давайте рассмотрим проблему естественного языка, которую можно решить с помощью машинного обучения: Классификация настроений. Классификация настроений, основанная на отзывах пользователей, является очень популярным приложением, поскольку многие компании во всем мире полагаются на информацию, полученную из отзывов пользователей, для принятия важных решений. Во многих случаях такое принятие решений автоматизировано с помощью систем рекомендаций. Это означает, что нам пришлось бы создать систему, которая принимала бы на вход необработанный текст отзывов пользователей (о продукте или услуге) и выводила бы класс настроений, обычно положительных и отрицательных. Возможных выходных данных может быть более двух, это число или даже диапазон чисел, если мы будем рассматривать проблему как проблему регрессии, но для простоты мы будем рассматривать проблему как проблему регрессии. >Двоичная классификация проблема. Например,

  • «Часы оказались очень стильными и удобными в ношении, а также точно показывают время» — считается положительным отзывом.
  • «Ремешок на часах ослаблен, и через 2 дня после доставки они продолжали отставать. Лучшее качество моей задницы -_-” — считается отрицательным отзывом.

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

Предварительная обработка текста

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

Определение границ слов может быть намного сложнее во многих языках, таких как немецкий, где есть смехотворно длинные сложные слова, написанные без пробелов и знаков препинания. Например, 63-символьное слово rindfleischetikettierungsüberwachungsaufgabenübertragungsgesetz означает закон о делегировании контроля над маркировкой говядины. Для анализа этих слов может быть полезно разбить их на отдельные слова.

Кроме того, в некоторых языках, таких как японский, нет пробелов.

Токенизация

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

Давайте посмотрим на примеры некоторых популярных методов токенизации:

Токенизатор пробелов. Он определяет пробелы как границу между токенами. Например,

Вывод:

['This', 'is', 'an', 'example.', 'I', 'am', 'writing', 'gibberish.', 'By', 'the', 'way,', 'who', 'gave', 'Zack', 'Snyder', 'the', 'idea', 'of', 'Martha?', 'If', "that's", 'Ben', 'Affleck', 'he', 'sure', 'is', 'crazy.']

Проблема в этом случае заключается в том, что токены «example» и «example.» обрабатываются по-разному, хотя имеют одинаковое значение.

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

Вывод:

['This', 'is', 'an', 'example', '.', 'I', 'am', 'writing', 'gibberish', '.', 'By', 'the', 'way', ',', 'who', 'gave', 'Zack', 'Snyder', 'the', 'idea', 'of', 'Martha', '?', 'If', 'that', "'", 's', 'Ben', 'Affleck', 'he', 'sure', 'is', 'crazy', '.']

Проблема в этом случае заключается в том, что слово «это» разбивается на три отдельных токена that, ' и s, что нежелательно.

Tree Bank Word Tokenizer: он использует набор правил или эвристик, определяющих грамматику английского языка, для создания токенизации, которая действительно имеет смысл для дальнейшего анализа. Его можно реализовать с помощью NLTK или Natural Language Toolkit в Python.

Вывод:

['This', 'is', 'an', 'example.', 'I', 'am', 'writing', 'gibberish.', 'By', 'the', 'way', ',', 'who', 'gave', 'Zack', 'Snyder', 'the', 'idea', 'of', 'Martha', '?', 'If', 'that', "'s", 'Ben', 'Affleck', 'he', 'sure', 'is', 'crazy', '.']

Tree Bank Tokenizer производит наиболее значимые токены из текста на английском языке.

Нормализация токена

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

Основание: это процесс удаления и замены суффиксов из токена для получения корневой формы слова, которая называется основой. Стемминг обычно относится к эвристикам, которые отсекают суффиксы.

Стиммер Портера — старейший стеммер для английского языка. Он имеет пять эвристических фаз сокращения слов, применяемых последовательно. Это простые правила, такие как Обычная грамматика или Контекстно-свободная грамматика. Ниже приведены некоторые примеры правил на первом этапе Стеммера Портера:

╔════════════╦═══════════════════╗
║   RULE     ║    EXAMPLE        ║
╠════════════╬═══════════════════╣
║ SSES -> SS ║ caresses -> caress║
║ IES -> I   ║ ponies -> poni    ║
║ SS -> SS   ║ caress -> caress  ║
║ S -> null  ║ cats -> cat       ║
╚════════════╩═══════════════════╝

Вывод:

['the', 'wolv', 'will', 'not', 'eat', 'the', 'fish', ',', 'they', 'will', 'have', 'onli', 'lamb', '.']

Проблема с портерстеммером в том, что из-за строгой эвристики он часто выдает неровности, примером которых является wolves -> wolv или feet -> feet.

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

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

Вывод:

['The', 'wolf', 'will', 'not', 'eat', 'the', 'fish', ',', 'they', 'will', 'have', 'only', 'lamb', '.']

Обратите внимание, что Wordnet Lemmatizer устраняет некоторые нарушения, выявленные Портером Стеммером, такие как wolves -> wolf или feet -> foot.

Хотя Wordnet Lemmatizer делает довольно хорошую работу, он не на 100% точен. Он хорошо нормализует существительные, но иногда может не работать с глаголами. Ни стемминг, ни лемматизация не идеальны, и нам нужно выбрать методологию нормализации в зависимости от нашего трека.

Нормализация букв верхнего регистра:

  • Us, us -> us если оба являются местоимениями, кроме нас, США также может быть местоимением или названием страны.
  • Мы могли бы определить эвристику, чтобы решить эту проблему:
    * начало предложения в нижнем регистре
    * слова в заголовках в нижнем регистре
    * оставить слова в середине предложения такими, какие они есть
  • Мы также могли бы использовать машинное обучение для получения истинного случая токенов, что было бы довольно сложно.

Ждите следующих статей :)