오픈소스 검색엔진인 Elasticsearch 어떻게 저장하고 조회하는지 검색엔진의 개념에 대해서 간단히 살펴보고, Node.js 로 구현된 아주 간단한 예제를 소개합니다.
- 검색엔진과 Elasticsearch 소개
- Elasticsearch에서의 색인
- Elasticsearch에서의 조회
- Node.js 로 구현된 예제 소개
* 자바카페
자바카페 페이스북 : https://www.facebook.com/groups/javacafe/
자바카페 기술 블로그 : http://tech.javacafe.io/
Vectorized Processing in a Nutshell. (in Korean)
Presented by Hyoungjun Kim, Gruter CTO and Apache Tajo committer, at DeView 2014, Sep. 30 Seoul Korea.
오픈소스 검색엔진인 Elasticsearch 어떻게 저장하고 조회하는지 검색엔진의 개념에 대해서 간단히 살펴보고, Node.js 로 구현된 아주 간단한 예제를 소개합니다.
- 검색엔진과 Elasticsearch 소개
- Elasticsearch에서의 색인
- Elasticsearch에서의 조회
- Node.js 로 구현된 예제 소개
* 자바카페
자바카페 페이스북 : https://www.facebook.com/groups/javacafe/
자바카페 기술 블로그 : http://tech.javacafe.io/
Vectorized Processing in a Nutshell. (in Korean)
Presented by Hyoungjun Kim, Gruter CTO and Apache Tajo committer, at DeView 2014, Sep. 30 Seoul Korea.
The Data tech for AI based innovation(기업의 AI기반 혁신을 지원하는 데이터 기술)SANG WON PARK
2020년 데이터산업진흥원에서 발표한 자료를 일부 편집하여 공유함.
2020년 당시에 Data Platform에서 AI lifecycle를 효율적으로 지원하는 platform을 적극적으로 검토 및 설계하는 작업을 진행하였고, 이 때 검토 및 활용했던 기술들을 기업 관점에서 필요한 내용을 기준으로 정리하였다.
기업들은 전통적인 방식으로의 혁신에 한계를 체감하고 있으며, 최근 AI기반으로 성공적인 혁신(비즈니스 강화, 새로운 비즈니스로 전환 등)에 성공한 기업들을 빠르게 벤치마크 하고 있다.
이렇게 AI 기반으로 기업을 혁신하는 것은 고도화된 AI 모델의 도입으로 해결되지 않으며, 수많은 기술들의 최적화된 조합 및 활용이 필요하다.
이 자료에서는 그 중 AI모델에 핵심적인 데이터를 적시에, 고품질의 형태로, 빠르고 안정적으로 제공할 수 기술 트렌드를 소개한다.
전체 내용은
- AI기반 혁신이란?
- 혁신을 위해서는 어떤 점이 어려운가?
- 고품질 데이터 확보 기술
- 빠르게 AI 모델을 학습하는 기술
- 적시에 다양한 AI 모델을 비즈니스에 적용하는 기술
2020년 기준으로 작성된 자료라, 일부 기술 트렌드가 반영되지 않을 수 있으나 아직까지 많은 기업들이 고민하고 해결하고자 하는 영역이라 참고할 수 있을 것 같다.
이 내용을 기준으로 발표한 영상 링크 : https://www.youtube.com/watch?v=OVm4-uk59ZA
2. 개요
• 아파치 루씬의 점수 계산
• elasticsearch가 제공하는 스크립트 기능
• 다양한 언어를 사용한 자료 색인과 검색
• 반환되는 다큐먼트의 점수에 영향을 미치는 다양한 질의 사용
• 색인 과정에서 중요도 사용
• 의미가 동일한 단어
• 특정 다큐먼트가 반환된 이유 점검
• 점수 계산과 관련한 세부사항 점검
3. 1. Apache Lucene scoring
• 점수는 질의에 대한 다큐먼트의 관련성의 수치
• 기본 아파치 루씬의 점수 계산 알고리즘은 TD/IDF
(Term Frequency - Inverse Document Frequency)
• 다큐먼트가 동일 하더라도
질의를 할 때마다 계산 점수가 다르다
4. Score properties
• 다큐먼트 중요도(Document boost)
색인과정에서 다큐먼트에 주어진 중요도
• 필드 중요도(Field boost)
질의와 색인 과정에서 필드에 주어진 중요도
• 조정지수(Coord)
다큐먼트가 포함한 키워드 수에 기반한 값
• IDF(Inverse Document Frequency)
해당 키워드가 얼마나 드문지를 나타내는 값
• 길이기준(Length norm)
필드가 포함한 키워드 수에 기반. 필드가 길수록 작아진다.
• Term frequency
해당 키워드가 도큐먼트에 출현하는 빈도
5. 기본 점수 계산 공식
score(q,d)=coord(q,d)∗queryNorm(q)∗∑(tf (tind)∗idf (t)2 ∗boost(t)∗norm(t,d))
• 일치되는 키워드가 드물수록 다큐먼트 점수가 높아질 것이다.
• 다큐먼트 필드가 작을수록 다큐먼트 점수가 높아질 것이다.
• 필드에 대한 중요도가 높을수록 다큐먼트 점수가 높아질 것이다.
• ref : https://lucene.apache.org/core/4_0_0/core/org/apache/lucene/search/similarities/
TFIDFSimilarity.html
6. 2. Scripting 기능
• elasticsearch는 스크립트작성을 위해 여러 언어를 지원
• 기본적으로 MVEL사용
• javascript, python, groovy지원
7. 3. 다양한 언어로 내용 검색
• 다국어 언어 자료에 대한 다양한 분석기를 선택 가능
• 언어에 종류에 상관없는 어간 추출 분석 제공
8. 여러 언어를 처리하기
• 여러 언어를 처리하는 방법
언어별로 나눠 다른 타입에 다큐먼트를 저장
언어별로 분리된 색인에 다큐먼트를 저장
단일 다큐먼트의 여러 필드에 언여벌로 저장
9. 여러 언어를 감지하기
• 언어 감지 라이브러리
• 아파치 티카(Apache Tika)
• 랭귀지 디텍션(Language detection)
• 텍스트가 길어질수록 언어 감지가 정확해진다.
10. 중요도로 점수에 영향을 미치기
• 질의 중요도
• 질의 시 query와 field에 중요도 설정
• 색인 시점의 중요도
• 색인 시점에 중요도 설정
• 질의와 독립적인 중요도 값을 가짐
15. 중요도를 색인시점에 추가
{
"title" : "The Complete Sherlock Holmes",
"author" : "Arthur Conan Doyle",
"year": 1936
}
16. 중요도를 색인시점에 추가
{
"title" : "The Complete Sherlock Holmes",
"author" : {
"_value" : "Arthur Conan Doyle",
"_boost" : 10.0,
},
"year": 1936
}
17. 6. 의미가 동일한 단어
• 하나의 단어를 검색, 의미가 동일하거나 유사한 단어 매칭
• 예를들어 crime검색 시 ‘Crime and Punishment’
뿐만이 아니라, criminality나 abuse단어도
동의어로 설정해 검색시 적용
• 동의어가 바뀔 때마다 자료 재색인 필요
19. 허용되는 동의어 형식
• 명시적인 동의어
• criminality, wars => crime
• abuse => punishment
• 동의어 확장
• one, two, three => one, two, three
20. 7. 질의 해설 기능 이해
Analyze API(Testing Analyzers)
elasticsearch이 어떻게 tokenize하고
index에 어떻게 저장되는지 이해하기가 힘들다.
그래서 elasticsearch는 analyze API를 제공(디버깅용도)
참고 : https://www.elastic.co/guide/en/elasticsearch/guide/current/analysis-intro.html?q=_analy
22. 7. 질의 해설 기능 이해
Explain API
쿼리나 특정 도큐먼트가 어떻게 점수가 계산되어지는지
알아보는 기능 제공
참고 : https://www.elastic.co/guide/en/elasticsearch/reference/current/search-explain.html?q=_explain