피처란 무엇인가?
"Feature는 관찰되는 현상의 개별적으로 측정 가능한 property 또는 관측된 현상에서의 charasteristic이다."(영문 위키)
사실 이런 식의 정의는 성의가 없다. 과학적이지 않다. 등식의 형태가 아니기 때문이다. 등식의 형태를 띠어야 언어의 수학적 정의라고 할 수 있다. 피처만으로 설명하려니 제대로 설명이 안 된다. 피처가 어느 맥락에서 사용되는지 정확히 말해야 한다. 즉 좌우변이 있어야 한다.
그러므로 피처는 '정의definition'의 관점으로 보아야 한다. 가령 "식사는 사람이 밥을 먹는 것이다."라고 말한다면 앞의 '식사'는 레이블이고, '사람이 밥을 먹는 것이다."는 피처들의 집합이다. '2=1+1'과 같은 등식을 이루어야 한다. 머신러닝에서도 정확히 이런 방법을 따른다. 통계학에서는 피처만 따로 떼어서 '설명변수'라고도 한다.
#
2012년 알렉스넷이 나오기 전까지 이미지 인식에서 사용되는 소위 피처를 만드는 것은 대부분 알고리즘이 아닌 연구자 들의 몫이었다. 어떤 알고리즘의 성능은 곧 연구자가 만드는 피처에 달려있었다고 보면 된다. 엔지니어드 피처다. 알렉스넷의 핵심은 이러한 피처 규정을 자동화하는 것이다. 이는 CNN의 역할이다.
그런데 자연어에서 피처가 뭐야?
자연어처리에서도 이러한 피처 만들기가 있다. 우리가 자주 접하는 형태소 분석기가 대표적인 피처 만들기 툴이다. 이것도 예전에는 인간이 피처 엔지니어링을 직접적으로 했었다. 잘 알려진 komoran이나 meccab이 이런 식이다. 최근에는 자연어처리 CNN을 이용한 khaiii를 카카오에서 내놓기도 했다. 이건 피처 엔지니어링을 인간이 직접 하지는 않는다. 대신에 지도학습을 통해서 형태소를 분석한다. 간접적으로 피처 엔지니어링을 한다고 말할 수도 있다.
보통은 형태소를 피처로 삼는다. 주어진 문제에 따라, 혹은 필요에 따라서는 단어를 피처로 삼을 수도 있다. 형태소의 사전적 의미는 "의미를 가지는 요소로서는 더 이상 분석할 수 없는 가장 작은 말의 단위(위키)"이다. 형태소를 피처로 삼는 이유는 그것이 다른 문장이나 데이터에서 반복되기 때문이다. 그리고 반복되어야 비교가 가능하다.(형태소를 피처로 삼는 것은 최신 철학으로 해석하면 좀 이상하지만, 일단은 넘어가자. 지금은 이 정도만 알아도 된다.)
그런데 CNN이 추출한 피처는 인간의 상식과는 좀 다르다. 인간은 이미지를 인식할 때, 다른 사람과 비교 가능한 공통점과 차이점을 피처로 삼는다. 가령 인간의 키나 몸무게 혹은 색, 형shape 그리고 이러한 요소의 정도적인 차이가 피처가 된다. 그런데 이미지 기계 인식에서는 왜 저런 이상한 모양을 피처로 삼을까? 아직 이미지 인식 기술이 그러한 형을 포착할 수 없기 때문이다. 일단은 피처를 많이 뽑아놓고 빈도나 비슷한 정도를 측정하여 레이블링에 사용한다.
언어에서는 이러한 피처를 특정 요소의 '빈도'로 측정하여 규정하는 경우가 많다. 그리고 이러한 피처들을 종합하여 레이블링 한다. 대표적인 예가 감정분석 혹은 의도분석이다. 근데 단순히 빈도로만 규정하면 잘 맞을까? 여기에도 문제가 있다. 피처의 조합 때문이다. 인간은 말을 할 때, 굳이 부정적인 뉘앙스를 쓰지 않더라도 비꼬는 식으로 말하여 의도를 은연중에 드러내는 방법을 사용한다. 이런 것은 단순히 피처로 분석하기에는 무리수가 있다. 물론 불가능하지는 않다. 말의 조합을 훈련시킬 수도 있기 때문이다.