DYCOS-Algorithmus.tex 7.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174
  1. \subsection{Überblick}
  2. DYCOS (\underline{DY}namic \underline{C}lassification
  3. algorithm with c\underline{O}ntent and \underline{S}tructure) ist ein
  4. Knotenklassifizierungsalgorithmus, der Ursprünglich in \cite{aggarwal2011} vorgestellt
  5. wurde.
  6. Ein zentrales Element des DYCOS-Algorithmus ist der sog.
  7. {\it Random Walk}:
  8. \begin{definition}[Random Walk, Sprung]
  9. Sei $G = (V, E)$ mit $E \subseteq V \times V$ ein Graph und
  10. $v_0 \in V$ ein Knoten des Graphen.
  11. %Sei außerdem $f: V \rightarrow \mathcal{P}(V)$ eine Abbildung
  12. %mit der Eigenschaft:
  13. %\[ \forall v \in V \forall v' \in f(v): \exists \text{Weg von } v \text{ nach } v'\]
  14. Ein Random Walk der Länge $l$ auf $G$, startend bei $v_0$ ist
  15. nun der zeitdiskrete stochastische Prozess, der $v_i$
  16. auf einen zufällig gewählten Nachbarn $v_{i+1}$ abbildet
  17. (für $i \in 0, \dots, l-1$).
  18. Die Abbildung $v_i \mapsto v_{i+1}$ heißt ein Sprung.
  19. \end{definition}
  20. Der DYCOS-Algorithmus klassifiziert einzelne Knoten, indem $r$ Random Walks der Länge $l$,
  21. startend bei dem zu klassifizierenden Knoten $v$ gemacht werden. Dabei
  22. werden die Beschriftungen der besuchten Knoten gezählt. Die Beschriftung, die am häufigsten
  23. vorgekommen ist, wird als Beschriftung für $v$ gewählt.
  24. DYCOS nutzt also die sog. Homophilie, d.~h. die Eigenschaft, dass
  25. Knoten, die nur wenige Hops von einander entfernt sind, häufig auch
  26. ähnlich sind \cite{bhagat}. Der DYCOS-Algorithmus arbeitet jedoch nicht
  27. direkt auf dem Graphen, sondern erweitert ihn mit
  28. Hilfe der zur Verfügung stehenden Texte. Wie diese Erweiterung
  29. erstellt wird, wird im Folgenden erklärt.\\
  30. Für diese Erweiterung wird zuerst wird Vokabular $W_t$ bestimmt, das
  31. charakteristisch für eine Knotengruppe ist. Wie das gemacht werden kann
  32. und warum nicht einfach jedes Wort in das Vokabular aufgenommen wird,
  33. wird in \cref{sec:vokabularbestimmung} erläutert.\\
  34. Nach der Bestimmung des Vokabulars wird für
  35. jedes Wort im Vokabular ein Wortknoten zum Graphen hinzugefügt. Alle
  36. Knoten, die der Graph zuvor hatte, werden nun \enquote{Strukturknoten}
  37. genannt.
  38. Ein Strukturknoten $v$ wird genau dann mit einem Wortknoten $w \in W_t$
  39. verbunden, wenn $w$ in einem Text von $v$ vorkommt.
  40. Der DYCOS-Algorithmus betrachtet also die Texte, die einem Knoten
  41. zugeordnet sind, als eine Multimenge von Wörtern. Das heißt, zum einen
  42. wird nicht auf die Reihenfolge der Wörter geachtet, zum anderen wird
  43. bei Texten eines Knotens nicht zwischen verschiedenen
  44. Texten unterschieden. Jedoch wird die Anzahl der Vorkommen
  45. jedes Wortes berücksichtigt.
  46. \begin{figure}[htp]
  47. \centering
  48. \input{figures/graph-content-and-structure.tex}
  49. \caption{Erweiterter Graph}
  50. \label{fig:erweiterter-graph}
  51. \end{figure}
  52. Entsprechend werden zwei unterschiedliche Sprungtypen unterschieden,
  53. die strukturellen Sprünge und inhaltliche Mehrfachsprünge:
  54. \begin{definition}[struktureller Sprung]
  55. Sei $G_{E,t} = (V_t, E_{S,t} \cup E_{W,t}, V_{L,t}, W_{t})$ der
  56. um die Wortknoten $W_{t}$ erweiterte Graph.
  57. Dann heißt das zufällige wechseln des aktuell betrachteten
  58. Knoten $v \in V_t$ zu einem benachbartem Knoten $w \in V_t$
  59. ein struktureller Sprung.
  60. \end{definition}
  61. \goodbreak
  62. Im Gegensatz dazu benutzten inhaltliche Mehrfachsprünge
  63. tatsächlich die Grapherweiterung:
  64. \begin{definition}[inhaltlicher Mehrfachsprung]
  65. Sei $G_t = (V_t, E_{S,t} \cup E_{W,t}, V_{L,t}, W_{t})$ der
  66. um die Wortknoten $W_{t}$ erweiterte Graph.
  67. Dann heißt das zufällige wechseln des aktuell betrachteten
  68. Knoten $v \in V_t$ zu einem benachbartem Knoten $w \in W_t$
  69. und weiter zu einem zufälligem Nachbar $v' \in V_t$ von $w$
  70. ein inhaltlicher Mehrfachsprung.
  71. \end{definition}
  72. Jeder inhaltliche Mehrfachsprung beginnt und endet also in einem Strukturknoten,
  73. springt über einen Wortknoten und ist ein Pfad der Länge~2.
  74. Ob in einem Sprung der Random Walks ein struktureller Sprung oder
  75. ein inhaltlicher Mehrfachsprung gemacht wird, wird jedes mal zufällig
  76. neu entschieden. Dafür wird der Parameter $0 \leq p_S \leq 1$ für den Algorithmus
  77. gewählt. Mit einer Wahrscheinlichkeit von $p_S$ wird ein struktureller
  78. Sprung durchgeführt und mit einer Wahrscheinlichkeit
  79. von $(1-p_S)$ ein modifizierter inhaltlicher Mehrfachsprung, wie er in
  80. \cref{sec:sprungtypen} erklärt wird, gemacht. Der
  81. Parameter $p_S$ gibt an, wie wichtig die Struktur des Graphen im Verhältnis
  82. zu den textuellen Inhalten ist. Bei $p_S = 0$ werden ausschließlich
  83. die Texte betrachtet, bei $p_S = 1$ ausschließlich die Struktur des
  84. Graphen.
  85. Die Vokabularbestimmung kann zu jedem Zeitpunkt $t$ durchgeführt
  86. werden, muss es aber nicht.
  87. In \cref{alg:DYCOS} wird der DYCOS-Algorithmus als
  88. Pseudocode vorgestellt.
  89. \begin{algorithm}
  90. \begin{algorithmic}[1]
  91. \Require \\$G_{E,t} = (V_t, E_{S,t} \cup E_{W,t}, V_{L,t}, W_t)$ (Erweiterter Graph),\\
  92. $r$ (Anzahl der Random Walks),\\
  93. $l$ (Länge eines Random Walks),\\
  94. $p_s$ (Wahrscheinlichkeit eines strukturellen Sprungs),\\
  95. $q$ (Anzahl der betrachteten Knoten in der Clusteranalyse)
  96. \Ensure Klassifikation von $V_t \setminus V_{L,t}$\\
  97. \\
  98. \ForAll{Knoten $v \in V_t \setminus V_{L,t}$}
  99. \State $d \gets $ defaultdict
  100. \For{$i = 1, \dots,r$}
  101. \State $w \gets v$
  102. \For{$j= 1, \dots, l$}
  103. \State $sprungTyp \gets \Call{random}{0, 1}$
  104. \If{$sprungTyp \leq p_S$}
  105. \State $w \gets$ \Call{SturkturellerSprung}{$w$}
  106. \Else
  107. \State $w \gets$ \Call{InhaltlicherMehrfachsprung}{$w$}
  108. \EndIf
  109. \State $w \gets v.\Call{GetLabel}{ }$ \Comment{Zähle die Beschriftung}
  110. \State $d[w] \gets d[w] + 1$
  111. \EndFor
  112. \EndFor
  113. \If{$d$ ist leer} \Comment{Es wurde kein beschrifteter Knoten gesehen}
  114. \State $M_H \gets \Call{HäufigsteLabelImGraph}{ }$
  115. \Else
  116. \State $M_H \gets \Call{max}{d}$
  117. \EndIf
  118. \\
  119. \State \textit{//Wähle aus der Menge der häufigsten Beschriftungen $M_H$ zufällig eine aus}
  120. \State $label \gets \Call{Random}{M_H}$
  121. \State $v.\Call{AddLabel}{label}$ \Comment{und weise dieses $v$ zu}
  122. \EndFor
  123. \State \Return Beschriftungen für $V_t \setminus V_{L,t}$
  124. \end{algorithmic}
  125. \caption{DYCOS-Algorithmus}
  126. \label{alg:DYCOS}
  127. \end{algorithm}
  128. \subsection{Datenstrukturen}
  129. Zusätzlich zu dem gerichteten Graphen $G_t = (V_t, E_t, V_{L,t})$
  130. verwaltet der DYCOS-Algorithmus zwei weitere Datenstrukturen:
  131. \begin{itemize}
  132. \item Für jeden Knoten $v \in V_t$ werden die vorkommenden Wörter,
  133. die auch im Vokabular $W_t$ sind,
  134. und deren Anzahl gespeichert. Das könnte z.~B. über ein
  135. assoziatives Array geschehen. Wörter, die nicht in
  136. Texten von $v$ vorkommen, sind nicht im Array. Für
  137. alle vorkommenden Wörter ist der gespeicherte Wert zum
  138. Schlüssel $w \in W_t$ die Anzahl der Vorkommen von
  139. $w$ in den Texten von $v$.
  140. \item Für jedes Wort des Vokabulars $W_t$ wird eine Liste von
  141. Knoten verwaltet, in deren Texten das Wort vorkommt.
  142. Diese Liste wird bei den inhaltlichen Mehrfachsprung,
  143. der in \cref{sec:sprungtypen} erklärt wird,
  144. verwendet.
  145. \item An einigen Stellen macht ein assoziatives Array, auch
  146. \enquote{dictionary} oder \enquote{map} genannt, Sinn.
  147. Zustätzlich ist es nützlich, wenn diese Datenstruktur für
  148. unbekannte Schlüssel keinen Fehler ausgibt, sondern für diese
  149. Schlüssel den Wert 0 annimmt. Eine solche Datenstruktur
  150. wird in Python \texttt{defaultdict} genannt und ich werde
  151. im Folgenden diese Benennung beibehalten.
  152. \end{itemize}
  153. \input{Sprungtypen}
  154. \input{Vokabularbestimmung}