DRAFT: Yandex Cloud Managed OpenSearch - part I

DRAFT: Yandex Cloud Managed OpenSearch - part I

Mikhail Khludnev

Привет. Сегодня говорим о Managed OpenSearch Yandex Cloud.

Некоторые вопросы использования Managed OpenSearch в Yandex Cloud

Managed Open Search в минимальной (неотказоустойчивой) конфигурации стоит около 15 тыс. руб. в месяц.

Для окружения разработки можно останавливать кластер Open Search на ночь чтобы немного сэкономить. Для этого можно создать два cron триггер вызывающих Cloud Function с payload “start” и ”stop”. Моя Cloud Function на Python использует REST API для остановки и запуска кластера. Функция может получать Bearer token от сервисного аккаунта под которым она запускается из контекста вызова через context.token["access_token"]}. Сервисному аккаунту функции нужна соответствующая роль для остановки, запуска кластера Open Search. Разумеется не стоит делать эту функцию публичной. Как вариант, Bash функция может использовать yc для запуска и остановки кластера. Не помню почему я остановился на Python. Оставляйте комментарии если тут нужны какие-то детали и пояснения.

<Код Start Stop Open Search Cloud Function.py>

Ещё можно сэкономить отказавшись от публично доступного узла DASHBOARD.Чаще всего в нём используют notebook-like клиента DevTools. Вместо этого запросы можно отправлять на DATA хосты (включив публичный доступ) с помощью curl-like клиента, например Insomnia или мой любимый. Не забудьте установить хороший пароль и создать пользователей с необходимыми полномочиями!

Кстати насчёт пароля, кажется более правильный способ подключения к кластеру уже предоставлен в UI консоли управления но ещё полностью не документирован. Ссылка ведёт на Metadata Hub. Напишу отдельный пост когда познакомлюсь с ним.

Лемматизатор

Из интересных плагинов в Yandex Cloud можно упомянуть yandex-lemmer предоставляющий морфологию русского языка, это позволяет искать нормальные начальные формы слов вместо посимвольного сравнения. Следующий пост, кстати будет посвящён альтернативному решению проблемы «поиска по смыслу, а не по буквам».

Тем не менее, если включить yandex lemmer plugin в настройках кластера, можно сравнить его с примитивным стеммером. Выберем наиболее трудные случаи для стеммера. Кстати, забыл мой любимый случай «фланцы–фланец», приберегу на следующий раз:

// тест классического алгоритмического стеммера
POST /_analyze?filter_path=tokens.token
{
 "tokenizer": "standard",
 "filter": [
  "russian_stem"
 ],
 "text": "бежит письмо пеку переоформляющих радио"
}
// ответ - неправильные стеммы в yaml формате
tokens:  
- token: "беж"  
- token: "письм"  
- token: "пек"   
- token: "переоформля"    
- token: "рад" 
// тест лемматизатора с морфологией 
POST /_analyze?filter_path=tokens.token
{
 "tokenizer": "standard",
 "filter": [
  "yandex_lemmer"
 ],
 "text": "бежит письмо пеку переоформляющих радио"
}
// ответ: морфологически правильные леммы
tokens:    
- token: "бежит"
- token: "бежать"
- token: "письмо"
- token: "пеку"
- token: "пек"   
- token: "печь"   
- token: "переоформляющих"  
- token: "переоформлять"   
- token: "радио"  

Как исключить исходные токены из потока, я найти не смог.

Давайте сравним этот лемматизатор с заслуженным морфологическим анализатором hunspell со словорями LibreOffice. К сожалению пока невозможно использовать hunspell в YC Managed OpenSearch, так как нет возможности скопировать файлы словарей. см. ниж. Зато он бесплатно доступен для тех кто пока не пользуется Managed OpenSearch. Если скопировать ru_RU.aff, ru_RU.dic в каталог config/hunspell/ru_RU на локально запущенном OpenSearch, получим отличное качество стемм (ну или лемм):

GET http://localhost:9200/_analyze?filter_path=tokens.token
Content-Type: application/json           
Accept: application/yaml
 
{
 "tokenizer": "standard",
 "filter": [ 
   {
         "type": "hunspell",
         "lang": "ru_RU"
   }
 ],
 "text": "бежит письмо пеку переоформляющих радио"
}
 
tokens:
- token: "бежать"
- token: "письмо"
- token: "пек"
- token: "печь"
- token: "переоформляющий"
- token: "радио"  

Срочная новость: Оказалось в Managed OpenSearch уже установлены и работают hunspell словари ru_RU, en_GB, может быть ещё какие-то есть, проверьте. 

Отдав должное заслуженным NLP методам в следующем посте перейдём к использованию языковых моделей.

Report Page