Реализация нечеткого поиска на скриптовом языке PHP
←
→
Транскрипция содержимого страницы
Если ваш браузер не отображает страницу правильно, пожалуйста, читайте содержимое страницы ниже
Реализация нечеткого поиска на скриптовом языке PHP с использованием статистических методов Хакимов Р.И. (rahmatjon на gmail.com) Оглавление Аннотация (вариант) ...................................................................................................................................1 Постановка задачи....................................................................................................................................... 1 Общее сведение об алгоритмах нечеткого поиска................................................................................... 2 Используемые определения .......................................................................................................................2 Условия выбора подпоследовательности в качестве результата ............................................................ 3 Введение функции полуметрики ...............................................................................................................4 Описание алгоритма поиска .......................................................................................................................5 Оценка временной сложности алгоритма ................................................................................................. 6 Оптимизация формулы углового коэффициента .....................................................................................6 Графики результатов некоторых тестов ...................................................................................................7 Литература ................................................................................................................................................... 9 Аннотация (вариант) Разработанный алгоритм представляет собой комбинацию метода n-грамм и метода хэширования. Последовательно обрабатываются n-граммы, длина которых циклически изменятся от заданного минимального (seq_len_min) до заданного максимального (seq_len_max) с шагом 1. n-грамма в данном контексте есть набор из n подряд идущих чисел, извлеченных из заданной последовательности. Для каждой n-граммы вычисляется хэш-значение (сумма, стандартное отклонение, угловой коэффициент линейной регрессии). Решение о схожести двух n-грамм принимается на основе вычисления разности хэш-значений и проверки того, что эти разности не превышают заданные пороговые значения. Новизна работы в применении 3 хэш-функций и разделении процесса принятия решения о схожести двух n-грамм на три этапа, что ускоряет перебор. Постановка задачи Данная работа посвящена решению следующей задачи. Дан текстовый файл с последовательностью чисел. Каждое число расположено на отдельной строке. Данная последовательность является представлением музыкального файла, где каждой секунде аудио файла соответствует одно конкретное число. Необходимо написать скрипт, который проанализирует файл и выявит максимально длинную подпоследовательность чисел, которая повторяется как минимум один раз. Важным условием задачи является то, что абсолютно равных подпоследовательностей может не найтись, поэтому надо найти максимально близкие. 1
Ограничение: в нашей реализации такие последовательности не могут быть слишком короткими (менее 10) и слишком длинными (более 30). На входе скрипт должен принимать текстовый файл. На выходе скрипт должен печатать длину найденных подпоследовательностей, начальные номера их строк. Общее сведение об алгоритмах нечеткого поиска Наиболее распространенным применением алгоритмов нечеткого поиска (или поиска по сходству) до недавнего времени была проверка орфографии. [1] При наличии больших объемов данных ДНК, нечеткий поиск сходства нуклеотидных последовательностей стал важным применением. [1] Нечеткий поиск также используется для идентификации музыкальных произведений по небольшим отрывкам и в фильтрации спама. [1] Используемые определения Пусть X – заданная числовая последовательность. Все рассматриваемые ниже подпоследовательности выделяются из последовательности X. Определение 1. В рамках данной работы подпоследовательности x и y будем называть близкими, если они удовлетворяют определенным далее условиям 1, 2, 3. Определение 2. В рамках данной работы нечеткий поиск – это процесс нахождения подпоследовательности y близкой к заданной подпоследовательности x. Определение 3. Среднее арифметическое — одна из наиболее распространённых мер центральной тенденции, представляющая собой сумму всех наблюденных значений, деленную на их количество: 1 1 ̅= = ( +⋯+ ) В математике и статистике меры центральной тенденции служат для локализации множества значений вокруг одного единственного числа. Определение 4. Стандартное отклонение (оценка среднеквадратического отклонения случайной величины x относительно её математического ожидания на основе несмещённой оценки её дисперсии): 1 σ= ( − ̅) −1 где — i-й элемент выборки; n — объём выборки; — среднее арифметическое выборки. Стандартное отклонение, среднеквадратичное отклонение, СКО, выборочное стандартное отклонение (англ. standard deviation, STD, STDev) — очень распространенный показатель рассеяния в описательной статистике. Данный показатель широко используется в статистике и техническом анализе. Обозначается греческим символом Сигма «σ». Определение 5. Линия регрессии. Математическое уравнение, которое оценивает линию простой (парной) линейной регрессии: Y=a+bx. x называется независимой переменной или предиктором. Y – зависимая переменная или переменная отклика. Это значение, которое мы ожидаем для y (в среднем), если мы знаем величину x, т.е. это «предсказанное значение y». a – свободный член (пересечение) линии оценки; это значение Y, когда x=0 (Рис.1). 2
b – угловой коэффициент или градиент оценённой линии; она представляет собой величину, на которую Y увеличивается в среднем, если мы увеличиваем x на одну единицу: ∑ ( − ̅ )( − ) = ∑ ( − ̅) где ̅ и - средние арифметические. Определение 6. Длинной (под)последовательности будем называть количество элементов в (под)последовательности. Определение 7. Две (под)последовательности будем называть равными, если они имеют одинаковую длину и их элементы с одинаковыми индексами равны. Определение 8. Временной ряд — собранный в разные моменты времени статистический материал о значении каких-либо параметров (в простейшем случае одного) исследуемого процесса. Каждая единица статистического материала называется измерением или отсчётом, также допустимо называть его уровнем на указанный с ним момент времени. Во временном ряде для каждого отсчёта должно быть указано время измерения или номер измерения по порядку. Временной ряд существенно отличается от простой выборки данных, так как при анализе учитывается взаимосвязь измерений со временем, а не только статистическое разнообразие и статистические характеристики выборки. [3] Определение 9. Для данного множества M, функция d: M × M → ℝ называется полуметрикой на M если для любых точек x, y, z из M она удовлетворяет следующим условиям: 1) d(x, x) = 0 (тождество) 2) d(x, y) = d(y, x) (симметрия); 3) d(x, z) ≤ d(x, y) + d(y, z) (неравенство треугольника). Условия выбора подпоследовательности в качестве результата В рассматриваемом примере последовательность чисел, полученная в результате дискретизации аудио-информации, с точки зрения математики и статистики является случайной величиной. Таким образом, идея применения аппарата математической статистики к решению данной задачи является обоснованной. Условие 1. Элементы одинаковых подпоследовательностей будут локализованы вокруг одного единственного числа, то есть у них будут равные (либо близкие) средние арифметические. Так как по нашему алгоритму количество элементов в сравниваемых подпоследовательностях будет одинаковое, поэтому у одинаковых подпоследовательностей должны быть одинаковые суммы (либо близкие): |s − s | ≤ ε , ε ≥ 0, где s и s - суммы первой и второй подпоследовательностей, соответственно. Условие 2. Если у двух подпоследовательностей одинаковые суммы, но разные стандартные отклонения, то они будут разные в силу того, что эти две подпоследовательности чисел имеют различные разбросы. Например, данные первой подпоследовательности могут быть беспорядочно и сильно рассеяны вокруг среднего значения, а у второй подпоследовательности — сконцентрированы около среднего значения и упорядочены. Отсюда вытекает условие: |σ − σ | ≤ ε , ε ≥ 0, где σ и σ - стандартные отклонения первой и второй подпоследовательностей, соответственно. Условие 3. Воспользуемся наклоном линейной регрессии в качестве третьего показателя для проверки подпоследовательностей. Одинаковые подпоследовательности будут иметь одинаковые линейные регрессии, соответственно, их угловые коэффициенты должны быть равны (либо близки): |b − b | ≤ ε , ε ≥ 0, 3
где b и b - угловые коэффициенты линейных регрессий, построенных для первой и второй подпоследовательностей, соответственно. Из выполнения условия 1 не следует выполнение условия 2. Из выполнения условия 1 не следует выполнение условия 3. Из выполнения условия 2 не следует выполнение условия 1. Из выполнения условия 2 не следует выполнение условия 3. Из выполнения условия 3 не следует выполнение условия 1. Из выполнения условия 3 не следует выполнение условия 2. Условие 4. Вариант 1) Из нескольких пар подпоследовательностей, удовлетворяющих условиям 1, 2, 3, в качестве результата выбирается пара подпоследовательностей, имеющих наибольшую длину, то есть та, которая имеет наибольшее количество элементов. Вариант 2) Из нескольких пар подпоследовательностей, удовлетворяющих условиям 1, 2, 3, в качестве результата выбирается пара подпоследовательностей, имеющих наибольшую долю равных соответствующих элементов среди пар, удовлетворяющих условиям 1, 2, 3. Условие 5. Из нескольких пар подпоследовательностей, выбранных условием 4 выбирается та, которая имеет наименьшую сумму разностей сумм, стандартных отклонений и угловых коэффициентов: |s ∗ − s∗ | + |σ∗ − σ∗ | + |b∗ − b∗ | < |s − s | + |σ − σ | + |b − b | Введение функции полуметрики Определим функцию расстояния d(x,y) между подпоследовательностями x и y следующим образом: d(x, y) = s − s + σ − σ + b − b , где s - сумма, σ – стандартное отклонение и b – угловой коэффициент линейной регрессии соответствующих подпоследовательностей x и y. Покажем, что функция d(x, y) является полуметрикой для множества всех подпоследовательностей заданной последовательности. 1) Тождество d(x, x) = |s − s | + |σ − σ | + |b − b | = 0 2) Симметрия d(x, y) = s − s + σ − σ + b − b = s − s + σ − σ + b − b = d(y, x). 3) Неравенство треугольника Для любых трех действительных чисел a, b и c имеет место неравенство |a-b| ≤ |a-c| + |c-b|. Из этого неравенства следует, что для трех подпоследовательностей x, y и z имеют место неравенства: |s − s | ≤ s − s + s − s , |σ − σ | ≤ σ − σ + σ − σ , |b − b | ≤ b − b + b − b . Из этих неравенств следует, что d(x, y) = |s − s | + |σ − σ | + |b − b | ≤ ≤ s −s + s −s + σ −σ + σ −σ + b −b + b −b ≤ ≤ d(x, y) + d(y, z), то есть выполняется неравенство треугольника: d(x, y) ≤ d(x, y) + d(y, z). Таким образом, функция d(x, y) является полуметрикой для множества всех подпоследовательностей заданной последовательности. 4
Утверждение 1. Пусть подпоследовательности x и y имеют одинаковую длину. Тогда существуют неотрицательные числа es,eσ,eb такие, что для этих подпоследовательностей x и y будут выполняться условия 1, 2, 3. Доказательство. Выбрав es = eσ = eb = d(x, y), получим выполнение условий 1, 2, 3: s − s ≤ s − s + σ − σ + b − b = d(x, y) = e , σ − σ ≤ s − s + σ − σ + b − b = d(x, y) = e , b − b ≤ s − s + σ − σ + b − b = d(x, y) = e . Утверждение 1 доказано. Утверждение 2. Условия 1, 2, 3 являются необходимыми для поиска равных подпоследовательностей. Доказательство. Для равных подпоследовательностей x и y имеем: d(x, y) = d(y, x) = 0. Таким образом, для равных подпоследовательностей x и y условия 1, 2, 3 будут выполняться при любых неотрицательных es,eσ,eb. Утверждение 2 доказано. Утверждение 3. Условия 1, 2, 3 не являются достаточными для поиска равных подпоследовательностей. Доказательство. Для доказательства этого утверждения приведем пример двух наборов, для которых имеют место равенства s =s ; σ =σ ; b =b , но которые различны. Рассмотрим наборы {1,0,0,1} и {0,1,1,0}. Легко проверить, что для них имеют место равенства s = s = 2; σ = σ = ; b = b = 0. √ Очевидно, что наборы различны. Утверждение 3 доказано. Описание алгоритма поиска I. Из заданной последовательности A = {a1,...,aN} циклически выделять пары подпоследовательностей (две n-граммы) X1 = {x1,...,xn}, где xi = aj, j = idx1, idx1 = 0,1,...,N-n и X2 = {x1,...,xn}, где xi = aj, j = idx2, idx2 = idx1+n,...,N-n II. Для каждой пары выделенных в пункте I подпоследовательностей X1 и X2 проверить условия 1-3. Выражаясь терминами математической статистики, из генеральной совокупности на каждом шаге цикла извлекаются две выборки (две n- граммы). В данном случае нулевая гипотеза (H0): выборки идентичны. H0 либо принимается (тогда выборки запоминаются как возможный результат), либо отвергается (тогда выборки пропускаются). Равенство количества элементов в выборках и сохранение порядка элементов в выборках позволяют разделить процесс принятия решения о принятии или отклонении H0 на три этапа: Проверка условия 1. Вычисляется разность сумм. Либо H0 отклоняется и происходит переход на следующий шаг цикла, либо происходит переход на проверку условия 2. Проверка условия 2. Вычисляется разность стандартных отклонений. Либо H0 отклоняется и происходит переход на следующий шаг цикла, либо происходит переход на проверку условия 3. Проверка условия 3. Вычисляется разность угловых коэффициентов линейных регрессий. Либо H0 отклоняется и происходит переход на следующий шаг цикла, либо проверяемые две выборки запоминаются как возможный результат. 5
Таким образом, сравниваются все пары подпоследовательностей (n-грамм). Из пар подпоследовательностей, удовлетворяющих условиям 1, 2, 3 выбирается одна пара – первая по итогам ранжирования. На данный момент реализованы два алгоритма ранжирования: 1) По длине подпоследовательностей; как результат выводится пара подпоследовательностей, имеющих наибольшую длину среди пар, удовлетворяющих условиям 1, 2, 3. 2) По доле равных соответствующих элементов пар подпоследовательностей; как результат выводится пара подпоследовательностей, имеющих наибольшую долю равных соответствующих элементов среди пар, удовлетворяющих условиям 1, 2, 3. III. Напечатать длину найденных подпоследовательностей, начальные номера их строк, суммы, стандартные отклонения и угловые коэффициенты линейных регрессий. В нашем варианте реализации предложенного алгоритма нечеткого поиска наибольшей подпоследовательности в числовой последовательности: - искомая подпоследовательность не может быть слишком короткой (менее 10 элементов, n>=10) и слишком длинной (более 30 элементов, n
В нашей ситуации xi = i, где i – натуральное число. Используя два приведенных выше равенства получаем: 1 n(n + 1)(2n + 1) 1 n(n + 1) n(n + 1) (x ) − x = − = (4n + 2 − 3n − 3) n 6 n 2 12 1 = n(n + 1)(n − 1) 12 Таким образом, получилась следующая формула расчета углового коэффициента для нашего случая: 12 +1 12 6 b= iy − y = − n(n − 1) 2 ( − 1) ( − 1) Графики результатов некоторых тестов Приведем графики, визуально отражающие результаты некоторых тестов. Красные линии в примерах отображают найденные повторяющиеся (схожие) подпоследовательности. График 1 60 50 40 30 20 10 0 1 3 5 7 9 11 13 15 17 19 21 23 25 27 29 31 33 35 37 39 41 43 45 47 49 51 53 55 57 59 Population Result 7
0 2 4 6 8 10 12 14 16 18 20 0 5000 10000 15000 20000 25000 1 01.01.2012 8 15 01.02.2012 22 01.03.2012 График 3 График 2 29 01.04.2012 36 43 01.05.2012 50 01.06.2012 57 01.07.2012 64 71 01.08.2012 78 01.09.2012 85 92 01.10.2012 99 01.11.2012 106 Data 113 8 01.12.2012 Population 120 01.01.2013 127 01.02.2013 134 Result 01.03.2013 141 Result 148 01.04.2013 155 01.05.2013 162 01.06.2013 169 176 01.07.2013 183 01.08.2013 190 197 01.09.2013 204 01.10.2013 211 01.11.2013 218 225 01.12.2013 232
Литература [1] Approximate string matching http://en.wikipedia.org/wiki/Approximate_string_matching [2] Simple linear regression http://en.wikipedia.org/wiki/Simple_linear_regression [3] Standard deviation # Uncorrected sample standard deviation http://en.wikipedia.org/wiki/Standard_deviation [4] Time series http://en.wikipedia.org/wiki/Time_series [5] Metric (mathematics) # Semimetrics http://en.wikipedia.org/wiki/Semimetric_space#Semimetrics [6] В.Г. Минашкин, Р.А. Шмойлова, Н.А. Садовникова, Л.Г. Моисейкина, Е.С. Рыбакова. ТЕОРИЯ СТАТИСТИКИ: Учебно-методический комплекс. – М.: Изд. центр ЕАОИ. 2008. – 296 с. [7] Бойцов Л.М. Классификация и экспериментальное исследование современных алгоритмов нечеткого словарного поиска. Труды 6-ой Всероссийской научной конференции “Электронные библиотеки: перспективные методы и технологии, электронные коллекции” - RCDL2004, Пущино, Россия, 2004. http://boytsov.info/pubs/rcdl2004.pdf 9
Вы также можете почитать