Latent Semantic Analysis(LSA) Tutorial 잠재적 의미 분석 LSA 소개 4
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
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])
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
cocos2d Lua 학습(一)ios에서 루아 함수 호출 및 전참 방법 lua 코드: 출력 결과: lua 호출 C++ 방법: add 함수: lua 코드: 출력 결과: 함수를 호출합니다. 함수를 호출하려면 다음 협의를 따르십시오. 우선, 호출할 함...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.