mirror of
https://github.com/MartinThoma/LaTeX-examples.git
synced 2025-04-25 06:18:05 +02:00
DYCOS-Algorithmus genauer beschrieben
This commit is contained in:
parent
5496a1f553
commit
89c438ee52
6 changed files with 80 additions and 30 deletions
2
documents/DYCOS/.gitignore
vendored
Normal file
2
documents/DYCOS/.gitignore
vendored
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
data/cora
|
||||||
|
data/dblp
|
|
@ -4,14 +4,20 @@ algorithm with c\underline{O}ntent and \underline{S}tructure) ist ein
|
||||||
Knotenklassifizierungsalgorithmus, der Ursprünglich in \cite{aggarwal2011} vorgestellt
|
Knotenklassifizierungsalgorithmus, der Ursprünglich in \cite{aggarwal2011} vorgestellt
|
||||||
wurde. Er klassifiziert Knoten, indem mehrfach Random Walks startend
|
wurde. Er klassifiziert Knoten, indem mehrfach Random Walks startend
|
||||||
bei dem zu klassifizierenden Knoten gemacht werden und die Labels
|
bei dem zu klassifizierenden Knoten gemacht werden und die Labels
|
||||||
der besuchten Knoten gezählt werden. Der DYCOS-Algorithmus nimmt
|
der besuchten Knoten gezählt werden. Das Label, das am häufigsten
|
||||||
jedoch nicht einfach den Graphen für dieses Verfahren, sondern
|
vorgekommen ist, wird zur Klassifizierung verwendet.
|
||||||
eine Erweiterung.
|
Der DYCOS-Algorithmus nimmt jedoch nicht einfach den Graphen für
|
||||||
|
dieses Verfahren, sondern erweitert ihn mit Hilfe der zur Verfügung
|
||||||
|
stehenden Texte.
|
||||||
|
|
||||||
Für diese Erweiterung wird zuerst wird Vokabular $W_t$ bestimmt, das
|
Für diese Erweiterung wird zuerst wird Vokabular $W_t$ bestimmt, das
|
||||||
charakteristisch für eine Knotengruppe ist. Wie das gemacht werden kann, wird in
|
charakteristisch für eine Knotengruppe ist. Wie das gemacht werden kann
|
||||||
Abschnitt~\ref{sec:vokabularbestimmung} erläutert. Dann wird für
|
und warum nicht einfach jedes Wort in das Vokabular aufgenommen wird,
|
||||||
jedes Wort im Vokabular ein Wortknoten zum Graphen hinzugefügt.
|
wird in Abschnitt~\ref{sec:vokabularbestimmung} erläutert.\\
|
||||||
|
Nach der Bestimmung des Vokabulars wird für
|
||||||
|
jedes Wort im Vokabular ein Wortknoten zum Graphen hinzugefügt. Alle
|
||||||
|
Knoten, die der Graph zuvor hatte, werden nun \enquote{Strukturknoten}
|
||||||
|
genannt.
|
||||||
Ein Strukturknoten $v$ wird genau dann mit einem Wortknoten $w \in W_t$
|
Ein Strukturknoten $v$ wird genau dann mit einem Wortknoten $w \in W_t$
|
||||||
verbunden, wenn $w$ in einem Text von $v$ vorkommt.
|
verbunden, wenn $w$ in einem Text von $v$ vorkommt.
|
||||||
|
|
||||||
|
@ -22,18 +28,19 @@ verbunden, wenn $w$ in einem Text von $v$ vorkommt.
|
||||||
\label{fig:erweiterter-graph}
|
\label{fig:erweiterter-graph}
|
||||||
\end{figure}
|
\end{figure}
|
||||||
|
|
||||||
Der DYCOS-Algorithmus betrachtet die Texte, die zu einem Knoten
|
Der DYCOS-Algorithmus betrachtet die Texte, die einem Knoten
|
||||||
zugeornet sind, als eine
|
zugeornet sind, als eine
|
||||||
Multimenge von Wörtern. Das heißt, zum einen wird nicht auf die
|
Multimenge von Wörtern. Das heißt, zum einen wird nicht auf die
|
||||||
Reihenfolge der Wörter geachtet, zum anderen wird bei Texten
|
Reihenfolge der Wörter geachtet, zum anderen wird bei Texten
|
||||||
eines Knotens nicht zwischen verschiedenen Texten unterschieden.
|
eines Knotens nicht zwischen verschiedenen Texten unterschieden.
|
||||||
Jedoch wird die Anzahl der vorkommen jedes Wortes berücksichtigt.
|
Jedoch wird die Anzahl der Vorkommen jedes Wortes berücksichtigt.
|
||||||
|
|
||||||
\subsection{Datenstrukturen}
|
\subsection{Datenstrukturen}
|
||||||
Zusätzlich zu dem gerichteten Graphen $G_t = (V_t, E_t, V_{L,t})$
|
Zusätzlich zu dem gerichteten Graphen $G_t = (V_t, E_t, V_{L,t})$
|
||||||
verwaltet der DYCOS-Algorithmus zwei weitere Datenstrukturen:
|
verwaltet der DYCOS-Algorithmus zwei weitere Datenstrukturen:
|
||||||
\begin{itemize}
|
\begin{itemize}
|
||||||
\item Für jeden Knoten $v \in V_t$ werden die vorkommenden Wörter
|
\item Für jeden Knoten $v \in V_t$ werden die vorkommenden Wörter,
|
||||||
|
die auch im Vokabular $W_t$ sind,
|
||||||
und deren Anzahl gespeichert. Das könnte z.~B. über ein
|
und deren Anzahl gespeichert. Das könnte z.~B. über ein
|
||||||
assoziatives Array geschehen. Wörter, die nicht in
|
assoziatives Array geschehen. Wörter, die nicht in
|
||||||
Texten von $v$ vorkommen, sind nicht im Array. Für
|
Texten von $v$ vorkommen, sind nicht im Array. Für
|
||||||
|
@ -57,7 +64,7 @@ des strukturellen $l$-Sprungs benötigt:
|
||||||
\end{definition}
|
\end{definition}
|
||||||
|
|
||||||
Der strukturelle $l$-Sprung ist also ein Random Walk der Länge $l$
|
Der strukturelle $l$-Sprung ist also ein Random Walk der Länge $l$
|
||||||
im Graph $G_t$. Im Gegensatz dazu benötigt der inhaltliche $l$-Multisprung
|
im Graph $G_t$. Im Gegensatz dazu benötigt der inhaltliche $l$-Mehrfachsprung
|
||||||
tatsächlich die Grapherweiterung:
|
tatsächlich die Grapherweiterung:
|
||||||
|
|
||||||
\begin{definition}
|
\begin{definition}
|
||||||
|
@ -65,7 +72,7 @@ tatsächlich die Grapherweiterung:
|
||||||
um die Wortknoten $W_{t}$ erweiterte Graph.
|
um die Wortknoten $W_{t}$ erweiterte Graph.
|
||||||
|
|
||||||
Dann heißt ein Random Walk der Länge $l$ in diesem Graphen
|
Dann heißt ein Random Walk der Länge $l$ in diesem Graphen
|
||||||
ein \textbf{inhaltlicher $l$-Multisprung}, wenn für den Random Walk
|
ein \textbf{inhaltlicher $l$-Mehrfachsprung}, wenn für den Random Walk
|
||||||
in jedem der $l$ Schritte, startend von einem Knoten $v \in V_t$
|
in jedem der $l$ Schritte, startend von einem Knoten $v \in V_t$
|
||||||
eine Kante zu einem Wortknoten und von dem Wortknoten wieder
|
eine Kante zu einem Wortknoten und von dem Wortknoten wieder
|
||||||
zu einem Strukturknoten genommen wird.
|
zu einem Strukturknoten genommen wird.
|
||||||
|
@ -79,15 +86,37 @@ tatsächlich die Grapherweiterung:
|
||||||
$p_s$ (Wahrscheinlichkeit eines strukturellen Sprungs)
|
$p_s$ (Wahrscheinlichkeit eines strukturellen Sprungs)
|
||||||
\Ensure Klassifikation von $\N_t \setminus \T_t$\\
|
\Ensure Klassifikation von $\N_t \setminus \T_t$\\
|
||||||
|
|
||||||
\ForAll{Knoten $v$ in $\N_t \setminus \T_t$}
|
\Procedure{SturkturellerSprung}{Dictionary $d$, Startknoten $v$, Länge $l$}
|
||||||
\For{$i$ von $1$ bis $l$}
|
\For{$i$ von $1$ bis $l$}
|
||||||
\State $sprungTyp \gets \Call{random}{0.0, 1.0}$
|
\State $v \gets v.\Call{Next}{}$
|
||||||
\If{$sprungTyp \leq p_s$}
|
\ForAll{Label $w$ in v.\Call{GetLabels}{}}
|
||||||
\State Strukturellen $l$-Sprung ausführen
|
\State $d[w] = d[w] + 1$
|
||||||
|
\EndFor
|
||||||
|
\EndFor
|
||||||
|
\EndProcedure
|
||||||
|
\\
|
||||||
|
\Procedure{InhaltlicherMehrfachsprung}{Dictionary $d$, Startknoten $v$, Länge $l$}
|
||||||
|
\For{$i$ von $1$ bis $l$}
|
||||||
|
\State $v \gets v.\Call{Next}{}$ \Comment{TODO: Hier muss ein mehrfachsprung beschrieben werden!}
|
||||||
|
\ForAll{Label $w$ in v.\Call{GetLabels}{}}
|
||||||
|
\State $d[w] = d[w] + 1$
|
||||||
|
\EndFor
|
||||||
|
\EndFor
|
||||||
|
\EndProcedure
|
||||||
|
\\
|
||||||
|
|
||||||
|
\ForAll{Knoten $v$ in $\N_t \setminus \T_t$}
|
||||||
|
\State $d \gets $ Dictionary, das für neue Einträge 0 annimmt
|
||||||
|
\For{$i$ von $1$ bis $r$}
|
||||||
|
\State $sprungTyp \gets \Call{random}{0, 1}$
|
||||||
|
\If{$sprungTyp \leq p_S$}
|
||||||
|
\State \Call{SturkturellerSprung}{$v$, $l$}
|
||||||
\Else
|
\Else
|
||||||
\State Inhaltlichen $l$-Sprung ausführen
|
\State \Call{InhaltlicherMehrfachsprung}{$v$, $l$}
|
||||||
\EndIf
|
\EndIf
|
||||||
\EndFor
|
\EndFor
|
||||||
|
\State $label \gets \Call{max}{d}$
|
||||||
|
\State $v.\Call{SetLabel}{label}$
|
||||||
\EndFor
|
\EndFor
|
||||||
\State \Return Labels für $\N_t \setminus \T_t$
|
\State \Return Labels für $\N_t \setminus \T_t$
|
||||||
\end{algorithmic}
|
\end{algorithmic}
|
||||||
|
@ -100,7 +129,7 @@ Es ist nicht sinnvoll, direkt von einem strukturellem Knoten
|
||||||
$v \in \N_t$ zu einem mit $v$ verbundenen Wortknoten $w$ zu springen
|
$v \in \N_t$ zu einem mit $v$ verbundenen Wortknoten $w$ zu springen
|
||||||
und von diesem wieder zu einem verbundenem strutkurellem Knoten
|
und von diesem wieder zu einem verbundenem strutkurellem Knoten
|
||||||
$v' \in \N_t$. Würde man dies machen, wäre zu befürchten, dass
|
$v' \in \N_t$. Würde man dies machen, wäre zu befürchten, dass
|
||||||
aufgrund von Polysemen die Qualität der Klassifizierung verringert
|
aufgrund von Homonymen die Qualität der Klassifizierung verringert
|
||||||
wird. So hat \enquote{Brücke} im Deutschen viele Bedeutungen.
|
wird. So hat \enquote{Brücke} im Deutschen viele Bedeutungen.
|
||||||
Gemeint sein können z.~B. das Bauwerk, das Entwurfsmuster der
|
Gemeint sein können z.~B. das Bauwerk, das Entwurfsmuster der
|
||||||
objektorientierten Programmierung oder ein Teil des Gehirns.
|
objektorientierten Programmierung oder ein Teil des Gehirns.
|
||||||
|
|
|
@ -9,8 +9,8 @@ Häufig sind Labels nur teilweise vorhanden und es ist wünschenswert die
|
||||||
fehlenden Labels zu ergänzen.
|
fehlenden Labels zu ergänzen.
|
||||||
|
|
||||||
\subsection{Problemstellung}
|
\subsection{Problemstellung}
|
||||||
Wir haben einen Graphen, der teilweise gelabelt ist. Zustäzlich haben
|
Gegeben ist ein Graph, der teilweise gelabelt ist. Zustäzlich stehen
|
||||||
wir zu einer Teilmenge der Knoten Texte. Gesucht sind nun Labels
|
zu einer Teilmenge der Knoten Texte bereit. Gesucht sind nun Labels
|
||||||
für alle Knoten, die bisher noch nicht gelabelt sind.\\
|
für alle Knoten, die bisher noch nicht gelabelt sind.\\
|
||||||
|
|
||||||
\begin{definition}[Knotenklassifierungsproblem]\label{def:Knotenklassifizierungsproblem}
|
\begin{definition}[Knotenklassifierungsproblem]\label{def:Knotenklassifizierungsproblem}
|
||||||
|
@ -19,11 +19,11 @@ für alle Knoten, die bisher noch nicht gelabelt sind.\\
|
||||||
$E_t$ die Kantenmenge und $V_{L,t} \subseteq V_t$ die Menge der
|
$E_t$ die Kantenmenge und $V_{L,t} \subseteq V_t$ die Menge der
|
||||||
gelabelten Knoten jeweils zum Zeitpunkt $t$ bezeichne.
|
gelabelten Knoten jeweils zum Zeitpunkt $t$ bezeichne.
|
||||||
Außerdem sei $L_t$ die Menge aller zum Zeitpunkt $t$ vergebenen
|
Außerdem sei $L_t$ die Menge aller zum Zeitpunkt $t$ vergebenen
|
||||||
Labels und $f:V_{L,t} \rightarrow L_t$ die Funktion, die einen
|
Labels und $f:V_{L,t} \rightarrow \powerset(L_t)$ die Funktion, die einen
|
||||||
Knoten auf sein Label abbildet.
|
Knoten auf seine Labels abbildet.
|
||||||
|
|
||||||
Weiter sei für jeden Knoten $v \in V$ eine (eventuell leere)
|
Weiter sei für jeden Knoten $v \in V$ eine (eventuell leere)
|
||||||
Textmenge gegeben.
|
Textmenge $T(v)$ gegeben.
|
||||||
|
|
||||||
Gesucht sind nun Labels für $V_t \setminus V_{L,t}$, also
|
Gesucht sind nun Labels für $V_t \setminus V_{L,t}$, also
|
||||||
$\tilde{f}: V_t \rightarrow L_t$ mit
|
$\tilde{f}: V_t \rightarrow L_t$ mit
|
||||||
|
@ -31,8 +31,11 @@ für alle Knoten, die bisher noch nicht gelabelt sind.\\
|
||||||
\end{definition}
|
\end{definition}
|
||||||
|
|
||||||
\subsection{Herausforderungen}
|
\subsection{Herausforderungen}
|
||||||
Die in Kapitel~\ref{sec:experimentelle-analyse} aufgeführen Netzwerke
|
Die Graphen, für die dieser Algorithmus konzipiert wurde,
|
||||||
sind viele $\num{10000}$~Knoten groß und dynamisch. Das bedeutet, es
|
sind viele $\num{10000}$~Knoten groß und dynamisch. Das bedeutet, es
|
||||||
kommen neue Knoten und eventuell auch neue Kanten hinzu bzw. Kanten
|
kommen neue Knoten und eventuell auch neue Kanten hinzu bzw. Kanten
|
||||||
oder Knoten werden entfernt. Außerdem stehen textuelle Inhalte zu den
|
oder Knoten werden entfernt. Außerdem stehen textuelle Inhalte zu den
|
||||||
Knoten bereit, die bei der Klassifikation genutzt werden können.
|
Knoten bereit, die bei der Klassifikation genutzt werden können.
|
||||||
|
Das bedeutet, es ist wünschenswert bei kleinen Modifikationen nicht
|
||||||
|
nochmals alles neu berechnen zu müssen, sondern basierend auf zuvor
|
||||||
|
berechneten Labels die Klassifizierung modifizieren zu können.
|
||||||
|
|
|
@ -1 +1,12 @@
|
||||||
Wikipedia
|
\subsection{DBLP}
|
||||||
|
Im Folgenden wird die in \cite{aggarwal2011} durchgeführte
|
||||||
|
experimentelle Analyse des DYCOS-Algorithmus anhand des DBLP-Datensatzes
|
||||||
|
(\underline{d}ata\underline{b}ase systems and \underline{l}ogic \underline{p}rogramming)
|
||||||
|
der Universität Trier nachfolzogen. Dieser Datensatz beinhaltet
|
||||||
|
bibliographische Daten von Informatik-Publikationen. Der Datensatz
|
||||||
|
wird unter \href{http://dblp.uni-trier.de/xml/}{dblp.uni-trier.de/xml}
|
||||||
|
zur Verfügung gestellt. Die folgenden Informationen beziehen sich
|
||||||
|
auf den Datensatz vom 28.~Dezember~2013.
|
||||||
|
|
||||||
|
http://dumps.wikimedia.org/enwiki/20131202/
|
||||||
|
https://de.wikipedia.org/wiki/Hilfe:Download
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
In dieser Arbeit wird der DYCOS-Algorithmus vorgestellt. Er
|
In dieser Arbeit wird der DYCOS-Algorithmus mit einer kleinen
|
||||||
klassifiziert automatisch Knoten in Netzwerken, die bereits
|
Modifikation vorgestellt. Er klassifiziert automatisch Knoten in
|
||||||
teilweise gelabelt sind. Zur Klassifizierung kann er textuelle
|
Netzwerken, die bereits teilweise mit Labels versehen sind. Zur
|
||||||
Informationen, die den Knoten zugeordnet sind, nutzen. Er ist
|
Klassifizierung kann er textuelle Informationen, die den Knoten
|
||||||
auch für für viele $\num{10000}$ Knoten große, dynamische Netzwerke
|
zugeordnet sind, nutzen. Er ist auch für für viele $\num{10000}$
|
||||||
geeignet.\\
|
Knoten große, dynamische Netzwerke geeignet.\\
|
||||||
|
|
||||||
\textbf{Keywords:} DYCOS, Label Propagation, Knotenklassifizierung
|
\textbf{Keywords:} DYCOS, Label Propagation, Knotenklassifizierung
|
||||||
|
|
|
@ -20,8 +20,13 @@
|
||||||
\def\M{\ensuremath{\mathcal{M}}}
|
\def\M{\ensuremath{\mathcal{M}}}
|
||||||
\def\N{\ensuremath{\mathcal{N}}}
|
\def\N{\ensuremath{\mathcal{N}}}
|
||||||
\def\T{\ensuremath{\mathcal{T}}}
|
\def\T{\ensuremath{\mathcal{T}}}
|
||||||
|
\def\powerset{\ensuremath{\mathcal{P}}}
|
||||||
|
|
||||||
\renewcommand{\algorithmicrequire}{\textbf{Input:}}
|
\renewcommand{\algorithmicrequire}{\textbf{Input:}}
|
||||||
\renewcommand{\algorithmicensure}{\textbf{Output:}}
|
\renewcommand{\algorithmicensure}{\textbf{Output:}}
|
||||||
\renewcommand{\algorithmicforall}{\textbf{for each}}
|
\renewcommand{\algorithmicforall}{\textbf{for each}}
|
||||||
\renewcommand{\algorithmicprocedure}{\textbf{function}}
|
\renewcommand{\algorithmicprocedure}{\textbf{function}}
|
||||||
|
\renewcommand{\ALG@name}{Algorithmus}
|
||||||
|
|
||||||
|
%Hyphenation
|
||||||
|
\hyphenation{Graph}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue