일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- 쿼드압축 후 개수세기
- pandas
- fragment identifier
- 조합
- 동적계획법
- Java
- 튜플
- 보이어무어
- 메뉴리뉴얼
- Stack
- 최소공배수
- python
- 문자열
- 후위 표기법
- 순열
- 반복문
- 점프와 순간이동
- HashSet
- 규칙찾기
- dfs
- 완전탐색
- 영문자 확인
- 에라토스테네스의 체
- 프로그래머스
- 어려웠던 문제
- Dynamic Programming
- 완전 탐색
- HashMap
- 알고리즘
- 2017 카카오 코드
- Today
- Total
csmoon1010의 SW 블로그
자연어 처리 - 딥 러닝을 이용한 자연어 처리 입문(7) 본문
03. 언어 모델(Language Model)
단어 시퀀스(문장)에 확률을 할당하는 모델(문장의 적절/부적절을 따짐)
통계에 기반한 전통적인 언어 모델(Statistical Languagel Model, SLM) 중애서도 n-gram은 자연어 처리 분야에서 활발히 활용되며 언어모델에 대한 전체 시야를 갖기에 적합.
위키독스
온라인 책을 제작 공유하는 플랫폼 서비스
wikidocs.net
1) 언어 모델(Language Model)이란?
- 언어라는 현상을 모델링하고자 단어 시퀀스(문장)에 확률을 할당(assign)하는 모델
- 방법
(1) 통계를 이용한 방법 : 이번 챕터
(2) 인공 신경망을 이용한 방법 : 더 좋은 성능. 신기술(GPT, BERT) _ 딥러닝 챕터
1. 언어 모델(Language Model)
- 단어 시퀀스에 확률을 할당 == 가장 자연스러운 단어 시퀀스 찾기
- 방법 : 이전 단어들이 주어졌을 때 다음 단어를 예측(보편적)
양쪽의 단어들로부터 가운데 비어있는 단어 예측(BERT)
- 언어 모델링(Language Modeling) : 주어진 단어들로부터 아직 모르는 단어를 예측(이전 단어 --> 다음 단어)
2. 단어 시퀀스의 확률 할당(적용 평가)
(1) 기계 번역(Machine Translation) : 적절한 문법
(2) 오타 교정(Spell Correction)
(3) 음성 인식(Speech Recognition)
--> 각 경우에서 확률을 통해 보다 적절한 문장을 판단
3. 주어진 이전 단어들로부터 다음 단어 예측하기(언어 모델링)
**조건부 확률 이용
(1) 단어 시퀀스의 확률
- w : 하나의 단어
- W : 단어 시퀀스
--> n개의 단어가 등장하는 단어 시퀀스 W의 확률 : P(W) = P(w1, w2, w3, ..., wn)
(2) 다음 단어 등장 확률
n-1개의 단어 나열 상태에서 n번째 단어의 확률 : P(wn|w1, ..., wn-1) _ 조건부 확률
4. 언어 모델의 간단한 직관
우리 지식에 기반하여 나올 수 있는 여러 단어들을 후보에 놓고 가장 확률이 높은 단어를 선택
== 기계 : 앞에 단어들을 고려하여 여러 단어들에 대해 등장 확률을 예측하고 가장 확률이 높은 단어 선택
5. 검색 엔진에서의 언어 모델의 예
검색 엔진 시 밑에 뜨는 자동 완성이 바로 다음 단어를 예측하는 언어 모델!!
2) 통계적 언어 모델(Statistical Language Model, SLM)
1. 조건부 확률
2. 문장에 대한 확률
문장 관점의 조건부 확률 = 각 단어들이 이전 단어가 주어졌을 때 다음 단어로 등장할 확률들의 곱!
EX> 'An adorable little boy is spreading smiles'
P(An adorable little boy is spreading smiles)
= P(An) * p(adorable|An) * P(little|An adorable) * P(boy|An adorable little) * P(is|An adorable little boy) * P(spreading|An adorable little boy is) * P(smiles|An adorable little boy is spreading)
3. 카운트 기반의 접근
이 때 각 확률들은 카운트에 기반하여 계산한다!!
EX> P(is|An adorable little boy) = count(An adorable little boy is) / count(An adorable little boy)
4. 카운트 기반 접근의 한계 - 희소 문제(Sparsity Problem)
- 분모에 해당하는 시퀀스가 훈련 시에 없었다면 0이 되어 확률이 정의되지 않는다.
--> 충분한 데이터를 관측하지 못해 언어를 정확히 모델링 하지 못하는 문제 = 희소 문제(Sparsity Problem)
- 해결 : n-gram, 스무딩, 백오프 같은 일반화 기법 BUT 근본적 해결X --> 인공 신경망 언어 모델로...
3) N-gram 언어 모델(N-gram Language Model)
카운트 기반 통계적 접근이지만 모든 단어가 아닌 "일부 단어"만 고려하는 접근 방법이다. (n = 일부 단어의 개수)
1. 코퍼스에서 카운트하지 못하는 경우의 감소
- 확률을 계산하고 싶은 문장/단어가 없는 경우
- 문장이 길어질 수록 코퍼스에 없을 가능성
--> 참고하는 단어를 줄이자!
ex) P(is|An adorable little boy) 대신에 P(is|boy)로!!!
2. N-gram
- n : n개의 연속적인 단어 나열. 코퍼스에서 n개의 단어 뭉치 단위로 끊어 하나의 토큰으로 간주!
(1 : unigram, 2 : bigram, 3 : trigram, 4 : 4-gram ....)
- 앞에 n-1개 이상의 단어가 있더라도 오직 n-1개의 단어에만 의존!! 더 앞의 단어들은 무시됨.
ex) P(w|boy is spreading) = count(boy is spreading w) / count(boy is spreading)
3. N-gram Language Model의 한계
- 무시된 앞의 단어가 결정에 중요한 역할을 미치는 경우! --> 앞과 뒤의 문맥이 전혀 연결이 안되는 case 발생
(1) 희소 문제(Sparsity Problem)
여전히 원하는 데이터가 없을 경우 발생
(2) n 선택의 trade-off
- n이 작다면 : 언어 모델의 성능은 하락(적절한 단어를 선택하지 않을 확률이 높아짐) = perplexity의 상승
- n이 크다면 : 희소 문제 심각, 모델 사이즈 커짐.
--> 적절한 n을 선택해야(권장 : n <= 5)
4. 적용 분야(Domain)에 맞는 코퍼스의 수집
분야, 어플리케이션에 따라 특정 단어들의 확률 분포가 달라짐!!
--> 해당 도메인의 코퍼스를 이용해야 언어 모델의 성능이 높일 수 있음!
BUT 훈련에 사용한 도메인 코퍼스에 의존성이 높은 것이 언어 모델의 약점!
5. 인공 신경망을 이용한 언어 모델(Neural Network Based Language)
- N-gram Language Model의 한계점의 극복을 위한 방법
- ch8에 있음!!
4) 한국어에서의 언어 모델(Language Model for Korean Sentences)
영어보다 훨씬 까다로움!!
1. 한국어는 어순이 중요하지 않음
- 어순이 뒤죽박죽이여도 한국어는 의미 전달이 되는 특성
2. 한국어는 교착어
- 띄어쓰기 단위(어절 단위)로 토큰화 하면 발생가능한 단어의 개수가 많음!!(조사때문에!!)
--> 형태소 기준의 토큰화를 통해 접사, 조사의 분리가 중요
3. 한국어는 띄어쓰기가 제대로 지켜지지 않음
- 띄어쓰기가 제대로 되어 있지 않아도 의미 전달 가능
- 띄어쓰기 규칙이 까다롭
즉, 제대로 된 전처리 = 토큰화가 필요하다!!
5) 펄플렉서티(Perplexity)
- 외부평가(extrinsic evaluation) : 오타 교정, 기계 번역 평가에 투입하여 성능을 비교
BUT 모델의 개수가 늘어난다면?
- 내부 평가(intrinsic evaluation) : 자신의 성능을 펄플렉시티로 수치화 --> 좀 부정확하지만 빠르게 계산 가능
1. 언어 모델의 평가 방법(Evaluation metric : PPL)
- 펄플렉시티(perplexity, PPL) : 언어 모델을 평가하기 위한 내부 평가 지표. '헷갈리는 정도'라는 뜻이므로 낮을수록 언어 모델의 성능은 좋음!
- PPL = 단어의 수로 정규화(normalization)된 테스트 데이터에 대한 확률의 역수
2. 분기 계수(Branching factor)
- 분기 계수 : 선택할 수 있는 가능한 경우의 수, PPL도 분기계수이다!
- PPL = 언어 모델이 특정 시점에 평균적으로 몇 개의 선택지를 가지고 고민하고 있는가
- 성능 비교 방법 : 같은 테스트 데이터에 대해서 두 언어 모델의 PPL을 각각 계산 후 비교.
- 주의점 : PPL이 낮다고 사람이 느끼기에 좋은 언어 모델은 아님.
테스트 데이터에 의존성 --> 테스트 데이터의 양이 많고 도메인에 알맞으며 동일해야 함
3. 기존 언어 모델 VS 인공 신경망을 이용한 언어 모델
6) 조건부 확률(Conditional Probability)
잘 아는 내용이므로 건너 뛰겠다.
'데이터&인공지능 > 자연어처리' 카테고리의 다른 글
자연어 처리 - 딥 러닝을 이용한 자연어 처리 입문(9) (0) | 2020.02.15 |
---|---|
자연어 처리 - 딥 러닝을 이용한 자연어 처리 입문(8) (0) | 2020.02.15 |
자연어 처리 - 딥 러닝을 이용한 자연어 처리 입문(6) (0) | 2020.02.13 |
자연어 처리 - 딥 러닝을 이용한 자연어 처리 입문(5) (0) | 2020.02.12 |
자연어 처리 - 딥 러닝을 이용한 자연어 처리 입문(4) (0) | 2020.02.12 |