6 Stimmen

Wie man Ähnlichkeitsmaße aus Wordnet normalisiert

Ich versuche, die semantische Ähnlichkeit zwischen zwei Wörtern zu berechnen. Ich verwende wordnet-basierte Ähnlichkeitsmaße, d.h. die Resnik-Messung (RES), die Lin-Messung (LIN), die Jiang- und Conrath-Messung (JNC) und die Banerjee- und Pederson-Messung (BNP).

Um das zu tun, verwende ich nltk und Wordnet 3.0. Als nächstes möchte ich die Ähnlichkeitswerte, die aus verschiedenen Maßen erhalten wurden, kombinieren. Dafür muss ich die Ähnlichkeitswerte normalisieren, da einige Maße Werte zwischen 0 und 1 liefern, während andere Werte größer als 1 liefern.

Meine Frage lautet also, wie normalisiere ich die Ähnlichkeitswerte, die aus verschiedenen Maßen erhalten wurden.

Zusätzliche Details darüber, was ich eigentlich versuche zu tun: Ich habe eine Menge von Wörtern. Ich berechne die paarweise Ähnlichkeit zwischen den Wörtern und entferne die Wörter, die nicht stark mit anderen Wörtern in der Menge korreliert sind.

11voto

pkacprzak Punkte 5537

Wie man ein einzelnes Maß normalisiert

Betrachten wir ein einzelnes beliebiges Ähnlichkeitsmaß M und nehmen ein beliebiges Wort w.

Definiere m = M(w,w). Dann nimmt m den maximal möglichen Wert von M an.

Definieren wir MN als ein normiertes Maß M.

Für zwei Wörter w, u kannst du berechnen MN(w, u) = M(w, u) / m.

Es ist leicht zu erkennen, dass wenn M nicht-negative Werte annimmt, dann nimmt MN Werte in [0, 1] an.

Wie man ein aus vielen Maßen kombiniertes Maß normalisiert

Um dein eigenes definiertes Maß F aus k verschiedenen Maßen m_1, m_2, ..., m_k zu berechnen, normalisiere zunächst unabhängig jedes m_i mit der obigen Methode und definiere dann:

alpha_1, alpha_2, ..., alpha_k

so dass alpha_i das Gewicht des i-ten Maßes angibt.

Alle Alphas müssen sich zu 1 summieren, d.h.:

alpha_1 + alpha_2 + ... + alpha_k = 1

Dann berechnest du dein eigenes Maß für w, u wie folgt:

F(w, u) = alpha_1 * m_1(w, u) + alpha_2 * m_2(w, u) + ... + alpha_k * m_k(w, u)

Es ist klar, dass F Werte in [0,1] annimmt

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X