Вопрос или проблема
У меня есть список коротких строк, каждая из которых определяет город. Орфографические ошибки очень распространены. Пример ниже показывает некоторые из этих коротких строк и правильный город, которому они должны соответствовать.
строка | город |
---|---|
амстердам | амстердам |
асмтерддам | амстердам |
амсттердм | амстердам |
нью йорк | нью йорк |
нью йрок | нью йорк |
нве йорк | нью йорк |
неев йорк | нью йорк |
нв йорк | нью йорк |
Я хотел бы обучить классификатор, который принимает входную строку и затем предсказывает наиболее вероятный город, который должен быть идентифицирован. Однако есть тонкость, заключающаяся в том, что правильный город будет зависеть не только от входной строки, но и от других факторов, таких как текущее местоположение человека и кто именно пишет.
Например, следующие строки могут означать разные города в зависимости от этих других характеристик:
текущее_местоположение | человек | строка | город |
---|---|---|---|
великобритания | Джон | дратфорд | дарфорд |
великобритания | Джек | дарффорд | дарфорд |
великобритания | Джил | датрфрод | дарфорд |
норвегия | Джил | дарфорд | дарфорд |
норвегия | Джон | датрфрод | дарфьорд |
норвегия | Джеймс | датрфрод | дарфьорд |
швеция | Олаф | дратфйод | дарфьорд |
великобритания | Олаф | дратфорд | дарфьорд |
Как мы видим, одна и та же входная строка может означать разный фактический город в зависимости от того, кто это пишет, и где в настоящее время находится автор. Это означает, что просто нечеткий поиск с использованием tf-idf не будет достаточен для корректного предсказания.
Я думаю о двух различных подходах для реализации соответствующего классификатора:
- увеличенные деревья, использующие n-граммы символов в качестве признаков + другие категориальные признаки
- нейронная сеть с использованием сверток на буквах + другие категориальные признаки
Одним из преимуществ здесь является то, что строка всегда будет ограничена по размеру (максимум около 50/60 символов).
Одна вещь, с которой я особенно сталкиваюсь в случае увеличенных деревьев, заключается в том, как заставить модель учиться на порядке n-грамм символов? Например, последовательность mst
, следующая за последовательностью ams
, свидетельствует о амстердаме
, но я не знаю, как дать модели понять последовательность, когда эта последовательность может быть в любом месте в строке? (например, если входная строка aамстердам
, тогда эта последовательность будет на позиции 2, а не на позиции 1).
Таким образом, в кратце, я ищу рекомендации по наилучшему способу разложения и моделирования входной строки, чтобы преобразовать ее в признаки, которые можно использовать как для увеличенных деревьев, так и для (сверточной?) нейронной сети, вдобавок к другим категориальным входным признакам.
Я очевидно не ищу полного решения, просто общие рекомендации будут очень полезны.
В типичном процессе обработки естественного языка (NLP) обычно есть много дискретных этапов. Два возможных этапа – это нормализация и классификация. Строки нормализуются перед классификацией. Нормализация (также известная как стандартизация) делает строковые данные более последовательными. Приведение орфографических вариаций к одной и той же записи – это пример. Приведение орфографических вариаций к последовательной записи не требует машинного обучения. Это можно сделать, например, с помощью поиска расстояния редактирования в словаре.
После нормализации классификация становится более прямолинейной. Модели классификации зависят от качества и количества признаков, также известных как обработка признаков. Предсказать город, скорее всего, не получится на уровне символов. Моделирование на уровне токенов было бы, вероятно, более полезным.
Ответ или решение
Классификация коротких строк текста с дополнительным контекстом является интересной и сложной задачей, особенно когда речь идет о распознавании названий городов с частыми опечатками. В данном случае необходимо учитывать не только саму строку, но и такие дополнительные факторы, как текущее местоположение пользователя и личность автора. Это позволяет значительно увеличить точность модели классификации.
Шаги к решению задачи
1. Нормализация строк
Первым шагом в обработке данных должна стать нормализация входящих строк. Нормализация включает в себя исправление опечаток и приведение строк к единой форме. Этот процесс может включать использование алгоритмов расстояния Левенштейна, который может подсказывать, какие вариации написания следует считать эквивалентными. Также можно использовать заранее составленный словарь правильных написаний для справки.
2. Выбор метода классификации
В вашем случае можно рассмотреть два подхода для построения модели:
-
Усиленные деревья решений (Boosted Trees): Этот метод хорошо подходит для работы с дискретными и категорическими признаками. Использование n-грамм символов в качестве признаков позволит захватить различные части строк. Проблема заключается в том, как отразить последовательность. Один из подходов — это создание дополнительных признаков, основанных на позициях n-грамм и их перекрытии, что позволит модели учитывать, где в строке располагается определенная последовательность символов.
-
Нейронные сети с свёртками (Convolutions): Нейронные сети могут быть более мощным инструментом для захвата базовых структур данных. С использованием свёртки по символам (или по буквам) можно построить архитектуру, которая будет способна обрабатывать последовательность без предварительного разбиения на отдельные признаки. В этом случае будет полезно добавить дополнительные слои для обработки неоднородных данных, таких как текущее местоположение и личность авторов.
Учет контекста
Контекст, представленный такими характеристиками, как текущее местоположение и автор, должен быть включен в модель. Эти факторы можно преобразовать в числовые или категориальные признаки, которые будут добавлены к входным данным нейронной сети или к деревьям решений. Например, можно использовать кодировку "one-hot" для значений местоположений и авторов, чтобы модель распознавала различные комбинации значений.
Расширенное представление строк
Во-первых, важно рассмотреть, как представлять входные строки. Можно использовать один из следующих методов:
- n-граммы: Для классификатора на основе деревьев решени, используют n-граммы символов, где n может варьироваться от 2 до 5.
- Векторизация: Используйте метод TF-IDF для создания векторов для отдельных строк. Это может помочь в выявлении важности определенных последовательностей символов в контексте общего числа ресурсов.
- Эмбеддинги символов: Для нейронных сетей полезно использовать эмбеддинги, которые могут захватывать семантическое значение последовательностей на уровне символов.
Заключение
При проектировании модели классификации для задачи распознавания названий городов с учетом опечаток и дополнительного контекста, важно сделать акцент на нормализации строк перед их классификацией, выборе подходящего метода классификации и интеграции дополнительных факторов контекста. Это не только повысит качество модели, но и даст возможность более точно предсказывать правильные города на основе входных строк.
Если вам нужно больше конкретики или примеры кода, всегда рад помочь!