#TIL
#NLP 파트 시작!!
🤔 단어라는 단위만 생각했을때 전처리시 고려해야할 점은 어떤 것이 있을까?
표제어(lemma): 여러 단어들이 공유하는 뿌리 단어
단어 형태(wordform): 같은 표제어를 공유하지만 다양한 형태를 가질 수 있음
Vocabulary
를 단어의 집합이라고 할 때, 이 Vocabulary
의 중복되지 않는 한 원소를 Type
| 문장 내에 나타나는 한 단어를 Token
이라는 단위로 구분한다.
하나의 말뭉치는 일반적으로 대용량 문서들의 집합이라고 볼 수 있다.
이런 말뭉치의 특성은 아래의 요소들에 따라 달라지게 된다.
말뭉치의 이러한 특성을 고려해서 NLP알고리즘을 적용해야한다.
정량화라고도 할 수 있으며, 모든 자연어 처리는 텍스트 정규화가 필요하다!
문서가 커지게 되면 corpus의 unique한 단어의 개수가 많아지게 된다.
즉, 파라미터 개수가 많아진다는 것!
빈도로 정렬해서 상위의 단어를 사용하는것이 전부 사용하는 것 보다는 효율적이다.
그러나 이렇게 단어 전처리를 하다보면 문제점이 발생한다.
문장부호들을 항상 무시할 수 없다
'AT&T, Ph.D'처럼 단어 안에 문장 부호들이 나타나는 경우가 있다.
화폐단위나, 메일 주소, URL 주소 등에서도 문장 부호 들을 볼 수 있다.
그렇기 때문에 문장부호가 단어의 의미를 명확하게 하는 경우는 제외시키지 않는것이 좋다!
접어의 존재
접어: 다른 단어에 붙어서 존재하는 형태 (ex, we're -> we are)
여러 개의 단어가 붙어있어야 의미가 있는 경우
(ex, New York, rock'n'roll)
한국어의 경우 토큰화가 복잡하다!
사실 한국어 뿐만이 아니라 아시아권 언어가 토큰화하기 쉽지 않다.
띄어쓰기가 잘 지켜지지 않고 띄어쓰기가 제대로 되었다 하더라도 한 어절은 하나 이상의 의미를 가진 단어들이 있을 수 있기 때문이다.
특히, 한국어는 접사, 어미, 조사 등도 존재하기 때문에 단어보다 작은 단위로 토큰화가 필요한 것을 볼 수 있다.
자립형태소: 명사, 대명사, 부사 등
의존형태소: 다른 형태소와 결합하여 사용되는 형태소. 접사, 어미, 조사 등
이 작은 단위로 토큰화 하는 것을 subword Tokenization
이라고 한다.
만약 학습데이터에서 보지 못했던 새로운 단어가 테스트 데이터에 나타난다면?
학습데이터에 { low, new, newer } 이 있다고 가정해 보자,
테스트데이터에는 { lower }가 있다.
그럼 여기서 우리는 단순히 학습데이터만 가지고는 테스트데이터를 처리할 수 없을것이다.
이걸 처리하기 위해서 -er, -est 같은 것을 분리해 낼 수 있다면 처리가 가능해질 것이다..!
이러한 subword Tokenization
알고리즘에는 3가지가 있다.
자세한 설명은 생략! (헷)
tokenization은 많이 사용하고 있다. 그러나 이후 정규화 과정에서는 가능하면 processing을 많이 하지 않으려고 하는 추세라고 한다!
(이미 많이 구현되어 나오기 때문에 그럴까?
📌 단어 정규화가 필요한 근본적인 이유!
단어들 사이의 유사성을 이해해야하기 때문이다!!⭐️⭐️⭐️
이번에 논문세미나 준비하면서 NLP 파트의 sequence to sequence 논문을 하게 되었는데, 보충하면서 공부 할 수 있을것같다!