company_banner

О том, что происходит, когда в поиске Google используют слово «vs»

Автор оригинала: David Foster
  • Перевод
Случалось у вас такое: ищете что-нибудь в Google и вводите после искомого слова «vs», надеясь на то, что поисковик автоматически предложит вам что-то, немного похожее на то, что вам нужно?


Ввод «vs» после искомого слова

Со мной такое бывало.

Как оказалось, это — большое дело. Это — приём, который, при поиске альтернативы чему-либо, способен сэкономить массу времени.

Я вижу 3 причины, по которым этот приём отлично себя показывает в том случае, если его используют для поиска сведений о технологиях, неких разработках и концепциях, в которых хотят разобраться:

  1. Лучший способ изучить что-то новое заключается в том, чтобы выяснить, чем это, новое, похоже на то, что уже известно, или чем новое от известного отличается. Например, в списке предложений, появляющемся после «vs», можно увидеть что-то такое, о чём можно сказать: «А, так, оказывается, то, что я ищу, похоже на это, мне уже знакомое».
  2. Это — простой приём. Для того чтобы им воспользоваться нужно, в буквальном смысле, несколько секунд.
  3. Слово «vs» — это чёткое указание, говорящее Google о том, что пользователя интересует прямое сравнение чего-то с чем-то. Тут можно воспользоваться и словом «or», но оно далеко не так сильно выражает намерение сравнить что-то с чем-то. Поэтому, если воспользоваться «or», Google выдаст список предложений, в котором более вероятно появление чего-то постороннего.


Обрабатывая запрос «bert or», Google выдаёт предложения, касающиеся «Улицы Сезам». А запрос «bert vs» даёт подсказки по Google BERT

Это заставило меня задуматься. А что если взять те слова, что Google предложил после ввода «vs», и поискать по ним, тоже добавляя после них «vs»? Что если повторить это несколько раз? Если так, можно получить симпатичный сетевой граф связанных запросов.

Например, он может выглядеть так.


Эго-граф для запроса bert с радиусом 25

Это — весьма полезная методика создания ментальных карт технологий, разработок или идей, отражающих взаимосвязь подобных сущностей.

Расскажу о том, как строить такие графы.

Автоматизация сбора «vs»-данных из Google


Вот ссылка, которую можно использовать для того чтобы получить от Google предложения по автозавершению запроса в формате XML. Эта возможность не выглядит как API, предназначенный для широкого использования, поэтому, вероятно, не стоит слишком сильно налегать на эту ссылку.

http://suggestqueries.google.com/complete/search?&output=toolbar&gl=us&hl=en&q=<search_term>

URL-параметр output=toolbar указывает на то, что нас интересуют результаты в формате XML, gl=us задаёт код страны, hl=en позволяет указать язык, а конструкция q=<search_term> — это как раз то, для чего нужно получить результаты автозавершения.

Для параметров gl и hl используются стандартные двухбуквенные идентификаторы стран и языков.

Давайте со всем этим поэкспериментируем, начав поиск, скажем, с запроса tensorflow.

Первый шаг работы заключается в том, чтобы обратиться по указанному URL, воспользовавшись следующей конструкцией, описывающей запрос: q=tensorflow%20vs%20. Вся ссылка при этом будет выглядеть так:

http://suggestqueries.google.com/complete/search?&output=toolbar&gl=us&hl=en&q=tensorflow%20vs%20

В ответ мы получим XML-данные.

Что делать с XML?


Теперь нужно проверить полученные результаты автозавершения на соответствие некоему набору критериев. С теми, которые нам подойдут, мы продолжим работу.


Проверка полученных результатов

Я, при проверке результатов, пользовался следующими критериями:

  • Рекомендованный поисковый запрос не должен содержать текст исходного запроса (то есть — tensorflow).
  • Рекомендация не должна включать в себя запросы, которые были признаны подходящими ранее (например — pytorch).
  • Рекомендация не должна включать в себя несколько слов «vs».
  • После того, как найдено 5 подходящих поисковых запросов, все остальные уже не рассматриваются.

Это — лишь один из способов «очистки» полученного от Google списка рекомендаций по автозавершению поискового запроса. Я, кроме того, иногда вижу пользу в том, чтобы выбирать из списка только рекомендации, состоящие исключительно из одного слова, но использование этого приёма зависит от каждой конкретной ситуации.

Итак, используя этот набор критериев, мы получили 5 следующих результатов, каждому из которых присвоен определённый вес.


5 результатов

Следующая итерация


Затем эти 5 найденных рекомендаций подвергают такой же обработке, какой был подвергнут исходный поисковый запрос. Их передают API с использованием слова «vs» и опять выбирают 5 результатов автозавершения, соответствующих вышеозначенным критериям. Вот результат такой обработки вышеприведённого списка.


