0%

Elasticsearch Suggest API

앞서 간단한 예제로 오타교정을 진행하면서 Suggest API의 다른 옵션에 대해 궁금했는데
관련 글이 없는 것 같아 다른 분들께 도움되고자 아래와 같이 해본 결과를 공유한다.

  • sort
    • score: score가 우선이다.
    • frequency: document frequency가 우선이다.
  • suggest_mode 설정
    • missing: 기본값으로 대상인덱스에 찾고자 하는 게 없을때만 제안한다.
    • popular: 요청값보다 document frequency가 높은 대상에 대해 제안한다.
    • always: 위의 조건과 관계없이 제안한다.

요청한 “체외” 보다 많은 document frequency를 가진 “체액” , “체모” 를 제안한다.

앞서 제안받은 “체액”으로 요청시는 대상인덱스에 3이상의 document freqncey를 가진 문서가 없어 제안내용이 없다.

이 외 다른 옵션도 많지만 설명이 잘 되어 있어서 생략하고
하면서 생긴 의문에 대해 자답을 남겨본다.

prefix_length를 기본값이 1이라서 자모음분해가 된 상태의 한글자라 나온 결과이다.
decompose가 안되는 완성형이 아닌 자모음 예를 들어 “체ㅇ”이라고 하면 자동완성이 되지 않는다

윈도우10 홈에디션 도커 설치

설치

1
docker run -p 9200:9200 -p 9600:9600 -e "discovery.type=single-node" amazon/opendistro-for-elasticsearch:1.7.0

도커 기본설정으로 VirtualBox의 자원이 충분치 않아 Elasticsearch가 실행되지 않았다.
그래서 메모리를 4G로 충분히 늘려줬다.

Docker Toolbox 설치, 메모리 확장, 디스크 확장, timezone변경

앞서 만든 Elasticsearch 컨테이너의 IP를 확인해서 입력하면 된다.

1
docker run -d -p 5601:5601  -e "ELASTICSEARCH_URL=https://172.17.0.2" -e "ELASTICSEARCH_HOSTS=https://172.17.0.2:9200 " --name opendistro_kibana amazon/opendistro-for-elasticsearch-kibana:1.7.0

kibana는 인증이 있어야 하지만 Elasticsearch를 단독으로 사용하고
인증이 귀찮다면 elasticsearch.yml에 기존설정을 그대로 두고 추가하면 된다.

1
opendistro_security.disabled: true

Disable security

cerebro 0.9.1을 사용/설치했는데 버그가 있는지 접속이 되지 않았다.
그래서 0.9.0으로 변경했더니 이상없이 사용할 수 있었다.

설치후 끝내기 아쉬워서 간단한 케이스를 수행해봤다.

엘라스틱서치 오타교정 API 만들어보기

위에서 받은 사전을 에디터에서 가능한 간단한 Transform을 통해 bulk form을 만들어준다.

문제유형 활성화 함수 오차 함수
이진 분류 시그모이드 nn.CrossEntropyLoss()
다중 클래스 분류 소프트맥스 nn.CrossEntropyLoss()
다중 레이블 분류 시그모이드 nn.CrossEntropyLoss()
회귀 없음 MSE
벡터 회귀 없음 MSE

DevOps , MLOps

DevOps도 글과 경험일부로만 접했는데 업무 중에 MLOps에 알아볼 시간이 생겨 정리한다
DevOps의 목표 중 지속적 통합, 테스트 자동화, 그리고 배포 자동화 있다.
DevOps팀은 컴파일, 빌드 그리고 배포(Deploy)를 돕는 자동화된 프로세스/툴들의 묶음인 Workflow/ToolChain 가지고 효율적인 활동을 이어간다.

Dev Workflow
ML Workflow

MLOps는 ML을 위한 DevOps이다.
MLOps의 목표에는 “모델의 실험 및 개발속도 향상” , “프로덕션 환경에 더 빠르게 모델 배포”,”재현가능한 모델을 통해 품질 및 일관성 보장” 등이 있다.

더 읽어보기 »

올 해 3월 13일 AWS에서 오픈소스프로젝트인 Elasticsearch에서 Open Distro for Elasticsearch라는 새로운 오픈소스 프로젝트를 만들었다.
오픈 소스가 지속되기 위한 노력 – Open Distro for Elasticsearch
Open Distro for Elasticsearch 오픈 소스 프로젝트 출시

Elastic은 매우 복잡해졌다. 모든 기능이 오픈이 아닌 점은 이해하나 상용기능을 구분하는데는 매우 헷갈린다.
Elastic 라이센스 체계

AWS가 말하는 Elasticsearch가 오픈소스지만 상용코드가 혼재가 되어 있어 라이센스 구분이 매우 어려운 점은 사실이고
코드 관리에 대한 독점도 사실이다.
AWS는 말한 바를 실천에 옮겨 오픈소스 프로젝트로서 제대로 동작하고 활용할 수 있게 Fork하였고
그것이 바로 Open Distro for Elasticsearch이다.

