2
0
Fork 0
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:
Martin Thoma 2013-12-29 19:06:20 +01:00
parent 5496a1f553
commit 89c438ee52
6 changed files with 80 additions and 30 deletions

2
documents/DYCOS/.gitignore vendored Normal file
View file

@ -0,0 +1,2 @@
data/cora
data/dblp

View file

@ -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.

View file

@ -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.

View file

@ -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

View file

@ -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

View file

@ -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}