Недавно я изучал НЛП, чтобы улучшить свои знания в области компьютерных наук. Я читаю об этом шаг за шагом и застреваю в штуке под названием «Расстояние Левенштейна». Я знаю, что такое расстояние Левенштейна, но не понимаю, как оно работает. Теперь, когда меня просветили многие уроки, я попытаюсь написать это человеческими словами.
Прежде всего, я дам вам определение и применение расстояния Левенштейна.
Расстояние Левенштейна — это строковая метрика для измерения разницы между двумя последовательностями. Неформально расстояние Левенштейна между двумя словами — это минимальное количество односимвольных правок (вставок, удалений или замен), необходимых для замены одного слова на другое (википедия)
Расстояние Левенштейна названо в честь российского ученого Владимира Левенштейна, который разработал алгоритм в 1965 году. Если вы не можете написать или произнести слово Левенштейна, метрику также иногда называют расстоянием редактирования. .
Алгоритм расстояния Левенштейна использовался в:
Проверка орфографии
Распознавание речи
Анализ ДНК
Обнаружение плагиата
Как работает расстояние Левенштейна?
В простом случае мы можем посчитать минимальные правки символов в двух словах. Как и в приведенном выше объяснении Википедии, правки определяются либо вставками, удалениями или заменами на один или несколько символов.
пример:
- Расстояние Левенштейна между FORM и FORK равно 1. Имеется одна замена M на K.
2. Левенштейн Расстояние между КОТЕНКОМ и СИДЕНИЕМ равно 3, потому что редактируются 3 символа.
Уравнение расстояния Левенштейна
Теперь мы будем использовать подход динамического программирования для подсчета расстояния Левенштейна между двумя словами. Мы будем использовать приведенное выше уравнение для расчета расстояния.
где
a = слово a
b = слово b
a и b — строки или слова, которые мы хотим посчитать расстоянием.
i и j — матричные координаты, которые помогают нам для подсчета правок.
В последней строке уравнения оператор +1 (плюс один) добавляется только тогда, когда i и j не равны тот же персонаж.
Вот шаг для подсчета расстояния.
Прежде всего, создайте матрицу, содержащую такие значения.
А затем мы посчитаем Лев(1,1), который выделен желтым прямоугольником.
- поскольку min(1,1)≠0, то мы находим минимум из трех уравнений
- lev(0,1) означает, что мы находим значение из строки с индексом 0 и столбца с индексом 1
- lev(1,0) означает, что мы находим значение из строки с индексом 1 и столбца с индексом 0
- lev(0,0) означает, что мы находим значение из строки с индексом 0 и столбца с индексом 0. Поскольку K не равно S, мы добавляем в уравнение плюс один.
- Значение min(2,2,1) равно 1, поэтому мы можем поместить 1 в матрицу выше.
Теперь мы найдем Лева(2,1), который выделен зеленым прямоугольником.
- lev(1,1) означает, что мы находим значение из строки с индексом 1 и столбца с индексом 1
- lev(2,0) означает, что мы находим значение из строки с индексом 2 и столбца с индексом 0
- lev(1,0) означает, что мы находим значение из строки с индексом 1 и столбца с индексом 0. Поскольку I не равно S, мы добавляем в уравнение плюс один.
- Значение min(2,3,2) равно 2, поэтому мы можем поместить 2 в матрицу выше.
Ниже приведена полная матрица, если выполнены все шаги.
Окончательное значение расстояния Левенштейна всегда находится в углу, выделенном красным прямоугольником.
Спасибо!