Немного статистики: проект Deepsearch уже проиндексирован

  • › 8 миллиардов документов
  • › 3 триллиона слов (униграмм).
  • › 800 ТБ (без сжатия). Да, мы мчимся к петабайтам.

TSignal пытается создать поисковую систему, что является масштабной задачей (Живая альфа-версия, Глубокий поиск). Сегодня мы углубимся в то, как мы выполняем пользовательский запрос и находим соответствующие результаты из наборов данных размером в триллион. Мы также собираемся объяснить механизмы, работающие в бэкэнде. Все запросы можно разделить на следующие 3 категории

  1. Запросы навигации: пользователь хочет попасть в определенный домен, например. «ит»
  2. Вопросы-запросы: пользователь хочет узнать ответ на вопрос, например. «эпоха Дональда Трампа». (Это на рассмотрении)
  3. Информационные запросы: пользователь хочет узнать/найти некоторую информацию, например, «восстановление пароля Windows».

После того, как любой пользователь запускает запрос, запрос проходит следующие этапы:

  1. Распознавание языка запросов в широких языковых категориях на основе письменного сценария. Написание скриптов разделяет запрос на латиницу, кириллицу, деванагари, китайский язык, кандзи, хирагану, катакану и так далее.
  2. Точный язык определяется на основе сценария и дальнейшего анализа текста запроса.
  3. Нормализация запросов: на основе языка нижнего регистра, свертывание нескольких пробелов в один пробел
  4. Извлечение токена. Этот шаг состоит из извлечения слов (униграмм) и фраз (n-грамм). Пример: запрос «Бог любит всех». На этом шаге будут извлечены следующие униграммы «бог», «любит», «все». На этом шаге также будут извлечены следующие 2 грамма «бог любит» и «любит всех». Точно так же извлекается 3-грамм "бог всех любит"
  5. Автокоррекция: исправление орфографических ошибок. В среднем 20% запросов содержат опечатки. ПРИМЕЧАНИЕ. В настоящее время эта функция не включена в системе глубокого поиска.
  6. Извлечение контекста: это позволяет улучшить качество результатов. для например. кору можно использовать вместе с собакой или деревом. но относятся к разным контекстам. Как видите, некоторые результаты будут иметь информационное поле связанных доменов, содержащее соответствующие домены. Например. «yt» предоставит вам соответствующий домен «youtube.com». Мы улучшаем нашу способность определения контекста день ото дня.
  7. Расширение запроса:В этом запросе расширяется на основе синонимов, лемматизации, определения контекста. Например. поиск по запросу «драка» в глубоком поиске будет включать в себя результаты для драки, драки и т. д.

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

У Deepsearch есть 3 движка контента (на момент написания этой статьи).

  1. Семантический движок: он принимает в качестве входных данных запросы пользователей и создает список доменов, которые очень релевантны. Например. поиск BTC приведет к списку бирж биткойнов, связанных с биткойнами новостных сайтов, форумов и т. д. Движок основан на глубоком обучении и, таким образом, обеспечивает высокую актуальность. Этот движок будет объединен с основным движком после тщательного тестирования и использования для проверки достоверности результатов. Чтобы узнать больше о глубоком обучении и встраивании слов, см. word2vec и glove.
  2. Детектор домена: он пытается обнаружить опечатки, ошибки и пытается найти точный домен.
  3. Core Engine: принимает все униграммы, n-граммы и короткие списки возможных кандидатов. Это связано с тяжелыми вычислениями. Сначала мы пытаемся найти n-грамм и продвигаемся к более низким граммам. Порядок, который мы пробуем для бог любит всех, следующий: бог любит всех, затем 2-уровневые униграммы бог любит, любит всех, а затем униграммы бог, любит, всех. Затем возможные кандидаты ранжируются на основе ряда факторов ранжирования (Факторы ранжирования рассматриваются здесь). Стоп-слова могут использоваться или не использоваться в зависимости от запроса.

Основной движок работает с индексом, созданным более ранними инструментами. Индекс содержит данные в следующей форме, например. термин «природа» будет содержать список всех документов, ранжированных в порядке убывания. Они называются списками публикации. (также известный как инвертированный индекс). Точно так же «деревья» и любой другой термин в указателе будет списком публикации.

Если пользователь запрашивает «деревья природы», система извлекает список публикаций для «природы» и «дерева» и пересекает их. Пересечение означает, документы, которые содержат оба. Мы извлекаем x результатов и ранжируем их по ряду факторов.

В итоге результаты упаковываются и доставляются конечному пользователю.