Vokabularbestimmung.tex 3.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  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.
  7. Nun kann man manuell eine Liste von zu beachtenden Wörtern erstellen
  8. oder mit Hilfe des Gini-Koeffizienten automatisch ein Vokabular erstellen.
  9. Der Gini-Koeffizient ist ein statistisches Maß, das die Ungleichverteilung
  10. bewertet. Er ist immer im Intervall $[0,1]$, wobei $0$ einer
  11. Gleichverteilung entspricht und $1$ der größt möglichen Ungleichverteilung.
  12. Sei nun $n_i(w)$ die Häufigkeit des Wortes $w$ in allen Texten mit
  13. dem $i$-ten Label.
  14. \begin{align}
  15. p_i(w) &:= \frac{n_i(w)}{\sum_{j=1}^{|\L_t|} n_j(w)} &\text{(Relative Häufigkeit des Wortes $w$)}\\
  16. G(w) &:= \sum_{j=1}^{|\L_t|} p_j(w)^2 &\text{(Gini-Koeffizient von $w$)}
  17. \end{align}
  18. In diesem Fall ist $G(w)=0$ nicht möglich, da zur Vokabularbestimmung
  19. nur Wörter betrachtet werden, die auch vorkommen.
  20. Ein Vorschlag, wie die Vokabularbestimmung implementiert werden kann,
  21. ist als Pseudocode mit Algorithmus~\ref{alg:vokabularbestimmung}
  22. gegeben. Dieser Algorithmus benötigt neben dem Speicher für den
  23. Graphen, die Texte sowie die $m$ Vokabeln noch $\mathcal{O}(|\text{Verschiedene Wörter in } S_t| \cdot (|\L_t| + 1))$
  24. Speicher. Die Average-Case Zeitkomplexität beträgt
  25. $\mathcal{O}(|\text{Wörter in } S_t|)$, wobei dazu die Vereinigung
  26. von Mengen $M,N$ in $\mathcal{O}(\min{|M|, |N|})$ sein muss.
  27. \begin{algorithm}[H]
  28. \begin{algorithmic}[1]
  29. \Require \\
  30. $\T_t$ (Knoten mit Labels),\\
  31. $\L_t$ (Labels),\\
  32. $f:\T_t \rightarrow \L_t$ (Label-Funktion),\\
  33. $m$ (Gewünschte Vokabulargröße)
  34. \Ensure $\M_t$ (Vokabular)\\
  35. \State $S_t \gets \Call{Sample}{\T_t}$ \Comment{Wähle eine Teilmenge $S_t \subseteq \T_t$ aus}
  36. \State $\M_t \gets \bigcup_{v \in S_t} \Call{getTextAsSet}{v}$ \Comment{Menge aller Wörter}
  37. \State $cLabelWords \gets (|\L_t|+1) \times |\M_t|$-Array, mit 0en initialisert\\
  38. \ForAll{$v \in \T_t$} \Comment{Gehe jeden Text Wort für Wort durch}
  39. \State $i \gets \Call{getLabel}{v}$
  40. \ForAll{$(word, occurences) \in \Call{getTextAsMultiset}{v}$}
  41. \State $cLabelWords[i][word] \gets cLabelWords[i][word] + occurences$
  42. \State $cLabelWords[i][|\L_t|] \gets cLabelWords[i][|\L_t|] + occurences$
  43. \EndFor
  44. \EndFor
  45. \\
  46. \ForAll{Wort $w \in \M_t$}
  47. \State $p \gets $ Array aus $|\L_t|$ Zahlen in $[0, 1]$
  48. \ForAll{Label $i \in \L_t$}
  49. \State $p[i] \gets \frac{cLabelWords[i][w]}{cLabelWords[i][|\L_t|]}$
  50. \EndFor
  51. \State $w$.gini $\gets$ \Call{sum}{{\sc map}({\sc square}, $p$)}
  52. \EndFor
  53. \State $\M_t \gets \Call{SortDescendingByGini}{\M_t}$
  54. \State \Return $\Call{Top}{\M_t, m}$
  55. \end{algorithmic}
  56. \caption{Vokabularbestimmung}
  57. \label{alg:vokabularbestimmung}
  58. \end{algorithm}
  59. Die Menge $S_t$ kann durch Aus der Menge aller Dokumenten, deren
  60. Knoten gelabelt sind, mithile des in \cite{Vitter} vorgestellten
  61. Algorithmus bestimmt werden.