오답노트
[NLP] N-gram 본문
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 |