Поиск результатов автозавершения для уже найденных слов

Этот процесс можно продолжать, изучая ещё не исследованные слова из столбца target.

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

Эго-графы


Сетевой граф, который я вам показывал в начале статьи, это — так называемый эго-граф (ego graph), построенный, в нашем случае, для запроса tensorflow. Эго-граф — это такой граф, все узлы которого находятся на каком-то расстоянии от узла tensorflow. Это расстояние не должно превышать заданного расстояния.

А как определяется расстояние между узлами?

Давайте сначала посмотрим на готовый граф.


Эго-граф для запроса tensorflow с радиусом 22

Вес ребра (weight), соединяющего запрос A и B, мы уже знаем. Это — ранг рекомендации из списка автозавершения, изменяющийся от 1 до 5. Для того чтобы сделать граф неориентированным, можно просто сложить веса связей между вершинами, идущими в двух направлениях (то есть — от A к B, и, если такая связь есть, от B к A). Это даст нам веса рёбер в диапазоне от 1 до 10.

Длина ребра (distance), таким образом, будет вычисляться по формуле 11 — вес ребра. Мы выбрали здесь число 11 из-за того, что максимальный вес ребра — 10 (ребро будет иметь такой вес в том случае, если обе рекомендации появляются на самом верху списков автозавершения друг для друга). В результате минимальным расстоянием между запросами будет 1.

Размер (size) и цвет (color) вершины графа определяется количеством (count) случаев, в которых соответствующий запрос появляется в списке рекомендаций. В результате получается, что чем больше вершина — тем важнее представляемая ей концепция.

Рассматриваемый эго-граф имеет радиус (radius) 22. Это означает, что добраться до каждого запроса, начиная с вершины tensorflow, можно, пройдя расстояние, не превышающее 22. Взглянем на то, что произойдёт, если увеличить радиус графа до 50.


Эго-граф для запроса tensorflow с радиусом 50

Интересно получилось! Этот граф содержит большинство базовых технологий, о которых надо знать тем, кто занимается искусственным интеллектом. При этом названия этих технологий логически сгруппированы.

И всё это построено на основе одного единственного ключевого слова.

Как рисовать подобные графы?


Я, для рисования такого графа, использовал онлайн-инструмент Flourish.

Этот сервис позволяет строить сетевые графики и другие диаграммы с помощью простого интерфейса. Полагаю, на него вполне стоит взглянуть тем, кого интересует построение эго-графов.

Как создать эго-граф с заданным радиусом?


Для создания эго-графа с заданным радиусом можно воспользоваться Python-пакетом networkx. В нём есть очень удобная функция ego_graph. Радиус графа указывают при вызове этой функции.

import networkx as nx

#Формат исходных данных
#nodes = [('tensorflow', {'count': 13}),
# ('pytorch', {'count': 6}),
# ('keras', {'count': 6}),
# ('scikit', {'count': 2}),
# ('opencv', {'count': 5}),
# ('spark', {'count': 13}), ...]

#edges = [('pytorch', 'tensorflow', {'weight': 10, 'distance': 1}),
# ('keras', 'tensorflow', {'weight': 9, 'distance': 2}),
# ('scikit', 'tensorflow', {'weight': 8, 'distance': 3}),
# ('opencv', 'tensorflow', {'weight': 7, 'distance': 4}),
# ('spark', 'tensorflow', {'weight': 1, 'distance': 10}), ...]

#Построить исходный полный граф
G=nx.Graph()
G.add_nodes_from(nodes)
G.add_edges_from(edges)

#Построить эго-граф для 'tensorflow'
EG = nx.ego_graph(G, 'tensorflow', distance = 'distance', radius = 22)

#Найти двусвязные подграфы
subgraphs = nx.algorithms.connectivity.edge_kcomponents.k_edge_subgraphs(EG, k = 3)

#Получить подграф, содержащий 'tensorflow'
for s in subgraphs:
    if 'tensorflow' in s:
        break
pruned_EG = EG.subgraph(s)

ego_nodes = pruned_EG.nodes()
ego_edges = pruned_EG.edges()

Я, кроме того, воспользовался тут ещё одной функцией — k_edge_subgraphs. Она применяется для удаления некоторых результатов, которые не соответствуют нашим нуждам.

Например, storm — это опенсорсный фреймворк для распределённых вычислений в реальном времени. Но это — ещё и персонаж из вселенной Marvel. Как вы думаете, какие поисковые подсказки «победят», если ввести в Google запрос «storm vs»?

