TF-IDF 가중치가있는 일부 문서의 bag-of-word 표현에 document-term-matrix가 있다고 가정합니다. 예 :TF-IDF 문서 용어 행렬을 사용하여 새 문서를 표현하는 방법과 대형 행렬을 사용하여 프로덕션 환경에서 구현하는 방법은 무엇입니까?
library(tm)
x <- c("a cat sat on a mat", "cat and dog are friends", "friends are sitting on a mat")
corpus <- Corpus(VectorSource(x))
dtm <- DocumentTermMatrix(corpus, control = list(weighting = weightTfIdf)
inspect(dtm[1:3,])
<<DocumentTermMatrix (documents: 3, terms: 8)>>
Non-/sparse entries: 12/12
Sparsity : 50%
Maximal term length: 7
Weighting : term frequency - inverse document frequency (normalized) (tf-idf)
Terms
Docs and are cat dog friends mat sat sitting
1 0.0000000 0.0000000 0.1949875 0.0000000 0.0000000 0.1949875 0.5283208 0.0000000
2 0.3169925 0.1169925 0.1169925 0.3169925 0.1169925 0.0000000 0.0000000 0.0000000
3 0.0000000 0.1462406 0.0000000 0.0000000 0.1462406 0.1462406 0.0000000 0.3962406
Question1 : R에
어떻게 새 문서의 벡터 표현을 어떻게해야합니까?
가) 모든 문서의 토큰이 매트릭스 (예에 열이 "고양이와 개는 매트에 친구가"위의 예에서) 랬 - 나는 IDF을 계산 어떻게 (즉 N
총 없음입니다 IDFi = log(N/ni)
경우의. 문서 및 ni
이다 노. 토큰 i
포함 된 문서의, IDF는 새 문서에서 계산하는 방법?)
b)는 새 문서가 이전에 발생한 적이 토큰을 포함하는 경우 (예를 들어 위의 "고양이와 마우스는 친구입니다" 예) - TF-IDF는 어떻게 계산됩니까?
Question2는 :
이제 DTM 행렬이 100K 문서 X 200K 말처럼, 스파 스이기는하지만 큰 가정하자. 그리고 빠른 응용 프로그램을 사용하려면 각 문서의 벡터 표현을 "빠르게"가져와야합니다 (정확한 정의가 없으며 500 밀리 초 미만으로 이야기합니다). 문서 사이의 코사인 거리를 계산합니다.이것은 제작 응용 프로그램입니다. 반드시 R이 아니어야합니다. 이러한 큰 DTM 행렬 및 프로젝트 문서를 벡터를 저장하는 일반적인 방법으로 사용할 수 있습니까? 서버에 어딘가에 거대한 행렬을 저장하고 문서를 쿼리 할 때마다 추출해야합니까? 아니면 Big Data 실제 응용 프로그램에 대한 추론 (heuristic)이 있습니까?
그냥 내'text2vec' 패키지 자습서를 살펴 : dsnotes.com/text2vec/vectorization.html합니다. 나는 그것을 도울 것이고, 나는 대답으로 게시 할 것이다. –
내가 언급 한 페이지에서 가져온 것은 Feature2 해킹 트릭이었습니다. 이것은 Question2에 대한 답변입니다. 감사. –
두 질문에 모두 대답해야합니다. a) idf는 워드 단위의 스케일링 (기차 데이터에서 얻은 것)입니다. b) 새로운 문서에 대한 어휘 기반 벡터화의 경우 이전에 결코 만난 적이없는 토큰을 고려하지 않을 것입니다. –