2012-04-18 3 views
2

tf-idf 행렬을 기반으로 피어슨 상관 계수를 계산하여 다른 용어와 조합하여 어떤 용어가 발생하는지 파악하는 것이 합리적입니까? 수학적으로 맞습니까?tf-idf 값을 기반으로 상관 관계를 계산 하시겠습니까?

내 출력은 각 용어의 각 셀에 상관 계수가있는 상관 행렬입니다.

  • ------- 용어 1 용어 2 term3
  • 용어 2
  • 용어 2
  • 용어 2

답변

3

그것은 '다른 용어와 함께 발생하는'당신의 정의에 따라 달라집니다. 이 점을 좀 더 명확히하기 위해 :

피어슨 평균 상관 관계 분석을 수행 할 때 idf는 중요하지 않습니다. 동일한 항의 모든 tf 값은 최종 tf-idf를 산출하는 동일한 idf 값으로 곱해진다. PMC는 입력 스케일링에 대해 불변하므로 여기에서 idf가 제거됩니다. 그러므로 제안 된 아이디어에서 중요한 것은 모두 tf입니다. 당신이 idf를 계산조차하지 않으면 몇 가지 계산을 저장할 수도 있지만 그렇게하면 많이 상처주지 않을 것입니다.

이제 tf의 사용법에 대해 알아보십시오. 예를 들어 무엇이 필요한지 알아 내려고합시다.

TermADocument1에 자주 나타나고 Document2에 나타납니다. 반면에 TermBDocument1에 조금 자주 나타나며 Document2에 나타납니다. 이 두 용어가 함께 나타나지 않겠습니까? 동일한 문서에서 발생하지만 빈도가 다릅니다. tf-idf의 PMC를 사용하면 (주파수의 차이 때문에) 동시에 발생하지 않는 결과가 생깁니다.

이 시점에서 PMC 값은 -1에서 1로 변경됩니다. 나는. (PMC = 1)과 반대되는 단어 (PMC = -1)를 가질 수 있습니다. 이것이 당신이 모델링하는 도메인에 맞습니까? 그렇지 않은 경우 PMC에 1을 추가하십시오.

또 다른 대안은 코사인 유사성을 사용하는 것인데, 이것은 PMC와 매우 유사하지만 약간 다른 특성을 가지고 있습니다. 또한 어떤 경우에는 실제 공동 발생에만 관심이있을 수 있으며 빈도는 신경 쓰지 않습니다.

이 모든 방법은 '정확합니다'라고 말합니다. 더 중요한 질문은 모델링하는 문제에 가장 적합한이 방법들 중 어느 것인가입니다. 대부분의 경우 이론적으로는 결정할 수 없지만 여러 대안을 시도하고 문제 도메인에 가장 적합한 것을 테스트하는 경우에만 가능합니다.

EDIT (아래 코멘트에 대한 몇 가지 발언) :

코사인 유사성이 실제로 도움이 되는가, 그러나 당신이이 경우에 다르게 생각해야합니다. 물론 문서의 용어에 대한 용어 - 주파수 벡터를 생성 한 다음 이러한 문서 용어 - 주파수 벡터에 대한 코사인 유사성을 계산할 수 있습니다. 당신은 정확하게 당신에게 서로의 게시물의 유사성을 줄 것이라고 지적했습니다. 그러나 이것은 내가 의미했던 것이 아닙니다. 전체 용어 - 빈도 행렬이있는 경우 벡터를 생성 할 수도 있습니다.이 벡터는 단일 용어로 각 용어의 빈도를 기술합니다. 이러한 벡터의 코사인 유사성을 계산할 수도 있습니다. 이렇게하면 문서 공동 발생 (co-occurence)을 기반으로하는 용어의 유사성을 얻을 수 있습니다.

그것에 대해 이런 식으로 생각 (하지만 먼저 우리는 약간의 표기가 필요합니다) :

