01.NLP란?
Sequence data
: 연속적으로 이루어진 데이터 , 순서나 위치에 따라 다른 의미를 가짐
NLP(Natural Language Processing = 자연어처리)
: Text 데이터를 분석하고 모델링하는 분야
- 자연어 이해 (NLU) : 주어진 텍스트의 의미 파악 (Text -> Meaning)
- 자연어 생성 (NLG) : 주어진 의미에 대한 자연스러운 Text 생성 (Meaning -> Text)
NLP Process
- Preprocessing : 진행하는 Tesk에 맞게 텍스트 데이터를 수집 및 전처리
- Tokenization : 데이터를 숫자로 표현하기위해 적당한 기준으로 자름
- Word Embedding : Tokenization된 데이터를 컴퓨터가 이해할수 있도록 숫자로 변형
- Modeling : Embedding된 데이터를 가지고 Modeling 진행
- NLP Tesk 종류 : 분류,품사태깅,챗봇 etc.
02.Preprocessing
Text Data
: 자연어로 구성된 문자, 문장, 문단 등의 정보를 포함하는 데이터 혀앹로 인간이 사용하는 언어로 표현되는 정보를 다룸
Text Data 특징
- 비정형 데이터
- 노이즈와 불규칙성 (오타,문법오류,구어체 등)
- 다양한 표현 (방언,유행어,전문용어 등)
- 애매한 의미 (동음이의어,다의어,비유,은유 등)
- 순서 정보
데이터 정제(Data Cleaning)
- 불필요한 문자 제거 (숫자,특수문자,이모티콘 등)
- 결측치 처리 : 누락된 데이터 처리
- 이상치 제거 (오타,문법오류,무작위문자열 등)
데이터 정규화(Data Nomalization)
- 소문자 면환
- 불용어 제거
📌 불용어 : 출현빈도가 높지만 문장의미 분석에 영향이 적은 단어 ex) "a","an","the","and" etc.
- Stemming(언어적 규칙기반) & Lemmatizaiton(사전기반 단어원형) : 단어의 형태를 기본형태로 변환
03.Conversion
용어 정의
- Corpus(말뭉치) : 자연어처리를 위해 수집된 텍스트 데이터의 집합
- Token : 텍스트를 나누는 최소단위로, NLP에서 처리할수 있는 의미 있는 단우
- Vocabulary(사전) : 특정 Corpus에서 사용되는 고유한 토큰들의 집합으로 Token들의 key와 value를 저장
Tokenization
- OOV(Out-of-Vocabulary) : 기존 vocabulary에 없는 토큰
- OOV문제를 해결하기위해 특수한 토큰(\<UNK> or [UNK])으로 대체 but, 성능저하의 문제
사전을 풍부하게 만들어 해결할수도 있지만 메모리 문제 발생
=> 그래서 사전을 효율적으로 만들기 위해 Tokenization 방법 선택이 중요
- 단어기반 Tokenization : 공백,구두점,특수문자 등으로 분리하여 개별 단어로 나누는 방식
- 서브워드기반 Tokenization : 의미있는 조각단위로 분리하는 방식
Padding
: 서로 다른 길이의 문장이나 시퀀스를 모델에 입력하기전 동일한 길이로 맞춰주는 전처리 과정
- Zero-Padding : 길이가 부족한 부분을 0으로 채움
- Constant Padding : 0대신 다른 상수값으로 부족한 부분을 채움
- Custom Padding : 특정 도메인이나 데이터셋에 따라 방식을 직접 정의
- Padding 주의사항
- Padding 값은 실제 데이터에 포함되지 않는 고유한 값으로 설정
- Padding이 추가된 위치를 모델이 인식할 수 있도록 별도의 마스크를 사용하기도 함
- 과도한 패딩은 학습에 부정적이므로 적절한 최대 시퀀스 길이 설정 필요
Word Embedding
: 단어를 고정된 크기의 벡터로 표현하는 것 (유사한 단어는 가깝게위치, 고차원의 데이터는 저차원으로 변환)
- One-hot Encoding
각 단어에 대해 고유한 인덱스를 부여하고, 단어의 수만큼 차원을 가진 벡터 생성, 해당단어의 인덱스위치값은 1,나머지 위치의 값은 0으로 설정
- 한계
- 사전의 크기가 클수록 벡터의 차원이 커지고 공간적 낭비 발생
- 단어간의 의미적 유사성이나 관계를 표현하지 못함
- 데부분의 값이 0인 희소벡터는 계산에 비효율적
- Word2Vec
분포가설에 기반한 분산 표현으로 텍스트 데이터의 단어들을 고젇된 길이의 벡터로 표현
📌분산표현 : 단어를 고차원이 아닌 저차원의 연속벡터로 표현하는 방식
-> 단어의 의미를 벡터 공간상에서 근접한 위치에 배치함으로써 단어간의 유사성 계산 가능
📌분포가설 : '단어의 의미는 주변 단어들에 의해 결정된다'라는 가설
-> 같은 문맥에서 자주 나타나는 단어들은 비슷한 의미를 가짐
- 특징
- 단어간의 유사성을 기하학적으로 표현 가능 ex) 왕 - 남자 + 여자 = 여왕
- 단어간의 관계를 잘 반영한 벡터를 생성하여, 이를 기반으로 한 연산 가능
- 단어의 다양한 의미를 구분하지 못하고, 하나의 벡터로 표현 ex) bank를 은행,강둑의 두가지 의미로 구분불가
- 학습 방법 :
- CBOW : 주변단어들을 이용해 타겟 단어를 예측하는 방식으로 학습
- Skip-gram : 타겟단어를 이용해 주변 단어들을 예측하는 방식으로 학습