일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- selfattention
- R TF-IDF
- R 워드클라우드
- 통계기반자연어처리
- 딥러닝개념
- 딥러닝용어
- 상호작용디자인
- 체험디자인
- 도날드노만
- word2vec
- R 키워드 가중치
- 자연어처리
- 어탠션
- self-attention
- 마르코프
- R에서의 워드클라우드
- RNN Attention
- 자언어처리모델
- R dataframe
- deeplearning개념
- 언어모델
- StringJoiner
- 마르코프 체인
- HashMap
- r word2vec
- WordCloud R
- StringBuffer vs StringBuilder
- R에서의 wordcloud
- deeplearning용어
- wordVector
- Today
- Total
클로이의 데이터 여행기
[R] R을 이용한 텍스트마이닝_TF-IDF (코드 및 설명) 본문
오늘은 R을 통해 'TF-IDF' 가중치를 활용하는 방법에 대해 알아보려고 합니다.
1) TF-IDF가 필요한 이유?
대량의 문서에서 중요한 키워드를 뽑아야 한다면, 가장 쉬운 방법은 무엇일까요?
어렵지 않게 자주 등장하는 키워드, 고빈도 키워드를 생각해 볼 수 있습니다.
하지만 정말 고빈도 키워드가 중요한 키워드라고 할 수 있을까요?
고빈도 키워드는 중요한 키워드일 수도 있지만 동시에 흔한 키워드일 가능성이 높습니다.
한국어로 예를 들어보면 "있다, 없다, 하다"등인데, 단순히 빈도 내림차순으로 추출하게 되면 이러한 키워드들이 상위에 등장하게 됩니다.
모든 문서에서 나오는 자주 키워드(ex. 있다)들은 흔한 키워드라고 여기고, 이런 키워드에는 페널티를 주면 어떨까요?
여기저기에서 등장하는 키워드 보다는 빈도가 낮더라도, 의미적으로 중요한 키워드들이 상위에 등장하지 않을까요?
2) TF-IDF 란?
Term Frequency - Inverse Document Frequency의 약어로
'키워드의 빈도'에 '문서 빈도의 역수'를 곱하여, 주로 '문서의 핵심어를 추출할 때 사용되는 가중치'입니다.
여기저기에서 등장하는 키워드는 아니면서도 의미적으로 중요한 키워드를 뽑기 위해 TF-IDF는 활용됩니다.
'키워드의 빈도'에 '문서 빈도의 역수'를 곱하여 모든 문서에 자주 나타난 키워드에는 페널티(낮은 가중치)를 주는 것입니다.
3) TF-IDF의 활용
① 다량의 문서의 이슈 키워드 추출
앞서 말씀드렸던 것처럼 TF-IDF는 다량의 문서에서 중요한 키워드를 추출할 때 쓰입니다.
다량의 문서들이 어떤 이야기를 하고 있는지 알아보는 방법으로 TF-IDF를 활용하면 이슈키워드를 손쉽게 알아볼 수 있습니다.
③ 검색결과 순위 결정
포털 검색을 사용해보면 하나의 검색어에도 수많은 검색 결과가 나오고, 그중에서도 우리는 상단의 글들을 주로 읽게 되는데요.
상단의 노출되는 글들은 검색어에 대한 노출순위가 높은 글인데, 노출 순위를 결정하는 알고리즘으로 TF-IDF가 활용되기도 합니다.
4) R에서의 TF-IDF
R에서 TF-IDF를 활용하는 방법은 정말정말 간단합니다.
① 참고 코드
2번의 내용처럼, DTM을 생성할 때 weighting 파라미터에 TF-IDF 함수를 추가하면 됩니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
library(tm) # Text Mining에 필요한 패키지
library(readr) # 파일작성에 필요한 패키지
# 1. 분석하고자 하는 코퍼스를 읽어옴
# 2. 코퍼스 기반으로 DTM을 생성, 이때 weighting 파라미터에 TF-IDF 함수 추가
kwdDTM_TF = DocumentTermMatrix(corpus, control=list(wordLengths=c(2,Inf),
weighting = function(x) weightTfIdf(x, normalize = TRUE)))
# 3. removeSparseTerms 수행
kwdDTM_TF = removeSparseTerms(kwdDTM_TF, as.numeric(0.999))
# 4. 단어별 발생빈도 구하기
kwdFreq_TF = colSums(as.matrix(kwdDTM_TF))
# 5. 단어-빈도 형태로 dataframe에 담기
# 6. 내용 파일 생성
|
② 분석결과
위의 코드를 실행하여 TF-IDF가 높은 키워드 순으로 나열하면 아래의 이미지와 같습니다.
(참고로 분석 데이터는 자기소개서입니다.)
유의미한 키워드가 나온 것 같기는 한데, 단순히 고빈도 키워드를 뽑아보았을 때와는 어떻게 다를까요?
카운트 기반으로 중요 키워드를 뽑은 내용을 확인하니 다른 점이 확연히 보입니다.
말씀드렸던 것처럼 '있다, 하다, 되다'와 같이 자주 쓰이기는 하나 의미가 있어 보이지는 않는 키워드들이 상위로 올라오는 것을 확인할 수 있습니다.
여기까지 R을 기반으로 TF-IDF를 활용해보았습니다.
이상입니다.
읽어주셔서 감사합니다 :)
(*패스트캠퍼스의 'R을 활용한 텍스트마이닝' 수업에서 배운 내용을 활용하였습니다)
'R' 카테고리의 다른 글
[R] R을 이용한 텍스트마이닝_WordCloud(코드 및 설명) (1) | 2019.09.26 |
---|---|
[R] R을 이용한 텍스트마이닝_Word2vec(코드 및 설명) (3) | 2019.05.31 |
[R] R을 이용한 텍스트마이닝_'stringr' package (0) | 2019.04.19 |
[R] R을 이용한 텍스트마이닝_DataFrame (0) | 2019.04.16 |
[R] R을 이용한 텍스트마이닝_vector,list,matrix (0) | 2019.04.09 |