DYCOS-Algorithmus.tex 6.9 KB

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