DYCOS-Algorithmus.tex 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  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 gemacht werden und die Labels
  7. der besuchten Knoten gezählt werden. Der DYCOS-Algorithmus nimmt
  8. jedoch nicht einfach den Graphen für dieses Verfahren, sondern
  9. eine Erweiterung.
  10. Für diese Erweiterung wird zuerst wird Vokabular $W_t$ bestimmt, das
  11. charakteristisch für eine Knotengruppe ist. Wie das gemacht werden kann, wird in
  12. Abschnitt~\ref{sec:vokabularbestimmung} erläutert. Dann wird für
  13. jedes Wort im Vokabular ein Wortknoten zum Graphen hinzugefügt.
  14. Ein Strukturknoten $v$ wird genau dann mit einem Wortknoten $w \in W_t$
  15. verbunden, wenn $w$ in einem Text von $v$ vorkommt.
  16. \begin{figure}[htp]
  17. \centering
  18. \input{figures/graph-content-and-structure.tex}
  19. \caption{Erweiterter Graph}
  20. \label{fig:erweiterter-graph}
  21. \end{figure}
  22. Der DYCOS-Algorithmus betrachtet die Texte, die zu einem Knoten
  23. zugeornet sind, als eine
  24. Multimenge von Wörtern. Das heißt, zum einen wird nicht auf die
  25. Reihenfolge der Wörter geachtet, zum anderen wird bei Texten
  26. eines Knotens nicht zwischen verschiedenen Texten unterschieden.
  27. Jedoch wird die Anzahl der vorkommen jedes Wortes berücksichtigt.
  28. \subsection{Datenstrukturen}
  29. Zusätzlich zu dem gerichteten Graphen $G_t = (V_t, E_t, V_{L,t})$
  30. verwaltet der DYCOS-Algorithmus zwei weitere Datenstrukturen:
  31. \begin{itemize}
  32. \item Für jeden Knoten $v \in V_t$ werden die vorkommenden Wörter
  33. und deren Anzahl gespeichert. Das könnte z.~B. über ein
  34. assoziatives Array geschehen. Wörter, die nicht in
  35. Texten von $v$ vorkommen, sind nicht im Array. Für
  36. alle vorkommenden Wörter ist der gespeicherte Wert zum
  37. Schlüssel \enquote{Wort} die Anzahl der Vorkommen von
  38. \enquote{Wort} in den Texten von $v$.
  39. \item Für jedes Wort des Vokabulars $W_t$ wird eine Liste von
  40. Knoten verwaltet, in deren Texten das Wort vorkommt.
  41. \end{itemize}
  42. \subsection{Algorithmen}
  43. Bevor der Algorithmus formal beschrieben wird, wird eine Definition
  44. des strukturellen $l$-Sprungs benötigt:
  45. \begin{definition}
  46. Sei $G_{E,t} = (V_t, E_{S,t} \cup E_{W,t}, V_{L,t}, W_{t})$ der
  47. um die Wortknoten $W_{t}$ erweiterte Graph.
  48. Dann heißt ein Random Walk der Länge $l$ in diesem Graphen
  49. ein \textbf{struktureller $l$-Sprung}, wenn für den Random Walk
  50. nur Kanten aus $E_{S,t}$ benutzt werden.
  51. \end{definition}
  52. Der strukturelle $l$-Sprung ist also ein Random Walk der Länge $l$
  53. im Graph $G_t$. Im Gegensatz dazu benötigt der inhaltliche $l$-Multisprung
  54. tatsächlich die Grapherweiterung:
  55. \begin{definition}
  56. Sei $G_t = (V_t, E_{S,t} \cup E_{W,t}, V_{L,t}, W_{t})$ der
  57. um die Wortknoten $W_{t}$ erweiterte Graph.
  58. Dann heißt ein Random Walk der Länge $l$ in diesem Graphen
  59. ein \textbf{inhaltlicher $l$-Multisprung}, wenn für den Random Walk
  60. in jedem der $l$ Schritte, startend von einem Knoten $v \in V_t$
  61. eine Kante zu einem Wortknoten und von dem Wortknoten wieder
  62. zu einem Strukturknoten genommen wird.
  63. \end{definition}
  64. \begin{algorithm}[H]
  65. \begin{algorithmic}
  66. \Require \\$\G_t = (\N_t, \A_t, \T_t)$ (Netzwerk),\\
  67. $r$ (Anzahl der Random Walks),\\
  68. $l$ (Länge eines Random Walks),\\
  69. $p_s$ (Wahrscheinlichkeit eines strukturellen Sprungs)
  70. \Ensure Klassifikation von $\N_t \setminus \T_t$\\
  71. \ForAll{Knoten $v$ in $\N_t \setminus \T_t$}
  72. \For{$i$ von $1$ bis $l$}
  73. \State $sprungTyp \gets \Call{random}{0.0, 1.0}$
  74. \If{$sprungTyp \leq p_s$}
  75. \State Strukturellen $l$-Sprung ausführen
  76. \Else
  77. \State Inhaltlichen $l$-Sprung ausführen
  78. \EndIf
  79. \EndFor
  80. \EndFor
  81. \State \Return Labels für $\N_t \setminus \T_t$
  82. \end{algorithmic}
  83. \caption{DYCOS-Algorithmus}
  84. \label{alg:DYCOS}
  85. \end{algorithm}
  86. \subsection{Inhaltliche Mehrfachsprünge}
  87. Es ist nicht sinnvoll, direkt von einem strukturellem Knoten
  88. $v \in \N_t$ zu einem mit $v$ verbundenen Wortknoten $w$ zu springen
  89. und von diesem wieder zu einem verbundenem strutkurellem Knoten
  90. $v' \in \N_t$. Würde man dies machen, wäre zu befürchten, dass
  91. aufgrund von Polysemen die Qualität der Klassifizierung verringert
  92. wird. So hat \enquote{Brücke} im Deutschen viele Bedeutungen.
  93. Gemeint sein können z.~B. das Bauwerk, das Entwurfsmuster der
  94. objektorientierten Programmierung oder ein Teil des Gehirns.
  95. Deshalb wird für jeden Knoten $v$, von dem aus man einen inhaltlichen
  96. Mehrfachsprung machen will folgendes vorgehen gewählt:
  97. \begin{enumerate}
  98. \item Gehe alle in $v$ startenden Random Walks der Länge 2 durch
  99. und erstelle eine Liste $L$, der erreichbaren Knoten $v'$. Speichere
  100. außerdem, durch wie viele Pfade diese Knoten $v'$ jeweils erreichbar sind.
  101. \item Betrachte im folgenden nur die Top-$q$ Knoten, wobei $q \in \mathbb{N}$
  102. eine zu wählende Konstante des Algorithmus ist.
  103. \item Wähle mit Wahrscheinlichkeit $\frac{\Call{Anzahl}{v'}}{\sum_{w \in L} \Call{Anzahl}{v'}}$
  104. den Knoten $v'$ als Ziel des Mehrfachsprungs.
  105. \end{enumerate}
  106. \input{Vokabularbestimmung}