2016-09-26 11 views
0

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)이 있습니까?

+0

그냥 내'text2vec' 패키지 자습서를 살펴 : dsnotes.com/text2vec/vectorization.html합니다. 나는 그것을 도울 것이고, 나는 대답으로 게시 할 것이다. –

+0

내가 언급 한 페이지에서 가져온 것은 Feature2 해킹 트릭이었습니다. 이것은 Question2에 대한 답변입니다. 감사. –

+0

두 질문에 모두 대답해야합니다. a) idf는 워드 단위의 스케일링 (기차 데이터에서 얻은 것)입니다. b) 새로운 문서에 대한 어휘 기반 벡터화의 경우 이전에 결코 만난 적이없는 토큰을 고려하지 않을 것입니다. –

답변

0

이 답변 내가 대신 tmtext2vec 패키지 (> = 0.4)를 사용합니다. 개인적으로 많은 이유들 때문에 tm을 사용하지 않는 것이 좋습니다. 많은 양의 유사한 질문을 참조하십시오. 그러나 나는 텍스트 2vec의 저자이기 때문에 편견을 가지고 있습니다.

모든 질문에 대한 전체 기사는 this tutorial을 확인하십시오. 여기

일반 영어에 대한 답변이 있습니다 :

    • idf 우리가 기차 데이터에서받은 단지 단어 당 스케일링 느릅 나무입니다. 보이지 않는 데이터에 정확히 동일한 변환을 적용 할 수 있습니다. 당신은 (또는 무게의 벡터로 생각할 수) idf 스파 스 대각 행렬을 계속해야
  1. 전에 우리는 단순히 발생하지 않을 토큰을 고려하지 않을 것이다 새 문서에 대한
  2. 경우 어휘를 기반으로 벡터화. 기능 해싱 중 두 가지 어휘 기반 벡터화에 대한 응답 시간은 거의 입니다. 위의 링크로 튜토리얼을 참조하십시오.