Berechnung der Kullback-Leibler (KL) Distanz zwischen Textdokumenten mit numpy

Mein Ziel ist es, den KL-Abstand zwischen folgenden Textdokumenten zu berechnen:

1)The boy is having a lad relationship
2)The boy is having a boy relationship
3)It is a lovely day in NY

Ich habe zuerst die Dokumente vektorisiert, um numpy leicht anwenden zu können

1)[1,1,1,1,1,1,1]
2)[1,2,1,1,1,2,1]
3)[1,1,1,1,1,1,1]

Ich habe dann den folgenden Code zum Berechnen des KL-Abstands zwischen den Texten angewendet:

import numpy as np
import math
from math import log

v=[[1,1,1,1,1,1,1],[1,2,1,1,1,2,1],[1,1,1,1,1,1,1]]
c=v[0]
def kl(p, q):
    p = np.asarray(p, dtype=np.float)
    q = np.asarray(q, dtype=np.float)
    return np.sum(np.where(p != 0,(p-q) * np.log10(p / q), 0))
for x in v:
    KL=kl(x,c)
    print KL

Hier ist das Ergebnis des obigen Codes:[0.0, 0.602059991328, 0.0]. Die Texte 1 und 3 sind völlig unterschiedlich, aber der Abstand zwischen ihnen beträgt 0, während die stark verwandten Texte 1 und 2 einen Abstand von 0 haben0.602059991328. Das ist nicht richtig.

Hat jemand eine Idee, was ich in Bezug auf KL nicht richtig mache? Vielen Dank für Ihre Anregungen.

Antworten auf die Frage(3)

Ihre Antwort auf die Frage