DYCOS-Algorithmus.tex 6.9 KB

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