Hey Tech
[NLP] N-gram 언어 모델의 개념, 종류, 한계점 본문
📌 Text 빅데이터분석 플랫폼 베타테스트 참가자 모집 중!(네이버페이 4만 원 전원 지급)
👋 안녕하세요, 코딩이 필요 없는 AI/빅데이터 분석 All in One 플랫폼 <DATA101> 개발팀입니다.
😊 저희 서비스를 사용해 보시고 경험담을 들려주세요 :)
💸 참여해 주신 "모든" 분들께 네이버페이 4만 원 쿠폰을 지급해 드립니다.
👨💻 참여 희망 시 카톡플러스친구 1:1 채팅 or 인스타그램 DM 부탁드립니다 :)
📆 참여기간 : 11/25(월)~11/29(금) 11:00~21:00 중 택1 (1시간 1타임)
👉 참여장소 : 강남역 인근 스터디카페 미팅Room
📍 소요시간 : 총 40분 내외(서비스 체험 및 인터뷰 포함)
✅ 참가조건 : Text 빅데이터 분석 업무 경험자
👉 참가 가능일정 조회하기 : https://url.kr/n8k8gu
- 카톡플친 : http://pf.kakao.com/_SxltHG/chat
- 인스타그램 : https://www.instagram.com/data101.official/
📚 목차
1. N-gram 개념
2. N-gram 등장 배경
3. N-gram 종류
4. N-gram 기반 단어 예측
5. N-gram의 한계점
1. N-gram 개념
언어 모델(Language Model)은 문장 내 앞서 등장한 단어를 기반으로 이어서 등장할 적절한 단어를 예측하는 모델입니다. 언어 모델은 크게 통계학 기반의 언어 모델(Statistical Language Model, SLM)과 인공신경망(Artificial Neural Network, ANN) 기반의 언어 모델이 있습니다. N-gram은 통계학 기반의 언어 모델 중 하나입니다. N-gram 언어 모델은 이처럼 다음 단어를 예측할 때 문장 내 모든 단어를 고려하지 않고 특정 단어의 개수(\(N\))만 고려합니다. 즉, N-gram은 \(N\)개의 연속적인 단어의 나열을 하나의 묶음(=token)으로 간주합니다.
2. N-gram 등장 배경
N-gram 언어 모델은 통계학을 기반으로 전통적인 방식의 통계학적 언어 모델의 한계점인 희소(Spasity) 문제를 보완하기 위해 등장하였습니다. \(N\)개의 단어로 구성된 문장이 있다고 가정하겠습니다. \((N+1)\)번째 올 적절한 단어를 예측할 때, 전통적인 방식의 SLM은 \(N\)개의 단어를 모두 고려합니다. 즉, 전통적 방식의 SLM은 모델을 학습시킬 문서 데이터(=Corpus)에서 해당 \(N\)개의 단어와 어순에 딱맞는 문장이 몇 개나 존재하는지 카운트하고, 뒤이어 등장할 단어까지 포함한 문장이 전체 문서에서 등장하는 횟수를 카운트하여 확률로 나타냅니다.
아무리 수만, 수 십만 개의 문장을 활용하여 모델을 학습시킨다 해도, 똑같은 단어 구성과 어순을 갖는 문장이 몇 개나 될까요? 하물며 해당 문장 뒤에 등장하는 단어들마다 전체 문서에서 등장하는 문장의 개수가 몇 개나 될까요? 반면, N-gram은 일부 단어 개수만 고려하기 때문에 전체 문서에서 해당 문장을 카운팅할 확률을 높일 수 있습니다.
3. N-gram 종류
N-gram은 문장을 몇 개의 단어 개수에 따라 나눌지에 따라 종류가 결정됩니다. 아래와 같은 예시 문장을 활용하여 N-gram 언어 모델을 구현했을 때 어떤 결과가 나오는지 알아봄으로써 N-gram 종류에 대해 이해해 봅니다. 문장 부호는 전처리한다고 가정하겠습니다.
"오늘 점심 추천 메뉴: 파스타, 피자"
모델명 | 구현 결과 | |
1 | Unigram(N=1) | 오늘, 점심, 추천, 메뉴, 파스타, 피자 |
2 | Bigram(N=2) | 오늘 점심, 점심 추천, 추천 메뉴, 메뉴 파스타, 파스타 피자 |
3 | Trigram(N=3) | 오늘 점심 추천, 점심 추천 메뉴, 추천 메뉴 파스타, 메뉴 파스타 피자 |
4 | 4-gram(N=4) | 오늘 점심 추천 메뉴, 점심 추천 메뉴 파스타, 추천 메뉴 파스타 피자 |
4. N-gram 기반 단어 예측
N-grma 언어 모델은 이전 \((N-1)\)개의 단어를 바탕으로 \(N\) 번째 올 단어를 예측합니다. 예를 들어, '오늘 점심 추천 메뉴'에 뒤이어 나올 단어 \(w\)를 예측할 때, \(N\)이 \(4\)인 4-gram을 활용한다고 가정해 보겠습니다. 4-gram은 \((N-1)\)인 \(3\)개의 단어만 고려합니다. 즉, '오늘 점심 추천 메뉴'에서 '오늘'이라는 단어는 고려하지 않고 '점심 추천 메뉴'만 고려하기 때문에, '점심 추천 메뉴'에서 뒤이어 나올 단어 \(w\)가 등장할 확률을 수학적으로 표현하면 아래와 같습니다.
$$ P(w | 점심 추천 메뉴) = \frac{count(점심 추천 메뉴 w)}{count(점심 추천 메뉴)} $$
여기서 Count란 전체 문서 데이터(=corpus)에서 해당 문장이 등장한 횟수를 의미합니다. 예를 들어, 전체 문서 데이터에서 '점심 추천 메뉴'이라는 문장이 1,000번, '점심 추천 메뉴' 문장 뒤에 '파스타' 단어가 500번 등장하고, '갈비탕'이 300번 등장했다고 가정해 보겠습니다. 즉, '점심 추천 메뉴' 뒤에 '파스타'가 등장할 확률은 \(\frac{500}{1000}=50\)%이고, '갈비탕'이 등장할 확률은 \(\frac{300}{1000}=30\)%입니다. 수학적으로 이를 표현하면 아래와 같죠.
$$ P(파스타 | 점심 추천 메뉴) = \frac{count(점심 추천 메뉴 파스타)}{count(점심 추천 메뉴)} = \frac{500}{1000}=0.5 $$
$$ P(갈비탕| 점심 추천 메뉴) = \frac{count(점심 추천 메뉴 갈비탕)}{count(점심 추천 메뉴)} = \frac{300}{1000}=0.3 $$
따라서 이 언어 모델은 높은 확률을 갖는 '파스타'를 '점심 추천 메뉴' 문장 뒤에 출력합니다.
5. N-gram의 한계점
N-gram 언어 모델은 다음과 같은 한계점이 있습니다.
(1) 정확도 문제
N-gram 언어 모델은 문장 내 전체 단어를 고려하는 언어 모델과 비교했을 때 정확도가 낮다는 한계가 있습니다. N-gram 언어 모델은 이전에 \(N\)개의 단어만 고려하기 때문에, 앞 문장의 맥락을 놓치는 경우가 발생할 수 있습니다. 이는 문장의 앞부분과 뒷부분의 문맥이 매끄럽지 못하게 만들 수 있습니다.
예를 들어, N-gram 기반 챗봇을 만들었다고 가정해 보죠. 앞서 활용한 예시 문장인 '오늘 점심 메뉴 추천' 다음 이어질 단어를 예측할 때 trigram을 사용하면 '오늘'이라는 단어는 고려하지 않습니다. 만약, 사용자가 '오늘'이 아닌 '내일'의 점심 메뉴를 물어봐도 챗봇은 '오늘' 점심 추천 메뉴와 같은 결과만 출력할 것입니다. 이처럼, N-gram은 문장 앞부분의 중요한 키워드나 맥락을 놓치는 경우가 생길 수 있다는 한계가 있습니다.
(2) 희소(Sparsity) 문제
N-gram 언어 모델은 희소 문제를 갖는 한계가 있습니다. 전체 문서(=Corpus)에서 문장 내 전체 단어를 고려하는 언어 모델과 비교했을 때, N-gram 언어 모델은 일부 단어만 고려하기 때문에 전체 문서에서 특정 단어의 출현 확률을 높일 수 있다는 장점이 있습니다. 그럼에도 불구하고, 전체 문서에서 \(N\)개의 단어를 연속적으로 갖는 문장 자체 개수가 드물다는 희소 문제가 존재합니다.
(3) 상충(Trade-off) 문제
N-gram 언어 모델은 \(N\) 값 설정 시 상충(Trade-off) 문제가 존재합니다. 쉽게 말해, \(N\)의 값이 커도 문제이고, 작아도 문제라는 것입니다. 그럼 어떻게 해야 할까요? 결론부터 말씀드리자면, \(N\)은 최대 \(5\)를 넘지 않는 선에서 활용하는 것을 권장하고 있습니다.
\(N\)의 값이 \(1\)인 경우(=unigram)보다는 \(2\)인 경우(bigram)가 대부분 성능이 우수합니다. 예를 들어, '점심'이라는 단어 \(1\)개만 고려하는 경우보다 '점심 메뉴'와 같이 \(2\)개의 단어를 고려했을 때 문장의 맥락을 파악하는 데 더욱 용이합니다. 하지만, 그렇다고 \(N\)을 무작정 크게 설정하면 전체 문서에서 해당 N-gram 문장을 카운팅 할 확률이 낮아지므로 희소 문제가 심각해지죠. 더불어, \(N\)이 클수록 언어 모델의 사이즈도 커지므로 연산 비용도 증가합니다. 반대로, \(N\)의 값이 너무 작으면 전체 데이터에서 문장 카운팅은 잘 될 수는 있어도, 실질적으로 매끄러운 문장이 만들어지긴 어려울 수 있습니다. 적은 단어만 고려하기 때문에 맥락을 파악하기 어렵기 때문이죠.
\(N\)의 값에 따라 성능을 비교한 연구가 있습니다(참고). 해당 연구는 월스트리트 저널(Wall Street Journal)에서 \(3,800\)만 개의 단어를 기반으로 언어 모델을 학습하고, \(1,800\)만 개의 테스트 데이터를 활용한 테스트를 통해 Perplexity(PPL) 값을 비교했습니다. 참고로, Perplexity는 언어 모델의 성능 평가지표 중 하나로써 값이 작을수록 언어 모델의 성능이 우수하다고 평가합니다. Perplexity는 '펄플렉서티'라고 읽고, '(무언가를 이해할 수 없어) 당혹스러운' 또는 '헷갈리는' 정도의 의미를 갖는 perplexed라는 단어에서 유래했습니다. Perplexity에 대한 자세한 내용은 이곳을 참고해 주세요.
Unigram | Bigram | Trigram | |
Perplexity | 962 | 170 | 109 |
위와 표와 같이, \(N\)이 \(1\)인 Unigram보다는 \(N\)이 \(2\)인 경우 성능이 우수하고, \(N\)이 \(2\)인 Bigram보다는 \(N\)이 \(3\)인 Trigram의 성능이 우수한 것을 알 수 있습니다.
이러한 N-gram 언어 모델의 한계점은 어떻게 보완되었을까요? 바로 인공신경망(Aritificial Neural Network, ANN)을 활용하는 방법입니다. 인공 신경망은 N-gram 언어 모델의 한계점을 극복하고 더욱 우수한 성능을 보이는 것으로 알려져 있습니다. 다음 포스팅에서는 인공신경망 기반 언어 모델에 대해 알아봅니다.
📚 참고할 만한 포스팅
1. [NLP] Bag of Words(BoW) 개념 및 실습
2. [NLP] 문서 단어 행렬(DTM) 개념 이해
3. [NLP] TF-IDF 개념 및 계산 방법
4. [NLP] Word Embedding의 이해: (1) 희소표현 및 밀집표현
5. [NLP] 언어모델(Language Model)의 개념 및 특징
6. [NLP] N-gram 언어 모델의 개념, 종류, 한계점
7. [NLP] 언어모델의 평가지표 'Perplexity' 개념 및 계산방법
8. [NLP] Word2Vec: (1) 개념
9. [NLP] Word2Vec: (2) CBOW 개념 및 원리
10. [NLP] Word2Vec: (3) Skip-gram
11. [NLP] Word2Vec: (4) Negative Sampling
12. [NLP] 문서 유사도 분석: (1) 코사인 유사도(Cosine Similarity)
13. [NLP] 문서 유사도 분석: (2) 유클리디안 거리(Euclidean Distance)
14. [NLP] 문서 유사도 분석: (3) 자카드 유사도(Jaccard Similarity)
👨💻 맞춤 서비스
저희 AI/BigData 분석 솔루션 전문 브랜드 <데이터워너원 DATA101>에서는
맞춤형 데이터 수집부터 통계분석, 텍스트마이닝, AI 모델링, 논문작성을 지원해 드립니다 :)
자세한 내용은 아래 링크를 참고해 주세요!
오늘은 N-gram 언어 모델에 대해 알아봤습니다.
포스팅 내용에 오류가 있거나 보완할 점이 있다면 아래에 👇👇👇 댓글 남겨주시면 감사드리겠습니다 :)
그럼 오늘도 즐겁고 건강한 하루 보내시길 바랍니다.
고맙습니다😊
'AI & 빅데이터 > 자연어처리(NLP)' 카테고리의 다른 글
[NLP] Word Embedding의 이해: 희소표현과 밀집표현 (1) | 2022.04.06 |
---|---|
[NLP] 언어모델의 평가지표 'Perplexity' 개념 및 계산방법 (0) | 2022.04.05 |
[NLP] 언어모델(Language Model)의 개념 및 특징 (2) | 2022.03.31 |
[NLP] TF-IDF 개념 및 계산 방법(+Python 코드) (6) | 2022.03.25 |
[NLP] 문서 단어 행렬(DTM) 개념 이해 (0) | 2022.03.24 |