추천 알고리즘을 설계하기 전에 관련 개념을 짚고 넘어가고자 한다. 바로 주먹구구식으로 구현하려 하니 이해도 안되고
내가 원하는 방식으로 구현할 수 있는지도 모르겠다. 그래서 딥러닝을 이용한 자연어 처리 입문 이라는 책을 참조하여 책 내용을 여기다 정리하면서 복습하고 코딩을 하려한다.
토큰화(Tokenization)
크롤링으로 수집한 텍스트 데이터가 전처리 되지 않은 상태라면 해당 데이터를 용도에 맞게 토큰화, 정제, 정규화 하는 일을 한다.
단어 토큰화
토큰화란 주어진 코퍼스(=말뭉치)에서 토큰이라 불리는 단위로 나누는 작업이다. 토큰의 뜻은 보통 의미있는 단어를
의미한다.
의미있는 단어란 단순히 단어별로 나누는 것이 아닌 특수문자, 숫자등을 고려해서 하나의 단어로 보는 것이다.
그게 단어별로 나누는거랑 같은 의미 아니냐? 라고 반문할 수 있는데 사람이 보는 단어와 그 단어를 컴퓨터가 의미를
알아보게 설계해야하는 입장은 다르기 때문이다.
예를들어 "안녕하세요. 저는 서울에서 지내고 있는 김가영입니다." 라는 코퍼스가 있다. 단어를 나눌 때 가장 쉽게 생각하는것이 특수문자와 띄워쓰기를 없애고 나온 결과물을 저장하는 것이다. 이 예제의 경우
안녕하세요/저는/서울에서/지내고/있는/김가영입니다/ 로 잘 들어간다. 하지만 예외가 있다.
영어의 '(아포스트로피)나 날짜나 시간을 나타낼 때 /를 사용하는 등 특수문자와 일반문자가 합쳐야 의미가 생기는 케이스도 많다. 그렇기 때문에 단순히 단어별로 나누었다면 토큰이라는 용어를 쓰지 않았을 것이다.
즉 토큰 = 의미있는 단위 이다. 앞서 언급한 아포스트로피의 경우 도구들 마다 보는 관점이 다르다.
그래서 토큰화 표준방법이 여러개 있고 그중 Penn Treebank Tokenization 규칙은 don't의 경우 do/n't를 로 나눈다.
문장 토큰화(Sentence Tokenization)
토큰의 단위가 문장일 때는 어떻게 분류할까? 직관적으로 생각해보면 ?, !, .을 기준으로 잘라낼 수 있다고 생각한다.
하지만 예외가 있다. 문장에 IP주소나 email주소처럼 중간에 .이 있는 문장이라면 어떻게 될까?
tpdud@naver.com으로 메일좀 보내줘. 그리고 밥 먹으러 가자.
라고 한다면 원래라면 메일좀보내줘까지 한문장 그리고~ 한문장으로 총 2문장이 돼야하지만 .으로 나눌경우
naver에서 잘려서 총 3문장이 된다.
하지만 이 모든 고려사항을 우리가 고민할 필요는 없다. 대부분 만들어져 있기 때문이다.
영어의 경우 NLTK의 sent_tokenize를 import하면 되고 한국어의 경우 kss를 import하면 된다. kss의 경우
cython과 비주얼 스튜디오 c++으 설치해야한다.
형태소
한국어로 자연어 처리를 하기 위해선 형태소를 반드시 알아야 한다.
형태소란 뜻을 가진 가장 작은 말의 단위이며 자립 형태소와 의존 형태소 두 가지가 존재한다.
"나는 양치질을 하고있다."
자립:나, 양치질
의존:는, 을, 하,고,있,다
자립은 어미, 조사와 상관없이 혼자 쓸 수 있는 형태소이며 그 자체가 단어이다.
의존은 다른 형태소와 결합하여 사용된다.
'IT > 도서추천 알고리즘' 카테고리의 다른 글
텍스트 전처리: 2.정제와 정규화 (0) | 2020.08.06 |
---|