728x90
- 문장의 확률을 나타내는 모델
- 문장은 단어들로 이루어진 시퀀셜 데이터이다.
- 언어모델이란 단어 시퀀스에 확률을 부여하는 모델로, 단어 시퀀스를 입력받아서 해당 시퀀스가 얼마나 그럴듯한지 확률을 출력하는 것
- 한국어 말뭉치로 학습된 언어모델은 자연스러운 한국어 문장에 높은 확률값을 부여한다(한국어 모델이 필요한 이유)
- 자연스러운 표현 = 가장 많이 사용된 표현 = 카운트 값이 가장 높은것 = 확률이 가장 높은것 (확률을 부여하는 것이 언어모델로서의 기능이 높다)
- 문장을 구성하는 단어의 조합은 매우 다양하지만 우리가 자연스럽게 받아들이는 조합은 동등한 확률보다는 평소에 자주 사용되는 단어나 표현의 조합이 훨씬 높은 확률로 발생한다.
- 다양한 경로로 문장을 수집하고, 단어와 단어 사이 출현 빈도를 세어 확률을 계산, 특정분야 문장 분포 파악을 위해 전문 분야에 대한 코퍼스 수집
- 일상 생활에서 사용하는 실제 언어(문장)의 분포를 정확하게 근사하는 것이 목표이다.
- 확률에 기초한 통계적 언어 모델
- 신경망에 기초한 딥러닝 언어모델
- 두 모델 기본적으로
- 주어진 단어를 바탕으로 다음 단어, 혹은 단어들의 조합을 예측하며
- 이를 바탕으로 문장 생성, 기계 번역, 음성 인식, 문서 요약 등과 같은 다양한 자연어 처리 문제를 해결한다
- 단어열이 가지는 확률 분포를 기반으로 각 단어의 조합을 예측하는 전통적인 언어 모델
- 실제로 많이 사용하는 단어열(문장)의 분포를 정확하게 근사하는 것
- 확률 기반으로 단어의 조합을 예측하는 것
- 주어진 단어를 통해 다음 단어로 돌 확률이 가장 높은 단어를 예측하는 일련의 과정
- 조건부 확률을 언어 현상에 적용해 보는 것에서 출발
- 문장에서 𝒊 번째로 등장하는 단어를 𝒘𝒊 로 표시한다면
- 𝒏개의 단어로 구성된 문장이 해당 언어에서 등장할 확률(=언어모델의 출력)
- 결과가 되는 사건을 앞에 조건이 되는 사건을 뒤에 표기함
- 결합 확률과 조건부 확률
- 3개 단어가 동시에 등장할 결합 확률
- 조건부 확률로 다시 쓰면
- 임의의 단어 시퀀스가 해당 언어에서 얼마나 자연스러운지를 이해하고 있는 언어 모델 구축을 하고자하는데
- 조건부 확률 정의에 따라 수식의 좌변 우변이 같음
- 이전 단어(컨텍스트)들이 주어졌을 때 다음 단어를 맞추는 문제로도 목표를 달성할 수 있다.
- 순방향 언어 모델(Forward Language Model)
- 문장의 앞에서 뒤로, 사람이 이해하는 순서대로 계산하는 모델
- 어제 카페 갔었어 거기 사람 많더라: 어제→카페→갔었어→거기→사람→많더라
- GPT, ELMo등
- 문장의 앞에서 뒤로, 사람이 이해하는 순서대로 계산하는 모델
- 역방향 언어 모델(Backward Language Model)
- 문장의 뒤부터 앞으로 계산하는 모델
- 어제 카페 갔었어 거기 사람 많더라: 많더라→사람→거기→갔었어→카페→어제
- ELMo등(ELMo는 순방향, 역방향을 붙여서 만든 모델)
- 문장의 뒤부터 앞으로 계산하는 모델
- 전통적 의미의 언어 모델은 조건부확률의 정의를 따르는 수식 표현
- 컨텍스트(주변 맥락 정보)가 전제된 상태에서 특정 단어(𝒘)가 나타날 조건부 확률로 표현함
- 어떤 문장이 자연스러운지 가려낼 수 있음으로 그 자체가 가치가 있음
- 학습 대상 언어의 풍부한 맥락을 표현하고 있음(기계번역, 문법 교정, 문장 생성 등 다양한 테스크 수행 가능)
- 언어를 이루는 구성 요소(글자, 형태소, 단어, 단어열(문장), 문단 등)에 확률 값을 부여하여
- 이를 바탕으로 다음 구성요소를 예측하거나 생성하는 모델
- 전통 언어처리 연구에서 딥러닝 패러다임으로 전환
- 다양한 모델 조합(단어의 문자를 인식하는 CNN 모델 + 시퀀스 처리를 위한 LSTM(RNN) + MLP를 이용한 LSTM의 출력 분류)
- 시퀀스를 위한 합성곱 연산(학습속도 향상)
- 어텐션 모델(주의모델)의 주도
- 전이학습
- 어떤 언어(seq)로 된 글을 다른 언어(seq)의 글로 옮기는 것
- 번역의 궁극적 목표(사람의 목표가 아닌 컴퓨터의 목표)
- 인간의 언어(자연어)는 컴퓨터 프로그래밍 언어처럼 명확하지 않다(모호성)
- 자연어는 그 활용에 있어 효율을 극대화 하는 쪽으로 흘러간다(정보나 단어를 생략하고, 문장을 짧게 만들며, 동일한 단어와 어절을 상황에 따라서 다른 의미로 사용)
- 언어는 문화를 내포하고 있으므로 수천 년간 쌓여온 사람의 의식, 철학 등이 녹아 들어가 있어서 그러한 문 화의 차이가 번역을 더욱 어렵게 만든다
- 규칙 기반 기계 번역
- 통계 기반 기계 번역
- 딥러닝 이전의 신경망 기계 번역
- 딥러닝 이후의 신경망 기계 번역
- 가장 전통적 번역 방식
- 주어진 문장의 구조를 분석, 그 분석에 맞춰 규칙을 세운 후 분류를 나눠 정해진 규칙에 따라 번역
- 사람의 경우 일반화 능력이 뛰어나므로 몇 가지 규칙으로 번역을 수행할 수 있지만 컴퓨터는 이게 매우 어려움
- 규칙이 잘 만들어지면 통계 기반 기계 번역보다 자연스러운 표현이 가능
- 규칙을 사람이 일일이 만들어야 함 → 자원과 시간 등 소요 비용 높음
- 신경망 기계 번역 이전에 세상을 지배하던 번역 방식
- 대량의 양방향 코퍼스에서 통계를 얻어내어 번역 시스템 구성
- 많은 모델로 구성되므로 매우 복잡함, 통계 기반 방식이므로 언어쌍의 확장 시, 대부분의 알고리즘, 시스템이 유지되므로 기존의 규칙 기반 기계 번역에 비해 비용적으로 유리했음
- 현재의 언어모델에 사용된 인코더-디코더(Encoder-Decoder) 형태를 가지고 있었으나 컴퓨터의 성능 부족, 데이터의 부족 등의 이유로 제대로 된 성능을 발휘하지 못함(지금은 핵심 모델, Transformer 모델, 생성모델)
- 기존 통계 기반 기계 번역 방식을 순식간에 앞질러버림
- 구글 번역기를 포함하여 대부분의 상용 번역기가 딥러닝 기술로 대체됨
- 신경망 기반 기계번역의 장점
- 한 도메인(예, 영어 문장)에서 다른 도메인(예, 한국어 문장)으로 시퀀스(Sequence)를 변환하는 모델
- 시퀀스를 다루는 모델이므로 당연히 순차데이터를 대상으로 함. 주로 시계열 데이터에 대하여 많이 활용됨
- 대표적인 시퀀스 모델인 RNN 모델을 기반으로 하고 있음(초기에는 RNN쓰다 LSTM으로 변경)
- 2개의 RNN 모델을 이용하여 인코더와 디코더를 구현하였고, 이 때문에 Encoder-Decoder 모델이라고 도 부름
- 시퀀스에 대한 예측을 목표로함(자연어 모델링: 각 타임 스텝에서 주어진 시퀀스를 기반으로 다음 단어 예측 ,품사 태깅: 단어의 문법 품사 예측 ,개체명 인식: 단어가 사람, 위치, 제품, 회사 같은 개체명에 속하는지 예측 에 활용)
- 모델 구조를 이용하여 MLE를 수행, 주어진 데이터를 가장 잘 설명하는 파라미터 𝜽를 찾는 것
- MLE(Maximum Likelihood Estimation, 최대 우도법)
- 주어진 데이터를 토대로 확률 변수의 모수를 구하는 방법
- 모수가 주어졌을 때, 원하는 값들이 나올 가능도 함수를 최대로 만드는 모수를 선택하는 방법
- seq2seq 모델의 목적을 수식으로 나타내면
- 이 계산을 위해 seq2seq는 크게 3개의 서브모듈(인코더, 디코더, 생성자)로 구성됨
- 주어진 소스 문장인 여러 개의 벡터를 입력으로 받아 문장을 함축하는 문장 임베딩 벡터 생성 (𝑷(𝒛|𝑿)의 모 델링)
- RNN 분류 모델과 거의 같음
- 𝑷(𝒛|𝑿)를 모델링하고, 주어진 문장을 매니폴드를 따라 차원 축소하여 해당 도메인의 잠재 공간(Latent Space)에 있는 어떤 하나의 점에 투영하는 작업
- 인코더는 문장을 하나의 벡터로 압축하여 표현함
- 기존의 텍스트 분류 문제에서는 모든 정보(특징, Feature)가 필요하지는 않음
- → 벡터 변환 시, 많은 정보를 간직할 필요는 없음
- 예: 나는.. 과 같은 중립적인 단어는 감성 분류에 불필요
- 그러나, 기계 번역을 위한 문장 임베딩 벡터에서는 최대한 많은 정보를 요구
- 인코더를 수식으로 나타내면
- 인코더를 실제 구현할 때는 전체 time-step을 병렬로 한 번에 처리
- 인코더와 반대의 역할을 수행
- 앞에서 살펴 본 seq2seq의 수식을 time-step에 관해 풀어서 나타내면
- 조건부 확률 변수에 𝑿 가 추가됨
- seq2seq 식에서 조건부 확률에 𝑿가 추가된 것은
- 인코더의 결과인 문장 임베딩 벡터와 이전 time-step까지 번역하여 생성한 단어들에 기반하여 현재 time-step의 단어를 생성함을 의미
- 수식으로 표현하면
- 디코더 자체만으로도 신경망 언어모델에 속함 → 디코더 입력의 초깃값으로 𝑦0 에 BOS 토큰을 입력으로 줌
- Encoder와 Decoder가 번역을 수행하는 예
- 인코딩(부호화) : 정보를 어떤 규칙에 따라 변환하는 것
- 디코딩(복호화) : 인코딩된 정보를 원래의 정보로 되돌리는 것
- Encoder는 문장을 고정 길이 벡터로 인코딩한다.
- Decoder를 구성하는 계층
- 특정 도메인의 시계열 데이터 또는 시퀀스 데이터 입력을
- 다른 도메인의 시계열 또는 시퀀스 데이터로 출력하는데 탁월한 능력을 보임
- seq2seq는 오토인코더(AutoEncoder)의 일종으로 특히 시계열 또는 시퀀스 데이터에 강점이 있는 모 델이라고 볼 수 있음
- 장기 기억력 문제
- 신경망 모델은 차원축소를 통한 데이터 압축에 탁월한 성능을 보이지만
- 정보를 무한하게 압축할 수는 없음 → 압축 가능한 정보량의 한계 → 문장(또는 time-step)이 길어질수록 압축 성능 하락
- LSTM, GRU 등을 사용하여 RNN보다는 높은 성능을 낼 수 있지만 역시 한계가 존재함
- 구조 정보의 부재
- 현재 딥러닝 자연어 추세에
- 문장을 이해할 때 구조 정보를 사용하기 보다 단순히 시퀀스 데이터로 다루는 경향
- 아직까지는 성공적으로 사용되지만 다음 단계로 나아가려면 구조 정보가 필요할 것으로 추정
- 챗봇 또는 QA봇
- 시퀀스 데이터 입력을 다른 도메인의 시계열/시퀀스 데이터로 출력하는데 뛰어남
- 많은 사람이 seq2seq를 학습 시키면 더욱 뛰어난 성능을 보일 것으로 기대
- 그러나 지속적인 데이터, 정보 추가가 필요하지 않은 번역, 요약과 달리 대화의 경우 지속적인 관리가 요구되지만 해당하는 구조적 기능이 부족함 → 발전된 구조 요구
- 딥러닝 초창기의 기계번역 기술의 주요 방식은 Sequence 방식
- 데이터를 토큰으로 나눠 순차적으로 입력 데이터를 준 다음 순차적으로 출력을 뽑아내는 방식(seq2seq) : Encoder-Decoder 방식
- 인코더에서 입력 시퀀스를 컨텍스트 벡터라는 하나의 고정된 크기의 벡터 표현으로 압축하고, 디코더는 이 컨텍스트 벡터를 통해 출력 시퀀스를 만들어 내는 모델(문장이 길어지면:30~40단어 이상 성능이 떨어짐)
- 하나의 고정된 크기의 벡터로 모든 정볼르 압축하다보니 정보 손실이 발생
- 문제 해결을 위해 Attention모델 기법을 제안함
- 사람은 번역시 모든 문장을 듣지만 각 단어를 번역할 때마다 모든 문장의 정보를 이용하지 않는다.
- Encoder-Decoder 방식에서는
- 다음 단어를 번역할 때마다 C 라는 문맥 벡터를 전달하는데,
- 이 고정된 길이의 벡터에 그 동안 본 모든 단어에 대한 정보가 축약되어 있음 → 문장이 길어지면 효율 저하 → 이게 문제가됨
- 이에 고정된 길이의 C 벡터에 모든 정보를 축약하지 말고 매 Step마다 필요한 정보를 새로 만들자! 해결/개선안 제시 → Attention 모델
- 디코더에서 출력 단어를 예측하는 매 시점마다 인코더에서의 전체 입력 문장을 다시 한 번 참고하자는 것
- 전체 입력 문장을 전부 다 동일한 비율로 참고하는 것이 아니라 해당 시점에서 예측해야 할 단어와 연관이 있는 입력 단어 부분을 좀 더 집중해서 참고하는것
- 기존의 encode는 word-for-word translation, 즉 단어 하나를 번역하면 그 단어를 넘어가는 방식
- 번역하고자 하는 내용과 문제점
- RNN 모델에서의 번역(예시: 프랑스어를 영어로 변환시)
- Query와 비슷한 값을 가진 키(Key)를 찾아서 그 값(Value)을 얻는 과정이다.
- → 일반적인 Key-Value 방식과 비교해 볼 수 있다.
- 컴퓨터 공학의 많은 분야에서 사용되고 있는 자료형
- 파이썬의 경우 Dictionary 자료형을 예로 들 수 있음
- 키(Key)와 값(Value)이라는 두 개의 쌍으로 구성되며, 키를 통해서 맵핑된 값을 찾아낼 수 있다는 특징을 가짐
- Key-Value 자료형을 기준으로 Attention 함수를 살펴보면
- Dot-Product Attention은
- 다양한 어텐션 종류 중에서 가장 수식적으로 이해하기 쉽게 적용된 모델
- seq2seq에서 사용되는 어텐션 중에서 Dot-Product Attention과 다른 어텐션들은 주로 중간 수식만 다를 뿐 메커니즘은 거의 유사함
-<그림은 디코더의 세번째 LSTM에서 출력 단어를 예측할 때, 어텐션 메커니즘을 사용하는 모습을 보여줌>
- 처리 과정
-
- 어텐션 스코어(Attention Score)를 구한다.
-
-
- 소프트맥스(softmax) 함수를 통해 어텐션 분포(Attention Distribution) 계산
-
- 각 인코더의 어텐션 가중치와 은닉 상태를 가중합하여 어텐션 값 계산 지금까
-
- 어텐션 값과 디코더의 t 시점의 은닉 상태를 연결(Concatenate)
- 다양한 어텐션의 차이는 중간 수식(어텐션 스코어 함수)
- 어텐션은 RNN 기반의 seq2seq 성능 보정을 목적으로 제안되었지만
- 현재에 이르러서는 어텐션 스스로가 기존의 seq2seq를 대체하는 방법이 되고 있음 → Transformer
- https://arxiv.org/pdf/1409.0473.pdf (Attention 소개 논문)
- 어텐션 함수의 Query가 디코더 셀의 t 시점의 은닉 상태가 아니라 t-1 시점의 은닉 상태임
-
- 어텐션 스코어(Attention Score) 계산
-
- 소프트맥스(softmax) 함수를 통해 어텐션 분포 계산
-
- 각 인코더의 어텐션 가중치와 은닉 상태를 가중합하여 어텐션 값 계산
-
- 컨텍스트 벡터로부터 𝒔t 계산
- https://github.com/Astero0803/Machine-Learning-Frameworks-/tree/main/tensorflow
- 해당 주소에 실습 내용 올려둠
- Seq2Seq 모델 학습 진행하고 epoch 돌리는 부분에서 에러 발생해서 수정중
728x90
'AI' 카테고리의 다른 글
# 24.10.15_ 사전학습 모델 + GPT + BERT모델 (6) | 2024.10.15 |
---|---|
# 24.10.14_ Attention 모델 실습 + Transformer 아키텍처 정리 및 실습 (0) | 2024.10.14 |
# 24.10.10_CBOW 임베딩 실습 + Skip-gram 임베딩 (2) | 2024.10.10 |
# 24.10.08_전처리:단어의 표현 + 임베딩 (5) | 2024.10.08 |
# 24.10.07_자연어 처리 개요 + 전처리: 토큰화 (2) | 2024.10.07 |