Dokumentclustering. Eine Implementierung

Werbung
Implementierung:
Dokumentclustering
Max Jakob
Florian Winkelmeier
Ruprecht-Karls-Universität Heidelberg
Seminar für Computerlinguistik
HS Information Retrieval
Dozentin: Dr. Karin Haenelt
Wintersemester 2005/2006
1
Dokumentclustering

thematische Gruppierung von Dokumenten

aufgrund gemeinsamer Terme

z.B. zum Browsen in Dokumentgruppen
2
Gliederung
Programmaufbau
Korpus
Ablauf



1.
2.
3.
4.
5.
6.
Identifikation der Index-Terme
Erzeugung der Dokumentvektoren
Ähnlichkeitsmaße
Ähnlichkeitsmatrix der Dokumente
Relationsmatrix der Dokumente
Clustering
Ergebnisse



Evaluierung
Cluster
3
Programmaufbau
4
Korpus



Dokumente aus dem ZEIT.de-Archiv
in Textdateien gespeichert
  Skript zum Speichern einzelner Jahre des ZEIT-Archivs
in Textdateien
http://www.zeit.de/archiv/
5
Quelle: http://www.zeit.de/2005/52/Osthoff
Identifikation der Index-Terme

Tokenizer



Stemmer


Trennung an allem was kein Buchstabe ist
(hauptsächlich Leerzeichen)
mit Bindestrich getrennte Wörter bleiben vereint
Porter-Stemmer von snowball
Stopwörter werden später durch tf-idf aussortiert
6
Dokumentvektoren


als Dictionaries (Hashtables) repräsentiert
nur vorkommende Terme
docVectors = { 1: { 2:4, 6:2, 7:1, 8:3 },
2: { 1:3, 2:1, 3:4, 4:3, 5:1, 6:2, 8:1},
3: { 1:3, 5:3, 7:3 },
…}
Bild-Quelle: http://kontext.fraunhofer.de/haenelt/kurs/folien/Clustering.pdf
7
Erzeugung der
Dokumentvektoren
def getDocVector(fName):
docVector = {}
for word in corpus.getWordListFromFile(fName):
docVector[word] = docVector.get(word, 0) + 1
return docVector
def getDocVectors():
docVectors = {}
idx = 0
for fileName in corpus.textFileNames:
docVectors.setdefault(idx, {})
for word, freq in getDocVector(fileName):
docVectors[idx][corpus.wordIdxDict[word]] = freq
idx = idx + 1
return pruneWithTFIDF(docVectors)
8
Ähnlichkeitsmaße

Korrelationsartige Maße
(großer Wert  große Ähnlichkeit)
 Einfache Methode
 Cosinus-Koeffizient
 Dice-Koeffizient
 Jaccard-Koeffizient
 Overlap-Koeffizient
9
Cosinus-Ähnlichkeit
import math
def cosinusSim(vecDict1, vecDict2):
zaehler, nenner1, nenner2 = 0, 0, 0
for doc in vecDict1.keys() + vecDict2.keys():
zaehler += vecDict1.get(doc, 0) * vecDict2.get(doc, 0)
nenner1 += vecDict1.get(doc, 0) **2
nenner2 += vecDict2.get(doc, 0) **2
return zaehler / (math.sqrt(nenner1) * math.sqrt(nenner2))
10
Ähnlichkeitsmatrix der
Dokumente

Dokument-DokumentÄhnlichkeitstabelle

Zwischenschritt zur
Relationsmatrix
11
Bild-Quelle: http://kontext.fraunhofer.de/haenelt/kurs/folien/Clustering.pdf
Relationsmatrix der
Dokumente

Dokument-RelationsTabelle

Ähnlichkeiten die den
Schwellenwert
überschreiten

Bsp.: threshold = 10
12
Bild-Quelle: http://kontext.fraunhofer.de/haenelt/kurs/folien/Clustering.pdf
Relationsmatrix der
Dokumente

beidseitig



nötig für den späteren
Clique-Algorithmus
als Listen in einem Dictionary
(Hashtable)
nur bestehende
Ähnlichkeiten
simMartix = { 1: [3,4,5,6],
2: [4,6,8],
3: [1,4,6],
4: [1,2,3,6],
5: [1],
6: [1,2,3,4,8],
8: [2,6]
}
13
Bild-Quelle: http://kontext.fraunhofer.de/haenelt/kurs/folien/Clustering.pdf
Clustering

Cliques



„viele Partys, auf denen sich
alle gegenseitig kennen“
zwischen allen Knoten
innerhalb eines Clusters
Kanten zu den anderen
Knoten
ein Knoten kann Teil
mehrerer Cluster sein
14
Bild-Quelle: http://kontext.fraunhofer.de/haenelt/kurs/folien/Clustering.pdf
Clique: Der Algorithmus


