Программирование как способ выражения мыслей. Levon Avakyan
Я расскажу на простейших примерах как функционирует современный компьютер, какие языки программирования бывают, для чего они используются, какие парадигмы лежат в их основе. По сути, язык программирования это инструмент, с помощью которого можно рассказать машине, чего же мы от неё хотим, тем самым воплотив свои мысли.
Golang в действии: Как нам удается писать highload приложение на (не?)подходя...Daniel Podolsky
Последние 2 года язык Go является моим - нашим - основным средством заработка на хлеб. Хватает, в общем-то, и на хлеб, и на масло, а иногда и на красную икру.
Не покривив душой, я могу сказать, что мы относимся к языку Go и его создателям с симпатией и уважением.
Однако, при всем нашем уважении, заявить, что Go предназначен для "тяжелых" проектов, я, не покривив душой, не могу.
Во-первых, Go молодой язык, для которого еще не известны паттерны и - что важнее - антипаттерны. Тем, кто пишет на Go тяжелое приложение сегодня, приходится тратить существенное время на тесты и оптимизации
Во-вторых, выразительные средства Go довольно скудны, что приводит к появлению в коде ужасающего количества boilerplate, за которым эффективно прячется бизнес-логика. Программу на Go бывает трудно охватить взглядом и поместить ее модель себе в голову просто из-за количества строк, которые надо для этого прочесть.
В-третьих, у Go есть проблемы с эффективностью кода. У Go плохой оптимизатор. У Go плохо с "заточкой" под железо - вспомним хотя бы историю с патчем CloudFlare для TLS. Патч ведь так и не попал в основную ветку...
Возникает вопрос - почему же, не по наслышке зная о вышеперечисленных проблемах, мы пишем наш реально тяжелый проект именно на Go?
Ответ прост: Go не идеален, но под наши задачи он подходит лучше всего.
Раньше мы строили разные тяжелые бекенды на perl, python, java, groovy и даже lua+nginx. Нам есть, с чем сравнивать.
Во-первых, Go достаточно быстр. Во всяком случае, он быстрее perl и python на нашем профиле нагрузки.
Во-вторых, и это важнее, Go предоставляет вполне достаточные средства контроля за потреблением как RAM, так и CPU. Например, регулярные выражения Go не такие гибкие, как pcre, и, по моим наблюдениям, медленнее, чем pcre. Но! регулярные выражения в Go всегда отрабатывают за предсказуемое время!
В-третьих, создатели языка не врут нам - они, действительно, постарались сделать язык, на котором человекочитаемую программу написать проще, чем нечитаемую. И у них - с некоторомы оговорками - получилось! Даже пресловутый boilerplate не способен этому помешать.
Наконец, Go просто сумел нам понравиться, чего уже давно не случалось с языками программирования.
Итак, на основании опыта, полученного при создании пилотной версии проекта inCaller.org я расскажу о том, как мы писали на Go тяжелое приложение.
Миллионы одновременных персистентных websocket соединений, десятки тысяч коннектов по ssl в секунду, сотни тысяч в секунду обновлений записей в БД.
Я расскажу об антипаттернах, нами обнаруженных, о методике тестирования производительности, анализа проблем и способах с проблемами справиться.
Доклад рассчитан на backend-программистов, как на языке Go, так и на других.
Рассмотрю с практической стороны создание своего предметно-ориентированного языка. Продемонстрирую почти готовое решение возникшей задачи и расскажу, в каких случаях может потребоваться внедрение DSL.
Докладчик: Михаил Воротынцев (AgoraDoxa)
Видео: https://www.youtube.com/watch?v=Qf0TjcBG1oI
NEW BOOKINGS OPEN IN MVL LIMITED,THE PALMS, 2BHK NEW BOOKINGS,MVL THE PALMS ...Geetanjali Geetu
This document discusses a proposed residential development called MVL The Palms located in Bhiwadi, Rajasthan. It will consist of 14.75 acres with 14 towers up to 12 stories high. There will be 1BHK, 2BHK and 3BHK units available for purchase starting from 20.7 lacs with an inaugural discount of 1.25 lacs. The development will include amenities like a clubhouse, swimming pool, community hall, security and power backup. Bhiwadi is well connected to Delhi, Gurgaon and other industrial areas with proximity to the Delhi Mumbai Industrial Corridor.
O documento discute as vantagens dos computadores de secretária versus portáteis, e especificações importantes a considerar ao comprar um computador como processador, memória, tamanho de tela, duração da bateria e preço. Também discute a importância de considerar questões ambientais e a conveniência de comparar preços online versus em lojas físicas.
1. Penelitian ini bertujuan untuk mengetahui perbedaan hasil pembelajaran senam irama melalui model mengajar langsung dan model mengajar kooperatif di SMPIT As-Syifa Boarding School Subang.
2. Variabel yang diteliti adalah hasil belajar siswa dalam keterampilan teknik dasar gerakan langkah kaki senam irama.
3. Penelitian ini diharapkan dapat memberikan kontribusi terhadap peningkatan kualitas pembelajaran
1. Dokumen tersebut membahas mengenai layanan Letter of Credit (LC) dan Safe Deposit Box (SDB) yang diberikan oleh bank kepada nasabah beserta proses dan pembukuan akuntansinya. LC digunakan untuk menjamin kelancaran perdagangan sedangkan SDB berupa kotak penyimpanan barang berharga.
O documento descreve as funções de várias ferramentas do Windows, incluindo o Painel de Controle, que pode ser usado para revisar e corrigir problemas no computador, configurar contas de usuário e rede, alterar configurações de hardware e software, e desfragmentar e limpar o disco rígido para melhorar o desempenho.
Painel2 - Ciência e Tecnologia para o Desenvolvimento Sustentável – Filipe Du...CIDAADS
O documento discute os desafios da sustentabilidade global, incluindo o rápido crescimento populacional e industrial desde a Revolução Industrial, fronteiras planetárias cruciais como mudanças climáticas e segurança alimentar, e a falha em erradicar a fome apesar de décadas de cúpulas globais sobre alimentos. Argumenta que as emissões anuais de gases de efeito estufa estão próximas dos piores cenários do IPCC.
This document appears to be a table containing information about interest rates on monetary values over time. It includes columns with principal amounts in Soles, interest rates as percentages, accumulated interest totals, and timestamps throughout a 24 hour period. The table tracks interest accumulating on deposits from 1am to 12am the next day at varying rates.
08.11 SEMPRO Club - Влад Моргун - Цвет настроения серыйVladislav Morgun
SEO Team-lead в ЛУН & Flatfy. Куратор курса «Product SEO» в Projector. SEO-консультант
Серое SEO - баланс во вселенной.
Сын маминой подруги автоматизирует процессы. А вы?
Продвижение по белому, где все по чёрному.
Что делать, чтобы Google не укусил за бочок?
Как вам такое?
8-го ноября на Sempro.Club мы посмотрим на Google, как на продукт и узнаем как создать синергию между поиском и Вашим проектом. Обсудим цели и ограничения поисковых систем. Вектор их развития. Рассмотрим примеры поисковой оптимизации направленной на продукт и пользователя с использованием "серых" техник. Поделимся наработками по автоматизации процессов.
У нас в гостях Владислав Моргун SEO Team-lead в ЛУН & Flatfy. Вы знаете еще кого-то, кто имеет опыт продвижения долгосрочных белых проектов на 37+ стран?
Мероприятие Must know для SEO-специалистов, которые работают в продуктовых компаниях. Junior/Middle SEO.
Синютин С. - Студия Ф1 (http://studiof1.ru/), 11 семинарСергей Синютин
3 метода повышения видимости сайта:
- переходы с мобильных
- блочная структура сайта
- коммерческие факторы + подключаем различные источники трафика
Благодарю всех за просмотр)
Mail.ru: Как вырастить в себе автоматизатора и разработчикаMaxim Boguslavsky
В презентации я постарался рассказать о том:
1. Какие основные критерии нужно учесть при поиске автоматизатора.
2. Какие основные навыки требуются для инженера по автоматизации.
3. Какие требования к инженеру по обеспечению качества.
4. Так же в презентации есть статьи и ссылки на ресурсы где можно получить необходимые знания и навыки для развития.
5. Так же я рассказываю о том сколько времени требуется для развития, какие есть подводные камни и как их преодалеть.
Максим Богуславский, Banki.ru, «Как вырастить в себе автоматизатора и разрабо...Mail.ru Group
Многие тестировщики по той или иной причине задумываются о том, чтобы начать писать автотесты. Доклад ориентирован на тех, кто хочет попробовать изучить автоматизацию, либо пробовал, но не справился. Почему у кого-то получилось, а у кого-то нет? Какие навыки и личные качества могут помочь нам в этом или помешать? Стоит ли пытаться? В своем докладе Максим постарался дать ответ на эти вопросы.
Владимир Лучанинов. Сделай сам анализатор SERPOctopus Events
1. Вопросы при аналитике SERP.
2. Существующие решения: SaaS, self-hosted, Desktop.
3. Создание системы аналитики под себя из Netpeak Checker, Google Sheets и Google Data Studio.
Андрей Похилько — Нагрузочное тестирование типичного интернет сервисаYandex
Нагрузочное тестирование интернет-сервиса начинается с того, что мы выясняем ожидаемый профиль нагрузки. Вооружившись подходящим инструментом, мы проводим типовую последовательность тестов и измеряем основные показатели производительности: ёмкость, скорость и надёжность. При этом особое внимание необходимо уделять наблюдению за состоянием ресурсов тестируемой системы.
В презентации описан подход к оценке производительности hadoop кластера. Описаны вероятные узкие места, влияющие на производительность кластера. Приведен пример сравнения производительности двух кластеров на различном железе.
The document discusses concurrency and synchronization in distributed computing. It provides an overview of Petr Kuznetsov's research at Telecom ParisTech, which includes algorithms and models for distributed systems. Some key points discussed are:
- Concurrency is important due to multi-core processors and distributed systems being everywhere. However, synchronization between concurrent processes introduces challenges.
- Common synchronization problems include mutual exclusion, readers-writers problems, and producer-consumer problems. Tools for synchronization include semaphores, transactional memory, and non-blocking algorithms.
- Characterizing distributed computing models and determining what problems can be solved in a given model is an important area of research, with implications for distributed system design.
The document discusses weakly supervised learning from video and images using convolutional neural networks. It describes using scripts as weak supervision for learning actions from movies without explicit labeling. Methods are presented for jointly learning actors and actions from scripts, and for action learning with ordering constraints. The use of CNNs for object and action recognition in images is also summarized, including work on training CNNs using only image-level labels without bounding boxes.
This document discusses common C++ bugs and tools to find them. It describes various types of memory access bugs like buffer overflows on the stack, heap, and globals that can lead to crashes or security vulnerabilities. Threading bugs like data races, deadlocks, and race conditions on object destruction are also covered. Other undefined behaviors like initialization order issues, lack of sequence points, and integer overflows are explained. The document provides examples of each type of bug and emphasizes that undefined behavior does not guarantee a predictable result. It concludes with a quiz to find bugs in a code sample and links to additional reading materials.
AddressSanitizer, ThreadSanitizer, and MemorySanitizer are compiler-based tools that detect bugs like buffer overflows, data races, and uninitialized memory reads in C/C++ programs. AddressSanitizer instruments loads and stores to detect out-of-bounds memory accesses. ThreadSanitizer intercepts synchronization calls to detect data races between threads. MemorySanitizer tracks initialized and uninitialized memory using shadow memory to find uses of uninitialized values. The tools have found thousands of bugs with low overhead. Future work includes supporting more platforms and languages and detecting additional bug classes.
This document discusses common C++ bugs and tools to find them. It describes various types of memory access bugs like buffer overflows on the stack, heap, and globals that can lead to crashes or security vulnerabilities. Threading bugs like data races, deadlocks, and race conditions on object destruction are also covered. Other undefined behaviors like initialization order issues, lack of sequence points, and integer overflows are explained. The document provides examples of each type of bug and quizzes the reader to find bugs in a code sample. It recommends resources for further reading on debugging techniques and thread sanitizers that can detect races and data races.
This document provides examples and snippets of code for MapReduce, Pig, Hive, Spark, Shark, and Disco frameworks. It also includes two sections of references for related papers and Disco documentation. The examples demonstrate basic MapReduce jobs with drivers, mappers, and reducers in Java, Pig and Hive queries, Spark and Shark table operations, and a Disco MapReduce job.
20120226 information retrieval raskovalov_lecture03-04
1. Современные методы улучшения
качества поиска
Яндекс
Den Raskovalov
denplusplus@yandex-team.ru
Санкт-Петербург
25.02.2011
2. Краткая история IR
1950: Боязнь научного отставания от СССР подстегивает
работы по построению мехнизированных систем поиска,
изобретению индекса цитирования
1975: Salton публикует свои основные работы (TF*IDF)
1992: Первый TREC
~2000: Индустриализация IR с широким
распространением web'а и появлением поисковых машин
2003: РОМИП
3. Состояние IR
● Не наука
● Близко не подошла к пониманию смысла
текста
● Роль эвристики велика, как нигде
● Накоплено и развито некоторые техники:
● Морфология
● Машинное обучение
● Обработка огромных объемов косвенных данных
(логи запросов -> синонимы)
4. Как происходит поиск?
● Запрос токенизируется, к словам запроса
применяется морфологический анализ,
ищутся синонимы
● Из документов индекса отбираются те,
которые с большой вероятностью имеют
отношение к запросу (фильтрация)
● Для отфильтрованных документов
рассчитываются признаки (фичи, features)
● К признакам применяется формула, дающая
конечную оценку релевантности
5. Инвертированный индекс
● Позволяет для данного ключа (слова) найти
(проитерироваться) по его вхождениям
(позициям) в документы коллекции
● Есть возможность дополнительно хранить
информацию про вхождение (сегмент,
позицию)
● Получается, что все, что мы знаем про
документ, когда считаем релевантность – это
позиции слов запроса (мало?)
6. Инвертированный индекс,
структура и реализация
● Минимальная реализация
● Два файла:
● Key – отсортированный список слов, с
указанием, где они хранятся в inv-файле
● Inv – плоский файл с информацией о позициях
– Позиции для одного ключа идут подряд
– Позиции отсортированы по (id документа, позиции в
документе)
Читать удобно с помощью memory map
7. Инвертированный индекс, его
построение
● Проблема: индексатор получает документ за
документом
● Накапливать инвертированный индекс в
памяти map< string, vector<TPosition> >
● Когда памяти перестает хватать, записать
порцию инвертированного индекса на диск
● Когда документы кончатся, слить порции
инвертированного индекса с диска в один
индекс по всем документам
8. Инвертированный индекс:
слияние
● Идея для слияния используется та же, что и
для внешней сортировки
● Завести heap, хранящий итераторы на порции
● Записывать каждый раз в выходной файл
минимальную позицию, пока все не закончатся
Можно разработать весьма эффективные
алгоритмы сжатия инвертированного индекса
(дельта-кодирование, префиксное сжатие)
9. Фильтрация
● Запрос состоит из нескольких слов, какие документы считать
найденными?
● Зачем нужна? На самом деле, для оптимизации. Цель – не
потерять релевантные документы.
● Те, которые содержат слова запроса. Содержат где?
● Есть текст, есть ссылки на документ (ссылки можно трактовать, как
хорошие описания)
● [мой дядя самых чистых правил, когда не в шутку занемог]
● [скачать учебник философия вуз платон и демокрит pdf djvu torrent]
● AND?
● OR?
● Все или почти все слова запроса.
10. Фильтрация: кворум
Q – запрос
qi – i-ое слово запроса
w(qi) – функция веса слова
D - документ
∑ w(qi )> Quorum (Q)⋅∑ w(qi )
qi ∈ D q i ∈Q
Quorum (Q)=1−0.01(1/ √( Q −1))
∣ ∣
w(q i )=−log ( DocFreq (qi )/ SumOfFreq)
11. Фильтрация: идеи
● Слова в заголовках важнее, чем в остальном тексте
● Существительные важнее, чем прилагательные
● Очень редкие слова только мешают (опечатки)
● Стоп-слова (предлоги, союзы) должны иметь нулевой вес
● Иногда очень частые слова очень важны, их нельзя отбрасывать
(география) [нотариус москва]
● Решение – выбрать метрику, составить обучающую выборку,
произвести машинное обучение
13. Ранжирование
● Для того, что работать над качеством
ранжирования, надо уметь его измерять
(трюизм, да).
● В основе оценки качества работы любого
алгоритма лежит сравнение результатов его
работы с результатом работы человека.
14. Ранжирование: тексты
● До появления интернета, был только текст
документа
● ТF-IDF (Salton)
● BM25 (Robertson)
–
–
– Пенальти длинным документам
– Пенальти большому числу вхождений слова
● Морфология
● Тезаурусы (синонимы)
● BM25F - Зоны
15. Ранжирование: ссылки
● С появлением WWW и HTML появляются
ссылки. Зачастую они хорошо описывают
документ. Сам факт их наличия много
говорит о документе:
● LF-IDF
● LinkBM25
16. Ранжирование: PageRank
● Рассмотрим граф. Вершины – страницы
интернета, ребро – ссылка.
● Рассмотрим модель “блуждающей
обезьянки”.
● PageRank страницы – мера времени,
которая обезьянка проводит на странице.
● Не зависящая от запроса мера важности
страницы в интернете.
17. Ранжирование: клики
● Можно собирать реацкию пользователя. По
нерелевантному не кликают. На
нерелевантном не проводят время.
18. Ранжирование
● Одна из основных проблем ранжирования:
как научиться сочетать столь разнородные
сигналы?
● Для того, что работать над качеством
ранжирования, надо уметь его измерять
(трюизм, да).
● В основе оценки качества работы любого
алгоритма лежит сравнение результатов его
работы с результатом работы человека.
20. Метрики: ранжирование
● Point-wise
● Например, невязка (сумма квадратов отклонение
оценок от предасказанной релевантности)
● Pair-wise
● Например, число неправильно отранжированных пар
● List-wise
● Сумма по всем запросам
– Релевантности первого документа (P1)
– Релевантности первых десяти документов (P10)
– NDCG (сумма релевантностей, нормированный на позицию
документа)
21. Метрики ранжирования: pFound
● В основе метрики лежит модель поведения пользователя:
● Пользователь просматривает выдачу сверху-вниз результат за
результатом
● После просмотра каждого результата пользователь может
остановить поиск:
– Текущий результат решил его поисковую задачу
– Он отчаялся
● pFound – это вероятность того, что пользователь нашел
● pView[i] = pView[i-1]*(1 – pSuccess[i – 1]))*0.85
● pFound = sum pView[i]*pSuccess[i]
● Приятное свойство: один раз собрав оценки результатов
поиска, можно оценивать результаты работы разных
алгоритмов.
22. Проблема недооцеенности
● Оценки быстро устаревают
● Релевантные документы исчезают
● Все классические метрики при этом
стремятся к нулю по абсолютному значению
и не сохраняют порядок ранжирования
систем
23. Анализ поведения пользователей
● “Счастье”
● Кликовые метрики
● Средняя позиция первого (по времени!) клика
● Доля некликнутых страниц
● Доля длинных кликов
● Общая кликабельность выдачи
● A/B тестирование
24. Sec. 8.6.3
A/B тестирование
●
Проверка «единственного» небольшого изменения
●
Условия: наличие популярной поисковой системы
●
Большинство пользователей все еще используют старую
систему
●
Малый процент (1-2-4-10%) выполняем в новой системе
●
Одновременное выполнение
●
Анализ затронутых запросов
●
«Общие» запросы для стандартной и экспериментальной
систем
●
Менее точно, низкая разрешающая способность, но
надежно и не требует оценок
24
26. Алгоритмы машинного обучения
● Метод ближайшего соседа
● SVM (попытка линейно разделить
релевантное и нерелевантное)
● Жадный перебор полиномиальной формулы
● Очень хочется пользоваться градиентным
спуском. Но как?
27. Алгоритмы машинного обучения
● Проблема в том, что pFound недифференцируем.
На помощь приходит модель Люка-Плакетта.
● После этого можно применять градиентный
спуск.
● Полезный прием: bagging.
● Бустим много раз: используем жадность.
● В качестве базовых примитивов используем
“кубики” малой размерности.
● Не забудем про регуляризацию.
28. Алгоритмы машинного обучения
● В результате получаем MatrixNet.
● Ближайший аналог: TreeNet от господина
Фридмана.
● В реальном мире нужно распараллелить на
множество машин.
29. Машинное обучение
● С помощью машинного обучения в Яндексе
решается множество задач:
● Решение, что обходить
● Решение, что выкладывать
● Сниппеты
● Задачи производительности
● Детекция спама
● Решение о показе рекламы
30. Что еще?
● Множество источников (новости, блоги, товары)
● Актуальность
● Свежесть
● Непорнушность
● Дубликаты
● Разнообразие интентов
● Спам
● Подавление спама
32. Современные методы увеличения
производительности поиска
Организация разработки
в поиске Яндекса
Яндекс
Den Raskovalov
denplusplus@yandex-team.ru
25.02.2011
Санкт-Петербург
33. Базовый поиск
● Базовый поиск – это программа, которая по поисковому индексу
умеет находить самые релевантные документы, строить
сниппеты, возвращать дополнительную документную
информацию.
● Индекс обычно содержит миллионы документов.
● Реализован, как HTTP-сервер (для отладки подходит браузер).
● В базовом поиске тратятся 95% всех ресурсов при обслуживании
запроса.
● Стоимость кластера - десятки миллионов долларов. 1%
производительности - сотни тысяч долларов.
34. Базовый поиск
● Все данные, нужные для поиска, хранятся в оперативной
памяти.
● Форматы, используемые в индексе, рассчитаны на
прямую совместимость с системой индексации.
● В разработке программы принимали/принимают участие
~500 программистов.
● Чтобы часто тестировать качество/скорость, нужно, чтобы
это не требовало человеческих ресурсов.
● Профайлер – ваш лучший друг (vtune, valgrind, callgrind,
kcachegrind).
● Некоторые оптимизации не меняют результаты поиска,
некоторые – их немного ухудшают.
37. Оптимизации
● Сжатие инвертированного индекса
● Фильтрация
● Синтаксический колдунщик
● Pruning
● Fastrank
● Параллельное выполнение запроса
● Частичное выполнение MatrixNet'а
● Отсечение по времени выполнения запроса
● Использование SSEk инструкций процессора
● Кодогенерация
42. Сжатие инвертированного
индекса
● Алгоритмы компрессии списка позиций
хорошо работают для групп близких чисел.
● Хорошо бы, чтобы документы, содержащие
слово, шли подряд.
● Решение? Отсортировать по url ;)
43. Фильтрация
● Пример оптимизации: часто документ не
модет пройти фильтрацию, если в нем нет
некоторых тяжелых слов:
∑ w(qi )> Quorum(Q)⋅∑ w(qi )
q i ∈D q i ∈Q
Quorum(Q )=1−0.01(1/ √( Q −1))
∣ ∣
● Фактически внутри запроса появляются
слова, которые связаны AND.
● Когда мы итерируемся, если мы можем
быстро узнать, какой документ следует за
текущим, можно сразу идти на max(next_i)
44. Синтаксический колдунщик
● [скачать учебник философия для вузов платон
и демокрит pdf djvu torrent]
● Можно написать алгоритм, который
проанализирует синтаксическую
согласованность групп слов внутри запроса
● [“скачать учебник” “философия для вузов”
“платон и демокрит” “pdf” “djvu” “torrent”]
● Это уменьшит число найденных документов
● Сейчас эта оптимизация не используется, как
сильно ухудшающая качество поиска
45. Pruning
● Pruning – раннее отсечение запроса
● Если мы нашли 40000 документов, то мы обрываем поиск.
● Хорошо бы, чтобы хорошие документы были в самом начале.
● Пусть качество == вероятность показа
● Как же быть с эффективностью сжатия индекса?
● Разобьем на 16 групп по качеству, внутри каждой отсортируем по
URL'у.
● Требует итеративной архитектуры базового поиска. Один за другим
перебираем документы, один за другим подвергаем их фильтрации,
можем посчитать релевантность для одного документа. Может
прервать поиск после любого документа.
46. Fastrank
● Фичей очень много
● MatrixNet содержит множество деревьев.
● Что же делать?
● Нам нужно вернусть обычно лишь 10 лучших
результатов.
● Давайте выделим “легкие” фичи, подберем
“легкую” функцию ранжирования.
48. EarlyRank
● Та же идея, только будем оперировать
только наличием/отсутствием слов в
тексте/ссылках.
● Будем экономить на чтении и распаковке
позиций в инвертированном индексе.
49. Параллельное выполнение
запроса
● В типовом современном серверном процессоре 24 ядра.
● Исполнение одного запроса в несколько тредов не увеличиваем
емкость (количество запросов, которые можно выполнить за секунду).
И даже уменьшает (расходы на слияние).
● Зато позволяет увеличить латентность (среднее время выполнения
запроса).
● Можно распараллелить, разбив документы на несколько виртуальных
интервалов.
● Можно распараллелить лишь некоторые стадии (после fastrank'а).
● Легкие запросы нет смысла распараллеливать (можно оценить
“легкость” прямо во время выполнения запроса).
51. Частичое выполнение MatrixNet'а
● Результирующая ”формула” MatrixNet'а состоит из
тысяч деревьев, каждое из которых дает небольшой
вклад в итоговую релевантность. Нет малого числа
“очень важных” деревьев.
● Это позволяет применить привычный прием.
● Если базовому поиску нужно вернуть 10 лучших
документов, давайте для 300 документов после
FastRank посчитаем 1/10 деревьев MatrixNet. И лишь
для 30 лучших по “легкому MatrixNet” посчитаем
“полный” MatrixNet.
52. SSE и кодогенерация
● SSE позволяет выполнить одну и ту же
операцию (например, сложение, умножение)
с векторами из 4/8/16 чисел.
● Именно это и нужно.
Можно реорганизовать код
так, чтобы вычислять
формулы релевантности
для “пачек” из 4/8
документов.
53. Кодогенерация
● Многие данные (формулы) удобнее
превратить в код на этапе компиляции.
● Он должен помещаться в кэш комманд
процессора.
● Удобно использовать шаблоны C++, для
явных указаний, какой вариант чаще всего
будет использоваться в production (условные
дампы).
55. Отсечение по времени
выполнения запроса
● Хорошо бы, чтобы базовый поиск отвечал всегда за 200ms. Такое
ограничение может проистекать из требования, чтобы пользователь
всегда получал ответ за 1s.
● Просто ограничить время выполнения запроса на одной машине
нельзя? Почему?
● Давайте в процессе исполнения запроса накапливать счетчики:
● Число скипов
● Число обработанных позиций
● Число найденных документов
● ...
● Построим регрессионную формулу, предсказывающую время
выполнения запроса по внутренним статистикам.
● Если формула предсказывает, что мы работаем уже больше 200ms,
прервем поиск.