728x90
반응형
SMALL
1. 자연어의 특성
- 자연어를 기계가 처리하도록 하기 위해서는 먼저 자연어를 기계가 이해할 수 있는 언어로 바꾸는 방법을 알아야 함
- 토큰화 작업의 결과인 단어 사전을 기계가 이해할 수 있는 언어로 표현하는 과정이고 단어 사전 내 단어 하나를 어떻게 표현할까의 문제로 볼 수 있음
1-1. 단어의 유사성과 모호성
- 대부분의 언어에서 단어의 의미는 유사성과 모호성을 가지고 있는데 단어는 겉으로 보이는 형태인 표제어안에 여러가지 의미를 담고 있음
- 대부분 사람은 주변 정보에 따라 숨겨진 의미를 파악하고 이해할 수 있으나 기계는 학습의 부재 또는 잘못된 데이터로 의미를 파악하지 못하는 경우가 있음
- 한 가지 형태의 단어에 여러 의미가 포함되어 생기는 중의성 문제는 자연어 처리에서 매우 중요함
- 동형어와 다의어
- 동형어(동음이의어): 형태는 같으나 뜻이 서로 다른 단어(배)
- 다의어: 하나의 형태가 여러 의미를 지니면서도 그 의미들이 서로 관련이 있는 단어(먹다)
- 동의어
- 서로 다른 형태의 단어들이 동일한 의미를 가지는 단어(부추와 정구지)
- 상위어와 하위어
- 상위어: 상의 개념을 가리키는 단어(동물)
- 하위어: 하위 개념을 표현하는 단어(강아지, 고양이, ...)
- 동형어와 다의어
1-2. 언어의 모호성을 해소하는 방법
- 동형어나 다의어처럼 여러 의미를 가지는 단어들이 하나의 형태로 공유, 동의어처럼 하나의 형태를 가지는 단어들이 서로 같은 의미를 공유
- 단어 중의성 해소(WSD) 알고리즘을 통해 단어의 의미를 명확히 함
- 지식 기반 단어의 중의성 해소
- 컴퓨터가 읽을 수 있는 사전이나 시소러스(어휘집) 등을 바탕으로 단어의 의미를 추론하는 접근 방식
- 사람이 직접 선별해서 데이터를 넣으므로 노이즈가 적음
- 영어 자연어처리 분야에서 가장 유명한 WordNet이 있음
- 관계 구축에 많은 리소스가 필요함
- 시의성을 반영하지 못함(당시 상황)
- 데이터 편향이 생길 수 있음
- https://wordnet.princeton.edu/
- ⭐지도 학습 기반 단어 중의성 해소 - 대표적
- 지도 학습은 데이터에 정답이 있다는 의미로, 각종 기게 학습 알고리즘을 통해 단어 의미를 분류해내는 방법
- WSD라고 하면 보통 단어의 세부 의미가 부착된 코퍼스를 학습 데이터로 사용하여 학습에 쓰이지 않았던 새로운 문장에서 단어 의미를 판별하는 경우를 말함
- 좋은 성능을 위해서는 질 높은 레이블을 가진 크기가 큰 데이터가 필요함
- 데이터가 충분할 경우 일반화된 환경에서도 괜찮은 성능을 낼 수 있음
- 비지도 학습 기반 단어 중의성 해소
- 비지도 학습 WSD는 단어 의미 추론 작업인 WSI를 의미하는 경우가 많음
- 문장에 등장하는 각 단어의 의미를 사전적인 의미에 연결하지 않고 세부 의미가 같은 맥락을 군집화하는 데에 초점을 맞춤
- 레이블된 데이터가 필요로하지 않고 대규모 자연어 코퍼스로부터 추가 작업 없이 자동적으로 학습을 수행할 수 있어서 활용 가능성이 높음
- 사람이 직접 제작한 학습 데이터를 사용하지 않기 때문에 성능을 내기 어려움
- 지식 기반 단어의 중의성 해소
2. 임베딩 구축 방법
2-1. 임베딩(Embedding)이란?
- 자연어처리 작업에서 특징 추출을 통해 자연어를 수치화하는 과정이 필요하고, 이런 벡터화의 과정이자 결과를 말함
- 토큰화 작업의 목표는 사실상 임베딩을 만들기 위한 단어 사전을 구축하는 것
2-2. 임베딩의 역할
- 자연어의 의미적인 정보 함축
- 자연어의 중요한 특징들을 추출하여 벡터로 압축하는 과정
- 임베딩으로 표현된 문장은 실제 자연어의 주요 정보들
- 벡터인 만큼 사칙 연산이 가능하여 단어 벡터간 덧셈/뺄셈을 통해 단어들 사이의 의미적 문법적 관계를 도출
- 임베딩의 품질을 평가하기 위해 단어 유추 평가
- 자연어 간 유사도 계산
- 자연어를 벡터로 표현하면, 코사인 유사도를 활용하여 두 벡터 간 유사도를 계산할 수 있음
- 코사인 유사도는 -1이상 1 이하의 값을 가지며 값이 1에 가까울수록 유사도가 높다고 판단함
- 전이 학습
- 품질 좋은 임베딩을 사용하기 위해 이미 만들어진 다른 작업을 학습하기 위한 입력값으로 쓰이는 것
- 이미 만들어진 임베딩으로 다른 작업을 학습하기 위한 입력값으로 쓰임➡ 전이 학습
- 매번 새로운 것을 배울 때 scratch 부터 시작한다면 매 학습이 오래 걸림
- 파인 튜닝: 학습하는데 임베딩을 초기화하여 사용하면 새로운 작업을 학습함에도 빠르게 학습할 수 있고 성능도 좋아짐
2-3. 임베딩을 만들 때 쓰는 통계적인 가설
- 문장을 구성하는데 어떤 단어가 얼마나 많이 쓰이는가?(출현 빈도)
- 문장에 어떤 단어가 같이 쓰이는가?
- 단어가 어떤 순서로 등장하는가?
2-4. 단어 출현 빈도에 기반한 임베딩 구축 방법
- 원 핫 인코딩
- 자연어를 0과 1로 구별하겠다는 인코딩 방법
- 표현하고 싶은 단어의 인덱스에 1의 값을 부여하고, 나머지 인덱스에는 0을 부여하는 벡터 표현 방식
- 희소 문제(sparsity problem)
- 예) 단어 사전의 크기가 10,000 이라면, 총 10,000개 중 현재 단어를 표현하는 차원만 1이고, 나머지 9999개의 차원은 0으로 표현
- 대부분의 값을이 0인 행렬을 희소행렬이라 하는데, 단어가 늘어날수록 행렬의 크기는 계속 증가하나 증가하는 크기에 비해 표현의 효율성이 떨어짐
- 단어의 유사도를 표현하지 못함
- Bag of words(BOW)
- 단어들의 순서는 전혀 고려하지 않고, 단어들의 출현빈도에 집중하는 자연어 코퍼스의 데이터 수치화 방법
- 각 단어에 고유한 정수 인덱스를 부여하여 단어 집합을 생성하고, 각 인덱스의 위치에 단어 토큰의 등장 횟수를 기록한 벡터를 만듦
- 단어 단위의 압축 방식이기 때문에 희소 문제와 단어 순서를 반영하지 못함
- TF-IDF
- 단어의 빈도와 역문서 빈도를 사용하여 문서-단어 행렬 내 각 단어들의 중요한 정도를 가중치로 주는 표현 방법
- 문서의 유사도를 구하는 작업, 검색 시스템에서 검색 결과의 중요도를 정하는 작업, 문서 내에서 특정 단어의 중요도를 구하는 작업 등에서 효과적으로 쓰일 수 있음
- 단어의 중요도를 고려해도 여전희 단어의 빈도로 판단하는 표현 방식이기 때문에 맥락적 유사도를 반영하지 못함
- 단어 사전의 규모 자체를 축소하는 방법이 아니기 때문에 단어 사전의 규모가 크다면 높은 계산 복잡도를 요구하는 표현 방식(희소 문제)
2-5. 분포 가설과 언어 모델
- 비슷한 위치(문맥) 내에서 등장하는 단어들은 비슷한 의미를 가진다는 가설
- 분포 가설은 목표 단어의 단어들, 즉 window 크기에 따라 정의되는 문맥의 의미를 이용해 단어를 벡터로 표현하는 것이 목표
- 분포 가설이라는 가정 하에 만들어진 표현 방법을 분산 표현이라고 함
- PMI(Pointwise Mutal Information)
- 분포 가설의 대표적인 통계량은 PMI이며, 두 확률변수 사이의 상관성을 계량화하는 단위
- 확률변수가 완전히 독립인 경우에 값이 0이 되며, 독립이라는 말은 단어 x가 나타나는 것이 단어 y가 등장할 확률에 전혀 영향을 주지 않으며 반대로 y의 등장이 단어 x에 영향을 주지 않는 것을 의미함
- 단어 x가 등장할 때 문맥 내에 단어 y와 같이 자주 등장한다면 PMI값이 커짐
- 분포 가설을 활용하는 대표적인 모델은 2013년 google Efficient Estimation of Word Representations in Vector Space 논문에서 발표된 Word2Vec이라는 단어 임베딩 기법
2-6. 단어가 어떤 순서로 쓰이는가?
- 통계 기반 언어 모델
- 언어 모델: 일련의 단어 토큰에 확률을 할당하는 모델
- 단어의 등장 순서를 중요하게 고려하지 않았던 이전 가설들과 다르게, 언어 모델은 단어 시퀀스 정보를 명시적으로 학습함
- 단어가 n개 주어졌을 때 언어 모델은 n개의 단어가 동시에 나타날 확률을 반환
- 문장은 어순을 고려하여 여러 단어로 이루어진 단어 시퀀스라고도 부르며, n개의 단어로 구성된 단어 시퀀스를 확률적으로 표현
- 딥러닝 기반 언어 모델
- 통계 기반 언어 모델에서는 여전히 등장 빈도라는 통계량을 활용하여 확률을 추산했지만 딥러닝 기반 언어 모델이 등장하면서 딥러닝 모델들이 입력과 출력 사이의 관계를 유연하게 정의할 수 있게 되고 그 자체로 확률 모델로 동작할 수 있음
- MLM(Masked Language Modeling)
- 문장 중간에 마스크를 씌워서 해당 마스크에 어떤 단어가 올 지 예측하는 과정에서 학습을 함. 진행문장 전체를 다 보고 중간에 있는 단어를 예측하기 때문에 양방향 학습이 가능
- 대표적으로 BERT 모델이 있음
- Next Token Prediction
- 주어진 단어 시퀀스를 가지고 다음 단어로 어떤 단어가 올 지 예측하는 과정에서 학습
- 단어를 순차적으로 입력 받은 뒤, 다음 단어를 맞춰야하기 때문에 일방향 학습을 함
- 대표적으로 GPT, ELMo 등
- MLM(Masked Language Modeling)
- 통계 기반 언어 모델에서는 여전히 등장 빈도라는 통계량을 활용하여 확률을 추산했지만 딥러닝 기반 언어 모델이 등장하면서 딥러닝 모델들이 입력과 출력 사이의 관계를 유연하게 정의할 수 있게 되고 그 자체로 확률 모델로 동작할 수 있음
3. 텍스트 유사도
- 두 개의 자연어 텍스트가 얼마나 유사한지를 나타내는 방법
- 유사도를 정의하거나 판단하는 척도가 주관적이기 때문에, 이를 최대한 정량화 하는 방법을 찾는 것이 중요
- 자연어처리 분야에서 자주 사용되는 유사도 측정 방법
- 유클리디안 거리 기반 유사도
- 맨한탄 거리 기반 유사도
- 코사인 유사도
- 자카드 유사도
- 문자열 간 유사도
3-1. 유클리디안 거리 기반 유사도
- 두 점 사이의 거리를 측정하는 유클리디안 거리를 사용하여 문서의 유사도를 구하는 방법으로 거리가 가까울수록 유사도가 높다고 판단
- 자카드 유사도나 코사인 유사도만큼 유용하게 사용되는 방법은 아니나, 자연어처리 분야 뿐만 아니라 다른 분야에서도 범용적으로 사용되는 거리 측정 기법
3-2. 맨하탄 거리 기반 유사도
- 맨하탄 거리를 사용하여 문서의 유사도를 구하는 방법
- 유클리드 거리와 유사하나, 각 차원의 차를 제곱해서 사용하는 대신 절대값을 바로 합산함
- 항상 유클리드 거리보다 크거나 같음
- 다차원 공간 상에서 두 좌표간 최단거리를 구하는 방법이 아니다 보니 특별한 상황이 아니면 잘 사용하지 않음
3-3. 코사인 유사도
- 코사인 유사도는 두 개의 벡터값에서 코사인 각도를 이용하여 구할 수 있는 두 벡터의 유사도를 의미
- 두 벡터의 방향이 완전히 동일한 경우에는 1의 값을 가지며, 90도의 각을 이루면 0, 180도로 반대의 방향을 가지면 -1의 값을 가짐
- -1이상 1이하의 값을 가지며 값이 1에 가까울수록 유사하다는 것을 의미
- 두 벡터가 가리키는 방향이 얼마나 유사한가를 의미하기 때문에 자연어 내 유사도 계산에 더 적합함
3-4. 자카드 유사도
- 두 문장을 각각 단어의 집합으로 만든 뒤 두 집합을 통해 유사도를 측정하는 방식
- 수치화된 벡터 없이 단어 집합만으로 계산할 수 있음
- 두 집합의 교집합인 공통된 단어의 개수를 두 집합의 합집합, 전체 단어의 개수로 나누는 것
- 전체 합집합 중 공통의 단어의 개수에 따라 0과 1사이의 깂을 가지며, 1에 가까울수록 유사도가 높다
728x90
반응형
LIST
'Python > NLP' 카테고리의 다른 글
[파이썬, Python] 워드 임베딩(Word Embedding) - Word2Vec(C-BOW, Skipgram), FastText, GloVe (0) | 2023.07.23 |
---|---|
[파이썬, Python] 자연어처리 - 유사도 측정 실습 (0) | 2023.07.07 |
[파이썬, Python] 자연어처리 - 데이터 전처리 실습하기! (0) | 2023.07.06 |
[파이썬, Python] 자연어처리 - 자연어 데이터 전처리 이론 (0) | 2023.07.05 |
[파이썬, Python] 자연어처리(Natural Language Processing) 개요, 허깅페이스 모델로 토큰화하기! (0) | 2023.07.05 |