Là giải thích về độ thưa thớt chính xác?


10

Theo tài liệu của removeSparseTermschức năng từ tmgói, đây là những gì thưa thớt đòi hỏi:

A term-document matrix where those terms from x are removed which have at least a sparse percentage of empty (i.e., terms occurring 0 times in a document) elements. I.e., the resulting matrix contains only terms with a sparse factor of less than sparse.

Vì vậy, là một cách giải thích chính xác về điều này để nói nếu sparsebằng 0,99, thì chúng ta sẽ loại bỏ các thuật ngữ chỉ xuất hiện trong tối đa 1% dữ liệu?


Câu hỏi này phù hợp hơn với Stackoverflow, nơi có các thẻ cho tm và khai thác văn bản.
Ken Benoit

Câu trả lời:


16

Vâng , mặc dù sự nhầm lẫn của bạn ở đây là dễ hiểu, vì thuật ngữ "độ thưa" rất khó để xác định rõ ràng trong bối cảnh này.

Theo nghĩa của sparseđối số removeSparseTerms(), độ thưa thớt đề cập đến ngưỡng tần suất tài liệu tương đối cho một thuật ngữ, trên đó thuật ngữ này sẽ bị xóa. Tần số tài liệu tương đối ở đây có nghĩa là một tỷ lệ. Là trang trợ giúp cho các trạng thái lệnh (mặc dù không rõ ràng lắm), độ thưa thớt nhỏ hơn khi nó tiến đến 1.0. (Lưu ý rằng độ thưa thớt không thể lấy các giá trị 0 hoặc 1.0, chỉ các giá trị ở giữa.)

Vì vậy, việc giải thích của bạn là chính xác trong đó sparse = 0.99sẽ chỉ xóa các cụm từ mà nhiều thưa thớt hơn 0,99. Giải thích chính xác sparse = 0.99cho thuật ngữ , bạn sẽ giữ lại tất cả các thuật ngữ mà , trong đó là số lượng tài liệu - trong trường hợp này có thể tất cả các thuật ngữ sẽ được giữ lại (xem ví dụ bên dưới) .jdfj>N(10.99)N

Gần cực đoan khác, nếu sparse = .01, thì chỉ các thuật ngữ xuất hiện trong (gần) mọi tài liệu sẽ được giữ lại. (Tất nhiên điều này phụ thuộc vào số lượng thuật ngữ và số lượng tài liệu và trong ngôn ngữ tự nhiên, các từ phổ biến như "the" có thể xảy ra trong mọi tài liệu và do đó không bao giờ là "thưa thớt".)

Một ví dụ về ngưỡng thưa thớt 0,99, trong đó một thuật ngữ xảy ra nhiều nhất trong (ví dụ đầu tiên) ít hơn 0,01 tài liệu và (ví dụ thứ hai) chỉ hơn 0,01 tài liệu:

> # 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)

Dưới đây là một vài ví dụ bổ sung với văn bản và thuật ngữ thực tế:

> 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

Trong ví dụ cuối cùng sparse = 0.34, chỉ các điều khoản xảy ra trong hai phần ba tài liệu được giữ lại.

Một cách tiếp cận khác để cắt xén các thuật ngữ từ ma trận thuật ngữ tài liệu dựa trên tần số tài liệu là gói phân tích văn bản quanteda . Chức năng tương tự ở đây không phải là sự thưa thớt mà là trực tiếp đến tần suất tài liệu của các thuật ngữ (như trong 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

Cách sử dụng này có vẻ đơn giản hơn nhiều đối với tôi.


1
Chào mừng đến với trang web Ken. Cảm ơn câu trả lời tuyệt vời của bạn. Tôi hy vọng chúng tôi nhìn thấy nhiều hơn về bạn.
Glen_b -Reinstate Monica
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.