Latent Semantic Analysis(LSA) Tutorial 잠재적 의미 분석 LSA 소개 4

WangBen 20110916 Beijing
Part 2 - Modify the Counts with TFIDF
TFIDF 대체 단순 계수 계산
In sophisticated Latent Semantic Analysis systems, the raw matrix countsare usually modified so that rare words are weighted more heavily than commonwords. For example, a word that occurs in only 5% of the documents shouldprobably be weighted more heavily than a word that occurs in 90% of thedocuments. The most popular weighting is TFIDF (Term Frequency - InverseDocument Frequency). Under this method, the count in each cell is replaced bythe following formula.
복잡한 LSA 시스템에서 중요한 단어가 더 무거운 무게를 차지하기 위해 원시 행렬의 계수는 종종 수정된다.예를 들어 한 단어가 5% 밖에 안 되는 문서에서는 90% 문서에 나타난 단어보다 더 무거운 권한을 차지해야 한다.가장 자주 사용하는 가중치 계산 방법은 TFIDF(단어 주파수-역문서 주파수)입니다.이러한 방법을 바탕으로 우리는 각 단원의 수치를 수정한다.
TFIDFi,j = ( Ni,j/N*,j ) * log( D/Di) where
  • Ni,j = the number of times word i appears in document j (the original cell count).
  • N*,j = the number of total words in document j (just add the counts in column j).
  • D = the number of documents (the number of columns).
  • Di = the number of documents in which word i appears (the number of non-zero columns in row i).

  • Nij = 어떤 단어 i가 문서 j에 나타나는 횟수(매트릭스 단원의 원시값) N*j= 문서 j에 있는 모든 단어의 개수(즉 열 j에 있는 모든 수치의 합) D = 문서 개수(즉 매트릭스의 열수) Di= 단어 i를 포함하는 문서 개수(즉 매트릭스 i행이 0열이 아닌 개수)
    In this formula, words that concentrate in certain documents areemphasized (by the Ni,j/N*,jratio) and words that onlyappear in a few documents are also emphasized (by the log( D/Di )term).
    Since we have such a small example, we will skip this step and move on theheart of LSA, doing the singular value decomposition of our matrix of counts.However, if we did want to add TFIDF to our LSA class we could add the followingtwo lines at the beginning of our python file to import the log, asarray, andsum functions.
    이 공식에서 특정한 문서에 밀집되어 있는 단어가 강화되고 (Nij/N*j를 통해) 소수의 문서에서만 나타나는 단어도 강화된다 (D/Di를 통해)
    우리의 예가 너무 작기 때문에, 여기는 이 절차를 건너뛰고 LSA의 핵심 부분으로 들어가 우리의 계수 행렬에 대해 SVD를 할 것이다.그러나 이 LSA 클래스에 TFIDF를 추가해야 한다면 다음 두 줄의 코드를 추가해야 합니다.
    from math importlog
    from numpy import asarray, sum

    Then we would add the following TFIDF method to our LSA class. WordsPerDoc(N*,j) just holds the sum of each column, which is the total numberof index words in each document. DocsPerWord (Di) uses asarray tocreate an array of what would be True and False values, depending on whetherthe cell value is greater than 0 or not, but the 'i' argument turns it into 1'sand 0's instead. Then each row is summed up which tells us how many documentseach word appears in. Finally, we just step through each cell and apply theformula. We do have to change cols (which is the number of documents) into afloat to prevent integer division.
    다음은 이 TFIDF 방법을 LSA 클래스에 추가해야 합니다.WordsPerDoc은 행렬의 각 열의 합, 즉 각 문서의 단어 총수입니다.DocsPerWord는 asarray 방법을 이용하여 0, 1 그룹 (즉 0보다 큰 수치는 1에서 1로 귀속된다) 을 만들고 줄마다 합쳐서 단어가 얼마나 많은 문서에 나타났는지 계산합니다.마지막으로 각 행렬 단위에 대해 TFIDF 공식을 계산합니다.
    def TFIDF(self):
    
        WordsPerDoc = sum(self.A, axis=0)       
    
        DocsPerWord = sum(asarray(self.A > 0,'i'), axis=1)
    
        rows, cols = self.A.shape
    
        for i in range(rows):
    
            for j in range(cols):
    
                self.A[i,j] = (self.A[i,j] /WordsPerDoc[j]) * log(float(cols) / DocsPerWord[i])

    좋은 웹페이지 즐겨찾기