mirror of
https://github.com/MartinThoma/LaTeX-examples.git
synced 2025-04-24 22:08:04 +02:00
TODOs entfernt; Abschnitt 'Schwächen' hinzugefügt; Nun wird nur noch der DYCOS-Algorithmus aus dem Paper beschrieben; Struktur verändert; Abschnitt über Analyse entfernt
This commit is contained in:
parent
ce1dc848dc
commit
403fa74df9
12 changed files with 319 additions and 107 deletions
|
@ -1,4 +1,4 @@
|
|||
Der in diesem Artikel vorgestellte DYCOS-Algorithmus wurde 2011 von
|
||||
Der in dieser Ausarbeitung vorgestellte DYCOS-Algorithmus wurde 2011 von
|
||||
Charu~C. Aggarwal und Nan~Li in \cite{aggarwal2011} vorgestellt.
|
||||
Es gibt jedoch viele Klassifizierungsalgorithmen, die ähnliche Ideen
|
||||
nutzen. Einige dieser Algorithmen werden im Folgenden kurz vorgestellt
|
||||
|
|
|
@ -1,13 +1,13 @@
|
|||
Den sehr einfach aufgebauten DYCOS-Algorithmus kann man noch an
|
||||
vielen Punkten verbessern. So könnte man vor der Auswahl des
|
||||
Vokabulars jedes Wort auf den Wortstamm zurückführen.
|
||||
Dafür könnte zum Beispiel der \todo{Wo steht was über den?}{Porter-Stemming-Algorithmus} verwendet
|
||||
werden. Durch diese Maßnahme wird das
|
||||
Dafür könnte zum Beispiel der Porter-Stemming-Algorithmus verwendet
|
||||
werden \cite{porter}. Durch diese Maßnahme wird das
|
||||
Vokabular kleiner gehalten, mehr Artikel können mit einander
|
||||
durch Vokabular verbunden werden und der Gini-Koeffizient wird ein
|
||||
besseres Maß für die Gleichheit von Texten.
|
||||
|
||||
Eine weitere Verbesserungsmöglichkeit besteht in der textanalyse.
|
||||
Eine weitere Verbesserungsmöglichkeit besteht in der Textanalyse.
|
||||
Momentan ist diese noch sehr einfach gestrickt und ignoriert die
|
||||
Reihenfolge von Wortern beziehungsweise Wertungen davon. So könnte
|
||||
man den DYCOS-Algorithmus in einem sozialem Netzwerk verwenden wollen,
|
||||
|
|
|
@ -5,7 +5,11 @@ Knotenklassifizierungsalgorithmus, der Ursprünglich in \cite{aggarwal2011} vorg
|
|||
wurde. Er klassifiziert Knoten, indem mehrfach Random Walks startend
|
||||
bei dem zu klassifizierenden Knoten gemacht werden und die Labels
|
||||
der besuchten Knoten gezählt werden. Das Label, das am häufigsten
|
||||
vorgekommen ist, wird zur Klassifizierung verwendet.
|
||||
vorgekommen ist, wird als Label 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.
|
||||
|
@ -28,6 +32,32 @@ verbunden, wenn $w$ in einem Text von $v$ vorkommt.
|
|||
\label{fig:erweiterter-graph}
|
||||
\end{figure}
|
||||
|
||||
Entsprechend werden zwei unterschiedliche Sprungtypen unterschieden,
|
||||
die strukturellen Sprünge und inhaltliche Mehrfachsprünge:
|
||||
|
||||
\begin{definition}
|
||||
Sei $G_{E,t} = (V_t, E_{S,t} \cup E_{W,t}, V_{L,t}, W_{t})$ der
|
||||
um die Wortknoten $W_{t}$ erweiterte Graph.
|
||||
|
||||
Dann heißt das zufällige wechseln des aktuell betrachteten
|
||||
Knoten $v \in V_t$ zu einem benachbartem Knoten $w \in V_t$
|
||||
ein \textbf{struktureller Sprung}.
|
||||
\end{definition}
|
||||
|
||||
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.
|
||||
|
||||
Dann heißt das zufällige wechseln des aktuell betrachteten
|
||||
Knoten $v \in V_t$ zu einem benachbartem Knoten $w \in W_t$
|
||||
und weiter zu Nachbar von $v' \in V_t$ von $w$
|
||||
ein \textbf{inhaltlicher Mehrfachsprung}. $v'$ ist also genau
|
||||
einen Sprung über einen Wortknoten $w$ von $v$ entfernt.
|
||||
\end{definition}
|
||||
|
||||
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
|
||||
|
@ -49,111 +79,69 @@ verwaltet der DYCOS-Algorithmus zwei weitere Datenstrukturen:
|
|||
\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}
|
||||
|
||||
\subsection{Algorithmen}
|
||||
Bevor der Algorithmus formal beschrieben wird, wird eine Definition
|
||||
des strukturellen $l$-Sprungs benötigt:
|
||||
\begin{definition}
|
||||
Sei $G_{E,t} = (V_t, E_{S,t} \cup E_{W,t}, V_{L,t}, W_{t})$ der
|
||||
um die Wortknoten $W_{t}$ erweiterte Graph.
|
||||
\input{Sprungtypen}
|
||||
\input{Vokabularbestimmung}
|
||||
|
||||
Dann heißt ein Random Walk der Länge $l$ in diesem Graphen
|
||||
ein \textbf{struktureller $l$-Sprung}, wenn für den Random Walk
|
||||
nur Kanten aus $E_{S,t}$ benutzt werden.
|
||||
\end{definition}
|
||||
\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 $l$-Sprung und mit einer Wahrscheinlichkeit
|
||||
von $(1-p_S)$ ein inhaltlicher $l$-Mehrfachsprung gemacht wird.
|
||||
|
||||
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$-Mehrfachsprung
|
||||
tatsächlich die Grapherweiterung:
|
||||
Die Vokabularbestimmung kann zu jedem Zeitpunkt $t$ durchgeführt
|
||||
werden, muss es aber nicht.
|
||||
|
||||
\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.
|
||||
|
||||
Dann heißt ein Random Walk der Länge $l$ in diesem Graphen
|
||||
ein \textbf{inhaltlicher $l$-Mehrfachsprung}, wenn für den Random Walk
|
||||
in jedem der $l$ Schritte, startend von einem Knoten $v \in V_t$
|
||||
eine Kante zu einem Wortknoten und von dem Wortknoten wieder
|
||||
zu einem Strukturknoten genommen wird.
|
||||
\end{definition}
|
||||
Im Folgenden werde ich den DYCOS-Algorithmus als Pseudocode vorstellen.
|
||||
Dafür benötigt man die beiden Hilfsfunktionen für den strukturellen
|
||||
Sprung sowie den inhaltlichen Mehrfachsprung:
|
||||
|
||||
\begin{algorithm}[H]
|
||||
\begin{algorithmic}
|
||||
\begin{algorithmic}[1]
|
||||
\Require \\$\G_t = (\N_t, \A_t, \T_t)$ (Netzwerk),\\
|
||||
$r$ (Anzahl der Random Walks),\\
|
||||
$l$ (Länge eines Random Walks),\\
|
||||
$p_s$ (Wahrscheinlichkeit eines strukturellen Sprungs)
|
||||
$p_s$ (Wahrscheinlichkeit eines strukturellen Sprungs),\\
|
||||
$q$ (Anzahl der betrachteten Knoten nach der Aggregatanalyse)
|
||||
\Ensure Klassifikation von $\N_t \setminus \T_t$\\
|
||||
|
||||
\Procedure{SturkturellerSprung}{Dictionary $d$, Startknoten $v$, Länge $l$}
|
||||
\For{$i$ von $1$ bis $l$}
|
||||
\State $v \gets v.\Call{Next}{}$
|
||||
\ForAll{Label $w$ in v.\Call{GetLabels}{}}
|
||||
\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
|
||||
\State $d \gets $ defaultdict
|
||||
\For{$i$ von $1$ bis $r$}
|
||||
\State $sprungTyp \gets \Call{random}{0, 1}$
|
||||
\If{$sprungTyp \leq p_S$}
|
||||
\State \Call{SturkturellerSprung}{$v$, $l$}
|
||||
\Else
|
||||
\State \Call{InhaltlicherMehrfachsprung}{$v$, $l$}
|
||||
\EndIf
|
||||
\State $w \gets v$
|
||||
\For{$j$ von $1$ bis $l$}
|
||||
\State $sprungTyp \gets \Call{random}{0, 1}$
|
||||
\If{$sprungTyp \leq p_S$}
|
||||
\State $w \gets$ \Call{SturkturellerSprung}{$w$}
|
||||
\Else
|
||||
\State $w \gets$ \Call{InhaltlicherMehrfachsprung}{$w$}
|
||||
\EndIf
|
||||
\State $w \gets v.\Call{GetLabel}{ }$ \Comment{Zähle das Label}
|
||||
\State $d[w] \gets d[w] + 1$
|
||||
\EndFor
|
||||
\EndFor
|
||||
|
||||
\If{$d$ ist leer}
|
||||
\State $M_H \gets \Call{HäufigsteLabelImGraph}{}$
|
||||
\ForAll{$label$ in $M_H$}
|
||||
\State $v.\Call{AddLabel}{label}$
|
||||
\EndFor
|
||||
\If{$d$ ist leer} \Comment{Es wurde kein gelabelter Knoten gesehen}
|
||||
\State $M_H \gets \Call{HäufigsteLabelImGraph}{ }$
|
||||
\Else
|
||||
\State $M_H \gets \Call{max}{d}$
|
||||
\ForAll{$label$ in $M_H$}
|
||||
\State $v.\Call{AddLabel}{label}$
|
||||
\EndFor
|
||||
\EndIf
|
||||
\\
|
||||
\State \Comment{Wähle aus der Menge der häufigsten Label $M_H$ zufällig eines aus}
|
||||
\State $label \gets \Call{Random}{M_H}$
|
||||
\State $v.\Call{AddLabel}{label}$ \Comment{und weise dieses $v$ zu}
|
||||
\EndFor
|
||||
\State \Return Labels für $\N_t \setminus \T_t$
|
||||
\end{algorithmic}
|
||||
\caption{DYCOS-Algorithmus}
|
||||
\label{alg:DYCOS}
|
||||
\end{algorithm}
|
||||
|
||||
\subsection{Inhaltliche Mehrfachsprünge}
|
||||
Es ist nicht sinnvoll, direkt von einem strukturellem Knoten
|
||||
$v \in \N_t$ zu einem mit $v$ verbundenen Wortknoten $w$ zu springen
|
||||
und von diesem wieder zu einem verbundenem strutkurellem Knoten
|
||||
$v' \in \N_t$. Würde man dies machen, wäre zu befürchten, dass
|
||||
aufgrund von Homonymen die Qualität der Klassifizierung verringert
|
||||
wird. So hat \enquote{Brücke} im Deutschen viele Bedeutungen.
|
||||
Gemeint sein können z.~B. das Bauwerk, das Entwurfsmuster der
|
||||
objektorientierten Programmierung oder ein Teil des Gehirns.
|
||||
|
||||
Deshalb wird für jeden Knoten $v$, von dem aus man einen inhaltlichen
|
||||
Mehrfachsprung machen will folgendes vorgehen gewählt:
|
||||
\begin{enumerate}
|
||||
\item Gehe alle in $v$ startenden Random Walks der Länge 2 durch
|
||||
und erstelle eine Liste $L$, der erreichbaren Knoten $v'$. Speichere
|
||||
außerdem, durch wie viele Pfade diese Knoten $v'$ jeweils erreichbar sind.
|
||||
\item Betrachte im folgenden nur die Top-$q$ Knoten, wobei $q \in \mathbb{N}$
|
||||
eine zu wählende Konstante des Algorithmus ist.
|
||||
\item Wähle mit Wahrscheinlichkeit $\frac{\Call{Anzahl}{v'}}{\sum_{w \in L} \Call{Anzahl}{v'}}$
|
||||
den Knoten $v'$ als Ziel des Mehrfachsprungs.
|
||||
\end{enumerate}
|
||||
|
||||
\input{Vokabularbestimmung}
|
||||
|
|
Binary file not shown.
|
@ -30,7 +30,7 @@
|
|||
\setcounter{secnumdepth}{3}
|
||||
|
||||
\hypersetup{
|
||||
pdftitle = {\"Uber die Klassifizierung von Knoten in dynamischen Netzwerken mit Inhalt},
|
||||
pdftitle = {Über die Klassifizierung von Knoten in dynamischen Netzwerken mit Inhalt},
|
||||
pdfauthor = {Martin Thoma},
|
||||
pdfkeywords = {DYCOS}
|
||||
}
|
||||
|
@ -38,11 +38,11 @@
|
|||
\begin{document}
|
||||
|
||||
\mainmatter
|
||||
\title{\"Uber die Klassifizierung von Knoten in dynamischen Netzwerken mit Inhalt}
|
||||
\titlerunning{\"Uber die Klassifizierung von Knoten in dynamischen Netzwerken mit Inhalt}
|
||||
\title{Über die Klassifizierung von Knoten in dynamischen Netzwerken mit Inhalt}
|
||||
\titlerunning{Über die Klassifizierung von Knoten in dynamischen Netzwerken mit Inhalt}
|
||||
\author{Martin Thoma}
|
||||
\authorrunning{Proseminar Netzwerkanalyse}
|
||||
\institute{Betreuer: Christopher O\ss{}ner}
|
||||
\institute{Betreuer: Christopher Oßner}
|
||||
\date{17.01.2014}
|
||||
\maketitle
|
||||
|
||||
|
@ -57,11 +57,8 @@
|
|||
\section{DYCOS}
|
||||
\input{DYCOS-Algorithmus}
|
||||
|
||||
\section{Experimentelle Analyse}\label{sec:experimentelle-analyse}
|
||||
\input{Experimentelle-Analyse}
|
||||
|
||||
\section{Abgrenzung}
|
||||
\input{Abgrenzung}
|
||||
\section{Schwächen und Verbesserungsvorschläge}
|
||||
\input{SchwaechenVerbesserungen}
|
||||
|
||||
\section{Ausblick}
|
||||
\input{Ausblick}
|
||||
|
@ -69,7 +66,7 @@
|
|||
% Normaler LNCS Zitierstil
|
||||
%\bibliographystyle{splncs}
|
||||
\bibliographystyle{itmalpha}
|
||||
% TODO: Ändern der folgenden Zeile, damit die .bib-Datei gefunden wird
|
||||
% TODO: Ändern der folgenden Zeile, damit die .bib-Datei gefunden wird
|
||||
\bibliography{literatur}
|
||||
|
||||
\end{document}
|
||||
|
|
|
@ -19,8 +19,8 @@ für alle Knoten, die bisher noch nicht gelabelt sind.\\
|
|||
$E_t$ die Kantenmenge und $V_{L,t} \subseteq V_t$ die Menge der
|
||||
gelabelten Knoten jeweils zum Zeitpunkt $t$ bezeichne.
|
||||
Außerdem sei $L_t$ die Menge aller zum Zeitpunkt $t$ vergebenen
|
||||
Labels und $f:V_{L,t} \rightarrow \powerset(L_t)$ die Funktion, die einen
|
||||
Knoten auf seine Labels abbildet.
|
||||
Labels und $f:V_{L,t} \rightarrow L_t$ die Funktion, die einen
|
||||
Knoten auf sein Label abbildet.
|
||||
|
||||
Weiter sei für jeden Knoten $v \in V$ eine (eventuell leere)
|
||||
Textmenge $T(v)$ gegeben.
|
||||
|
@ -36,6 +36,6 @@ sind viele $\num{10000}$~Knoten groß und dynamisch. Das bedeutet, es
|
|||
kommen neue Knoten und eventuell auch neue Kanten hinzu bzw. Kanten
|
||||
oder Knoten werden entfernt. Außerdem stehen textuelle Inhalte zu den
|
||||
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.
|
||||
Bei kleinen Modifikationen sollte nicht alles nochmals berechnen
|
||||
werden müssen, sondern basierend auf zuvor
|
||||
berechneten Labels sollte die Klassifizierung modifiziert werden.
|
||||
|
|
4
documents/DYCOS/README.md
Normal file
4
documents/DYCOS/README.md
Normal file
|
@ -0,0 +1,4 @@
|
|||
Ausarbeitung zum Proseminar "Netzwerkanalyse" am KIT.
|
||||
|
||||
Die Ausarbeitung soll 10-12 Seiten haben und die Präsentation
|
||||
25-30 Minuten dauern + 10-15 Minuten Diskussion.
|
89
documents/DYCOS/SchwaechenVerbesserungen.tex
Normal file
89
documents/DYCOS/SchwaechenVerbesserungen.tex
Normal file
|
@ -0,0 +1,89 @@
|
|||
Der in \cite{aggarwal2011} vorgestellte Algorithmus hat einige Probleme,
|
||||
die im Folgenden erläutert werden. Außerdem werden Verbesserungen
|
||||
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,
|
||||
deren Knoten höchstens ein Label haben. In vielen Fällen, wie z.~B.
|
||||
Wikipedia mit Kategorien als Labels haben Knoten jedoch viele Labels.
|
||||
|
||||
Auf einen ersten Blick ist diese Schwäche einfach zu beheben, indem
|
||||
man beim zählen der Labels für jeden Knoten jedes Label zählt. Dann
|
||||
wäre noch die Frage zu klären, mit wie vielen Labels der betrachtete
|
||||
Knoten gelabelt werden soll.
|
||||
|
||||
Jedoch ist z.~B. bei Wikipedia-Artikeln auf den Knoten eine
|
||||
Hirarchie definiert. So ist die Kategorie \enquote{Klassifikationsverfahren}
|
||||
eine Unterkategorie von \enquote{Klassifikation}. Bei dem Kategorisieren
|
||||
von Artikeln sind möglichst spezifische Kategorien vorzuziehen, also
|
||||
kann man nicht einfach bei dem Auftreten der Kategorie \enquote{Klassifikationsverfahren}
|
||||
sowohl für diese Kategorie als auch für die Kategorie \enquote{Klassifikation}
|
||||
zählen.
|
||||
|
||||
|
||||
\subsubsection{Überanpassung und Reklassifizierung}
|
||||
Aggarwal und Li beschreiben in \cite{aggarwal2011} nicht, auf welche
|
||||
Knoten der Klassifizierungsalgorithmus angewand werden soll. Jedoch
|
||||
ist die Reihenfolge der Klassifizierung relevant. Dazu folgendes
|
||||
minimale Beispiel:
|
||||
|
||||
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.\\
|
||||
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.
|
||||
|
||||
Würde man nun den DYCOS-Algorithmus erst jetzt, also anstelle von
|
||||
Zeitpunkt $t=2$ zum Zeitpunkt $t=3$ auf den Knoten $v_2$ anwenden, so
|
||||
würde eine $50\%$-Wahrscheinlichkeit bestehen, dass dieser mit $B$
|
||||
gelabelt wird. Aber in diesem Beispiel wurde der Knoten schon
|
||||
zum Zeitpunkt $t=2$ gelabelt. Obwohl es in diesem kleinem Beispiel
|
||||
noch keine Rolle spielt, wird das Problem klar, wennn man weitere
|
||||
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\%$.
|
||||
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
|
||||
Labels statt.
|
||||
|
||||
Das Reklassifizieren von Knoten könnte eine mögliche Lösung für dieses
|
||||
Problem sein. Knoten, die durch den DYCOS-Algorithmus gelabelt wurden
|
||||
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
|
||||
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 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
|
||||
$q \in \mathbb{N}$ bestimmt oder nach welchen Überlegungen $q$ gesetzt
|
||||
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
|
||||
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.
|
||||
Dieser beinhaltet Forschungsarbeiten, wobei die
|
||||
Forschungsgebiete die in einen Baum mit 73 Blättern
|
||||
eingeordnet wurden. Aus diesen 73 Blättern wurden 5 Klassen
|
||||
extrahiert und der Graph, der keine Zeitpunkte beinhaltet,
|
||||
künstlich in 10 Graphen mit Zeitpunkten unterteilt. Wie
|
||||
jedoch die TODO
|
||||
\end{itemize}
|
87
documents/DYCOS/Sprungtypen.tex
Normal file
87
documents/DYCOS/Sprungtypen.tex
Normal file
|
@ -0,0 +1,87 @@
|
|||
\subsection{Sprungtypen}
|
||||
Die beiden bereits definierten Sprungtypen, der strukturelle Sprung
|
||||
sowie der inhaltliche Mehrfachsprung werden im folgenden erklärt.
|
||||
|
||||
Der strukturelle Sprung entspricht einer zufälligen Wahl eines
|
||||
Nachbarknotens. Hier gibt es nichts besonderes zu beachten.
|
||||
|
||||
Bei inhaltlichen Mehrfachsprüngen sieht die Sache schon anders aus:
|
||||
Es ist nicht sinnvoll, direkt von einem strukturellem Knoten
|
||||
$v \in \N_t$ zu einem mit $v$ verbundenen Wortknoten $w$ zu springen
|
||||
und von diesem wieder zu einem verbundenem strutkurellem Knoten
|
||||
$v' \in \N_t$. Würde man dies machen, wäre zu befürchten, dass
|
||||
aufgrund von Homonymen die Qualität der Klassifizierung verringert
|
||||
wird. So hat \enquote{Brücke} im Deutschen viele Bedeutungen.
|
||||
Gemeint sein können z.~B. das Bauwerk, das Entwurfsmuster der
|
||||
objektorientierten Programmierung oder ein Teil des Gehirns.
|
||||
|
||||
Deshalb wird für jeden Knoten $v$, von dem aus man einen inhaltlichen
|
||||
Mehrfachsprung machen will folgendes vorgehen gewählt:
|
||||
\begin{enumerate}
|
||||
\item Gehe alle in $v$ startenden Random Walks der Länge 2 durch
|
||||
und erstelle eine Liste $L$, der erreichbaren Knoten $v'$. Speichere
|
||||
außerdem, durch wie viele Pfade diese Knoten $v'$ jeweils erreichbar sind.
|
||||
\item Betrachte im folgenden nur die Top-$q$ Knoten, wobei $q \in \mathbb{N}$
|
||||
eine zu wählende Konstante des Algorithmus ist.
|
||||
\item Wähle mit Wahrscheinlichkeit $\frac{\Call{Anzahl}{v'}}{\sum_{w \in L} \Call{Anzahl}{v'}}$
|
||||
den Knoten $v'$ als Ziel des Mehrfachsprungs.
|
||||
\end{enumerate}
|
||||
|
||||
Konkret könnte also ein Inhaltlicher Mehrfachsprung sowie wie in
|
||||
Algorithmus~\ref{alg:DYCOS-content-multihop} beschrieben umgesetz werden.
|
||||
|
||||
\begin{algorithm}[H]
|
||||
\begin{algorithmic}[1]
|
||||
\Procedure{InhaltlicherMehrfachsprung}{Knoten $v$}
|
||||
\State \textit{//Alle Knoten bestimmen, die von $v$ aus über Pfade der Länge 2 erreichbar sind}
|
||||
\State \textit{//Zusätzlich wird für diese Knoten die Anzahl der Pfade der Länge 2 bestimmt,}
|
||||
\State \textit{//durch die sie erreichbar sind}
|
||||
\State $reachableNodes \gets$ defaultdict
|
||||
\ForAll{Wortknoten $w$ in $v.\Call{getWordNodes}{ }$}
|
||||
\ForAll{Strukturknoten $x$ in $w.\Call{getStructuralNodes}{ }$}
|
||||
\State $reachableNodes[x] \gets reachableNodes[x] + 1$
|
||||
\EndFor
|
||||
\EndFor
|
||||
|
||||
\State \textit{//Im folgenden gehe ich davon aus, dass ich über Indizes wahlfrei auf Elemente }
|
||||
\State \textit{//aus $M_H$ zugreifen kann. Dies muss bei der konkreten Wahl der Datenstruktur}
|
||||
\State \textit{//berücksichtigt werden}
|
||||
\State $M_H \gets \Call{max}{reachableNodes, q}$ \Comment{Also: $|M_H| = q$, falls $|reachableNodes|\geq q$}
|
||||
\State \textit{//Generate dictionary with relative frequencies}
|
||||
\State $s \gets 0$
|
||||
\ForAll{Knoten $x$ in $M_H$}
|
||||
\State $s \gets s + reachableNodes[x]$
|
||||
\EndFor
|
||||
\State $relativeFrequency \gets $ Dictionary
|
||||
\ForAll{Knoten $x$ in $M_H$}
|
||||
\State $relativeFrequency \gets \frac{reachableNodes[x]}{s}$
|
||||
\EndFor
|
||||
|
||||
\State $random \gets \Call{random}{0, 1}$
|
||||
\State $s \gets 0$
|
||||
\State $i \gets 0$
|
||||
\While{$s < random$}
|
||||
\State $s \gets s + relativeFrequency[i]$
|
||||
\State $i \gets i + 1$
|
||||
\EndWhile
|
||||
|
||||
\State $v \gets M_H[i-1]$
|
||||
\State \Return $v$
|
||||
\EndProcedure
|
||||
\end{algorithmic}
|
||||
\caption{Inhaltlicher Mehrfachsprung}
|
||||
\label{alg:DYCOS-content-multihop}
|
||||
\end{algorithm}
|
||||
|
||||
\begin{algorithm}[H]
|
||||
\begin{algorithmic}[1]
|
||||
\Procedure{SturkturellerSprung}{Knoten $v$, Anzahl $q$}
|
||||
\State $n \gets v.\Call{NeighborCount}{}$ \Comment{Wähle aus der Liste der Nachbarknoten}
|
||||
\State $r \gets \Call{RandomInt}{0, n-1}$ \Comment{einen zufällig aus}
|
||||
\State $v \gets v.\Call{Next}{r}$ \Comment{Gehe zu diesem Knoten}
|
||||
\State \Return $v$
|
||||
\EndProcedure
|
||||
\end{algorithmic}
|
||||
\caption{Struktureller Sprung}
|
||||
\label{alg:DYCOS-structural-hop}
|
||||
\end{algorithm}
|
|
@ -13,7 +13,6 @@ Gleichverteilung entspricht und $1$ der größt möglichen Ungleichverteilung.
|
|||
|
||||
Sei nun $n_i(w)$ die Häufigkeit des Wortes $w$ in allen Texten mit
|
||||
dem $i$-ten Label.
|
||||
\todo{darf ich hier im Nenner 1 addieren?}
|
||||
\begin{align}
|
||||
p_i(w) &:= \frac{n_i(w)}{\sum_{j=1}^{|\L_t|} n_j(w)} &\text{(Relative Häufigkeit des Wortes $w$)}\\
|
||||
G(w) &:= \sum_{j=1}^{|\L_t|} p_j(w)^2 &\text{(Gini-Koeffizient von $w$)}
|
||||
|
@ -30,7 +29,7 @@ $\mathcal{O}(|\text{Wörter in } S_t|)$, wobei dazu die Vereinigung
|
|||
von Mengen $M,N$ in $\mathcal{O}(\min{|M|, |N|})$ sein muss.
|
||||
|
||||
\begin{algorithm}[H]
|
||||
\begin{algorithmic}
|
||||
\begin{algorithmic}[1]
|
||||
\Require \\
|
||||
$\T_t$ (Knoten mit Labels),\\
|
||||
$\L_t$ (Labels),\\
|
||||
|
@ -65,4 +64,6 @@ von Mengen $M,N$ in $\mathcal{O}(\min{|M|, |N|})$ sein muss.
|
|||
\label{alg:vokabularbestimmung}
|
||||
\end{algorithm}
|
||||
|
||||
|
||||
Die Menge $S_t$ kann durch Aus der Menge aller Dokumenten, deren
|
||||
Knoten gelabelt sind, mithile des in \cite{Vitter} vorgestellten
|
||||
Algorithmus bestimmt werden.
|
||||
|
|
|
@ -1,8 +1,11 @@
|
|||
In dieser Arbeit wird der DYCOS-Algorithmus mit einer kleinen
|
||||
Modifikation vorgestellt. Er klassifiziert automatisch Knoten in
|
||||
In dieser Arbeit wird der DYCOS-Algorithmus, wie ihn Charu Aggarwal
|
||||
und Nan Li in \cite{aggarwal2011} vorgestellt haben, erklärt.
|
||||
Er klassifiziert automatisch Knoten in
|
||||
Netzwerken, die bereits teilweise mit Labels versehen sind. Zur
|
||||
Klassifizierung kann er textuelle Informationen, die den Knoten
|
||||
zugeordnet sind, nutzen. Er ist auch für für viele $\num{10000}$
|
||||
Knoten große, dynamische Netzwerke geeignet.\\
|
||||
Zusätzlich wird auf Schwächen von \cite{aggarwal2011} hingewiesen
|
||||
und mögliche Verbesserungen vorgeschlagen.
|
||||
|
||||
\textbf{Keywords:} DYCOS, Label Propagation, Knotenklassifizierung
|
||||
|
|
|
@ -72,3 +72,46 @@
|
|||
ee = {http://dx.doi.org/10.1007/978-3-642-00528-2},
|
||||
bibsource = {DBLP, http://dblp.uni-trier.de}
|
||||
}
|
||||
|
||||
@Online{bhagat,
|
||||
author = {Smriti Bhagat AND Graham Cormode AND S. Muthukrishnan},
|
||||
title = {Node Classification in Social Networks},
|
||||
year = {2011},
|
||||
version = {1},
|
||||
date = {2011-01-17},
|
||||
eprinttype = {arxiv},
|
||||
eprintclass = {cs.SI, physics.soc-ph},
|
||||
eprint = {http://arxiv.org/abs/1101.3291v1}
|
||||
}
|
||||
|
||||
@article{Vitter,
|
||||
author = {Vitter, Jeffrey S.},
|
||||
title = {Random Sampling with a Reservoir},
|
||||
journal = {ACM Trans. Math. Softw.},
|
||||
volume = {11},
|
||||
number = {1},
|
||||
year = {1985},
|
||||
issn = {0098-3500},
|
||||
pages = {37--57},
|
||||
numpages = {21},
|
||||
url = {http://doi.acm.org/10.1145/3147.3165},
|
||||
doi = {10.1145/3147.3165},
|
||||
acmid = {3165},
|
||||
publisher = {ACM},
|
||||
address = {New York, NY, USA},
|
||||
}
|
||||
|
||||
@incollection{porter,
|
||||
author = {Porter, M. F.},
|
||||
chapter = {An Algorithm for Suffix Stripping},
|
||||
title = {Readings in Information Retrieval},
|
||||
editor = {Sparck Jones, Karen and Willett, Peter},
|
||||
year = {1997},
|
||||
isbn = {1-55860-454-5},
|
||||
pages = {313--316},
|
||||
numpages = {4},
|
||||
url = {http://dl.acm.org/citation.cfm?id=275537.275705},
|
||||
acmid = {275705},
|
||||
publisher = {Morgan Kaufmann Publishers Inc.},
|
||||
address = {San Francisco, CA, USA},
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue