한글 - 토픽 모델링 r 코드
R의 removeSparseTerms는 어떻게 작동합니까? (2)
단순한 요소의 빈도와 비슷합니다. 값을 0으로 설정하면 모든 텍스트에 나타나는 모든 항목을 반환합니다. 1로 설정하면 텍스트의 모든 항목을 반환합니다. 0.5를 선택하면 전체 요소에서 50 %의 시간에 나타나는 텍스트 만 볼 수 있습니다. 이것은 다음과 같은 모든 처리 단위를 계산하여 수행됩니다.
1- (합계 (no_off_times_of_the_individual_text_element) / 합계 (no_off_total_text_elements)) <= Set_Value
R에서 removeSparseTerms 메소드를 사용하고 임계 값을 입력해야합니다. 또한 값이 높을수록 반환 된 행렬에 남아있는 용어의 수가 더 많아지는 것을 알았습니다.
이 방법은 어떻게 작동하며 그 뒤에있는 논리는 무엇입니까? 나는 희소성의 개념을 이해하지만,이 문턱은 얼마나 많은 문서가 용어를 나타내야하는지 또는 다른 비율 등을 나타 냅니까?
removeSparseTerms()
에 대한 sparse
인수의 의미에서 희박 성은 용어가 제거 될 기간에 대한 상대적 문서 빈도 의 임계 값을 나타냅니다. 여기에서 상대 문서 빈도는 비율을 의미합니다. 명령 상태에 대한 도움말 페이지 (매우 명확하지는 않지만)는 희소성이 1.0에 가까워 질 수록 작아 집니다. (희소성은 0 또는 1.0의 값을 취할 수 없으며 그 중간의 값만 사용할 수 있습니다.)
예를 들어, removeSparseTerms()
대한 인수로 sparse = 0.99
를 설정하면 sparse = 0.99
보다 희박한 용어 만 제거됩니다. sparse = 0.99
대한 정확한 해석은 용어 $ j $에 대해 $ df_j> N * (1 - 0.99) $ 인 모든 용어를 유지한다는 것입니다. $ N $은 문서 수입니다.이 경우에는 아마 모두 용어는 그대로 유지됩니다 (아래 예 참조).
다른 극단 부근에서 sparse = .01
인 경우 (거의) 모든 문서에 나타나는 용어 만 유지됩니다. (물론 이것은 용어의 수와 문서의 수에 달려 있으며, 자연어에서는 "the"와 같은 일반적인 단어가 모든 문서에 나타나기 때문에 "드문 드문"일 수는 없습니다.)
첫 번째 예에서 0.01 미만의 문서 및 두 번째 예에서 0.01 미만의 문서에서 발생하는 용어의 희소성 임계 값의 예는 0.99입니다.
> # second term occurs in just 1 of 101 documents
> myTdm1 <- as.DocumentTermMatrix(slam::as.simple_triplet_matrix(matrix(c(rep(1, 101), rep(1,1), rep(0, 100)), ncol=2)),
+ weighting = weightTf)
> removeSparseTerms(myTdm1, .99)
<<DocumentTermMatrix (documents: 101, terms: 1)>>
Non-/sparse entries: 101/0
Sparsity : 0%
Maximal term length: 2
Weighting : term frequency (tf)
>
> # second term occurs in 2 of 101 documents
> myTdm2 <- as.DocumentTermMatrix(slam::as.simple_triplet_matrix(matrix(c(rep(1, 101), rep(1,2), rep(0, 99)), ncol=2)),
+ weighting = weightTf)
> removeSparseTerms(myTdm2, .99)
<<DocumentTermMatrix (documents: 101, terms: 2)>>
Non-/sparse entries: 103/99
Sparsity : 49%
Maximal term length: 2
Weighting : term frequency (tf)
다음은 실제 텍스트와 용어가있는 몇 가지 추가 예제입니다.
> myText <- c("the quick brown furry fox jumped over a second furry brown fox",
"the sparse brown furry matrix",
"the quick matrix")
> require(tm)
> myVCorpus <- VCorpus(VectorSource(myText))
> myTdm <- DocumentTermMatrix(myVCorpus)
> as.matrix(myTdm)
Terms
Docs brown fox furry jumped matrix over quick second sparse the
1 2 2 2 1 0 1 1 1 0 1
2 1 0 1 0 1 0 0 0 1 1
3 0 0 0 0 1 0 1 0 0 1
> as.matrix(removeSparseTerms(myTdm, .01))
Terms
Docs the
1 1
2 1
3 1
> as.matrix(removeSparseTerms(myTdm, .99))
Terms
Docs brown fox furry jumped matrix over quick second sparse the
1 2 2 2 1 0 1 1 1 0 1
2 1 0 1 0 1 0 0 0 1 1
3 0 0 0 0 1 0 1 0 0 1
> as.matrix(removeSparseTerms(myTdm, .5))
Terms
Docs brown furry matrix quick the
1 2 2 0 1 1
2 1 1 1 0 1
3 0 0 1 1 1
sparse = 0.34
의 마지막 예제에서는 문서의 2/3에 나오는 용어 만 유지되었습니다.
문서 빈도에 따라 문서 - 용어 행렬에서 용어를 다듬기위한 또 다른 방법은 텍스트 분석 패키지 quanteda . 여기에서 동일한 기능은 희소성이 아니라 오히려 용어의 문서 빈도 ( tf-idf 에서처럼)에 직접적으로 관련됩니다.
> require(quanteda)
> myDfm <- dfm(myText, verbose = FALSE)
> docfreq(myDfm)
a brown fox furry jumped matrix over quick second sparse the
1 2 1 2 1 2 1 2 1 1 3
> trim(myDfm, minDoc = 2)
Features occurring in fewer than 2 documents: 6
Document-feature matrix of: 3 documents, 5 features.
3 x 5 sparse Matrix of class "dfmSparse"
features
docs brown furry the matrix quick
text1 2 2 1 0 1
text2 1 1 1 1 0
text3 0 0 1 1 1
이 사용법은 나에게 훨씬 더 직관적 인 것처럼 보입니다.