Upload
ramon-wartala
View
2.157
Download
0
Embed Size (px)
DESCRIPTION
Citation preview
Dokumenten-Clustering (mit ActiveRecord)
Ramon Wartala
Rails Konferenz - 10.6.2008
**
Kollektive Intelligenz
•Wisdom of the crowds•Collective intelligence•Selbstorganisation•Schwarmintelligenz
Wie schwer ist diese Kuh?
Information overload!!!
Clustering: Gruppen ähnlicher Dinge finden
Was sind relevante Informationen?
Index-Terme
„Ein Index-Term ist für ein Dokument um so signifikanter, je häufiger er ein einem Dokument
auftritt und je seltener er in anderen Dokumenten vorkommt“
Linguistisches Level Textanalyseverfahren
lexikalisch Stopwortliste, Lexikon
morphologisch Wortstammanalyse
syntaktisch statistische und grammatikalische Regeln
semantische Thesaurus
pragmatisch Expertensysteme
Linguististe Textanalyse
steigendeKomplexität
unless stopwords
• bestimmte Artikel ('der', 'die', 'das')
• unbestimmte Artikel ('einer', 'eine', 'ein')
• Konjunktionen ('und', 'oder', 'doch', usw.)
• Präpositionen ('an', 'in', 'von', usw.)
• Negation wie 'nicht'
Part-of-speech-taggingThis lecture's goal is to take you beyond
simple database-backend applications and teach you how to write smarter programs to
take advantage of information you and others collect every day.
DT, NN, PRP, JJ, VBZ, TO, NN, PRP, IN, JJ, nil, NNS, CC, VB, PRP, WRB, TO, VB, RBR, NNS, TO, VB, NN, IN,
NN, PRP, CC, NNS, VB, DT, NN
DT, NN, PRP, JJ, VBZ, TO, NN, PRP, IN, JJ, nil, NNS, CC, VB, PRP, WRB, TO, VB, RBR, NNS, TO, VB, NN, IN,
NN, PRP, CC, NNS, VB, DT, NN
Wortstämme
• Im Englischen sehr einfach mit dem Porter-Stemmer-Algorithmus (Porter 1980)
• Ruby Implementierung als RubyGem verfügbar
• Mehr unter http://www.tartarus.org/~martin/PorterStemmer
Alles zusammenText in Wörter
trennen
Kurze Worte & Stopwörter filtern
Nur Nomen
Wort & Wortstamm
Term-Gewichte
Term-Frequenz
tfij=freqij
maxl(freqlj)
wird pro Term i abhängig vom Dokument j betrachtet. freqi,j ist die Auftrittshäufigkeit des betrachteten Terms i im Dokument j. Im Nenner steht die Maximalhäufigkeit
über alle l Terme im Dokument (Baeza-Yates und Ribeiro-Neto, 1999).
Inverse Dokumenten frequenz
Die inverse Dokumentfrequenz idf hängt hingegen nicht vom einzelnen
Dokument, sondern vom Dokumentkorpus, der Gesamtmenge
aller Dokumente im ab
idfi= log ni
N
Term-Gewicht
wij= tfij * idfi =freqij
maxl(freqlj)log ni
N*
Das Gewicht w eines Terms i im Dokument j
Term1
Term2
Term3
Dokument1= (Term1, Term22, Term56)
Ergebnis: Dokumenten Vektorraummodell
Dokument1= (Term11, Term13, Term42)
Document < ActiveRecord::Base
Ähnlichkeit von Dingen = Korrelationsmaß
Korrelationsmaße• Skalarprodukt
• Cosinus
• Dice-Koeffiient
• Jaccard-Koeffizeint
• Overlap-Koeffizient
• Nummerisches Maß für die Ähnlichkeit zweier N-Dimensionaler Vektoren
Dokumenten-Term-Matrix
Term Dokument1 Dokument2 DokFreq
Apfel 2 0 2
Birne 0 5 5
Mango 2 8 10
Kiwi 1 1 2
Pflaume 0 3 3
Termgewichtung
Term Dokument1 Dokument2
Apfel 1 0
Birne 0 1
Mango 0,2 0,8
Kiwi 0,5 0,5
Pflaume 0 1
Invertierte ListeTermfreq > 0.5
Apfel Dokument1
Birne Dokument2
Mango Dokument2
Kiwi
Pflaume Dokumen2
Dokumenten-Vektor als Hash
• dokument1={”Apfel”⇒1, ”Kiwi”⇒0.5}
• dokument2={”Birne”⇒1, ”Mango”⇒0.8, ”Kiwi”⇒0.5}
Cosinus-Koeffizient
Cosinus-Koeffizient
gleich: sim=1.0 orthogonal: sim=0.0 ähnlich: 1 < sim > 0
Ziel von Dokumenten-Clustering
• Identifikation einer endlichen Menge von Clustern
• Dokumente im gleichen Cluster sollen möglichst ähnlich sein
• Dokumente aus verschiedenen Clustern sollen möglichst unähnlich zueinander sein
Ziele von Dokumenten Clustering
Vorteile von Clustering
• Unbeaufsichtigtes Lernen
• schneller Überblick über den Inhalt einer sehr großen Datenmenge
• Identifikation der verborgenen Ähnlichkeit
• Erleichterung der Suche nach ähnlichen Dokumenten
• Verhalten gut erforscht
Vorteile von Clustering
• klassische Methode des Clustering und wurde für Textdokumente angepasst.
• In diesem Bereich weit verbreitet und effizient
• Findet nicht immer das Optimum
• Ist schnell und effizient
• Komplexität: O(k * n * i), wobei i die Anzahl Iterationen ist
k-means Algorithmus
1. Lege k fest
2. Erzeuge k-Cluster (Zentroide)
3. Verteile alle Dokumente zufällig auf die Zentroide
4. Berechne Zentrodie als Durchschnittsvektor aller Dokumentenvektoren
5. Vergleiche jeden Dokumentenvektor mit jedem Zentroid
6. Verschiebe Dokumente zu Zentroiden mit der höchsten Ähnlichkeit
7. Fertig, wenn kein Dokument mehr verschoben wird. Sonst zu Schritt 4 zurück
k-means Algorithmus
D1
D2
D4
D5
D3
D1
D2
D4
D5
D3Z1
Z2
D1
D2
D4
D5
D3
Z1
Z2
D1
D2
D4
D5
D3Z1
Z2Z1
Z2
co2alarm.com - clustered green headlines
• co2alarm.com
• Ruby on Rails Projekt
• Übersicht über Neuigkeiten aus dem Umweltbereich
• RSS-Agregator / -Crawler
• k-means-Clusterer auf Datenbankebene
• Visualisierung mit TreeMaps
• Demokratisierung von „grünen“ Nachrichten
Quellen
http://web.media.mit.edu/~dustin/rubyai.html
1. 2. 3.
Kontakt
Ramon Wartala
ist IT-Leiter beim Hamburger Online-Vermarkter orangemedia.de GmbH, Co-Autor des Buches Webanwendungen mit Ruby on Rails, Mitbegründer der ersten, deutschen Ruby on Rails Usergroup und seit 10 Jahren freier Autor im Bereich Softwareentwicklung und Entwickler von co2alarm.com.
[email protected]/profile Ramon_Wartalatwitter.com/rawar