WikiDer > Изменить расстояние - Википедия

Edit distance - Wikipedia

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

В разных определениях расстояния редактирования используются разные наборы строковых операций. Расстояние Левенштейна операции - это удаление, вставка или замена символа в строке. Являясь наиболее распространенным показателем, термин Расстояние Левенштейна часто используется как синоним редактировать расстояние.[1]

Типы расстояния редактирования

Различные типы расстояния редактирования допускают разные наборы строковых операций. Например:

Некоторое расстояние редактирования определяется как параметризуемая метрика, вычисляемая с помощью определенного набора разрешенных операций редактирования, и каждой операции назначается стоимость (возможно, бесконечная). Это далее обобщается ДНК. выравнивание последовательностей алгоритмы, такие как Алгоритм Смита – Уотермана, из-за чего стоимость операции зависит от того, где она применяется.

Формальное определение и свойства

Учитывая две строки а и б по алфавиту Σ (например, набор ASCII персонажей, набор байты [0..255] и т. Д.), Расстояние редактирования d (а, б) это серия операций редактирования с минимальным весом, которая преобразует а в б. Один из простейших наборов операций редактирования определен Левенштейном в 1966 году:[2]

Вставка одного символа. Если а = тыv, затем вставив символ Икс производит тыИксv. Это также можно обозначить ε →Икс, используя ε для обозначения пустой строки.
Удаление изменения одного символа тыИксv к тыv (Икс→ ε).
Замена одного символа Икс для символа уИкс изменения тыИксv к тыуv (Иксу).

В исходном определении Левенштейна каждая из этих операций имеет удельную стоимость (за исключением того, что замена символа сама по себе имеет нулевую стоимость), поэтому расстояние Левенштейна равно минимуму номер операций, необходимых для преобразования а к б. Более общее определение связывает неотрицательные весовые функции шins(Икс), шдель(Икс) и шсуб(Иксу) с операциями.[2]

Были предложены дополнительные примитивные операции. Расстояние Дамерау – Левенштейна считается за единичное редактирование распространенной ошибкой: транспозиция двух соседних символов, формально характеризуемых операцией, изменяющей тыИксуv в тыуИксv.[3][4]Для задачи исправления OCR выход, слияние и расколоть были использованы операции, которые заменяют один символ парой или наоборот.[4]

Остальные варианты дистанции редактирования получаются ограничением набора операций. Самая длинная общая подпоследовательность (LCS) Расстояние - это расстояние редактирования с добавлением и удалением как единственными двумя операциями редактирования, каждая из которых имеет стоимость единицы.[1]:37 Точно так же, разрешая только замены (опять же по стоимости единицы), Расстояние Хэмминга получается; это должно быть ограничено строками одинаковой длины.[1]Расстояние Яро – Винклера может быть получен с расстояния редактирования, где разрешены только транспозиции.

Пример

В Расстояние Левенштейна между «котенком» и «сидящим» - 3. Минимальный сценарий редактирования, который преобразует первое во второе:

  1. kиттен → sitten (замените "k" на "s")
  2. ситтеп → сидетьяn (замените "i" на "e")
  3. сидеть → сидетьграмм (вставить "g" в конце)

Расстояние LCS (только для вставок и удалений) дает другое расстояние и минимальный сценарий редактирования:

  1. kitten → itten (удалить "k" в 0)
  2. иттен → sиттен (вставить "s" в 0)
  3. ситтеn → sittn (удалить "e" в позиции 4)
  4. sittn → sittяn (вставить "i" в 4)
  5. сидеть → сидетьграмм (вставить букву "g" в 6)

на общую стоимость / расстояние 5 операций.

Характеристики

Расстояние редактирования с неотрицательной стоимостью удовлетворяет аксиомам метрика, порождая метрическое пространство строк при соблюдении следующих условий:[1]:37

  • Каждая операция редактирования имеет положительную стоимость;
  • для каждой операции есть обратная операция с равной стоимостью.

Благодаря этим свойствам метрические аксиомы удовлетворяются следующим образом:

d(а, б) = 0 тогда и только тогда, когда a = b, поскольку каждая строка может быть тривиально преобразована в себя, используя ровно ноль операций.
d(а, б)> 0, когда аб, поскольку для этого потребуется хотя бы одна операция с ненулевой стоимостью.
d(а, б) = d(б, а) равенством стоимости каждой операции и ее обратной.
Неравенство треугольника: d(а, c) ≤ d(а, б) + d(б, c).[5]

