DYCOS-Algorithmus.tex 8.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169
  1. \subsection{Überblick}
  2. DYCOS (\underline{DY}namic \underline{C}lassification algorithm with
  3. c\underline{O}ntent and \underline{S}tructure) ist ein
  4. Knotenklassifizierungsalgorithmus, der Ursprünglich in \cite{aggarwal2011}
  5. vorgestellt wurde.
  6. Ein zentrales Element des DYCOS-Algorithmus ist der sog. {\it Random Walk}:
  7. \begin{definition}[Random Walk, Sprung]
  8. Sei $G = (V, E)$ mit $E \subseteq V \times V$ ein Graph und
  9. $v_0 \in V$ ein Knoten des Graphen.
  10. Ein Random Walk der Länge $l$ auf $G$, startend bei $v_0$ ist nun der
  11. zeitdiskrete stochastische Prozess, der $v_i$ auf einen zufällig gewählten
  12. Nachbarn $v_{i+1}$ abbildet (für $i \in 0, \dots, l-1$). Die Abbildung $v_i
  13. \mapsto v_{i+1}$ heißt ein Sprung.
  14. \end{definition}
  15. Der DYCOS-Algorithmus klassifiziert einzelne Knoten, indem $r$ Random Walks der
  16. Länge $l$, startend bei dem zu klassifizierenden Knoten $v$ gemacht werden.
  17. Dabei werden die Beschriftungen der besuchten Knoten gezählt. Die Beschriftung,
  18. die am häufigsten vorgekommen ist, wird als Beschriftung für $v$ gewählt. DYCOS
  19. nutzt also die sog. Homophilie, d.~h. die Eigenschaft, dass Knoten, die nur
  20. wenige Hops von einander entfernt sind, häufig auch ähnlich sind \cite{bhagat}.
  21. Der DYCOS-Algorithmus arbeitet jedoch nicht direkt auf dem Graphen, sondern
  22. erweitert ihn mit Hilfe der zur Verfügung stehenden Texte. Wie diese
  23. Erweiterung erstellt wird, wird im Folgenden erklärt.\\
  24. Für diese Erweiterung wird zuerst wird Vokabular $W_t$ bestimmt, das
  25. charakteristisch für eine Knotengruppe ist. Wie das gemacht werden kann und
  26. warum nicht einfach jedes Wort in das Vokabular aufgenommen wird, wird in
  27. \cref{sec:vokabularbestimmung} erläutert.\\
  28. Nach der Bestimmung des Vokabulars wird für jedes Wort im Vokabular ein
  29. Wortknoten zum Graphen hinzugefügt. Alle Knoten, die der Graph zuvor hatte,
  30. werden nun \enquote{Strukturknoten} genannt.
  31. Ein Strukturknoten $v$ wird genau dann mit einem Wortknoten $w \in W_t$
  32. verbunden, wenn $w$ in einem Text von $v$ vorkommt. \Cref{fig:erweiterter-graph}
  33. zeigt beispielhaft den so entstehenden, semi-bipartiten Graphen.
  34. Der DYCOS-Algorithmus betrachtet also die Texte, die einem Knoten
  35. zugeordnet sind, als eine Multimenge von Wörtern. Das heißt, zum einen
  36. wird nicht auf die Reihenfolge der Wörter geachtet, zum anderen wird
  37. bei Texten eines Knotens nicht zwischen verschiedenen
  38. Texten unterschieden. Jedoch wird die Anzahl der Vorkommen
  39. jedes Wortes berücksichtigt.
  40. \begin{figure}[htp]
  41. \centering
  42. \input{figures/graph-content-and-structure.tex}
  43. \caption{Erweiterter Graph}
  44. \label{fig:erweiterter-graph}
  45. \end{figure}
  46. Entsprechend werden zwei unterschiedliche Sprungtypen unterschieden, die
  47. strukturellen Sprünge und inhaltliche Zweifachsprünge:
  48. \begin{definition}[struktureller Sprung]
  49. Sei $G_{E,t} = (V_t, E_{S,t} \cup E_{W,t}, V_{L,t}, W_{t})$ der
  50. um die Wortknoten $W_{t}$ erweiterte Graph.
  51. Dann heißt das zufällige wechseln des aktuell betrachteten
  52. Knoten $v \in V_t$ zu einem benachbartem Knoten $w \in V_t$
  53. ein \textit{struktureller Sprung}.
  54. \end{definition}
  55. \goodbreak
  56. Im Gegensatz dazu benutzten inhaltliche Zweifachsprünge tatsächlich die
  57. Grapherweiterung:
  58. \begin{definition}[inhaltlicher Zweifachsprung]
  59. Sei $G_t = (V_t, E_{S,t} \cup E_{W,t}, V_{L,t}, W_{t})$ der um die
  60. Wortknoten $W_{t}$ erweiterte Graph.
  61. Dann heißt das zufällige wechseln des aktuell betrachteten Knoten $v \in
  62. V_t$ zu einem benachbartem Knoten $w \in W_t$ und weiter zu einem
  63. zufälligem Nachbar $v' \in V_t$ von $w$ ein inhaltlicher Zweifachsprung.
  64. \end{definition}
  65. Jeder inhaltliche Zweifachsprung beginnt und endet also in einem
  66. Strukturknoten, springt über einen Wortknoten und ist ein Pfad der Länge~2.
  67. Ob in einem Sprung der Random Walks ein struktureller Sprung oder ein
  68. inhaltlicher Zweifachsprung gemacht wird, wird jedes mal zufällig neu
  69. entschieden. Dafür wird der Parameter $0 \leq p_S \leq 1$ für den Algorithmus
  70. gewählt. Mit einer Wahrscheinlichkeit von $p_S$ wird ein struktureller Sprung
  71. durchgeführt und mit einer Wahrscheinlichkeit von $(1-p_S)$ ein modifizierter
  72. inhaltlicher Zweifachsprung, wie er in \cref{sec:sprungtypen} erklärt wird,
  73. gemacht. Der Parameter $p_S$ gibt an, wie wichtig die Struktur des Graphen im
  74. Verhältnis zu den textuellen Inhalten ist. Bei $p_S = 0$ werden ausschließlich
  75. die Texte betrachtet, bei $p_S = 1$ ausschließlich die Struktur des Graphen.
  76. Die Vokabularbestimmung kann zu jedem Zeitpunkt $t$ durchgeführt werden, muss
  77. es aber nicht.
  78. In \cref{alg:DYCOS} steht der DYCOS-Algorithmus in Form von Pseudocode:
  79. In \cref{alg1:l8} wird für jeden unbeschrifteten Knoten
  80. durch die folgenden Zeilen eine Beschriftung gewählt.
  81. \Cref{alg1:l10} führt $r$ Random Walks durch. In \cref{alg1:l11} wird eine
  82. temporäre Variable für den aktuell betrachteten Knoten angelegt.
  83. In \cref{alg1:l12} bis \cref{alg1:l21} werden einzelne Random Walks der Länge
  84. $l$ durchgeführt, wobei die beobachteten Beschriftungen gezählt werden und mit
  85. einer Wahrscheinlichkeit von $p_S$ ein struktureller Sprung durchgeführt wird.
  86. \begin{algorithm}[ht]
  87. \begin{algorithmic}[1]
  88. \Require \\$G_{E,t} = (V_t, E_{S,t} \cup E_{W,t}, V_{L,t}, W_t)$ (Erweiterter Graph),\\
  89. $r$ (Anzahl der Random Walks),\\
  90. $l$ (Länge eines Random Walks),\\
  91. $p_s$ (Wahrscheinlichkeit eines strukturellen Sprungs),\\
  92. $q$ (Anzahl der betrachteten Knoten in der Clusteranalyse)
  93. \Ensure Klassifikation von $V_t \setminus V_{L,t}$\\
  94. \\
  95. \ForAll{Knoten $v \in V_t \setminus V_{L,t}$}\label{alg1:l8}
  96. \State $d \gets $ leeres assoziatives Array
  97. \For{$i = 1, \dots,r$}\label{alg1:l10}
  98. \State $w \gets v$\label{alg1:l11}
  99. \For{$j= 1, \dots, l$}\label{alg1:l12}
  100. \State $sprungTyp \gets \Call{random}{0, 1}$
  101. \If{$sprungTyp \leq p_S$}
  102. \State $w \gets$ \Call{SturkturellerSprung}{$w$}
  103. \Else
  104. \State $w \gets$ \Call{InhaltlicherZweifachsprung}{$w$}
  105. \EndIf
  106. \State $beschriftung \gets w.\Call{GetLabel}{ }$
  107. \If{$!d.\Call{hasKey}{beschriftung}$}
  108. \State $d[beschriftung] \gets 0$
  109. \EndIf
  110. \State $d[beschriftung] \gets d[beschriftung] + 1$
  111. \EndFor\label{alg1:l21}
  112. \EndFor
  113. \If{$d$.\Call{isEmpty}{ }} \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 \Comment{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})$ verwaltet der
  130. 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 (auch \enquote{dictionary} oder
  136. \enquote{map} genannt) geschehen. Wörter, die nicht in
  137. Texten von $v$ vorkommen, sind nicht im Array. Für
  138. alle vorkommenden Wörter ist der gespeicherte Wert zum
  139. Schlüssel $w \in W_t$ die Anzahl der Vorkommen von
  140. $w$ in den Texten von $v$.
  141. \item Für jedes Wort des Vokabulars $W_t$ wird eine Liste von
  142. Knoten verwaltet, in deren Texten das Wort vorkommt.
  143. Diese Liste wird bei den inhaltlichen Zweifachsprung,
  144. der in \cref{sec:sprungtypen} erklärt wird,
  145. verwendet.
  146. \end{itemize}
  147. \input{Sprungtypen}
  148. \input{Vokabularbestimmung}