Функция k_edge_subgraphs находит группы вершин, которые невозможно разделить, выполнив k или меньшее число действий. Как оказалось, тут хорошо показывают себя значения параметров k=2 и k=3. Остаются, в итоге, только те подграфы, которым принадлежит tensorflow. Это позволяет обеспечить то, что мы не слишком удаляемся от того, с чего начали поиск, и не уходим в слишком далёкие области.

Использование эго-графов в жизни


Давайте отойдём от примера с tensorflow и рассмотрим другой эго-граф. В этот раз — граф, посвящённый ещё кое-чему такому, что меня интересует. Это — шахматный дебют, получивший название «Испанская партия» (Ruy Lopez chess opening).

▍Исследование шахматных дебютов



Исследование «Испанской партии» (ruy lopez)

Наша методика позволила быстро обнаружить самые распространённые идеи дебютов, что может помочь исследователю шахмат.

Теперь давайте рассмотрим другие примеры использования эго-графов.

▍Здоровое питание


Капуста! Вкуснятина!

Но что если у вас возникло желание заменить прекрасную, несравненную капусту на что-то другое? Вам в этом поможет эго-граф, построенный вокруг капусты (kale).


Эго-граф для запроса kale с радиусом 25

▍Покупаем собаку


Собак так много, а времени так мало… Мне нужна собака. Но какая? Может — что-то вроде пуделя (poodle)?


Эго-граф для запроса poodle с радиусом 18

▍Ищем любовь


Собака и капуста ничего не меняют? Нужно найти свою вторую половину? Если так — вот маленький, но весьма самодостаточный эго-граф, который может в этом помочь.


Эго-граф для запроса coffee meets bagel с радиусом 18

▍Что делать, если приложения для знакомств ничем не помогли?


Если приложения для знакомств оказались бесполезными, стоит, вместо того, чтобы в них зависать, посмотреть сериал, запасшись мороженым со вкусом капусты (или со вкусом недавно обнаруженной рукколы). Если вам нравится сериал «The Office» (безусловно, тот, что снят в Великобритании), то вам могут понравиться и некоторые другие сериалы.


Эго-граф для запроса the office с радиусом 25

Итоги


На этом я завершаю рассказ об использовании слова «vs» в поиске Google и об эго-графах. Надеюсь, вам всё это хотя бы немного поможет в поиске любви, хорошей собаки и здоровой еды.

Пользуетесь ли вы какими-нибудь необычными приёмами при поиске в интернете?

RUVDS.com
RUVDS – хостинг VDS/VPS серверов

Комментарии 15

    0

    А теперь то же самое с 'and', 'for' и другими предлогами.

      +1
      По определенным причинам именно vs работает наиболее эффективно — видимо сочетание лингвистических особенностей и принципов индексации. Жалко, что в русском нет похожего аналога.
        0
        ИЛИ / ЛИБО разве не является аналогом?
          +1
          В теории да, но на практике vs работает чаще и лучше. Полагаю, что наши поисковики в большинстве случаев игнорируют союзы как стоп-слова, а vs напротив является индикатором противопоставления товаров/услуг, поэтому чаще попадает в языковую модель и индексируется. Вот первое, что пришло в голову:
          image

          image
            +3

            Versus == против. Не совсем "или" и даже не "исключающее или".
            Но по-русски писать "python против php" не принято (если это не гуглетранслейт).
            Поэтому нормальной информации по запросам будет мало.

              +2
              Я думаю, что можно написать «сравнение X и » и это даст довольно схожие результаты.image
          0
          «and» и «or» являются частью языка поисковых запросов.
          Но в принципе, and должно работать довольно похоже — ведь одновременное упоминание тоже свидетельствует о связи. Но тут связь может быть любого типа — не только горизонтальная между равноположными альтернативами, каковую подразумевает противопоставление.

          +3
          давно пользуюсь этой фишкой. всегда думал что это просто список популярных поисковых запросов начинающихся с something vs
            +1
            Сначала поисковик тренирует могучие языковые модели для автодополнения, а потом пользователи парсят поисковик, чтобы из языковой модели получить граф знаний. Это даже красиво.
              +3

              В комментариях к оригиналу дали ссылку на готовое онлайн приложение, которое создаёт графы
              https://anvaka.github.io/vs/?query=habr

                0
                VScode все ломает(
                  0
                  А вот за эту ссылку — жирный плюс вам. К сожалению, «Недостаточно кармы для голосования», поэтому написал. А то я уже начал набрасывать в уме как такое самому сделать просто и удобно, а тут уже всё давно сделали)
                  0
                  А что означает размер кружков на вершинах графа? А цвет?
                    0

                    Помню смотрел курс Головача, он рассказывал про версус

                      0
                      Я думаю еще можно использовать словосочетание: «difference between»

                      Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                      Самое читаемое