관리 메뉴

Bull

[NLP] N-gram | study book 본문

Artificial Intelligence/NLP

[NLP] N-gram | study book

Bull_ 2024. 9. 21. 23:56

N-gram Concept


N개의 연속된 단어 시퀀스를 하나의 단위로 취급하여 특정 단어 시퀀스가 등장할 확률을 추정한다.
N=1 일 때, 유니그램
N=2 일 때, 바이그램
N=3 일 때, 트라이그램
이라고 부른다.
$$ P(w_i | w_{t-1},w_{t-2}, ... w_{t-N+1}) $$
N-1개의 토큰만을 고려해 확률을 계산한다. $w$ 는 어떤 단어 그룹이 나온 이후에 그 다음 단어가 나올 확률이다.

CODE: N-gram


import nltk

def ngrams(sentence, n):
    words = sentence.split()
    ngrams = zip(*[words[i:] for i in range(n)])
    return list(ngrams)

sentence = "안녕하세요 만나서 진심으로 반가워요"

unigram = ngrams(sentence, 1)
bigram = ngrams(sentence, 2)
trigram = ngrams(sentence, 3)

print(unigram)
print(bigram)
print(trigram)

unigram = nltk.ngrams(sentence.split(), 1)
bigram = nltk.ngrams(sentence.split(), 2)
trigram = nltk.ngrams(sentence.split(), 3)

print(list(unigram))
print(list(bigram))
print(list(trigram))

결과

[('안녕하세요',), ('만나서',), ('진심으로',), ('반가워요',)] 
[('안녕하세요', '만나서'), ('만나서', '진심으로'), ('진심으로', '반가워요')] 
[('안녕하세요', '만나서', '진심으로'), ('만나서', '진심으로', '반가워요')]
[('안녕하세요',), ('만나서',), ('진심으로',), ('반가워요',)]
[('안녕하세요', '만나서'), ('만나서', '진심으로'), ('진심으로', '반가워요')]
[('안녕하세요', '만나서', '진심으로'), ('만나서', '진심으로', '반가워요')]

참고 자료

https://product.kyobobook.co.kr/detail/S000209621433

 

파이토치 트랜스포머를 활용한 자연어 처리와 컴퓨터비전 심층학습 | 윤대희 - 교보문고

파이토치 트랜스포머를 활용한 자연어 처리와 컴퓨터비전 심층학습 | 트랜스포머는 딥러닝 분야에서 성능이 우수한 모델로 현대 인공지능 분야의 핵심 기술입니다. 트랜스포머와 비전 트랜스

product.kyobobook.co.kr