📚 The CoCalc Library - books, templates and other resources
cocalc-examples / martinthoma-latex-examples / publications / Proseminar-Netzwerkanalyse / Vokabularbestimmung.tex
132928 viewsLicense: OTHER
\subsection{Vokabularbestimmung}\label{sec:vokabularbestimmung}1Da die Größe des Vokabulars die Datenmenge signifikant beeinflusst,2liegt es in unserem Interesse so wenig Wörter wie möglich ins3Vokabular aufzunehmen. Insbesondere sind Wörter nicht von Interesse,4die in fast allen Texten vorkommen, wie im Deutschen z.~B.5\enquote{und}, \enquote{mit} und die Pronomen. Es ist wünschenswert Wörter zu6wählen, die die Texte möglichst stark voneinander Unterscheiden. Der7DYCOS-Algorithmus wählt die Top-$m$ dieser Wörter als Vokabular, wobei8$m \in \mathbb{N}$ eine festzulegende Konstante ist. In \cite[S. 365]{aggarwal2011}9wird der Einfluss von $m \in \Set{5,10, 15,20}$ auf die Klassifikationsgüte10untersucht und festgestellt, dass die Klassifikationsgüte mit größerem $m$11sinkt, sie also für $m=5$ für den DBLP-Datensatz am höchsten ist. Für den12CORA-Datensatz wurde mit $m \in \set{3,4,5,6}$ getestet und kein signifikanter13Unterschied festgestellt.1415Nun kann man manuell eine Liste von zu beachtenden Wörtern erstellen16oder mit Hilfe des Gini-Koeffizienten automatisch ein Vokabular erstellen.17Der Gini-Koeffizient ist ein statistisches Maß, das die Ungleichverteilung18bewertet. Er ist immer im Intervall $[0,1]$, wobei $0$ einer19Gleichverteilung entspricht und $1$ der größtmöglichen Ungleichverteilung.2021Sei nun $n_i(w)$ die Häufigkeit des Wortes $w$ in allen Texten mit der $i$-ten22Knotenbeschriftung.23\begin{align}24p_i(w) &:= \frac{n_i(w)}{\sum_{j=1}^{|\L_t|} n_j(w)} &\text{(Relative Häufigkeit des Wortes $w$)}\\25G(w) &:= \sum_{j=1}^{|\L_t|} p_j(w)^2 &\text{(Gini-Koeffizient von $w$)}26\end{align}27In diesem Fall ist $G(w)=0$ nicht möglich, da zur Vokabularbestimmung nur28Wörter betrachtet werden, die auch vorkommen.2930Ein Vorschlag, wie die Vokabularbestimmung implementiert werden kann, ist als31Pseudocode mit \cref{alg:vokabularbestimmung} gegeben. In \cref{alg4:l6} wird32eine Teilmenge $S_t \subseteq V_{L,t}$ zum Generieren des Vokabulars gewählt.33In \cref{alg4:l8} wird ein Array $cLabelWords$ erstellt, das $(|\L_t|+1)$34Felder hat. Die Elemente dieser Felder sind jeweils assoziative Arrays, deren35Schlüssel Wörter und deren Werte natürliche Zahlen sind. Die ersten $|\L_t|$36Elemente von $cLabelWords$ dienen dem Zählen der Häufigkeit der Wörter von37Texten aus $S_t$, wobei für jede Beschriftung die Häufigkeit einzeln gezählt38wird. Das letzte Element aus $cLabelWords$ zählt die Summe der Wörter. Diese39Datenstruktur wird in \cref{alg4:l10} bis \ref{alg4:l12} gefüllt.4041In \cref{alg4:l17} bis \ref{alg4:l19} wird die relative Häufigkeit der Wörter42bzgl. der Beschriftungen bestimmt. Daraus wird in \cref{alg4:l20} bis43\ref{alg4:l22} der Gini-Koeffizient berechnet. Schließlich werden in44\cref{alg4:l23} bis \ref{alg4:l24} die Top-$q$ Wörter mit den45höchsten Gini-Koeffizienten zurückgegeben.4647\begin{algorithm}[ht]48\begin{algorithmic}[1]49\Require \\50$V_{L,t}$ (beschriftete Knoten),\\51$\L_t$ (Menge der Beschriftungen),\\52$f:V_{L,t} \rightarrow \L_t$ (Beschriftungsfunktion),\\53$m$ (Gewünschte Vokabulargröße)54\Ensure $\M_t$ (Vokabular)\\55\State $S_t \gets \Call{Sample}{V_{L,t}}$\label{alg4:l6} \Comment{Wähle $S_t \subseteq V_{L,t}$ aus}56\State $\M_t \gets \emptyset$ \Comment{Menge aller Wörter}57\State $cLabelWords \gets$ Array aus $(|\L_t|+1)$ assoziativen Arrays\label{alg4:l8}58\ForAll{$v \in S_t$} \label{alg4:l10}59\State $i \gets \Call{getLabel}{v}$60\State \Comment{$w$ ist das Wort, $c$ ist die Häufigkeit}61\ForAll{$(w, c) \in \Call{getTextAsMultiset}{v}$}62\State $cLabelWords[i][w] \gets cLabelWords[i][w] + c$63\State $cLabelWords[|\L_t|][w] \gets cLabelWords[i][|\L_t|] + c$64\State $\M_t = \M_t \cup \Set{w}$65\EndFor66\EndFor\label{alg4:l12}67\\68\ForAll{Wort $w \in \M_t$}69\State $p \gets $ Array aus $|\L_t|$ Zahlen in $[0, 1]$\label{alg4:l17}70\ForAll{Label $i \in \L_t$}71\State $p[i] \gets \frac{cLabelWords[i][w]}{cLabelWords[i][|\L_t|]}$72\EndFor\label{alg4:l19}7374\State $w$.gini $\gets 0$ \label{alg4:l20}75\ForAll{$i \in 1, \dots, |\L_t|$}76\State $w$.gini $\gets$ $w$.gini + $p[i]^2$77\EndFor\label{alg4:l22}78\EndFor7980\State $\M_t \gets \Call{SortDescendingByGini}{\M_t}$\label{alg4:l23}81\State \Return $\Call{Top}{\M_t, m}$\label{alg4:l24}82\end{algorithmic}83\caption{Vokabularbestimmung}84\label{alg:vokabularbestimmung}85\end{algorithm}8687Die Menge $S_t$ kann aus der Menge aller Dokumente, deren Knoten beschriftet88sind, mithilfe des in \cite{Vitter} vorgestellten Algorithmus bestimmt werden.899091