용어 i 문서 j (내가 여기 IDF을 무시하고 있습니다 등장 횟수를 나타내는 f_{i,j}을 할 수 있기 때문에 그냥 것 문서 대신 용어를 처리 할 때 취소). 또한 F=(f_{i,j})_{i=1...N,j=1...M}을 전체 문서 - 용어 행렬 (용어는 행과 문서를 행으로 표시)을 나타냅니다. 마지막으로 |F|_c 행렬 F을 호출합니다. 각 열은 l^2 표준 및 |F|_r 행렬 F 행렬로 정규화됩니다. 각 행은 l^2 표준에 따라 표준화됩니다. 물론 평소와 마찬가지로 A^T은 전치 부호 A을 나타냅니다. 이 경우 당신은

(|F|_r)*(|F|_r)^T 

같은 용어를 기반으로 모든 문서 사이의 정상 코사인 거리 이것은 당신에게 문서의 유사성을 설명하는 MxM 매트릭스를 줄 것이다있다. 대신 용어의 유사성을 계산하려면

, 당신은 단순히 당신에게 문서의 공동 발행 수에 따라 용어의 유사성을 설명하는 NxN 매트릭스를 제공

(|F|_c)^T*(|F|_c) 

을 계산합니다.

PMC의 계산은 기본적으로 동일하며 각 행렬 곱셈의 행과 열에 적용되는 정규화 유형이 다릅니다.

이제는 다른 게시물에 termA이 문서에 나타나면 같은 문서에 termB도 표시 될 가능성이 얼마나 높습니까? 또는 형식적으로 말하기 p(termB | termA) 여기서 p(termX)은 문서에 나타나는 termX 확률을 나타냅니다. 즉 다시 계산이 매우 간단 완전히 다른 동물이지만 :

1. Count the number of documents in which `termA` appears (call it num_termA) 
2. Count the number of documents in which both `termA` and `termB` appear (call it num_termA_termB) 

then p(termB | termA)=num_termA_termB/num_termA 

이 공동 occurenct 가능성 실제로 사용의 통계적 측정치이다. 알 수 있듯이, p(termB | termA) == p(termA | termB) 관계는 유지되지 않으므로 MDS를 통한 클러스터링에이 공동 측정 값을 전혀 사용할 수 없으며 가장 가능성이 큽니다 (말장난 의도 없음).

제 제안은 PMC와 코사인 유사성을 시험해 보는 것입니다 (위에서 볼 수 있듯이 정규화가 다르므로 두 가지를 모두 구현하는 것이 빠름). 그리고 클러스터링 후에 어느 것이 더 잘 보이는지 확인하십시오.

일련의 문서를 기반으로 주제를 클러스터링하는 고급 기술이 있습니다. 용어 문서 행렬의 주성분 분석 (PCA) 또는 비 음수 행렬 요소 분해 (non-negative matrix factorisation) 또한 자주 사용됩니다 (잠재 의미 해석 또는 LSA 참조). 그러나 이것은 유스 케이스에 과도 할 수 있으며 이러한 기술은 수행하기가 훨씬 더 어렵습니다. PMC와 코사인 유사성은 구현이 간단하고 (코사인 유사도가 약간 더 간단합니다. 정규화가 더 쉽기 때문에) 사 망하기 쉽고 절대적으로 잘못 될 수있는 절대적인 이점이 있습니다.

+0

저는 가장 인기있는 주제와 특정 브랜드에 대한 관계를 함께 2 차원지도로 만들려고합니다. 나는 약 2500 소셜 미디어/네트워크 게시물 (페이스 북, 트위터, 보드 등). 나는 토큰 화, filtern (불용어) 및 게시물의 줄기를 세웠다. 그런 다음 모든 문서 (게시물)/용어에 대해 tf-idf 값을 계산했습니다. 이 값을 사용하여 상관 행렬을 계산했습니다. 상관 행렬을 사용하여 다차원 스케일링을 수행했습니다.출력은 모든 주제 (용어)의 "맵"입니다. 함께 발생하는 주제는 함께 발생하지 않는 주제보다 더 가깝습니다. – user1341610

+0

내 생각에 코사인 유사성은 전체 게시물/문서의 유사성을 계산하기 때문에 내 방식에 맞지 않습니다. 필요한 것은 용어가 서로 관련되어 있는지를 측정하는 것입니다. 마치 누군가가 그의 포스트 XY에 글을 쓰면 XZ도 썼을 가능성이 있습니다. – user1341610

+0

@ user1341610 : 내 수정 사항을 확인하고 조금 더 정리해 주시기 바랍니다. – LiKao

관련 문제