Algorithmus von Bron und Kerbosch (1971)
Clique ist NP-schwer


in der Praxis trotzdem gute Laufzeit


-> exponentielle Laufzeit
gilt als der schnellste clique Algorithmus
rekursiv definierter Algorithmus
15
Clique: Der Algorithmus(2)

C: Knoten im aktuellen Cluster
 P: Knoten, die zu C hinzugefügt werden
dürfen
 S: Knoten, die nicht zu C hinzugefügt
werden dürfen
P enthält am Anfang alle Knoten des Graphen

enumerateClique(C, P, S)

●
if P=={} and S=={}:
●
●
clique gefunden
else: for node in P:
●
●
●
●
P = P\{node}
N = alle zu node adjazenten Knoten
enumerateClique(C+{node}, P*N, S*N)
S=S + {node}
16
Clique: Rekursionsbaum
17
Bild-Quelle: Koch: Enumerating all connected maximal common subgraphs in two graphs, 1999 (S.10)
Cluster Evaluierung

Ziel:


Clusterstruktur den Daten angemessen oder
zufällig?
v.a. 3 Kriterien

externe



interne


“fleissige Ameisen”
errechnete Lösung wird mit manueller verglichen
ohne Rückgriff auf externe Informationen
relative

Vergleich von Ergebnissen, um Aussagen über
Algorithmus und Daten machen zu können
18
externes Kriterium: F-Maß


erfordert manuelles Clustering (Ameisen)
Kombination aus recall und precision

sei C=C1,...,Ck ein berechnetes Clustering

sei C'=C'1,...C'k ein manuelles Clustering
rec  i,j =∣C j ∩C 'i∣/C 'i
prec  i,j =∣C j ∩C 'i∣/C j
19
F-Maß(2)
F i,j =
2
1
1

prec  i,j  rec  i,j 
l
F =∑
i=1
'
∣C i∣
dn
∗ max F i , j
j=1,... , k
mit dn= Anzahl aller Elemente des manuellen Clusterings
20
Internes Kriterium: Kohäsion
und Separation
21
Bild-Quelle: Tan, Steinbach, Kumar: Introduction to Datamining, Addison-Wesley, 2004 (S. 537)
Kohäsion und Separation(2)


Kohäsion: Indikator für
die Dichte eines
Clusters.
 Je höher desto besser
Separation
 je kleiner der Wert,
umso besser sind die
Cluster voneinander
getrennt
22
Quelle: ????
Relative Kriterien


Idee: anhand eines bestimmen Kriteriums aus
einer Menge von Clustering Schemas das
beste herausfinden
etwas formaler:


sei Palg eine Menge von Parametern eines
Clustering-Algorithmus
über einer Folge von Clustering-Lösungen Ci =
C1,..., Cn wähle für unterschiedliche Parameter aus
Palg den aus, der am besten zu den Daten passt.
23
Relative Kriterien(2)

Wie findet man einen optimalen Parameter?




Man lässt den Algorithmus über eine weite Folge
der Werte des gewählten Parameters laufen
Auswahl der grössten Folge mit konstanter
Clusteranzahl
Wert des Parameters in der Mitte der Folge
identifiziert den gesuchten Wert
Wofür das ganze?


wir schätzen damit einen geeigneten Schwellenwert für
die Ähnlichkeit zwischen Cluster
ohne Auf und Ab in der Clusterzahl u.U. keine den
Daten zugrunde liegende Clusterstruktur
24
Ende

“The validation of clustering structures
is the most difficult and frustrating part
of cluster analysis”
(Algorithms for clustering data, Jain and Dumes)
25
Quellen

http://kontext.fraunhofer.de/haenelt/kurs/folien/Clustering.pdf

Korpus: Die Zeit online-Archiv


Stemmer


http://www.zeit.de/archiv/
http://snowball.tartarus.org/algorithms/german/stemmer.html
enumerateCliques-Algorithmus:


Bron, Coen and Kerbosch, Joep: Finding all cliques of an unidrected
graph, 1971
Koch, Ina: Enumerating all connected maximal common subgraphs in
two graphs, 1999
26
Quellen(2)

Evaluation




Pfister, Joachim: Analyse und Einsatzpotentiale von ClusteringVerfahren zum Retrieval von Patentdokumenten, 2004
Halkidi, M, Y. Batistakis, M.Vazirgiannis. “Cluster Validity Methods:
Part1”, SIGMOD Record, June 2002
Halkidi, M, Y. Batistakis, M.Vazirgiannis. “Cluster Validity Methods:
Part2”, SIGMOD Record, September 2002
Tan, Pang-Ning, Steinbach, Michael, Kumar, Vipin: Introduction to
Datamining, Addison-Wesley, April 2004
27
Herunterladen