Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
Download

📚 The CoCalc Library - books, templates and other resources

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