Расстояние Левенштейна и расстояние ЛВС с удельной стоимостью удовлетворяют указанным выше условиям и, следовательно, аксиомам метрики. Варианты расстояния редактирования, не являющиеся надлежащими показателями, также рассматривались в литературе.[1]

К другим полезным свойствам расстояний редактирования единичной стоимости относятся:

  • Расстояние LCS ограничено сверху суммой длин пары строк.[1]:37
  • Расстояние LCS - это верхняя граница расстояния Левенштейна.
  • Для строк одинаковой длины расстояние Хэмминга является верхней границей расстояния Левенштейна.[1]

Независимо от стоимости / веса, для всех расстояний редактирования сохраняется следующее свойство:

  • Когда а и б имеют общий префикс, этот префикс не влияет на расстояние. Формально, когда а = УФ и б = уф, тогда d(а, б) = d(v, ш).[4] Это позволяет ускорить многие вычисления, включающие расстояние редактирования и сценарии редактирования, поскольку общие префиксы и суффиксы могут быть пропущены за линейное время.

Вычисление

Первый алгоритм вычисления минимального расстояния редактирования между парой строк был опубликован Дамерау в 1964 г.[6]

Общий алгоритм

Используя оригинальные операции Левенштейна, (несимметричное) расстояние редактирования от к дан кем-то , определяемый повторяемостью[2]

Этот алгоритм можно обобщить для обработки транспозиций, добавив еще один член в минимизацию рекурсивного предложения.[3]

Простой, рекурсивный способ оценки этого повторения требует экспоненциальное время. Поэтому обычно его вычисляют с использованием динамическое программирование алгоритм, который обычно приписывают Вагнер и Фишер,[7] хотя у него есть история множественных изобретений.[2][3]После завершения алгоритма Вагнера – Фишера минимальную последовательность операций редактирования можно считать обратным следом операций, используемых во время алгоритма динамического программирования, начиная с .

Этот алгоритм имеет временная сложность из Θ (мп). Когда полная таблица динамического программирования построена, ее космическая сложность это также Θ (мп); это можно улучшить до Θ (мин (м,п)) наблюдая, что в любой момент алгоритму требуются только две строки (или два столбца) в памяти. Однако такая оптимизация делает невозможным считывание минимальной серии операций редактирования.[3] Решение этой проблемы в линейном пространстве предлагает Алгоритм Хиршберга.[8]:634

Улучшенные алгоритмы

Улучшение алгоритма Вагнера – Фишера, описанного выше, Укконен описывает несколько вариантов,[9] одна из которых занимает две строки и максимальное расстояние редактирования s, и возвращает мин (s, d). Это достигается только путем вычисления и сохранения части таблицы динамического программирования по ее диагонали. Этот алгоритм требует времени O (s× мин (м,п)), куда м и п - длины струн. Космическая сложность O (s²) или же O (s), в зависимости от того, нужно ли считать последовательность редактирования.[3]

Дальнейшие улучшения Ландо, Майерс, и Шмидт [1] дать O (s2 + макс (м,п)) временной алгоритм.[10]

Приложения

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

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

  • Алгоритм Хиршберга вычисляет оптимальные выравнивание двух строк, где оптимальность определяется как минимизация расстояния редактирования.
  • Приблизительное соответствие строк можно сформулировать в терминах расстояния редактирования. Алгоритм Укконена 1985 года принимает строку п, называемый шаблоном, и константа k; затем он строит детерминированный конечный автомат который находит в произвольной строке s, подстрока, расстояние редактирования которой до п самое большее k[11] (ср. Алгоритм Ахо – Корасика, который аналогично конструирует автомат для поиска любого из множества шаблонов, но без разрешения операций редактирования). Аналогичным алгоритмом приблизительного сопоставления строк является битовый алгоритм, также определяется с точки зрения расстояния редактирования.
  • Автоматы Левенштейна являются конечными автоматами, распознающими набор строк в пределах ограниченного расстояния редактирования фиксированной ссылочной строки.[4]

Расстояние редактирования языка

Обобщение расстояния редактирования между строками - это расстояние редактирования языка между строкой и языком, обычно формальный язык. Вместо того чтобы рассматривать расстояние редактирования между одной строкой и другой, расстояние редактирования языка - это минимальное расстояние редактирования, которое может быть достигнуто между фиксированной строкой и любой строка, взятая из набора строк. Формально для любого языка L и строка Икс над алфавитом Σ, то язык редактировать расстояние d (L, Икс) дан кем-то[12], куда расстояние редактирования строки. Когда язык L является контекст свободныйсуществует алгоритм динамического программирования кубического времени, предложенный Ахо и Петерсоном в 1972 году, который вычисляет расстояние редактирования языка.[13] Для менее выразительных семейств грамматик, таких как регулярные грамматикисуществуют более быстрые алгоритмы для вычисления расстояния редактирования.[14]

