본문 바로가기
루모의 일상사

ICU tokenizer

by xenophilius 2019.04.03

fasttext는 한국어에 대해 ICU 토크나이저를 사용 하고 있다고 합니다.

 

We used the Stanfordword segmenter (Chang et al., 2008) for Chinese, Mecab (Kudo, 2005) for Japanese and UETsegmenter (Nguyen and Le, 2016) for Vietnamese. For languages written using the Latin, Cyrillic, Hebrew or Greek scripts, we used the tokenizer from the Europarl preprocessing tools (Koehn, 2005). For the remaining languages, we used the ICU tokenizer. https://arxiv.org/abs/1802.06893

ICU 토크나이저가 무엇인지 몰라서 좀 더 찾아보니 엘라스틱 서치에 아래와 같은 설명이 있습니다. 제가 임의로 번역 해 본 것입니다.

 


icu_tokenizer는 standard 토크나이저와 같은 유니코드 텍스트 세그먼테이션 알고리즘을 사용합니다. 그러나 아시아권 언어에 더 낫습니다. 사전 기반(dictionary-based) 접근으로 태국어, 라오스어, 중국어, 일본어 그리고 한국어를 분석합니다. 

 

standard와 icu 토크나이저의 차이를 한 번 예를들어 봅시다. “Hello. I am from Bangkok.”을 태국어로 "สวัสดี ผมมาจากกรุงเทพฯ”라고 하는데요 이걸 standard 토크나이저로 분리 해 보면 아래와 같습니다.

GET /_analyze?tokenizer=standard

สวัสดี ผมมาจากกรุงเทพฯ

 

Standard 토크나이저는 두 개의 토큰을 만들어 냈습니다. 만약에 “I am from Bankok”이라는 문장 전체를 검색하고 싶을 때는 이런 결과도 괜찮습니다만 “Bangkok”을 검색하고 싶을 때는 별로입니다.

GET /_analyze?tokenizer=icu_tokenizer

สวัสดี ผมมาจากกรุงเทพฯ

 

반면 Icu 토크나이저는 각각의 단어로 분리 해 냅니다. (สวัสดี, ผม, มา, จาก, กรุงเทพฯ) 이렇게 하면 검색하기가 더 쉬워지죠.

 

또 standard 토크나이저는 중국어나 일본어를 “over-tokenizes”하는 경향이 있습니다. 예컨대 를 토크나이징 하면 하나 하나 토크나이징 해서 3개의 토큰을 만듭니다. 실제로 는 하나의 단어인데 말입니다.

 

또 다른 ICU 토크나이저와 standard 토크나이저의 차이가 있습니다. Standard 토크나이저는 βeta

를 β와 eta로 분리 해 버리지만 ICU는 그렇지 않습니다. 그냥 하나의 토큰인 βeta로 내놓습니다.

 

https://www.elastic.co/guide/en/elasticsearch/guide/current/icu-tokenizer.html


 

엘라스틱의 문서를 간략하게 번역 해 본 것입니다. 아무튼 ICU 토크나이저는 아시아권 언어를 토크나이징 하는데 쓰인다는 것 같군요... 그러나 실제로 fasttext에 한국어 문장을 학습을 시켜보면 제대로 토크나이징 하는것 같지 않습니다. 이 점은 다음 포스트에 다뤄 보도록 하겠습니다.

댓글0