오답노트

[NLP] N-gram 본문

Python/DL

[NLP] N-gram

권멋져 2022. 10. 14. 12:06

N-gram

N은 숫자를 의미하는데 문장에서 N개의 단어를 보고 다음에 나올 단어를 조건부확률으로 계산하는 방법이다.

 

1개의 단어를 선택하면 unigram

2개의 단어를 선택하면 bigram

3개의 단어를 선택하면 trigram

4개의 단어를 선택하면 4-gram 이고 4개 이상 단어는 숫자를 붙힌다.

 

N이 너무 길면 다음 단어가 아예 없을 수 있다. N이 짧으면 다음 단어를 예측할 확률은 존재하지만 그게 원하는 예측값은 아닐 수 도 있다. 즉 적절한 N을 설정하는 것이 중요하다.

 

N-gram 예시

I am a boy에서 am a 로 다음 단어를 예측하는 조건부 확률은 다음과 같다.

P( w | am a) = count(am a w) / count(am a)

w 에 boy를 대입 했을 때, 위 식을 풀어서 설명하면

am a가 등장했을 때, 그 뒤에 boy가 등장 했을 확률이다.

 

만약 전체 doc 에서 I am a 가 총 1000번 등장했고

그 중에서 I am a boy 가 500번, I am a girl이 200번 등장했다면

 

P(boy | am a) = 0.5

P(girl | am a) = 0.2 가 된다.

 

즉 am a를 통해서 다음 단어를 예측할 때 boy라고 예측하게 된다.

 

N-gram Vectorize

https://dhjkl123.tistory.com/281

 

[NLP] 문서 벡터화 & 문서 유사성

문서의 표현 Bag of Words 문서를 단어의 집합으로 간주한다. 문서에 나타나는 각 단어는 feature로 간주되고 단어의 출현 빈도에 따른 가중치를 얻는다. Feature Selection Feature Selection은 학습 문서에 출

dhjkl123.tistory.com

from sklearn.feature_extraction.text import CountVectorizer
from sklearn.feature_extraction.text import TfidfTransformer

#CountVectorizer supports counts of N-grams of words or consecutive characters.
count_vect = CountVectorizer()
X_train_counts = count_vect.fit_transform(X_train.data)


#td
tf_transformer = TfidfTransformer(use_idf=False).fit(X_train_counts)
X_train_tf = tf_transformer.transform(X_train_counts)

#td-idf
tf_transformer = TfidfTransformer().fit(X_train_counts)
X_train_tf = tf_transformer.transform(X_train_counts)

 

CountVectorizer는 단어들의 카운트(출현 빈도(frequency))로 여러 문서들을 벡터화한다.

이를 이용해서 TD 또는 TD-IDF를 계산하는데 사용한다.

 

'Python > DL' 카테고리의 다른 글

[밑딥] 퍼셉트론  (1) 2023.01.21
[NLP] koBERT 실습  (1) 2022.10.15
[NLP] BERT  (0) 2022.10.07
[NLP] Transformer  (0) 2022.10.07
[NLP] Sequence-to-Sequence (seq2seq)  (1) 2022.10.06