mirror of
https://github.com/MartinThoma/LaTeX-examples.git
synced 2025-04-24 22:08:04 +02:00
starke Überarbeitung
This commit is contained in:
parent
36425299c5
commit
899cd5afe2
9 changed files with 97 additions and 77 deletions
|
@ -2,18 +2,15 @@
|
|||
DYCOS (\underline{DY}namic \underline{C}lassification
|
||||
algorithm with c\underline{O}ntent and \underline{S}tructure) ist ein
|
||||
Knotenklassifizierungsalgorithmus, der Ursprünglich in \cite{aggarwal2011} vorgestellt
|
||||
wurde. Er klassifiziert Knoten, indem mehrfach Random Walks startend
|
||||
bei dem zu klassifizierenden Knoten $v$ gemacht werden und die Labels
|
||||
der besuchten Knoten gezählt werden. Das Label, das am häufigsten
|
||||
wurde. Er klassifiziert einzelne Knoten, indem $r$ Random Walks der Länge $l$,
|
||||
startend bei dem zu klassifizierenden Knoten $v$ gemacht werden. Dabei
|
||||
werden die Labels der besuchten Knoten gezählt. Das Label, das am häufigsten
|
||||
vorgekommen ist, wird als Label für $v$ gewählt.
|
||||
DYCOS nutzt also die sog. Homophilie, d.~h. die Eigenschaft, dass
|
||||
Knoten, die nur wenige Hops von einander entfernt sind, häufig auch
|
||||
ähnlich sind \cite{bhagat}.
|
||||
|
||||
Der DYCOS-Algorithmus nimmt jedoch nicht einfach den Graphen für
|
||||
dieses Verfahren, sondern erweitert ihn mit Hilfe der zur Verfügung
|
||||
stehenden Texte.
|
||||
|
||||
ähnlich sind \cite{bhagat}. 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
|
||||
charakteristisch für eine Knotengruppe ist. Wie das gemacht werden kann
|
||||
und warum nicht einfach jedes Wort in das Vokabular aufgenommen wird,
|
||||
|
@ -24,6 +21,12 @@ Knoten, die der Graph zuvor hatte, werden nun \enquote{Strukturknoten}
|
|||
genannt.
|
||||
Ein Strukturknoten $v$ wird genau dann mit einem Wortknoten $w \in W_t$
|
||||
verbunden, wenn $w$ in einem Text von $v$ vorkommt.
|
||||
Der DYCOS-Algorithmus betrachtet also die Texte, die einem Knoten
|
||||
zugeornet sind, als eine Multimenge von Wörtern. Das heißt, zum einen
|
||||
wird nicht auf die Reihenfolge der Wörter geachtet, zum anderen wird
|
||||
bei Texten eines Knotens nicht zwischen verschiedenen
|
||||
Texten unterschieden. Jedoch wird die Anzahl der Vorkommen
|
||||
jedes Wortes berücksichtigt.
|
||||
|
||||
\begin{figure}[htp]
|
||||
\centering
|
||||
|
@ -43,10 +46,9 @@ die strukturellen Sprünge und inhaltliche Mehrfachsprünge:
|
|||
Knoten $v \in V_t$ zu einem benachbartem Knoten $w \in V_t$
|
||||
ein \textbf{struktureller Sprung}.
|
||||
\end{definition}
|
||||
|
||||
\goodbreak
|
||||
Im Gegensatz dazu benutzten inhaltliche Mehrfachsprünge
|
||||
tatsächlich die Grapherweiterung:
|
||||
|
||||
\begin{definition}
|
||||
Sei $G_t = (V_t, E_{S,t} \cup E_{W,t}, V_{L,t}, W_{t})$ der
|
||||
um die Wortknoten $W_{t}$ erweiterte Graph.
|
||||
|
@ -60,46 +62,13 @@ tatsächlich die Grapherweiterung:
|
|||
Jeder inhaltliche Mehrfachsprung beginnt und endet also in einem Strukturknoten,
|
||||
springt über einen Wortknoten und ist ein Pfad der Länge~2.
|
||||
|
||||
Bevor der DYCOS-Algorithmus im Detail erklärt wird, sei noch auf eine
|
||||
Besonderheit hingewiesen:
|
||||
Der DYCOS-Algorithmus betrachtet die Texte, die einem Knoten
|
||||
zugeornet sind, als eine Multimenge von Wörtern. Das heißt, zum einen
|
||||
wird nicht auf die Reihenfolge der Wörter geachtet, zum anderen wird
|
||||
bei Texten eines Knotens nicht zwischen verschiedenen
|
||||
Texten unterschieden. Jedoch wird die Anzahl der Vorkommen
|
||||
jedes Wortes berücksichtigt.
|
||||
|
||||
\subsection{Datenstrukturen}
|
||||
Zusätzlich zu dem gerichteten Graphen $G_t = (V_t, E_t, V_{L,t})$
|
||||
verwaltet der DYCOS-Algorithmus zwei weitere Datenstrukturen:
|
||||
\begin{itemize}
|
||||
\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
|
||||
assoziatives Array geschehen. Wörter, die nicht in
|
||||
Texten von $v$ vorkommen, sind nicht im Array. Für
|
||||
alle vorkommenden Wörter ist der gespeicherte Wert zum
|
||||
Schlüssel \enquote{Wort} die Anzahl der Vorkommen von
|
||||
\enquote{Wort} in den Texten von $v$.
|
||||
\item Für jedes Wort des Vokabulars $W_t$ wird eine Liste von
|
||||
Knoten verwaltet, in deren Texten das Wort vorkommt.
|
||||
\item An einigen Stellen macht ein assoziatives Array, auch
|
||||
\enquote{dictionary} oder \enquote{map} genannt, sinn.
|
||||
Zustätzlich ist es nützlich, wenn diese Datenstruktur für
|
||||
unbekannte Schlüssel keinen Fehler ausgibt, sondern für diese
|
||||
Schlüssel den Wert 0 annimmt. Eine solche Datenstruktur
|
||||
wird in Python \texttt{defaultdict} genannt und ich werde
|
||||
im Folgenden diese Benennung beibehalten.
|
||||
\end{itemize}
|
||||
|
||||
\input{Sprungtypen}
|
||||
\input{Vokabularbestimmung}
|
||||
|
||||
\subsection{Der Algorithmus}
|
||||
Der DYCOS-Algorithmus verwendet nun für jeden Knoten der gelabelt wird
|
||||
$r$ Random Walks der Länge $l$, wobei mit einer Wahrscheinlichkeit
|
||||
$p_S$ ein struktureller Sprung und mit einer Wahrscheinlichkeit
|
||||
von $(1-p_S)$ ein inhaltlicher Mehrfachsprung gemacht wird. Dieser
|
||||
Ob in einem Sprung der Random Walks ein struktureller Sprung oder
|
||||
ein inhaltlicher Mehrfachsprung gemacht wird, wird jedes mal zufällig
|
||||
neu entschiden. Dafür wird der Parameter $0 \leq p_S \leq 1$ für den Algorithmus
|
||||
gewählt. Mit einer Wahrscheinlichkeit von $p_S$ wird eine struktureller
|
||||
Sprung durchgefürt und mit einer Wahrscheinlichkeit
|
||||
von $(1-p_S)$ ein modifizierter inhaltlicher Mehrfachsprung, wie er in
|
||||
\cref{sec:sprungtypen} erklärt wird, gemacht. Dieser
|
||||
Parameter gibt an, wie wichtig die Struktur des Graphen im Verhältnis
|
||||
zu den textuellen Inhalten ist. Bei $p_S = 0$ werden ausschließlich
|
||||
die Texte betrachtet, bei $p_S = 1$ ausschließlich die Struktur des
|
||||
|
@ -108,14 +77,12 @@ Graphen.
|
|||
Die Vokabularbestimmung kann zu jedem Zeitpunkt $t$ durchgeführt
|
||||
werden, muss es aber nicht.
|
||||
|
||||
In \cref{alg:DYCOS} wurde der DYCOS-Algorithmus als
|
||||
Pseudocode vorgestellt. Dafür werden die beiden Hilfsfunktionen
|
||||
für den strukturellen Sprung sowie den inhaltlichen Mehrfachsprung
|
||||
benötigt.
|
||||
In \cref{alg:DYCOS} wird der DYCOS-Algorithmus als
|
||||
Pseudocode vorgestellt.
|
||||
|
||||
\begin{algorithm}
|
||||
\begin{algorithmic}[1]
|
||||
\Require \\$G_t = (V_t, E_t, V_{L,t})$ (Netzwerk),\\
|
||||
\Require \\$G_{E,t} = (V_t, E_{S,t} \cup E_{W,t}, V_{L,t}, W_t)$ (Erweiterter Graph),\\
|
||||
$r$ (Anzahl der Random Walks),\\
|
||||
$l$ (Länge eines Random Walks),\\
|
||||
$p_s$ (Wahrscheinlichkeit eines strukturellen Sprungs),\\
|
||||
|
@ -154,3 +121,29 @@ benötigt.
|
|||
\caption{DYCOS-Algorithmus}
|
||||
\label{alg:DYCOS}
|
||||
\end{algorithm}
|
||||
|
||||
\subsection{Datenstrukturen}
|
||||
Zusätzlich zu dem gerichteten Graphen $G_t = (V_t, E_t, V_{L,t})$
|
||||
verwaltet der DYCOS-Algorithmus zwei weitere Datenstrukturen:
|
||||
\begin{itemize}
|
||||
\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
|
||||
assoziatives Array geschehen. Wörter, die nicht in
|
||||
Texten von $v$ vorkommen, sind nicht im Array. Für
|
||||
alle vorkommenden Wörter ist der gespeicherte Wert zum
|
||||
Schlüssel \enquote{Wort} die Anzahl der Vorkommen von
|
||||
\enquote{Wort} in den Texten von $v$.
|
||||
\item Für jedes Wort des Vokabulars $W_t$ wird eine Liste von
|
||||
Knoten verwaltet, in deren Texten das Wort vorkommt.
|
||||
\item An einigen Stellen macht ein assoziatives Array, auch
|
||||
\enquote{dictionary} oder \enquote{map} genannt, sinn.
|
||||
Zustätzlich ist es nützlich, wenn diese Datenstruktur für
|
||||
unbekannte Schlüssel keinen Fehler ausgibt, sondern für diese
|
||||
Schlüssel den Wert 0 annimmt. Eine solche Datenstruktur
|
||||
wird in Python \texttt{defaultdict} genannt und ich werde
|
||||
im Folgenden diese Benennung beibehalten.
|
||||
\end{itemize}
|
||||
|
||||
\input{Sprungtypen}
|
||||
\input{Vokabularbestimmung}
|
||||
|
|
Binary file not shown.
|
@ -28,6 +28,7 @@
|
|||
\usepackage{tikz}
|
||||
\usepackage{enumitem}
|
||||
\usepackage[german,nameinlink]{cleveref}
|
||||
\usepackage{braket}
|
||||
\allowdisplaybreaks
|
||||
\usetikzlibrary{backgrounds}
|
||||
\usepackage{mystyle}
|
||||
|
|
|
@ -4,7 +4,7 @@ vorgeschlagen, die es allerdings noch zu untersuchen gilt.
|
|||
|
||||
\subsection{Schwächen von DYCOS}
|
||||
\subsubsection{Anzahl der Labels}
|
||||
So, wie er vorgestellt wurde, können nur Graphen bearbeitet werden,
|
||||
So, wie der DYCOS-Algorithmus vorgestellt wurde, können nur Graphen bearbeitet werden,
|
||||
deren Knoten höchstens ein Label haben. In vielen Fällen, wie z.~B.
|
||||
Wikipedia mit Kategorien als Labels haben Knoten jedoch viele Labels.
|
||||
|
||||
|
@ -24,18 +24,18 @@ zählen.
|
|||
|
||||
\subsubsection{Überanpassung und Reklassifizierung}
|
||||
Aggarwal und Li beschreiben in \cite{aggarwal2011} nicht, auf welche
|
||||
Knoten der Klassifizierungsalgorithmus angewand werden soll. Jedoch
|
||||
Knoten der Klassifizierungsalgorithmus angewendet werden soll. Jedoch
|
||||
ist die Reihenfolge der Klassifizierung relevant. Dazu folgendes
|
||||
minimale Beispiel:
|
||||
Minimalbeispiel:
|
||||
|
||||
Gegeben sei ein dynamischer Graph ohne textuelle Inhalte. Zum Zeitpunkt
|
||||
$t=1$ habe dieser Graph genau einen Knoten $v_1$ und $v_1$ sei
|
||||
mit dem Label $A$ beschriftet. Zum Zeitpunkt $t=2$ komme ein nicht-gelabelter
|
||||
Knoten $v_2$ sowie die Kante $(v_1, v_2)$ hinzu.\\
|
||||
Knoten $v_2$ sowie die Kante $(v_2, v_1)$ hinzu.\\
|
||||
Nun wird der DYCOS-Algorithmus auf diesen Knoten angewendet und
|
||||
$v_2$ mit $A$ gelabelt.\\
|
||||
Zum Zeitpunkt $t=3$ komme ein Knoten $v_3$, der mit $B$ gelabelt ist,
|
||||
und die Kante $(v_3, v_2)$ hinzu.
|
||||
und die Kante $(v_2, v_3)$ hinzu.
|
||||
|
||||
\begin{figure}[ht]
|
||||
\centering
|
||||
|
@ -52,6 +52,10 @@ und die Kante $(v_3, v_2)$ hinzu.
|
|||
\input{figures/graph-t3.tex}
|
||||
\label{fig:graph-t3}
|
||||
}%
|
||||
\subfloat[$t=4$]{
|
||||
\input{figures/graph-t4.tex}
|
||||
\label{fig:graph-t4}
|
||||
}%
|
||||
\label{Formen}
|
||||
\caption{Minimalbeispiel für den Einfluss früherer DYCOS-Anwendungen}
|
||||
\end{figure}
|
||||
|
@ -66,7 +70,7 @@ Knoten einfügt:
|
|||
|
||||
Wird zum Zeitpunkt $t=4$ ein ungelabelter Knoten $v_4$ und die Kanten
|
||||
$(v_1, v_4)$, $(v_2, v_4)$, $(v_3, v_4)$ hinzugefügt, so ist die
|
||||
Wahrscheinlichkeit, dass $v_4$ mit $A$ gelabelt wird bei $75\%$.
|
||||
Wahrscheinlichkeit, dass $v_4$ mit $A$ gelabelt wird bei $\frac{2}{3}$.
|
||||
Werden die als ungelabelten Knoten jedoch erst jetzt und alle gemeinsam
|
||||
gelabelt, so ist die Wahrscheinlichkeit für $A$ als Label bei nur $50\%$.
|
||||
Bei dem DYCOS-Algorithmus findet also eine Überanpassung and vergangene
|
||||
|
@ -78,16 +82,17 @@ könnten eine Lebenszeit bekommen (TTL, Time to Live). Ist diese
|
|||
abgelaufen, wird der DYCOS-Algorithmus erneut auf den Knoten angewendet.
|
||||
|
||||
\subsection{Schwächen des Papers}
|
||||
Die Ergebnise der experimentelle Analyse können aus folgenden Gründen
|
||||
In \cite{aggarwal2011} wurde eine experimentelle Analyse mithilfe
|
||||
des DBLP-Datensatzes\footnote{http://dblp.uni-trier.de/} und des
|
||||
CORA-Datensatzes\footnote{\href{http://people.cs.umass.edu/~mccallum/data/cora-classify.tar.gz}{http://people.cs.umass.edu/~mccallum/data/cora-classify.tar.gz}} durchgeführt.
|
||||
Die Ergebnise dieser Analyse können aus folgenden Gründen
|
||||
nicht überprüft werden:
|
||||
\begin{itemize}
|
||||
\item DYCOS verwendet als Vokabular die Top-$m$-Wörter mit dem
|
||||
höchsten Gini-Index aus einer Sample-Menge von Texten, die
|
||||
wie in \cite{Vitter} beschrieben
|
||||
erzeugt wird. Allerdings wird niemals erklärt, wie $m \in \mathbb{N}$
|
||||
bestimmt wird. Es ist nicht einmal klar, ob $m$ für den
|
||||
Algorithmus als konstant anzusehen ist oder ob $m$ sich
|
||||
bei der Vokabularbestimmung ändern könnte.
|
||||
\item Der Parameter $a \in \mathbb{N}$, der die Anzahl der ausgehenden Kanten
|
||||
aller Wortknoten beschränkt, wird erst mit der Experimentellen
|
||||
Analyse auf S.~362 eingeführt.
|
||||
Es ist nicht klar, wie entschieden wird welche Kanten
|
||||
gespeichert werden und welche nicht.
|
||||
\item DYCOS beschränkt sich bei inhaltlichen Mehrfachsprüngen
|
||||
auf die Top-$q$-Wortknoten, also die $q$ ähnlichsten Knoten
|
||||
gemessen mit der Aggregatanalyse. Auch hier wird nicht erklärt wie
|
||||
|
@ -95,10 +100,10 @@ nicht überprüft werden:
|
|||
wurde. Allerings ist hier wenigstens klar, dass $q$ für
|
||||
den DYCOS-Algorithmus konstant ist. Für die Experimentelle
|
||||
Analyse wurde zwar erwähnt, dass $q$ ein Parameter des
|
||||
Algorithmus ist\cite[S. 362]{aggarwal2011}, aber nicht welcher
|
||||
Algorithmus ist \cite[S. 362]{aggarwal2011}, aber nicht welcher
|
||||
Wert in der Analyse des DBLP-Datensatzes genutzt wurde.
|
||||
Für den CORA-Datensatz wurde $q=10$ gewählt\cite[S. 364]{aggarwal2011}.
|
||||
\item Für die Analyse der CORA-Datensatzes\footnote{inzwischen unter \href{http://people.cs.umass.edu/~mccallum/data/cora-classify.tar.gz}{http://people.cs.umass.edu/~mccallum/data/cora-classify.tar.gz}} analysiert.
|
||||
\item Für die Analyse der CORA-Datensatzes analysiert.
|
||||
Dieser beinhaltet Forschungsarbeiten, wobei die
|
||||
Forschungsgebiete die in einen Baum mit 73 Blättern
|
||||
eingeordnet wurden. Aus diesen 73 Blättern wurden 5 Klassen
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
\subsection{Sprungtypen}
|
||||
\subsection{Sprungtypen}\label{sec:sprungtypen}
|
||||
Die beiden bereits definierten Sprungtypen, der strukturelle Sprung
|
||||
sowie der inhaltliche Mehrfachsprung werden im folgenden erklärt.
|
||||
\goodbreak
|
||||
|
|
|
@ -3,7 +3,13 @@ Da die größe des Vokabulars die Datenmenge signifikant beeinflusst,
|
|||
liegt es in unserem Interesse so wenig Wörter wie möglich ins
|
||||
Vokabular aufzunehmen. Insbesondere sind Wörter nicht von Interesse,
|
||||
die in fast allen Texten vorkommen, wie im Deutschen z.~B.
|
||||
\enquote{und}, \enquote{mit} und die Pronomen.
|
||||
\enquote{und}, \enquote{mit} und die Pronomen. Es ist wünschenswert
|
||||
Wörter zu wählen, die die Texte möglichst start voneinander Unterscheiden.
|
||||
Der DYCOS-Algorithmus wählt die Top-$m$ dieser Wörter als Vokabular,
|
||||
wobei $m \in \mathbb{N}$ eine Festzulegende Konstante ist. In \cite[S. 365]{aggarwal2011}
|
||||
wird der Einfluss von $m \in \Set{5,10, 20}$ auf die Klassifikationsgüte
|
||||
untersucht und festegestellt, dass für $m \in \Set{5,10}$ die Klassifikationsgüte
|
||||
sehr ähnlich ist.
|
||||
|
||||
Nun kann man manuell eine Liste von zu beachtenden Wörtern erstellen
|
||||
oder mit Hilfe des Gini-Koeffizienten automatisch ein Vokabular erstellen.
|
||||
|
|
|
@ -3,6 +3,6 @@
|
|||
\begin{tikzpicture}[scale=1,framed]
|
||||
\node (a)[vertex,label=$A$] at (0,0) {$v_1$};
|
||||
\node (b)[vertex,label={\color{blue}$A$}] at (1,0) {$v_2$};
|
||||
\draw[->] (a) -- (b);
|
||||
\draw[->] (b) -- (a);
|
||||
\node (struktur)[label={[label distance=-0.2cm]0:$t=2$}] at (-2,1) {};
|
||||
\end{tikzpicture}
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
\node (a)[vertex,label=$A$] at (0,0) {$v_1$};
|
||||
\node (b)[vertex,label={\color{blue}$A$}] at (1,0) {$v_2$};
|
||||
\node (c)[vertex,label=$B$] at (2,0) {$v_3$};
|
||||
\draw[->] (a) -- (b);
|
||||
\draw[->] (c) -- (b);
|
||||
\draw[->] (b) -- (a);
|
||||
\draw[->] (b) -- (c);
|
||||
\node (struktur)[label={[label distance=-0.2cm]0:$t=3$}] at (-1,1) {};
|
||||
\end{tikzpicture}
|
||||
|
|
15
documents/DYCOS/figures/graph-t4.tex
Normal file
15
documents/DYCOS/figures/graph-t4.tex
Normal file
|
@ -0,0 +1,15 @@
|
|||
\tikzstyle{vertex}=[draw,black,circle,minimum size=10pt,inner sep=0pt]
|
||||
\tikzstyle{edge}=[very thick]
|
||||
\begin{tikzpicture}[scale=1,framed]
|
||||
\node (a)[vertex,label=$A$] at (0,0) {$v_1$};
|
||||
\node (b)[vertex,label=45:{\color{blue}$A$}] at (1,0) {$v_2$};
|
||||
\node (c)[vertex,label=$B$] at (2,0) {$v_3$};
|
||||
\node (d)[vertex] at (1,1) {$v_4$};
|
||||
\draw[->] (b) -- (a);
|
||||
\draw[->] (b) -- (c);
|
||||
|
||||
\draw[->] (d) -- (a);
|
||||
\draw[->] (d) -- (b);
|
||||
\draw[->] (d) -- (c);
|
||||
\node (struktur)[label={[label distance=-0.2cm]0:$t=3$}] at (-1,1) {};
|
||||
\end{tikzpicture}
|
Loading…
Add table
Add a link
Reference in a new issue