-
NLP01. 텍스트 데이터 다루기NLP 2021. 12. 11. 17:35
NLP01. 텍스트 데이터 다루기
01-01. 들어가며
01-02. 전처리 : 자연어의 노이즈 제거
01-03. 분산표현 : 바나나와 사과의 관계를 어떻게 표현할까?
01-04. 토큰화 : 그녀는? 그녀+는?
01-05. 단어의 조각들, Wordpiece Model
01-06. 토큰에게 의미를 부여하기
01-07. 마무리
============================
01-01. 들어가며
[1] 형식언어 이론상 분류
- 문맥의존 문법(Context-sensitive Grammar) : 자연어
- 문맥자유 문법(Context-free Grammar) : 프로그래밍 언어
=> 기계적으로 언어를 해석하는 파서를 만들었을 때 해석상 의미의 모호성이 생기지 않으려면, 문맥자유 문법을 따르는 언어여야 모호성이 없이 파싱트리를 만들 수 있다.
01-02. 전처리 : 자연어의 노이즈 제거
[1] 채팅에서의 노이즈 유형
① 불완전한 문장으로 구성된 대화의 경우
② 문장의 길이가 너무 길거나 짧은 경우
③ 채팅 데이터에서 문장 시간 간격이 너무 긴 경우
④ 바람직하지 않은 문장의 사용
[2] 영어 자연어 노이즈 유형
① 문장부호
② 대소문자
③ 특수문자
01-03. 분산표현 : 바나나와 사과의 관계를 어떻게 표현할까?
[1] 희소표현(sparse representation)
- 고차원이 될 수록 희소 표현이 됨
- 단점 : 메모리와 연산량 낭비, 코사인 유사도 계산 안됨.
[2] 코사인 유사도(cosine similarity)
- 코사인 유사도는 두 벡터 간의 코사인 각도를 이용하여 구할 수 있는 두 벡터의 유사도를 의미합니다. 두 벡터의 방향이 완전히 동일한 경우에는 1의 값을 가지며, 90°의 각을 이루면 0, 180°로 반대의 방향을 가지면 -1의 값을 갖게 됩니다. 즉, 결국 코사인 유사도는 -1 이상 1 이하의 값을 가지며 값이 1에 가까울수록 유사도가 높다고 판단할 수 있습니다. 이를 직관적으로 이해하면 두 벡터가 가리키는 방향이 얼마나 유사한가를 의미합니다.
[3] 분산 표현(distributed representation)
- 희소 표현처럼 속성값을 임의로 지정해 주는 것이 아니라, 수많은 텍스트 데이터를 읽어가며 적합한 값을 찾아갈 것입니다. 적절히 훈련된 분산 표현 모델을 통해 우리는 단어 간의 의미 유사도를 계산하거나, 이를 feature로 삼아 복잡한 자연어처리 모델을 훈련시킬 수 있게 됩니다.
01-04. 토큰화 : 그녀는? 그녀+는?
[1] 공백 기반 토큰화
- 가장 기본적인 토큰화 방법으로, 단어 단위로 빈공간을 주는 방식이다.
[2] 형태소 기반 토큰화
- 한국어와 같이 교착어, 조사 중심의 언어에 사용되는 토큰방식이다.
- 형태소 : 뜻을 가진 가장 작은 말의 단위
- 종류 : KoNLPy, khaiii
- mecab : 100만 문장의 데이터를 형태소 분석할 수 있고, 속도측면에서 가장 뛰어남
- KOMORAN + (mecab, 꼬꼬마) : 시간이 걸려도 정확도가 중요한 경우 사용
[3] 사전에 없는 단어의 문제
- OOV(Out-Of-Vaocabulary) 문제 : 토큰화하는 과정에서 한정된 단어만 취급하게 되어 <unk>으로 처리된 단어는 의미를 상실함.
01-05. 단어의 조각들, Wordpiece Model
[1] BPE(Byte Pair Encoding)
- 1994년 데이터 압축을 위해 고안.
=> 데이터에서 가장 많이 등장하는 바이트 쌍(byte pair)을 새로운 단어로 치환하여
압축하는 작업을 반복하는 방식
- 2015년, 토큰화에 적용하자고 제안
=> 모든 단어를 문자(바이트)들의 집합으로 취급하여 자주 등장하는 문자 쌍을 합치면,
접두어나 접미어의 의미를 캐치할 수 있고,
처음 등장하는 단어는 문자(알파벳)들의 조합으로 나타내어 OOV문제를 해결할 수 있다.
=> Embedding 레이어는 "단어의 갯수 * Embedding 차원 수"의 weight를 생성하기 때문에
단어의 갯수가 줄어드는 것은 곧 메모리의 절약으로 이어진다.
[2] WPM(Wordpiece Model)
- 구글에서 BPE을 변형해 제안
- BPE와 다른 점
1) 공백 복원을 위해 단어의 시작 부분에 언더바_를 추가
2) 빈도수 기반이 아닌 가능도(likeihood)를 증가시키는 방향으로 문자 쌍을 합침
=> 조사, 어미 등의 활용이 많고 복잡한 한국어 같은 모델의 토큰나이저로 WPM이 좋은 대안
=> WPM은 어떤 언어든 무관하게 적용 가능한 language-neutral하고 general한 기법.
- Katz's Back-off Model을 통해 토큰화된 사전으로부터 결합할 단어를 선정
=> LM에서 등장하지 않는 단어에 대해 확률을 할당 할 수 있는 모델
Katz's Back-off Model [3] 구글의 SentencePiece 라이브러리
- 고성능의 BPE를 사용. 전처리 과정도 포함
[4] Embedding 레이어의 한계
- Embedding 레이어는 선언 즉시 랜덤한 실수로 Weight값을 채우고,
학습을 진행하며 적당한 튜닝해가는 방식으로 속성을 맞춰간다.
01-06. 토큰에게 의미를 부여하기
- 각 토큰들이 랜덤하게 부여된 실수로 살아가지 않게, 그들끼리 유사도 연산을 할 수 있게 의미를 부여하는 알고리즘
=> Word2Vec, FastText, ELMo
[1] Word2Vec
- 한 문장의 각 단어, 즉 동시에 등장하는 단어끼리는 연관성이 있다는 아이디어로 시작된 알고리즘.
- 딥러닝 모델은 아님
=>은닉층이 1개로 구성되어 있으며, 이를 Shallow Neural Network이라고 한다.
- 두 가지 방식 : CBOW, Skip-gram(실험에서 우세)
- 단점 : 단어 간 연산 편차가 심함
=>자주 등장하지 않는 단어는 최악의 경우 단 한번의 연산만 거쳐
랜덤하게 초기화된 값과 다르지 않은 상태로 알고리즘 종료될 수 있음.
[2] FastText
- Word2Vec의 문제 해결하기 위해 BPE과 비슷한 아이디어 적용
- 한 단어를 n-gram의 집합이라고 보고,
단어를 쪼개어 각 n-gram에 할당된 Embedding의 평균값을 사용
[3] ELMo - the 1st Contextualized Word Embedding
- Word2Vec, FastText는 고정적이라는 고질적 문제 해결 안됨
=> 고정적 : 동음이의어를 처리할 수 없음
- ELMo, 2018년 등장
- 양방향 LSTM을 활용한 ELMo모델에서 Contextual Word Embedding이 되는 벡터는,
3가지의 벡터를 합쳐서 얻어진다.
1) 기존 어휘 임베딩(입력 토큰의 word vector)
2) 순방향 LSTM의 hidden state vector,
3) 역방향 LSTM의 hidden state vector
=> 위 3개 벡터를 concatenate한 벡터가 ELMo의 Contenxtual Word Embedding이 된다.
01-07. 마무리
'NLP' 카테고리의 다른 글
[김성범]Data Augmentation (0) 2022.01.21 [Attention] 6. Self-Attention (0) 2022.01.18 NLP14 : BERT pretrained model 제작 (0) 2022.01.06 NLP05. 워드 임베딩 (0) 2021.12.15 parsing과 parser (0) 2021.12.09