Информационный поиск — различия между версиями
M8hew (обсуждение | вклад) |
M8hew (обсуждение | вклад) |
||
| Строка 21: | Строка 21: | ||
Реализуйте LSM-дерево со строковыми ключами (levelled / tiered — на выбор). Дисковые компоненты должны поддерживать бинарный или иной логарифмический поиск без полной выгрузки в RAM. Обязательны Блум-фильтры для компонент. | Реализуйте LSM-дерево со строковыми ключами (levelled / tiered — на выбор). Дисковые компоненты должны поддерживать бинарный или иной логарифмический поиск без полной выгрузки в RAM. Обязательны Блум-фильтры для компонент. | ||
Напишите бенчмарки для вставки, чтения по ключу, чтения короткого диапазона. | Напишите бенчмарки для вставки, чтения по ключу, чтения короткого диапазона. | ||
| + | |||
| + | ''Deadline: 18 октября'' | ||
'''Задание 2''' | '''Задание 2''' | ||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
Постройте обратный индекс для набора текстовых документов, используя Roaring bitmaps. | Постройте обратный индекс для набора текстовых документов, используя Roaring bitmaps. | ||
| Строка 45: | Строка 33: | ||
| − | '''Задание | + | '''Задание 3''' |
Взяв за основу индекс из задания 4: | Взяв за основу индекс из задания 4: | ||
| Строка 51: | Строка 39: | ||
# Реализовать поиск по wildcard с помощью k-gram | # Реализовать поиск по wildcard с помощью k-gram | ||
| − | + | '''Задание 4''' | |
| − | '''Задание | + | |
''Языки: С, С++, Go, Python'' | ''Языки: С, С++, Go, Python'' | ||
| Строка 62: | Строка 49: | ||
#* появившихся в диапазоне дат | #* появившихся в диапазоне дат | ||
| − | + | '''Задание 5''' | |
| − | '''Задание | + | |
''Языки: С, С++, Go, Python'' | ''Языки: С, С++, Go, Python'' | ||
| Строка 69: | Строка 55: | ||
Построить позиционный индекс, что позволит выполнять фразовый поиск по документам. | Построить позиционный индекс, что позволит выполнять фразовый поиск по документам. | ||
| + | '''Задание 6''' | ||
| − | '''Задание | + | ''Языки: Go, Python'' |
| + | |||
| + | Реализуйте FM-index для поиска по подстроке и тесты к нему. | ||
| + | |||
| + | '''Задание 7''' | ||
''Языки: С, С++, Go, Python'' | ''Языки: С, С++, Go, Python'' | ||
| Строка 79: | Строка 70: | ||
# реализовать эффективное Inexact top K ранжирование | # реализовать эффективное Inexact top K ранжирование | ||
| + | '''Задание 8''' | ||
| + | |||
| + | ''Языки: C, C++, Go'' | ||
| + | |||
| + | Реализуйте k-d tree и бенчмарк для поиска точки в k-мерном пространстве. Покажите, как меняется скорость поиска с ростом параметра k. | ||
'''Задание 9''' | '''Задание 9''' | ||
Версия 20:51, 29 октября 2024
Основы информационного поиска
Осенний курс по выбору для студентов 4 курсов ПМИ ФКН ВШЭ.
Лектор: Алексей Неганов aka @bokareis.
Чат курса TBD
Записи пар TBD
Формула оценки
TBD
Домашние задания
Задание 1
Языки: C, C++, Go
Реализуйте LSM-дерево со строковыми ключами (levelled / tiered — на выбор). Дисковые компоненты должны поддерживать бинарный или иной логарифмический поиск без полной выгрузки в RAM. Обязательны Блум-фильтры для компонент. Напишите бенчмарки для вставки, чтения по ключу, чтения короткого диапазона.
Deadline: 18 октября
Задание 2
Постройте обратный индекс для набора текстовых документов, используя Roaring bitmaps.
- Построить индекс (хотя бы в памяти), что позволит выдавать документы, для которых верна булева формула о вхождении слов
- Для слов применить стеммирование / лемматизацию / очистку от стоп-слов
- Реализовать индекс как LSM-подобное дерево
Задание 3
Взяв за основу индекс из задания 4:
- Реализовать поиск по префиксу
- Реализовать поиск по wildcard с помощью k-gram
Задание 4
Языки: С, С++, Go, Python
Взяв за основу индекс из задания 4:
- Для каждого документа задать дополнительно атрибут даты и искать по диапазону дат, а так же по булевым формулам, содержащим условия на диапазоны дат
- Пусть у документа присутствуют две даты: начала и окончания жизни (последняя может быть не задана). Реализовать поиск документов,
- валидных в диапазоне дат
- появившихся в диапазоне дат
Задание 5
Языки: С, С++, Go, Python
Построить позиционный индекс, что позволит выполнять фразовый поиск по документам.
Задание 6
Языки: Go, Python
Реализуйте FM-index для поиска по подстроке и тесты к нему.
Задание 7
Языки: С, С++, Go, Python
Построить индекс, что позволит давать ранжированные результаты
- по TF-IDF
- согласно модели векторного пространства
- реализовать эффективное Inexact top K ранжирование
Задание 8
Языки: C, C++, Go
Реализуйте k-d tree и бенчмарк для поиска точки в k-мерном пространстве. Покажите, как меняется скорость поиска с ростом параметра k.
Задание 9
Языки: С++, Python
Построить индекс для dense vector (similarity) search, используя BERT для получения эмбеддингов
- используя Faiss для поиска
- понижая размерность самостоятельно (randomized PCA, LSH, кластеризация, etc)
Литература
TBD