Расстояние редактирования языка нашло множество разнообразных применений, таких как сворачивание РНК, исправление ошибок и решения проблемы создания оптимального стека.[12][15]

Смотрите также

Рекомендации

  1. ^ а б c d е ж грамм Наварро, Гонсало (1 марта 2001 г.). «Экскурсия по приблизительному сопоставлению строк» (PDF). Опросы ACM Computing. 33 (1): 31–88. CiteSeerX 10.1.1.452.6317. Дои:10.1145/375360.375365. Получено 19 марта 2015.
  2. ^ а б c d Даниэль Джурафски; Джеймс Х. Мартин. Обработка речи и языка. Pearson Education International. С. 107–111.
  3. ^ а б c d е Эско Укконен (1983). О приблизительном сопоставлении строк. Основы теории вычислений. Springer. С. 487–495. Дои:10.1007/3-540-12689-9_129.
  4. ^ а б c d Schulz, Klaus U .; Михов, Стоян (2002). «Быстрая коррекция струны автоматами Левенштейна». Международный журнал анализа и распознавания документов. 5 (1): 67–85. CiteSeerX 10.1.1.16.652. Дои:10.1007 / s10032-002-0082-8.
  5. ^ Лэй Чен; Раймонд Нг (2004). О браке Lₚ-норм и расстоянии редактирования (PDF). Proc. 30-я Международная конф. на очень больших базах данных (VLDB). 30. Дои:10.1016 / b978-012088469-8.50070-х.
  6. ^ Кукич, Карен (1992). «Методы автоматического исправления слов в тексте» (PDF). Опросы ACM Computing. 24 (4): 377–439. Дои:10.1145/146370.146380. Архивировано из оригинал (PDF) на 2016-09-27. Получено 2017-11-09.
  7. ^ Р. Вагнер; М. Фишер (1974). «Проблема исправления строки в строку». J. ACM. 21: 168–178. Дои:10.1145/321796.321811. S2CID 13381535.
  8. ^ Скиена, Стивен (2010). Руководство по разработке алгоритмов (2-е изд.). Springer Science + Business Media. Bibcode:2008adm..book ..... S. ISBN 978-1-849-96720-4.
  9. ^ Укконен, Эско (1985). «Алгоритмы приблизительного сопоставления строк» (PDF). Информация и контроль. 64 (1–3): 100–118. Дои:10.1016 / S0019-9958 (85) 80046-2.
  10. ^ Ландо; Майерс; Шмидт (1998). «Инкрементное сравнение строк». SIAM Журнал по вычислениям. 27 (2): 557–582. CiteSeerX 10.1.1.38.1766. Дои:10.1137 / S0097539794264810.
  11. ^ Эско Укконен (1985). «Нахождение примерных закономерностей в струнах». J. Алгоритмы. 6: 132–137. Дои:10.1016/0196-6774(85)90023-9.
  12. ^ а б Брингманн, Карл; Грандони, Фабрицио; Саха, Барна; Уильямс, Вирджиния Василевска (2016). «Поистине субкубические алгоритмы для расстояния редактирования языка и сворачивания РНК через быстрое произведение Min-Plus с ограниченной разностью» (PDF). 57-й ежегодный симпозиум по основам компьютерных наук (FOCS), 2016 г., IEEE. С. 375–384. arXiv:1707.05095. Дои:10.1109 / focs.2016.48. ISBN 978-1-5090-3933-3.
  13. ^ Ахо, А .; Петерсон, Т. (1972-12-01). "Синтаксический анализатор с исправлением ошибок минимального расстояния для контекстно-свободных языков". SIAM Журнал по вычислениям. 1 (4): 305–312. Дои:10.1137/0201022. ISSN 0097-5397.
  14. ^ Вагнер, Роберт А. (1974). «Корректировка порядкового номера для обычных языков». Коммуникации ACM. 17 (5): 265–268. Дои:10.1145/360980.360995. S2CID 11063282.
  15. ^ Саха, Б. (01.10.2014). Проблема расстояния редактирования языка Дайка в почти линейном времени. 55-й ежегодный симпозиум IEEE по основам компьютерных наук, 2014 г.. С. 611–620. Дои:10.1109 / FOCS.2014.71. ISBN 978-1-4799-6517-5. S2CID 14806359.