Feature and Preprocessing for NLP
* 왜 한국어의 자연어처리가 어려운가?
* 왜 자연어처리의 개념을 잡기가 어려운가?
* Feature와 Label, Data는 무슨 관계인가?
* Feature란 무엇인가?
* 자연어처리에서는 무엇이 Feature인가?전처리는 NLP에서 Feature의 추출인데, 어떻게 하는가?
* 지도학습은 데이터를 레이블로 분류하는 문제이며,
“문제 : 레이블–(분류자)-데이터”와 같이 표현된다.
* 피처링과 모델링은 이러한 레이블과 데이터의 짝을 최적으로 분류할 수 있는 분류자를 찾는 과정이다.
* 검토 과정
1) 문제를 레이블에 따라 충분히 표현할 수 있는 데이터가 준비되어 있는가?
2) 레이블과 데이터를 잘 나눌 수 있는 분류자(피처링과 모델링)를 정했는가?
※ 과거의 비지도 학습(레이블 없이 학습)은 피처를 찾고자 데이터를 외부 기준없이 내부의 정보만으로 클러스터링 하는 것인데, 클러스터링을 하려고 해도 기준이 소용되므로, 실제로는 클러스터링이라고 할 수 없다. 즉, 비지도 학습은 실재하지 않는 관념일 뿐이다.(임시 개념이다)
1) 데이터를 구분하는 구분선을 Feature라고 한다.
2) 어떤 Feature가 중요한 지는 미리 정해져 있지 않으며 그때 그때 다르다.
3) 개와 고양이를 구분할 때와, 고양이 종류를 구분할 때 필요한 Feature는 다르다.
- 고양이 종류를 구분할 때, 고양이 눈깔 모양은 별 도움이 안 된다.
- 고양이 종류를 구분하기 위해서는 더 자세한 Feature가 필요하다.
4) 피처는 레이블에 대하여 상대적인 개념이며, 데이터를 레이블로 분류(짝짓기)할 때, 소요되는 기준선 또는 구분자이다.
단순하게 생각하면, Word vector를 쓰면 될 것 같고, Word vector를 자연어의 Feature Representation으로 정해서 모델에 넣자고 생각할 수 있지만, 실제로는 그렇게 간단하지 않다. Word vector로 설정할 피처는 어디에서 가지고 와야 할 지 알 수 없다.
※ Word vector는 Word2vec과 다르다.
* 머신러닝의 방법으로 데이터를 레이블로 분류하려면 Feature를 Vector의 방식으로 표현해야 한다. 피처의 개수(N)가 명확히 규정되어 있으면, 데이터를 N차원의 Vector로 표현 가능하다.
* 피처를 벡터화할 때 컴퓨터에서 처리하고자 사용되는 게 토큰이다. 그런데, 피처가 미리 규정되어 있지 않고 단지 데이터와 레이블만 주어진다면? > 문제(레이블-데이터) 중심의 자연어처리
* 자연어처리의 전처리는 머신러닝에서 피처를 1차로 정하는 것이다.
* 전처리 과정에서 등장하는 다음 용어들은 모두 피처를 설명하기 위해 만들어진 것이다. 다만, 각자가 사용되는 맥락에 따라서 비슷한 개념을 다르게 표현되었다.
- 단어(Word) : 인간이 데이터를 인지할 때 사용하는 피처 혹은 개념이다.
- 형태소(morpheme) : 단어에 대한 상대적인 개념으로, 합성어와 같이 여러 형태소로 이루어진 단어를 설명하고자 만들어졌다.
- 서브워드 : 형태소와 비슷한 개념으로 ‘어떤 워드가 다수의 서브워드(피처)로 이루어진 것’을 표현하고자 사용한다.
- 토큰 : 단어나 형태소를 컴퓨터에 입력하고자 컴퓨터 내부 공간에 할당한 개념.
- 엔티티(독립체) : 지극히 서양적인 사고에서 나온 것으로 더 이상 쪼갤 수 없다는 '원자적' 관점에서 파생된 개념이다. 사건이 아니라 사물 중심으로 만들어진 것으로, 미래엔 사라질 개념이다.
- 어절(띄어쓰기 단위) : 한국어와 영어는 띄어쓰기 개념이 다르다. 한국어는 단어의 문법적 기능을 표현하고자 조사를 사용하며 이를 단어에 붙여 쓰지만, 영어는 전치사를 따로 떼어 사용한다.
* 전처리란, 자연어를 token 단위로 쪼개서 입력 처리하는 것이다. 가령, RNN으로 문장을 처리한다고 할 때, RNN의 매 time step마다 입력되는 단위가 token이다. token이 될 수 있는 것은 word, subword, morpheme, character 등이다. 즉, 정하기 나름이다.
* 사전(Dictionary)은 token을 모아둔 것으로, 사전처리된 이후에는 전체 데이터 중에서 사전에 등록되어 있는 토큰만 인식하고 나머지는 무시한다
* 자연어처리에서 token을 무엇으로 규정하느냐는 곧 이미지처리에서 featur를 어떤 것으로 규정하느냐와 같은 문제이다.
* 컴퓨터와 대부분의 알고리즘을 영미인이 만들었기 때문에, 한국어에 그대로 적용할 수 없다.
* 영어와 달리, word가 어절(띄어쓰기 단위)이 아니며, 그래서 어절 단위로 token을 삼으면 어미와 조사의 변화 때문에 dictionary 구축에 문제가 생긴다.(물론 영어도 굴절어로 용언을 활용한다. 한국어보다는 덜하다.)
(이게 전부 다른 토큰이 된다.)
- 나/나는/내가/나를..
- 먹다/먹는다/먹으니..
* 영어는 선으로 나열하여 단어를 만들지만, 한국어는 면으로 쌓으며(한때 이런 이유로 연세대에서 한국어 표기법을 영어처럼 바꾸려는 시도를 한 적이 있었다고 한다), 조사를 부착하여 단어의 문법적 기능을 표현한다.
* 그래서 한국어는 단어의 기본형을 분리하는데 흔히 형태소 분석기가 동원하지만, 이러한 접근법에도 문제가 있다. 형태소 분석기가 피처 엔지니어링에 의해 만들어진 것이기 때문이다. 피처 엔지니어링으로 만들어진 형태소 분석기는 맥락을 반영하지 못하므로 그 사용에 한계가 있다. 영어의 형태소 분석기는 형태소를 분리하는 데만 사용되지만, 한국어 형태소 분석기는 알고리즘에 넣을 수 있는 형태로 가공하는 역할도 수행한다.
* 형태소는 언어를 사용함에 있어, 의미를 부여하는, 형태론적 수준에서 가장 작은 단위이다. 언어 내에서 의미를 내포하고 있는 가장 작은 단위이기 때문에, 더 이상 쪼개면 뜻을 잃어버린다.(나무위키)
* 형태소는 대개 모호성에 시달린다. 전처리 단계에서 형태소 분석이 맥락에 맞지 않으면 모델에 엉뚱한 의미를 가진 형태소가 입력될 수 있다.
* 일상에서 한국어는 띄어쓰기를 제대로 하기가 어렵다. 국립국어원에서 만든 기준조차 불명확하기 때문이다. 그래서 사람마다 띄어쓰기가 제각각이다. 이는 데이터의 불균일로 나타나며, 자연어처리의 자동화를 어렵게 하는 한 요인이 된다.
* 아직은 한국어처리를 완전하게 자동화할 적당한 알고리즘이 없으므로, 임시방편으로 기존의 형태소 분석기나 엔티티 추출을 사용할 수밖에 없다.
* 형태소 분석기의 기능 중 품사 태깅은 피처링적 측면과 모델링적 측면을 모두 가진다.
* 언어학자들이 자연어처리의 이론을 만들었으므로 그들의 이해 수준이 반영된 것이 품사태깅이다. 과거의 언어학은 비맥락이 중심이었으며, 이를 기초하는 품사태깅 또한 문제가 생긴다. 이는 현대 영어의 언어학에서도 큰 문제이며, 비맥락 관점으로는 종속성을 명확하게 표현하지 못하므로, 하나의 문장이라도 종속성이 여러가지로 표현되기도 한다. 또한 종속성 개념의 정의가 불분명하므로, 제대로 활용하지도 못한다.
* 지도학습이 반영된 머신러닝의 자연어처리 방법론은 상대적으로 맥락적이라고 할 수 있다.
* 형태소 분석은 원래 종속성 모델을 만들려고 하는 것이다. 텍스트데이터를 잘 분류한다는 것은 곧 종속성을 모델링 할 수 있다는 것이다. 분류문제에서 데이터 내부의 종속성을 알면, 데이터를 Attention이나 RNN을 통해 모델링 한 것과 같은 효과를 얻을 수 있다. 가령 Attention은 이전의 모델보다 더 잘 분류할 수 있다. 즉 Attention은 데이터 내부의 종속성을 이전의 RNN 등에 비해 더 정교하게 모델링할 수 있는 알고리즘이다.
* 그러므로 품사 태깅 그 자체는 큰 의미가 없다.
* 머신러닝의 방법론에서 embedding에 word2vec를 별도로 사용하는 방식은 과도기적 방식이라고 할 수 있다. 나중에는 피처링과 모델링이 통합될 것이기 때문이다.
* 조어 합성과 관용구 구성은 새로운 feature를 형성하는 것이다. 즉, Feature의 조합 규칙 자체가 새로운 Feature가 된다.
* 전처리는 1차 피처를, RNN과 같은 모델링 알고리즘은 2차 피처를 얻는 과정이라고도 말할 수 있다.
* 어떤 두 요소의 순서를 안다는 것(RNN처럼)은 그 둘이 하나로 묶여서 2차 피처를 이루는 것을 안다는 말이다. 즉, 1) 요소만으로도 피처라고 할 수 있으며, 2) 요소를 묶은 것(종속성)도 피처라고 할 수 있고, 이때 요소는 캐릭터, 단어, 구/절, 문장 모두일 수 있다.
* 사실 단어도 글자라는 피처를 조합한 것이다. 같은 원리로 구나 절도 단어로 이루어진 2차 피처가 되는 것이라고 말할 수 있다.
* 1차 피처(글자, 단어, 구/절 문장)의 조합 => 2차 피처(단어, 구/절, 문장, 도큐먼트)
* 레이블을 충분히 규정할 수 있는 수준
ex) 레이블이 단 2개일 때, 필요한 피처의 수는? > 1개
* 멀티레이블 문제(코모란 형태소 분석기 vs 띄어쓰기 엔진)
original data : “[ 보리 보리 ] [ 아트박스 POOM ( 패브릭 ) ] 쁘띠튤립티슈케이스_P014302172
1) 코모란(포스 태깅은 제거)
> data(input) : “[ 보리 보리 ] [ 아트 박스 POOM ( 패 브릭 ) ] 쁘띠튤립티슈케이스_P014302172”
> infered description:휴대폰-액세서리 / 휴대폰액세서리 / 휴대폰케이스 / none
> g-truth description:침구-커튼-카페트 / 생활소품-커버 / 티슈케이스 / none
2) 자체 개발 띄어쓰기 엔진(‘데이터 집합 내 출현 빈도가 높으면 엔티티로 규정’ 기반)
> data(input) : “[ 보리 보리 ] [ 아트박스 POOM ( 패브릭 ) ] 쁘띠 튤립 티슈 케이스_P014302172”
* 피처를 무조건 캐릭터 단위로 쪼갠 사례
: Zhang et. al. (2015) character level convolutional networks for text classification
- 형태소보다 더 잘게 쪼개면 내포하는 의미를 잃어버리게 된다.(정보손실 발생)
- 1D-CNN 등을 써서, 글자 단위 토큰으로부터 Feature 를 추출해 내는 방법도 사용한다. 충분한 코퍼스가 있다면 손실된 의미정보의 복원도 어느 정도 가능하다.
- 형태소 분석기 및 사전구축의 bias가 없다는 장점이 있지만, 큰 코퍼스의 variance를 극복하고 모든 의미패턴이 다 표현 가능한가 질문해 보아야 한다.
- 문제를 해결하기에 꼭 필요한 만큼의 데이터 커버리지가 확보되어야 한다.
* BPE(byte pair encoding) : 사전 구축 알고리즘의 한 예시
- 워드(합성어)를 서브워드로 분절하여 훈련, 새로운 합성어가 등장하더라도 기존 토큰을 이용하여 이를 표현 가능
* TF-IDF
- 문서에 등장하는 각 단어의 빈도를 측정하여, 가장 높은 수치를 보이는 단어를 가장 중요한 단어라고 규정하는 방식이다.
* 해결하려는 문제(레이블-데이터)에 따라 피처가 상대적으로 규정되는 것을 맥락에 따른 규정이라고 한다.
* 머신러닝은 “피처 중심(과거) > 문제 중심(미래)”으로 변화하고 있다.
* 딥러닝의 방법론으로 자연어를 처리를 자동화하는 것은 좀 더 맥락적이라고 할 수 있다.
* 과거엔 일반적으로 engineered 피처를 사용했지만, 이것이 자연어처리가 망한 가장 큰 요인이며, 미래에는 문제와 레이블, 데이터에 맞는 피처(구분자)가 상대적으로 규정되도록 완전한 end to end로 자동화 될 것이다.
* 현대의 자연어처리는 수동화에서 자동화로 가는 과도기적인 상황에 놓여있다. 할 수 없이 피처링을 일정하게 수동으로 처리해야 한다.
* 특히 한국어는 딥러닝의 방법론을 사용하면서도 여전히 형태소 분석기나 띄어쓰기 분석기 등을 상당히 사용해야 한다. 아직까지는 한국어를 컴퓨터 처리에 넣기 좋게 가공하는 알고리즘이 전무하기 때문이다. 그래서 한국어 자연어처리가 특히 어렵게 느껴진다. 서로 다른 방법론이 혼재하기 때문이다.
* 머신러닝 이미지처리가 극적으로 발전한 이유는 피처링을 자동화 했기 때문이다. 자연어처리도 마찬가지로 비슷한 양상으로 진행될 것이다. 전처리(피처링)는 word2vec과 같은 통계적 방식을 따르고, 이후엔 모델링 만으로 자연어처리가 완성될 것이다.