Поисковые системы обычно держат это в секрете, так как это большая часть того, как делается волшебство (т. е. проприетарная часть), поэтому я могу только делать обоснованные предположения.
Фактические логические / теоретические вещи
Тем не менее, я думаю, нам нужно начать с осознания того, что, вероятно, мы объединяем не две совершенно независимые оценки. Вероятно, мы используем все данные в всех местах, вместо того, чтобы вручную выбирать, что и где. Давайте посмотрим на потенциальный пример:
query: "dog"
returned objects to rank:
1. "dogs are awesome! find out more about owning a dog today!"
Query relevance: 9/10
From: some obscure blog that no-one cares about (2/10 according to PageRank)
2. "doge memes for you. Get the finest memes - doge and more!"
Query relevance: 7/10 (only 1 letter difference! Could be a typo, maybe?)
From: 9gag, first search result for anything trendy-related, so it must be good (9/10 according to PageRank)
Как бы вы ни пытались согнуть, исказить и взвесить данные, 9gag окажется наверху, несмотря на то, что он явно неверен (извините за нелепый пример). Ясно, что это не так просто, как сложить эти два числа вместе.
Время спекуляций
(Обратите внимание, что этот раздел длиннее предыдущего. Воспринимайте его с недоверием.)
Представьте себе всю паутину в виде графа (например, графа теории графов) или своего рода «карты» со взаимосвязанными вещами. Расстояния между точками — это расстояния PageRank (некоторая мера того, насколько сплоченными PageRank считают два сайта, где более высокое значение представляет большее расстояние, а, в свою очередь, более низкий показатель PageRank — следовательно, pr_n=1/sum(length of all edges connecting to n)
), а «веса» внутри кругов — это релевантность. на ваш запрос. Наша задача состоит в том, чтобы найти числа, которые относительно близки к своим аналогам (т. е. имеют высокий показатель PageRank), но также имеют более высокие веса. Затем мы можем использовать выбранный вами алгоритм для извлечения лучших из них. Но таким образом, мы все еще получаем результаты, которые мы получили раньше, где dogs
и doge
разделены всего 1 буквой. Причина в том, что мы игнорируем оценку запросов других страниц. Поэтому то, что мы будем делать, выглядит следующим образом:
- Допустим, мы начинаем с этого графика:
(да, я понимаю, что он неполный и не хватает некоторых связей. Но у меня есть основания полагать, что @Joeebevo — человек, который оценил бы визуально интерпретируемый график и математику, которая не продолжается в течение получаса.)
Синий представляет собой расстояние PageRank (т. е. насколько далеко страницы расположены друг от друга, поэтому меньшее среднее расстояние PageRank до всех подключенных узлов соответствует более высокому показателю PageRank).
- Сначала возьмем узел с наибольшим количеством подключений: синий узел. Мы рассмотрим все его окружение, возьмем нашу оценку «8» и разделим ее на части, взвешенные в соответствии с оценками PageRank вокруг нее. Эти новые числа представлены фиолетовым текстом.
- Затем мы делим эти числа на узлы, к которым они подключены (деление, поскольку чем меньше расстояние PageRank, тем лучше, но с учетом релевантности, чем выше значение, тем лучше), присваивая этим узлам новое значение (обозначенное белым цветом). Наконец-то это рейтинг! (правда, это не окончательный счет, так как мы еще не учли кучу расстояний):
Как мы можем понять, что то, что мы сделали, имеет смысл? Что ж, вернемся к первому графическому изображению. Зеленый узел был маленьким и находился далеко, поэтому на этом графике он получил низкий балл. Между тем фиолетовый узел был большим и (относительно) близким к синему, поэтому он получил наивысшую оценку. Красный узел был еще ближе, но из-за своего крошечного размера он занял лишь второе место.
Математически мы не сделали ничего сложного — мы просто вычислили своего рода «среднее» из двух оценок, взвешенных по важности среднего узла. Это своего рода алгоритм, который путает «дож» с «собакой». Красный узел ничего не знает об оранжевом, его волнует только синий. Чтобы исправить это, нам нужно повторить процесс.
Чтобы решить, к какому узлу идти дальше, мы воспользуемся этим алгоритмом (он основан на теории Дейкстры, самом эффективном алгоритме поиска пути):
а>
- Итак, мы перейдем к узлу со следующими по количеству соединениями. В этом случае все они равны (3), поэтому мы перейдем к узлу с наивысшим баллом (обратите внимание, что если баллы также равны, какой из них вы выберете, не имеет значения для вывода), поэтому фиолетовый. Мы просто повторим процесс, чтобы получить: (новые расстояния оранжевым цветом, новые размеры бирюзовым цветом)
Обратите внимание, что с узлами белого текста мы можем умножать расстояние вместо деления, так как мы уже нормализовали его до положительного масштаба (жаргон для «сделал увеличение обеих осей по мере того, как результат становится более точным, вместо увеличения одного и уменьшения другого». ').
Единственный узел, который мы не обновляли или не использовали в обновлении (который все еще считается затронутым, так как некоторая связь между ним и дочерним узлом была изменена) с момента последнего обновления, оранжевый, поэтому мы пойду туда сейчас. (используя фиолетовый для новых узлов, зеленый для новых линий)
а>
а затем перейдем к красному (зеленые узлы, черные линии):
а>
и, наконец (прежде чем мы остановимся) к зеленому (красные узлы, красные линии):
а>
Итак, чтобы просмотреть результаты:
- Purple, blue and orange seem perfectly ordered, based on common sense! Of course, the numbers are a lot different from a simple average, and this is good because it:
- Considers all other nodes in the calculation, not just that one node and its one PageRank score
- Лучше для сравнения с большим количеством точек данных, так как мы принимаем во внимание множество других вещей
- Однако то, что произошло с красным и зеленым, кажется очень запутанным. Они внезапно уменьшились по сравнению с другими, несмотря на то, что красный цвет даже изначально был выбором №2! Это ошибка?
Давайте проанализируем этот второй бит. Поначалу это действительно довольно запутанно, но нам нужно взглянуть на то, что мы на самом деле только что сделали, на абстрактном уровне. Представьте себе цепь: от каждой ячейки/амперметра/блока питания течет ток к другим, но по проводам с определенным сопротивлением. Мы берем значение каждого узла и передаем его соседним узлам в зависимости от расстояния. Другая аналогия — это как человек со льдом, несущий лед к домам жарким летом. Вы с радостью возьмете поровну льда для всех, но много тает по дороге к каждому дому. Следовательно, каждый получает количество, пропорциональное их расстоянию (хотя мне не нравится эта аналогия, поскольку она дает представление о том, что числа могут просто «просачиваться» из узлов)
Итак, теперь давайте пошагово. Поскольку мы идем прямо к пурпурно-оранжевой оси через красно-зеленую ось, мы, по сути, используем их в качестве опорных точек. Поэтому мы не используем их для первых двух шагов такими, какие они есть. Это потому, что, как я упоминал в начале этого раздела, у нас нет полного графика. Это исправит это:
Теперь не все нужно учитывать: нужно соединить только квадратный корень подмножества (т.е. 50*sqrt(2)
% узлов): те, которые разделены 1 или 2 узлами, но не более. В противном случае все стало бы слишком неуклюжим, так как алгоритм определения следующего узла стал бы двойным-рекурсивным — и так уже плохо! (честно говоря, математическое обоснование тоже есть, но оно выходит за рамки этого ответа (но, по сути, числа будут менее близки к «оптимальному» ответу)).
В заключение, ваше понятие независимого от запроса технически правильно, но важно отметить, что оно не комбинируется полностью независимо от запроса. Это зависит от других результатов, чтобы сформировать своего рода средневзвешенное значение, чтобы убедиться, что два результата, которые полностью находятся на противоположных концах спектра, не получают одинаковый балл (например, релевантность 2 + PR 8 против релевантности 8 + PR 2). Нерелевантный запрос, очевидно, не является более релевантным, поскольку он имеет высокий показатель PageRank, а высокий показатель PageRank бесполезен, если он получен только в результате ссылки на нерелевантные для запроса страницы (например, несмотря на то, что 9gag связан с много мест, если вы видите, что ни одно из этих мест не имеет ничего общего с собаками, почему этот высокий показатель PageRank должен что-то значить?).
Я знаю, что этот ответ длинный, но я надеюсь, что он достаточно ясно ответит на ваш вопрос. Обратите внимание, что это только один используемый алгоритм, но этого достаточно, чтобы 99% разработчиков вообще не пытались использовать поисковую систему.
person
Geza Kerecsenyi
schedule
09.08.2019