Elastic의 창업자인 Shay Banon이 이 행동에 대해서 글을 남겼다.
자신들의 결과물을 오픈하였고 여전히 그렇게 하고 있다. AWS가 말하는 독점. 그것은 반대로 품질을 지키기 위한 노력이라고 말이다..
이 부분도 지금까지 Elastic을 봐온 나로서 그 순수한 마음을 의심치 않는다.
“오픈” 배포판, 오픈 소스, 그리고 회사 설립에 관하여

무료로 이 결과물의 사용할 수 있다는 점을 예찬하는 것은 아니다.
당연히 결과물은 그에 대한 정당한 댓가가 있어야 한다.
하지만 오픈소스 프로젝트로만 보자면 독점적인 코드관리로 답답한 면이 있던 건 사실이다.

Open Distro for Elasticsearch가 끊임없이 발전하는 프로젝트로 발생하는 많은 기여로
얼마나 풍부한 기능을 제공할지 앞으로 기대가 된다.

제공하는 기능을 사용해보면서 리뷰시리즈를 작성해봐야겠다.
물론 Elasticsearch또한 새롭게 출시되는 기능도 눈여겨봐야겠다.

기능 비교

Elasticsearch와 Open Disto for Elasticsearch의 버전 호환

https://teachablemachine.withgoogle.com/

구글은 새로운 세계를 만들어가는 것 같다.
성인이 아니라 아이들도 스크래치와 이 Teachable Machine을 통해
AI를 쉽게 접근 할 수 있다.

놀랍고 또 놀랍다.
나도 해봤는데 순식간에 Vision AI를 다룰수 있고 웹앱 또한 순식간에 만들 수 있다.n

개발하고 있는 서비스 운영을 위해 이중화 구성을 해본 경험을 적어본다
서비스에서는 비동기 처리를 위해 celery + rabbitmq , 영속성 처리를 위해 MariaDB를 사용하고 있다.
역할은 celery는 Task Queue, rabbitmq는 celery의 message broker로 사용한다.

Celery의 HA를 위해서는 rabbitmq를 clustering, mirroring을 설정하고
HA Proxy를 이용해서 단일 진입점 설정이 필요하다.
여기서는 rabbitmq의 설치부터 clustering+mirroring을 진행하겠다.

그리고 데이터 영속성을 위해 MariaDB를 사용하는데
설치부터 Replication을 위한 Master/Slave설정. Failover를 위한 MHA설정을 각각 진행하겠다.

진행한 단계만 명세를 하고 상세내용은 시간이 생기는 대로 작성하겠다.
기억엔 순서가 중요하니까 말이다

RabbitMQ

  1. erlang 설치
  2. rabbitmq 설치(https://www.rabbitmq.com/which-erlang.html)
  3. erlang cookie 일치
  4. node 설정
  5. clustering 구성
  6. mirroring구성

    참조

MariaDB

구성 환경 : Ubuntu 16.04 , VIP 1ea

  1. MariaDB설치
  2. MariaDB설정
  3. MariaDB Replication설정
  4. MHA Node설치
  5. MHA Master설치
  6. MHA Master에서 각서버 접근을 위해 SSH Key 발행
    6-1. MHA Master랑 DB Master가 같은 경우 자기 자신도 추가
  7. 방화벽 및 Hosts 확인
  8. MHA Master설정
  9. 기본 제공하는 Script에서 Customizing : VIP를 올리고 바인딩하는 내용 추가
    9-1. master_ip_change
    9-2. master_ip_failover
    ssh로 sudo 명령어 보낼시 파이프(|)를 통해 비번 입력을 리다이렉션 할 수 있다.(echo ‘PASSWORD’ | ssh -tt “sudo ifconfig”)
  10. MHA에서 제공하는 체크 테스트(SSH, Replication,Running)
  11. Failover 시나리오 실행으로 테스트

참조

Custom Analysis Plugin을 개발하고 Custom Ingest Plugin도 개발한 내용을 공유한다

참고를 했던 사이트는 아래와 같다.

전체적인 내용은 공식 블로그에서 확인을 하였고
https://www.elastic.co/kr/blog/writing-your-own-ingest-processor-for-elasticsearch

블로그 내용을 확인하면 python에서 Scaffolds를 잡는 용도로 쓰는 cookiecutter라는 걸 사용하는데

cookiecutter코드 내부에서 git으로 소스코드를 가져오는 부분 에러가 발생 해서 성공하질 못했다.

그리고 Build Tool을 Gradle로 사용하는 것이 능숙하지 않아서 Maven으로 작업한 블로그를 찾아 진행했다
http://david.pilato.fr/blog/2016/07/28/creating-an-ingest-plugin-for-elasticsearch/

위 블로그는 아주 친절하게 테스트 코드 부터 배포하여 Plugin으로 사용하는 예제까지 제공하여

따라하며 완성할 수 있었다.

그리고 이 전 Custom Analysis Plugin에서 만든 Scaffolds(plugin.xml등) 를 활용하니 순식간에 만들어버렸다.

다음 내용으로 준비 중인 것은 Custom Similarity Plugin개발 내용이다.

그리고 이 후 계획은 Elasticsearch를 Intellij IDE로 로컬에서 띄워

지금까지 개발한 Plugin들의 동작을 확인하는 내용으로 준비할 예정이다.