| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091 |
- \subsection{Vokabularbestimmung}\label{sec:vokabularbestimmung}
- Da die Größe des Vokabulars die Datenmenge signifikant beeinflusst,
- liegt es in unserem Interesse so wenig Wörter wie möglich ins
- Vokabular aufzunehmen. Insbesondere sind Wörter nicht von Interesse,
- die in fast allen Texten vorkommen, wie im Deutschen z.~B.
- \enquote{und}, \enquote{mit} und die Pronomen. Es ist wünschenswert
- Wörter zu wählen, die die Texte möglichst stark voneinander Unterscheiden.
- Der DYCOS-Algorithmus wählt die Top-$m$ dieser Wörter als Vokabular,
- wobei $m \in \mathbb{N}$ eine Festzulegende Konstante ist. In \cite[S. 365]{aggarwal2011}
- wird der Einfluss von $m \in \Set{5,10, 15,20}$ auf die Klassifikationsgüte
- untersucht und festgestellt, dass die Klassifikationsgüte mit größerem
- $m$ sinkt, sie also für $m=5$ für den DBLP-Datensatz am höchsten ist.
- Für den CORA-Datensatz wurde mit $m \in \set{3,4,5,6}$ getestet und
- kein signifikanter Unterschied festgestellt.
- Nun kann man manuell eine Liste von zu beachtenden Wörtern erstellen
- oder mit Hilfe des Gini-Koeffizienten automatisch ein Vokabular erstellen.
- Der Gini-Koeffizient ist ein statistisches Maß, das die Ungleichverteilung
- bewertet. Er ist immer im Intervall $[0,1]$, wobei $0$ einer
- Gleichverteilung entspricht und $1$ der größtmöglichen Ungleichverteilung.
- Sei nun $n_i(w)$ die Häufigkeit des Wortes $w$ in allen Texten mit
- der $i$-ten Knotenbeschriftung.
- \begin{align}
- p_i(w) &:= \frac{n_i(w)}{\sum_{j=1}^{|\L_t|} n_j(w)} &\text{(Relative Häufigkeit des Wortes $w$)}\\
- G(w) &:= \sum_{j=1}^{|\L_t|} p_j(w)^2 &\text{(Gini-Koeffizient von $w$)}
- \end{align}
- In diesem Fall ist $G(w)=0$ nicht möglich, da zur Vokabularbestimmung
- nur Wörter betrachtet werden, die auch vorkommen.
- Ein Vorschlag, wie die Vokabularbestimmung implementiert werden kann,
- ist als Pseudocode mit \cref{alg:vokabularbestimmung}
- gegeben. In \cref{alg4:l6} wird eine Teilmenge $S_t \subseteq V_{L,t}$
- zum Generieren des Vokabulars gewählt. In \cref{alg4:l8} wird ein Array $cLabelWords$ erstellt, das $(|\L_t|+1)$ Felder hat.
- Die Elemente dieser Felder sind jeweils assoziative Arrays, deren
- Schlüssel Wörter und deren Werte natürliche Zahlen sind. Die ersten
- $|\L_t|$ Elemente von $cLabelWords$ dienem dem Zählen der Häufigkeit
- der Wörter von Texten aus $S_t$, wobei für jede Beschriftung die
- Häufigkeit einzeln gezählt wird. Das letzte Element aus $cLabelWords$
- zählt die Summe der Wörter. Diese Datenstruktur wird in
- \cref{alg4:l10} bis \ref{alg4:l12} gefüllt.
- In \cref{alg4:l17} bis \ref{alg4:l19} wird die relative Häufigkeit
- der Wörter bzgl. der Beschriftungen bestimmt. Daraus wird in
- \cref{alg4:l20} bis \ref{alg4:l22} der Gini-Koeffizient berechnet.
- Schließlich werden in \cref{alg4:l23} bis \ref{alg4:l24} die Top-$q$
- Wörter mit den höchsten Gini-Koeffizienten zurückgegeben.
- \begin{algorithm}[ht]
- \begin{algorithmic}[1]
- \Require \\
- $V_{L,t}$ (beschriftete Knoten),\\
- $\L_t$ (Menge der Beschriftungen),\\
- $f:V_{L,t} \rightarrow \L_t$ (Beschriftungsfunktion),\\
- $m$ (Gewünschte Vokabulargröße)
- \Ensure $\M_t$ (Vokabular)\\
- \State $S_t \gets \Call{Sample}{V_{L,t}}$\label{alg4:l6} \Comment{Wähle eine Teilmenge $S_t \subseteq V_{L,t}$ aus}
- \State $\M_t \gets \emptyset$ \Comment{Menge aller Wörter}
- \State $cLabelWords \gets$ Array aus $(|\L_t|+1)$ assoziativen Arrays\label{alg4:l8}
- \ForAll{$v \in S_t$} \label{alg4:l10}\Comment{Gehe jeden Text Wort für Wort durch}
- \State $i \gets \Call{getLabel}{v}$
- \ForAll{$(word, haeufigkeit) \in \Call{getTextAsMultiset}{v}$}
- \State $cLabelWords[i][word] \gets cLabelWords[i][word] + haeufigkeit$
- \State $cLabelWords[|\L_t|][word] \gets cLabelWords[i][|\L_t|] + haeufigkeit$
- \State $\M_t = \M_t \cup \Set{word}$
- \EndFor
- \EndFor\label{alg4:l12}
- \\
- \ForAll{Wort $w \in \M_t$}
- \State $p \gets $ Array aus $|\L_t|$ Zahlen in $[0, 1]$\label{alg4:l17}
- \ForAll{Label $i \in \L_t$}
- \State $p[i] \gets \frac{cLabelWords[i][w]}{cLabelWords[i][|\L_t|]}$
- \EndFor\label{alg4:l19}
- \State $w$.gini $\gets 0$ \label{alg4:l20}
- \ForAll{$i \in 1, \dots, |\L_t|$}
- \State $w$.gini $\gets$ $w$.gini + $p[i]^2$
- \EndFor\label{alg4:l22}
- \EndFor
- \State $\M_t \gets \Call{SortDescendingByGini}{\M_t}$\label{alg4:l23}
- \State \Return $\Call{Top}{\M_t, m}$\label{alg4:l24}
- \end{algorithmic}
- \caption{Vokabularbestimmung}
- \label{alg:vokabularbestimmung}
- \end{algorithm}
- Die Menge $S_t$ kann aus der Menge aller Dokumente, deren
- Knoten beschriftet sind, mithilfe des in \cite{Vitter} vorgestellten
- Algorithmus bestimmt werden.
|