Реализация нечеткого поиска на скриптовом языке 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
Вы также можете почитать