N-gram 개념
N-gram은 카운트에 기반한 통계적 접근을 사용하고 있으므로 SLM의 일종이다.
일부 단어를 몇 개 보느냐를 결정하는데 이것이 n-gram에서의 n이 가지는 의미이다. n개의 단어 뭉치 단위로 끊어서 하나의 토큰으로 간주하는 것
N-gram 종류
예시 : An adorable little boy is spreading smiles
unigrams : an, adorable, little, boy, is, spreading, smiles
bigrams : an adorable, adorable little, little boy, boy is, is spreading, spreading smiles
trigrams : an adorable little, adorable little boy, little boy is, boy is spreading, is spreading smiles
4grams : an adorable little boy, adorable little boy is, little boy is spreading, boy is spreading smiles
N-gram 한계
N은 어떻게 선택할까? Trade-off 문제 발생
N이 클수록 정확도는 높아질 수 있지만 실제 훈련 코퍼스에서 해당 n-gram을 카운트할 수 있는 확률은 적어지므로 희소 문제는 점점 심각해진다.
trade-off 문제로 인해 정확도를 높이려면 n은 최대 5를 넘게 잡아서는 안 된다고 권장되고 있다.
반복문으로 N-gram 출력하기
text = 'this is python script'
words = text.split()
for i in range(len(text) - 1): # 2-gram이므로 문자열의 끝에서 한 글자 앞까지만 반복함
print(text[i], text[i + 1]) # 현재 문자와 그다음 문자 출력
Perplexity : PPL은 문장의 길이로 정규화된 문장 확률의 역수이다. ⇒ 헷갈리는 정도란 의미로 숫자가 작을수록 성능이 높은 것
N-gram 정확도 비교
https://colab.research.google.com/drive/1KhHMrRvRFhE6UPsGnCdngKVYOZqjBpPw?usp=share_link