일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- kbpf
- 폴댄스
- Linear Regression
- 독서
- 파이썬과 케라스로 배우는 강화학습
- 리처드소처
- MB
- CS224N
- 파이썬
- Richard Socher
- NLP
- 인공지능
- 자연어처리
- 딥뉴럴넷
- 벨만 방정식
- 페미니즘
- 머신러닝
- model free
- 취미
- 다이내믹 프로그래밍
- 강화학습
- 애쉬브라운
- ai
- Gradient descent
- MDP
- tensorflow
- 양성평등
- cost function
- 행복
- 딥러닝
- Today
- Total
Ordinary day
Elastic Search & mecab-ko 본문
Elastic Search (엘라스틱 서치)
- 루씬 기반의 검색서버
- 기본적으로 토크나이저가 공백이나 특수문자만으로 단어들을 분리하기 때문에,
"아버지가 방에 들어가신다" 라는 문장을 검색할 때는 검색어로 '아버지' 가 아니라 '아버지가' 여야만 검색 결과를 얻을 수 있다. - 따라서 한글 검색 관련해서는 형태소 분석과 같은 지원이 필요하다.
- 데이터 구조 비교
관계 DB 엘라스틱 서치 Database Index Table Type Row Document Column Field Schema Mapping
- 기본 문법
데이터 입력
curl -XPUT host:port/인덱스/타입/id 'json 형태 데이터'
데이터 수정 - 동일한 인텍스, 타입, id로 수정
curl -XPUT host:port/인덱스/타입/id 'json 형태 데이터'
데이터 확인
curl -XGET host:port/인덱스/타입/id
데이터 삭제
curl -XDELETE host:port/인덱스/타입/id
데이터 검색
curl -XGET host:port/인덱스/타입/id_search?q=검색어
도커에서 엘라스틱서치와 한글 형태소 분석기 설치
위에서 언급했던 검색 관련 문제를 해결하기 위해서는 n-gram 분석이나, 형태소 분석과 같은 인덱스를 추가로 지원해야한다.
여기에서는 은전한잎(mecab-ko)를 설치하여 사용할 것이다.
한꺼번에 설치할 수 있는 도커
docker run -d -p 9200:9200 -p 9300:9300 n42corp/elasticsearch:2.3.1.0
설치 후 빌드
docker build -t n42corp/elasticsearch:2.3.1.0 .
기본 한글 분석기로 데이터 확인
기본 분석기로 문장을 분석해보면 공백으로 각 단어가 나눠지는 것을 볼 수 있다.
데이터 입력 후 검색 해보기 - 형태소 분석기가 적용되어 있지 않은 인덱스
우선 임의로 인덱스에 테스트를 할 데이터를 넣어서 검색을 해보자.
데이터가 들어가있는 것을 확인한 후에 '아버지'라는 단어로 검색을 하게 되면 찾은 데이터가 없는 것을 볼 수 있다.
반면 '아버지가' 라는 단어로 검색을 하면 '아버지가 방에 들어가신다'라는 문장이 검색된다.
형태소 분석기가 적용된 인덱스에서 검색 - mecab_ko_standard_tokenizer가 적용된 인덱스를 생성
curl -XPUT http://192.168.99.100:9200/min_korean/ -d '{
"settings" : {
"index":{
"analysis":{
"analyzer":{
"korean":{
"type":"custom",
"tokenizer":"mecab_ko_standard_tokenizer"
}
}
}
}
},
"mappings": {
"text" : {
"properties" : {
"text" : {
"type" : "string",
"analyzer": "korean"
}
}
}
}
}'
형태소 분석기가 정상적으로 작동하는 지 확인하기 위해 우선 기본 분석기를 통해서 문장을 분석해보기
아래 그림을 보면 "아버지가 방에 들어가신다" 라는 문장에서 '아버지'와 '방' 이 명사로 추출된 것을 확인할 수 있다.
같은 방식으로 데이터를 넣고 '아버지'라는 단어로 검색을 해보면 아래와 같이 '아버지가 방에 들어가신다'라는 문장이 검색되는 것을 확인할 수 있다.
동의어 필터 추가하기
사용자 사전과 동의어 필터를 추가하려면 직접 도커파일을 만들면 된다.
도커파일을 만들고, 정의된 사전과 필터를 추가한 후에 위와 동일한 방식으로 빌드한 후 실행하면 된다.
이후, 임시 인덱스를 만들고, 필터를 추가하면 된다.
확인해보면 'samsung' 이라는 단어를 분석하면 결과값은 '삼성' 이라는 동의어가 출력되는 것을 확인할 수 있다.
'Study > NLP' 카테고리의 다른 글
2. Word Vector (0) | 2017.08.14 |
---|---|
1. Introduction (0) | 2017.08.06 |