2012-05-08 4 views

답변

0

엔진이 문서의 올바른 언어를 추측 한 엔진임을 알 수있는 값처럼 보입니다. 일반적으로 0에 가까운 숫자 일수록 더 확실하다고 생각합니다.하지만 언어를 함께 혼합하고 전달하여 값을 확인하는 방법을 테스트 할 수 있어야합니다. 그것은 당신이 일치로 간주하도록 '충분히 가깝다'고 생각하는 것에 따라 langid를 사용할 때 프로그램을 미세 조정할 수있게합니다.

4

나는이 langid.py 코드의 중요한 덩어리라고 생각합니다 :

def nb_classify(fv): 
    # compute the log-factorial of each element of the vector 
    logfv = logfac(fv).astype(float) 
    # compute the probability of the document given each class 
    pdc = np.dot(fv,nb_ptc) - logfv.sum() 
    # compute the probability of the document in each class 
    pd = pdc + nb_pc 
    # select the most likely class 
    cl = np.argmax(pd) 
    # turn the pd into a probability distribution 
    pd /= pd.sum() 
    return cl, pd[cl] 

그것은 저자가 가능한 각 언어에 대한 데이터의 multinomial 로그 후방 뭔가를 계산하는 나에게 보인다. logfv은 PMF (x_1!...x_k!)의 분모의 대수를 계산합니다. np.dot(fv,nb_ptc)p_1^x_1...p_k^x_k 항의 로그의 을 계산합니다. 따라서 pdc은 언어 조건부 로그 가능성 목록과 비슷합니다 (단, n! 용어가 누락되었습니다). nb_pc은 이전 확률과 유사하므로 log-posteriors가 pd이됩니다. 정규화 라인 인 pd /= pd.sum()은 대개 확률과 비슷한 값 (로그 확률 값이 아닌)을 정규화하기 때문에 혼란 스럽습니다. 또한 문서의 예제 (('en', -55.106250761034801))는 정규화 된 것처럼 보이지 않습니다. 정규화 선을 추가하기 전에 생성 된 것일 수도 있습니다.

어쨌든,이 값인 pd[cl]은 신뢰 점수입니다. 현재 코드를 기반으로하는 나의 이해는 작은 값이 높은 신뢰를 나타내는 0에서 1/97 사이의 값이어야한다는 것입니다 (97 개 언어가 있기 때문에).

3

저는 실제로 langid.py의 저자입니다. 불행히도, 나는 질문을 한 지 거의 1 년 만에이 질문을 발견했습니다. 나는이 질문이 제기 된 이후 정상화 처리를 정돈했다. 그래서 모든 README 예제는 실제 확률을 보여주기 위해 업데이트되었다.

정규화를 해제하여 얻을 수있는 값은 정규화되지 않은 로그 확률입니다. log/exp는 단조 적이기 때문에 가장 가능성이 높은 클래스를 결정할 확률을 실제로 계산할 필요는 없습니다. 이 log-prob의 실제 값은 실제로 사용자에게 유용하지 않습니다. 나는 그것을 결코 포함하지 않아야하고, 나는 미래에 그것의 산출물을 제거 할 수있다.

관련 문제