| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788 |
- \subsection{Sprungtypen}
- Die beiden bereits definierten Sprungtypen, der strukturelle Sprung
- sowie der inhaltliche Mehrfachsprung werden im folgenden erklärt.
- Der strukturelle Sprung entspricht einer zufälligen Wahl eines
- Nachbarknotens. Hier gibt es nichts besonderes zu beachten.
- Bei inhaltlichen Mehrfachsprüngen sieht die Sache schon anders aus:
- Es ist nicht sinnvoll, direkt von einem strukturellem Knoten
- $v \in \N_t$ zu einem mit $v$ verbundenen Wortknoten $w$ zu springen
- und von diesem wieder zu einem verbundenem strutkurellem Knoten
- $v' \in \N_t$. Würde man dies machen, wäre zu befürchten, dass
- aufgrund von Homonymen die Qualität der Klassifizierung verringert
- wird. So hat \enquote{Brücke} im Deutschen viele Bedeutungen.
- Gemeint sein können z.~B. das Bauwerk, das Entwurfsmuster der
- objektorientierten Programmierung oder ein Teil des Gehirns.
- Deshalb wird für jeden Knoten $v$, von dem aus man einen inhaltlichen
- Mehrfachsprung machen will folgendes vorgehen gewählt:
- \begin{enumerate}
- \item Gehe alle in $v$ startenden Random Walks der Länge 2 durch
- und erstelle eine Liste $L$, der erreichbaren Knoten $v'$. Speichere
- außerdem, durch wie viele Pfade diese Knoten $v'$ jeweils erreichbar sind.
- \item Betrachte im folgenden nur die Top-$q$ Knoten, wobei $q \in \mathbb{N}$
- eine zu wählende Konstante des Algorithmus ist.
- \item Wähle mit Wahrscheinlichkeit $\frac{\Call{Anzahl}{v'}}{\sum_{w \in L} \Call{Anzahl}{v'}}$
- den Knoten $v'$ als Ziel des Mehrfachsprungs.
- \end{enumerate}
- Konkret könnte also ein Inhaltlicher Mehrfachsprung sowie wie in
- Algorithmus~\ref{alg:DYCOS-content-multihop} beschrieben umgesetz werden.
- \begin{algorithm}[H]
- \begin{algorithmic}[1]
- \Procedure{InhaltlicherMehrfachsprung}{Knoten $v$}
- \State \textit{//Alle Knoten bestimmen, die von $v$ aus über Pfade der Länge 2 erreichbar sind}
- \State \textit{//Zusätzlich wird für diese Knoten die Anzahl der Pfade der Länge 2 bestimmt,}
- \State \textit{//durch die sie erreichbar sind}
- \State $reachableNodes \gets$ defaultdict
- \ForAll{Wortknoten $w$ in $v.\Call{getWordNodes}{ }$}
- \ForAll{Strukturknoten $x$ in $w.\Call{getStructuralNodes}{ }$}
- \State $reachableNodes[x] \gets reachableNodes[x] + 1$
- \EndFor
- \EndFor
- \State \textit{//Im folgenden gehe ich davon aus, dass ich über Indizes wahlfrei auf Elemente }
- \State \textit{//aus $M_H$ zugreifen kann. Dies muss bei der konkreten Wahl der Datenstruktur}
- \State \textit{//berücksichtigt werden}
- \State $M_H \gets \Call{max}{reachableNodes, q}$ \Comment{Also: $|M_H| = q$, falls $|reachableNodes|\geq q$}
- \State \textit{//Generate dictionary with relative frequencies}
- \State $s \gets 0$
- \ForAll{Knoten $x$ in $M_H$}
- \State $s \gets s + reachableNodes[x]$
- \EndFor
- \State $relativeFrequency \gets $ Dictionary
- \ForAll{Knoten $x$ in $M_H$}
- \State $relativeFrequency \gets \frac{reachableNodes[x]}{s}$
- \EndFor
- \State $random \gets \Call{random}{0, 1}$
- \State $s \gets 0$
- \State $i \gets 0$
- \While{$s < random$}
- \State $s \gets s + relativeFrequency[i]$
- \State $i \gets i + 1$
- \EndWhile
-
- \State $v \gets M_H[i-1]$
- \State \Return $v$
- \EndProcedure
- \end{algorithmic}
- \caption{Inhaltlicher Mehrfachsprung}
- \label{alg:DYCOS-content-multihop}
- \end{algorithm}
- \begin{algorithm}[H]
- \begin{algorithmic}[1]
- \Procedure{SturkturellerSprung}{Knoten $v$, Anzahl $q$}
- \State $n \gets v.\Call{NeighborCount}{}$ \Comment{Wähle aus der Liste der Nachbarknoten}
- \State $r \gets \Call{RandomInt}{0, n-1}$ \Comment{einen zufällig aus}
- \State $v \gets v.\Call{Next}{r}$ \Comment{Gehe zu diesem Knoten}
- \State \Return $v$
- \EndProcedure
- \end{algorithmic}
- \caption{Struktureller Sprung}
- \label{alg:DYCOS-structural-hop}
- \end{algorithm}
|