Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
31 |
Tags
- Stream
- fastapi를 사용한 파이썬 웹 개발
- 백준
- Kaggle
- BAEKJOON
- BFS
- Image Processing
- Flutter
- BOF
- MATLAB
- ML
- pytorch
- ARM
- Algorithm
- Dreamhack
- 파이토치 트랜스포머를 활용한 자연어 처리와 컴퓨터비전 심층학습
- Widget
- Computer Architecture
- study book
- FastAPI
- llm을 활용 단어장 앱 개발일지
- 영상처리
- DART
- C++
- Got
- bloc
- rao
- PCA
- MDP
- system hacking
Archives
- Today
- Total
Bull
[NLP] TF-IDF(Term Frequency-Inverse Document Frequency) | study book 본문
Artificial Intelligence/NLP
[NLP] TF-IDF(Term Frequency-Inverse Document Frequency) | study book
Bull_ 2024. 9. 22. 00:04Bow(Bag-ofWords)에 가중치를 부여하는 방식이다.
I | like | this | movie | don't | famous | is | |
---|---|---|---|---|---|---|---|
This movie is famous moive | 0 | 0 | 1 | 2 | 0 | 1 | 1 |
I like this movie | 1 | 1 | 1 | 1 | 0 | 0 | 0 |
I don't like this moive | 1 | 1 | 1 | 1 | 1 | 0 | 0 |
단어 빈도 (Term Frequency)
- 문서 내에서 특정 단어의 빈도 수를 나타냄.
$$ TF(t,d) = count(t,d) $$
위의 표에서 3개의 문서 중 4개의 movie가 나오면 $TF=4$ 가 된다.
즉, t = 4(term 수), d = 3 (document 수)
문서 빈도 (Document Frequency)
- 한 단어가 얼마나 많은 문서에 나타나는지 의미.
$$ DF(t,D) = count(t∈d:d∈D) $$
반대로 생각하면 된다. 3개의 문서에서 4개의 movie 단어가 등장하므로 $DF=3$ 이다.
즉, t = 4(term 수), d = 3 (document 수)이다.
해석하면 t가 들어간 총 문서 수를 의미한다.
역문서 빈도 (Inverse Document Frequency)
- 전체 문서 수를 문서 빈도로 나눈 다음 로그를 취한 값이다. 문서 내에서 단어의 중요도를 나타낸다고 할 수 있다.
$$ IDF(t,D) = log(\frac{count(D)}{1+DF(t,D)}) $$ - 문서 빈도가 높을수록 단어가 일반적, 상태적으로 중요하지 않다는 의미.
- 단어 빈도 수 ↓ --> IDF ↑
- +1은 0이 되는 것을 방지.
- log를 사용하는 이유는 큰값을 방지하기 위해.
TF-IDF의 수식
$$ TF-IDF(t,d,D) = TF(t,d)\times IDF(t,d) $$
- (단어 빈도)x(역문서 빈도)로 나타낼 수 있다.
- 문서 내 단어가 자주 등장하지만 전체 문서 내에서 해당 단어가 적게 등장한다면 TF-IDF 값은 커진다.
TF-IDF CODE
TF-IDF 형태로 쉽게 변환해주는 작업이다.
설치
pip install scikit-learn
코드
from sklearn.feature_extraction.text import TfidfVectorizer
corpus = [
"That movie is famous movie",
"I like that actor",
"I don’t like that actor"
]
tfidf_vectorizer = TfidfVectorizer()
tfidf_vectorizer.fit(corpus)
tfidf_matrix = tfidf_vectorizer.transform(corpus)
# tfidf_matrix = tfidf_vectorizer.fit_transform(corpus)
print(tfidf_matrix.toarray())
print(tfidf_vectorizer.vocabulary_)
결과
[[0. 0. 0.39687454 0.39687454 0. 0.79374908 0.2344005 ]
[0.61980538 0. 0. 0. 0.61980538 0. 0.48133417]
[0.4804584 0.63174505 0. 0. 0.4804584 0. 0.37311881]]
{'that': 6, 'movie': 5, 'is': 3, 'famous': 2, 'like': 4, 'actor': 0, 'don': 1}
fit_transform()
은 fit과 transform 메소드를 동시에 수행한다.tfidf_matrix.toarray()
의 결과에서 각 행과 열은 (문서수) x (단어 수)의 형태이다.
결과는 3x7 형태이다. 총 단어 수는 7개이고 문서는 3개이기 때문이다.
TfidfVectorizer class
tfidf_vectorizer = TfidfVectorizer(
input='content',
encoding='utf-8',
lowercase=True,
stop_words=None,
ngram_range=(1, 1),
max_df=1.0,
min_df=1,
vocabulary=None,
smooth_idf=True,
)
input
: 문자열 데이터.ngram_range
: N-gram 범위. (1,2)는 유니그램과 바이그램을 사용한다는 의미.max_df
: 일정 횟수 이상 DF는 불용어로 처리한다.min_df
: 일정 횟수 미만 DF는 불용어로 처리한다.vocabulary
: 미리 구축해놓은 단어 사전을 사용한다.smooth_idf
: IDF 계산 시 분모에 1 더하는 작업, 0이 될 일이 없으면 False로 해놓는 경우가 있나보다 생각하고 넘어가자.
참고자료
https://product.kyobobook.co.kr/detail/S000209621433
파이토치 트랜스포머를 활용한 자연어 처리와 컴퓨터비전 심층학습 | 윤대희 - 교보문고
파이토치 트랜스포머를 활용한 자연어 처리와 컴퓨터비전 심층학습 | 트랜스포머는 딥러닝 분야에서 성능이 우수한 모델로 현대 인공지능 분야의 핵심 기술입니다. 트랜스포머와 비전 트랜스
product.kyobobook.co.kr
'Artificial Intelligence > NLP' 카테고리의 다른 글
[NLP] Word2Vec | study book (0) | 2024.09.22 |
---|---|
[NLP] FastText | study book (0) | 2024.09.21 |
[NLP] N-gram | study book (0) | 2024.09.21 |
[NLP] 토큰화 | study book (1) | 2024.09.08 |
[AI::NLP] Word2Vec에 대해 알아보자: 단어의 비밀, 사실은 숫자의 배열이었다! (CBOW, Skip-gram) (2) | 2024.07.21 |