正しい言語 ID の横にlangid.pyは特定の値を返します - 「返される値は言語のスコアです。これは分類には不要であるため、ドキュメント確率によって正規化されていないため、確率推定ではありません。」しかし、値はどういう意味ですか??
3 に答える
これは 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]
著者は、考えられる各言語のデータの多項対数事後分布のようなものを計算しているように見えます。 logfv
PMF ( x_1!...x_k!
) の分母の対数を計算します。 np.dot(fv,nb_ptc)
項の対数を計算しp_1^x_1...p_k^x_k
ます。したがって、pdc
言語の条件付き対数尤度のリストのように見えます (n!
用語がないことを除いて)。 nb_pc
事前確率のように見えるのでpd
、対数事後確率になります。正規化線は、pd /= pd.sum()
通常、確率のような値 (対数確率値ではない) を正規化するため、私を混乱させます。また、ドキュメント ( ('en', -55.106250761034801)
) の例は、正規化されているようには見えません。正規化の行が追加される前に生成されたのではないでしょうか?
とにかく、簡単な答えは、この値pd[cl]
が信頼スコアであるということです。現在のコードに基づく私の理解では、値は 0 から 1/97 の間である必要があり (97 の言語があるため)、値が小さいほど信頼性が高いことを示します。
エンジンがドキュメントの正しい言語を推測したことの確実性を示す値のように見えます。一般的に数字が 0 に近いほど確実だと思いますが、言語を混ぜ合わせて渡すことで、どのような値が得られるかをテストできるはずです。これにより、langid を使用するときに、一致とみなすのに「十分に近い」と見なすものに応じて、プログラムを微調整できます。