Как я могу устранить ошибки записи, которые у меня есть в моих данных?
У меня есть фрейм данных (более 1 миллиона строк), в котором есть открытые текстовые столбцы, чтобы клиент мог писать все, что захочет. Слова с ошибками появляются часто, и я пытаюсь сгруппировать комментарии, которые грамматически одинаковы.
Например:
Я пытался использовать расстояние Левенштейна , но в вычислительном отношении это очень дорого. Можете ли вы сказать мне другой способ сделать это задание?
Спасибо!
2 ответа
это не тривиальная задача. Если бы я столкнулся с этой проблемой, мой подход был бы таким:
- Обозначьте свои предложения. Есть много способов токенизировать предложение, самый простой способ — преобразовать предложение в список слов. Например
I want to change my credit card
становится[I, want, to, change, my, credit, card]
. Другой способ - перевернуть окно размера n через ваше предложение, напримерI want to
становится['I w', ' wa', 'wan', 'ant', ...]
для размера окна 3. - После токенизации вашего предложения создайте вложение (векторизацию), т.е. преобразуйте ваш токен в вектор чисел. Самый простой способ — использовать какую-нибудь готовую библиотеку, например TfidfVectorizer от sklearn. Если ваши данные заботятся о порядке слов, то необходим более сложный векторизатор.
- После векторизации используйте алгоритм кластеризации. Самый простой из них — K-Means.
Конечно, это очень сложная задача, и подходов к решению этой проблемы может быть множество. То что я описал это самое простое готовое решение. Некоторые умные люди использовали разные стратегии, чтобы получить лучшие результаты. Одним из примеров является https://www.youtube.com/watch?v=nlKE4gvJjMo . Вы должны сделать это исследование в этой области самостоятельно.
Изменить: конечно, ваш подход хорош для небольшого набора данных. Но трудная часть заключается в том, как работать лучше, чем сложность O(n^2).
Расстояние Левенштейна имеет временную сложность O(N^2).
Если вы определяете максимальное расстояние, которое вас интересует, скажем, m, вы можете уменьшить временную сложность до O(Nxm). Максимальное расстояние в вашем контексте — это максимальное количество опечаток, которое вы допускаете, при этом рассматривая два комментария как идентичные.
Если вы не можете этого сделать, вы можете попробовать распараллелить задачу.