DYCOS-Algorithmus.tex 7.0 KB

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