Vokabularbestimmung.tex 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. \subsection{Vokabularbestimmung}\label{sec:vokabularbestimmung}
  2. Da die Größe des Vokabulars die Datenmenge signifikant beeinflusst,
  3. liegt es in unserem Interesse so wenig Wörter wie möglich ins
  4. Vokabular aufzunehmen. Insbesondere sind Wörter nicht von Interesse,
  5. die in fast allen Texten vorkommen, wie im Deutschen z.~B.
  6. \enquote{und}, \enquote{mit} und die Pronomen. Es ist wünschenswert Wörter zu
  7. wählen, die die Texte möglichst stark voneinander Unterscheiden. Der
  8. DYCOS-Algorithmus wählt die Top-$m$ dieser Wörter als Vokabular, wobei
  9. $m \in \mathbb{N}$ eine festzulegende Konstante ist. In \cite[S. 365]{aggarwal2011}
  10. wird der Einfluss von $m \in \Set{5,10, 15,20}$ auf die Klassifikationsgüte
  11. untersucht und festgestellt, dass die Klassifikationsgüte mit größerem $m$
  12. sinkt, sie also für $m=5$ für den DBLP-Datensatz am höchsten ist. Für den
  13. CORA-Datensatz wurde mit $m \in \set{3,4,5,6}$ getestet und kein signifikanter
  14. Unterschied festgestellt.
  15. Nun kann man manuell eine Liste von zu beachtenden Wörtern erstellen
  16. oder mit Hilfe des Gini-Koeffizienten automatisch ein Vokabular erstellen.
  17. Der Gini-Koeffizient ist ein statistisches Maß, das die Ungleichverteilung
  18. bewertet. Er ist immer im Intervall $[0,1]$, wobei $0$ einer
  19. Gleichverteilung entspricht und $1$ der größtmöglichen Ungleichverteilung.
  20. Sei nun $n_i(w)$ die Häufigkeit des Wortes $w$ in allen Texten mit der $i$-ten
  21. Knotenbeschriftung.
  22. \begin{align}
  23. p_i(w) &:= \frac{n_i(w)}{\sum_{j=1}^{|\L_t|} n_j(w)} &\text{(Relative Häufigkeit des Wortes $w$)}\\
  24. G(w) &:= \sum_{j=1}^{|\L_t|} p_j(w)^2 &\text{(Gini-Koeffizient von $w$)}
  25. \end{align}
  26. In diesem Fall ist $G(w)=0$ nicht möglich, da zur Vokabularbestimmung nur
  27. Wörter betrachtet werden, die auch vorkommen.
  28. Ein Vorschlag, wie die Vokabularbestimmung implementiert werden kann, ist als
  29. Pseudocode mit \cref{alg:vokabularbestimmung} gegeben. In \cref{alg4:l6} wird
  30. eine Teilmenge $S_t \subseteq V_{L,t}$ zum Generieren des Vokabulars gewählt.
  31. In \cref{alg4:l8} wird ein Array $cLabelWords$ erstellt, das $(|\L_t|+1)$
  32. Felder hat. Die Elemente dieser Felder sind jeweils assoziative Arrays, deren
  33. Schlüssel Wörter und deren Werte natürliche Zahlen sind. Die ersten $|\L_t|$
  34. Elemente von $cLabelWords$ dienen dem Zählen der Häufigkeit der Wörter von
  35. Texten aus $S_t$, wobei für jede Beschriftung die Häufigkeit einzeln gezählt
  36. wird. Das letzte Element aus $cLabelWords$ zählt die Summe der Wörter. Diese
  37. Datenstruktur wird in \cref{alg4:l10} bis \ref{alg4:l12} gefüllt.
  38. In \cref{alg4:l17} bis \ref{alg4:l19} wird die relative Häufigkeit der Wörter
  39. bzgl. der Beschriftungen bestimmt. Daraus wird in \cref{alg4:l20} bis
  40. \ref{alg4:l22} der Gini-Koeffizient berechnet. Schließlich werden in
  41. \cref{alg4:l23} bis \ref{alg4:l24} die Top-$q$ Wörter mit den
  42. höchsten Gini-Koeffizienten zurückgegeben.
  43. \begin{algorithm}[ht]
  44. \begin{algorithmic}[1]
  45. \Require \\
  46. $V_{L,t}$ (beschriftete Knoten),\\
  47. $\L_t$ (Menge der Beschriftungen),\\
  48. $f:V_{L,t} \rightarrow \L_t$ (Beschriftungsfunktion),\\
  49. $m$ (Gewünschte Vokabulargröße)
  50. \Ensure $\M_t$ (Vokabular)\\
  51. \State $S_t \gets \Call{Sample}{V_{L,t}}$\label{alg4:l6} \Comment{Wähle $S_t \subseteq V_{L,t}$ aus}
  52. \State $\M_t \gets \emptyset$ \Comment{Menge aller Wörter}
  53. \State $cLabelWords \gets$ Array aus $(|\L_t|+1)$ assoziativen Arrays\label{alg4:l8}
  54. \ForAll{$v \in S_t$} \label{alg4:l10}
  55. \State $i \gets \Call{getLabel}{v}$
  56. \State \Comment{$w$ ist das Wort, $c$ ist die Häufigkeit}
  57. \ForAll{$(w, c) \in \Call{getTextAsMultiset}{v}$}
  58. \State $cLabelWords[i][w] \gets cLabelWords[i][w] + c$
  59. \State $cLabelWords[|\L_t|][w] \gets cLabelWords[i][|\L_t|] + c$
  60. \State $\M_t = \M_t \cup \Set{w}$
  61. \EndFor
  62. \EndFor\label{alg4:l12}
  63. \\
  64. \ForAll{Wort $w \in \M_t$}
  65. \State $p \gets $ Array aus $|\L_t|$ Zahlen in $[0, 1]$\label{alg4:l17}
  66. \ForAll{Label $i \in \L_t$}
  67. \State $p[i] \gets \frac{cLabelWords[i][w]}{cLabelWords[i][|\L_t|]}$
  68. \EndFor\label{alg4:l19}
  69. \State $w$.gini $\gets 0$ \label{alg4:l20}
  70. \ForAll{$i \in 1, \dots, |\L_t|$}
  71. \State $w$.gini $\gets$ $w$.gini + $p[i]^2$
  72. \EndFor\label{alg4:l22}
  73. \EndFor
  74. \State $\M_t \gets \Call{SortDescendingByGini}{\M_t}$\label{alg4:l23}
  75. \State \Return $\Call{Top}{\M_t, m}$\label{alg4:l24}
  76. \end{algorithmic}
  77. \caption{Vokabularbestimmung}
  78. \label{alg:vokabularbestimmung}
  79. \end{algorithm}
  80. Die Menge $S_t$ kann aus der Menge aller Dokumente, deren Knoten beschriftet
  81. sind, mithilfe des in \cite{Vitter} vorgestellten Algorithmus bestimmt werden.