Prototypische Komponenten eines Information Retrieval Systems: Vektormodell Implementierung & Präsentation: Stefan Schmidt (Uni Mannheim) Kontakt: powder@gmx.de Seminar: Information Retrieval WS2002/2003 Leiterin: Privatdozentin Dr. Karin Haenelt Institut für Computerlinguistik Uni Heidelberg
Gliederung 1. Theorie 2. Praxis: Implementierung 3. Vorführung 4. Zusammenfassung 5. Quellen
1. Theorie
Worum geht es thematisch? Menge von Dokumenten Informationsbedürfnis Anfrage an ein Programm Anzeige Liste relevanter Dokumente Evaluation der Dokumente durch User => Information Retrieval - Menge von Dokumenten: Auf der Festplatte oder im Internet. In diesem Fall einfache Textdateien mit einer größe von einigen kilobyte. - Informationsbedürfnis: Der Benutzer möchte etwas über ein für ihn interessantes Thema herausfinden und zu diesem Zweck Dokumente mit thematisch relevanten Inhalten in der Dokumentenmenge finden - Anfrage an ein Programm: Um die Dokumente thematisch einzugrenzen gibt der Benutzer Suchterme in das Interface ein. Beispiel: bei Google computerlinguistik uni heidelberg - Anzeige Liste relevanter Dokumente: Das System durchsucht die Dokumente bzw. den Index nach den Suchtermen mithilfe eine bestimmten Algorithmus und zeigt eine nach Relevanz sortierte Liste der interessanten Dokumente an (Ranking) - Evaluation der Dokumente durch User: Der Benutzer wählt die für ihn interessanten Dokumente aus der Liste aus und evaluiert diese hinsichtlich seines Informationsbedürfnisses. Wenn die Inhalte nicht interessant sind, dann stellt er eine erneute Anfrage mit veränderten Suchtermen
Zentrales Thema: Ranking Precision sollte hoch sein Recall sollte ebenfalls hoch sein Deshalb wichtig: Ranking-Algorithmus Beispiel: Vektormodell [engl.: Vector Space Model] - Precision: Wieviele Dokumente in der Antwortmenge sind relevant für den Benutzer? - Recall: Wieviele der relevanten Dokumente in der Dokumentenmenge hat das IR-System gefunden? - Ranking-Algorithmus: Es gibt unterschiedlichste Möglichkeiten die Liste der relevanten Dokumente zu berechnen. Beispiele: Boolsches Modell (Ist Term enthalten ja/nein), Probabilistisches Modell (Arbeitet mit Wahrscheinlichkeiten) und - Vektormodell: Das von mir benutzte Retrievalmodell
Indexterme Repräsentation der Dokumente durch Indexterme z.b. Der Student geht in das Seminar [ ] Indexterme: Student, geht, Seminar, Vorlesung, Uni, Stoppwörter: Der, in, das, - Repräsentation: Wie soll können die Daten für eine effiziente Nutzung durch das Informationretrievalsystem aufbereitet werden - Beispiel: Ein Satz aus einem längeren Dokument - Indexterme: Relevante Wörter mittlerer Häufigkeit - Stoppwörter: Wörter hoher Häufigkeit ohne Aussage für den Inhalt des Dokuments
documentvector Indexterme werden abgelegt in documentvector z.b. documentvector = ( 1, 3, 5, 0, 0 ) 1xStudent, 3xgeht, 5xSeminar, 0xVorlesung, 0xUni - documentvector: Repräsentation eines Dokuments mit Hinblick auf eine Suchanfrage des Informationretrievalsystems. Enthält die Häufigkeiten der Indexterme. - Häufigkeit: In dem Gesamtdokument kommen die Indexterme so-und-sooft vor
queryvector Suchterme werden abgelegt in queryvector z.b. queryvector = (1, 0, 1, 0, 0) Suchanfrage: Student Seminar - queryvector: Repräsentation der Anfrage mit Hinblick auf die Berechnung der Ähnlichkeit zwischen einer Anfrage und eines Dokuments der Dokumentenmenge. Jeder gefundene in der Suchanfrage vorhandene Indexterm wird durch eine 1 im queryvector dargestellt
similarity Berechnung der similarity (Ähnlichkeit) (d1*q1) + (d2*q2) sim(d,q)= --------------------------------------------------- sqrt(d1*d1+d2*d2) * sqrt(q1*q1+q2*q2) sqrt=squareroot (Wurzel) d=documentvector q=queryvector d1= 1. element des Vektors, usw. - Similarity: Beim Vektormodell wird die Ähnlichkeit zwischen dem queryvector und den documenvectors berechnet. Dies geschieht durch direkten mathematischen Vergleich der Vektoren. Die Formel leitet sich aus dem Cosinus des Winkels zwischen den beiden Vektoren her. Je höher die Ähnlichkeit der Vektoren ist, desto höher steht das jeweilige Dokument im Ranking.
Problem bei Berechnung der similarity Länge der Vektoren bleibt unberücksichtigt Lösung: Term Frequency und Inverse Document Frequency - Lösung: Berücksichtigung der Häufigkeit eines Terms innerhalb des Dokuments und innerhalb der Dokumentenmenge
TF Term Frequency (TF) Welche Terme kommen häufig vor? Frequenz des Terms in Dokument tf = ---------------------------------------------------- Max. Frequenz eines Terms in Dok. - Term Frequency: Die normalisierte Häufigkeit eines Indexterms innerhalb eines Dokuments
IDF Inverse Document Frequency (IDF) Welche Terme sind aussagekräftig? Gesamtzahl der Dokumente IDF= log ---------------------------------------- Anzahl Dok. mit Term t - Inverse Document Frequency: Die logarithmisierte inverse Häufigkeit des Terms in allen Dokumenten
Neuer documentvector Pro Term jeweils ein Neues Termdokumentgewicht w = tf * idf Werte ersetzen documentvector Bessere Berechnung der similarity - Werte: Die neue berechneten Werte ersetzen den bisherigen documentvector - similarity: Nun werden bessere Ergebnisse bei der Berechnung der similarity erzielt
Eigenschaften Vektormodell Vorteil: Ranking Vorteil: Skalierbarkeit Nachteile: Annahme der Unabhängigkeit der Suchterme - Ranking: ist besser als beim Boolsches Modell - Skalierbarkeit: Funktioniert auch gut für große Datenmengen - Annahme der Unabhängigkeit der Suchterme: Es wird nicht berücksichtigt, dass einzelne Terme unter Umständen zueinander in Beziehung stehen
2. Praxis: Implementierung
Anforderungen an das System Eingabemaske für Suchterme Einlesemodul für Dateien Beliebige Anzahl Suchtermen & Dateien Rankingberechnung und Ausgabe - Eingabemaske für Suchterme: Möglichkeit für den Benutzer die Suchterme einzugeben - Einlesemodul für Dateien: Externe Daten sind verwendbar - Beliebige Anzahl Suchtermen & Dateien: Testcorpus hat 16 Dateien - Rankingberechnung und Ausgabe: Eine Tabelle der Suchergebnisse soll erstellt werden mit den Dokumenten in der Reihenfolge der Relevanz
Technologien Windows XP Visual Studio.NET Sprache: C++ - Windows XP: Unter Windows entwickelt - Visual Studio.NET: Sehr gute Integrierte Entwicklungsumgebung für Programmierung mit Visual Basic, C#( C-Sharp ) und C++ - Sprache: Bisher mit Java gearbeitet, jetzt mal C++ ausprobiert
Systemarchitektur Prototyp enthält ~400 Zeilen Quellcode Funktionen: main() readfile() splitstring() sim() sortranking() main() enthält Programmkern readfile() liest Datei ein splitstring() teilt Text in Wörter auf sim() berechnet similarity von Vektoren sortranking() sortiert Rankingtabelle
Ablauf des Programms 1. Definition Variablen 2. Eingabe Suchterme 3. Einlesen der Dateien und Aufteilung in Wörter 4. Bestimmung der Frequenz der Indexterme 5. Bestimmung von TF/IDF-Werten 6. Berechnung Similarity und einfügen in Rankingtabelle 7. Sortieren der Rankingtabelle 8. Ausgabe der Rankingtabelle Definition Variablen: Hauptsächlich Doubles, Vectors und Vectors of Vectors Eingabe Suchterme: Einfach über die Kommandozeile Einlesen der Dateien und Aufteilung in Wörter: Alle Dateien im corpus- Verzeichnis werden eingelesen und in Wörter aufgetrennt zwischen Leerstellen, Kommas, Punkten, Klammern, etc. Bestimmung der Frequenz der Indexterme: Die Häufigkeit der Indexterme in jedem Dokument wird bestimmt Bestimmung von TF/IDF-Werten: Für jedes Dokument/Termpaar wird die Termfrequency bestimmt und für jeden Term die Inverse Document Frequency Berechnung Similarity und einfügen in Rankingtabelle: Für alle Dokumente wird die similarity mit der Suchanfrage berechnet und das ergebnis wird in eine Rankingtabelle eingefügt Sortieren der Rankingtabelle: Das Dokument mit der höchsten Similarity steht oben Ausgabe der Rankingtabelle: Die Tabelle mit den Ergebnissen wird auf der Console ausgegeben
Quellcode sim()-funktion double sim (vector <double> dv, vector <int> qv) { double sim; // simularity double uppersum=0; double lowersum=0; double sumdoc=0; double sumquery=0; for(int i=0; i < (int) dv.size();i ++) { uppersum += dv[i]*qv[i ]; sumdoc += dv[i]*dv[i ]; sumquery += qv[i]*qv[i ]; } lowersum = sqrt (sumdoc) * sqrt (sumquery); if (lowersum!= 0) sim = uppersum / lowersum; else sim = 0; return sim; } Parameter: documentvector und queryvector Variablendefinitionen: Variablen zum abspeichern von Zwischenergebnissen Schleife: Läuft einmal durch die kompletten Vektoren und verrechnet die Komponenten der Vektoren If-Abfrage: Überprüfung wegen eventueller Nulldivision Rückgabewert: similarity
Quellcode sortranking()-funktion vector<vector<double> > sortranking(vector<vector<double> > ranking) { int size=ranking.size(); } for(int obergrenze=size-1;obergrenze>0;--obergrenze) { for(int pos=0;pos<obergrenze;++pos) { if(ranking[pos][1]<ranking[pos+1][1]) swap(ranking[pos],ranking[pos+1]); } } return ranking; Parameter: vector of vector of double Variablendefinitionen: Größe der Rankingtabelle Schleifen: Läuft einmal durch den kompletten Vektor If-Abfrage: Überprüfung der Reihenfolge. Falls falsch => Elemente vertauschen Rückgabewert: sortierter rankingvektor
3. Vorführung Informationretriever Testcorpus: Architekturtexte (achtung: probleme mit umlauten) 2 Durchläufe: 1) Frankreich Bauten Architektur - jugenstil.txt & breuer.txt liegen klar vorne, da alle 3 terme vorkommen - jugenstil an der spitze, da maximale Termfrequenz geringer ist - breites Mittelfeld (2 terme kommen vor) - Schlußlichter (1 term kommt vor) 2) Gropius Akademie - breuer.txt liegt klar an der spitze (beide terme kommen vor) - gropius.txt kommt an zweiter stelle, aber mit abstand wegen maximaler Termfrequenz - dann kommt das Mittelfeld und in den meisten Dokumenten kommt weder der eine noch der andere Term vor
Evaluierung der Algorithmen in Hinblick auf große Datenmengen Prototyp nur akzeptable Laufzeit für kleine Datenmengen Mögliche Verbesserungen: Quicksort anstatt Bubblesort Feste Indexterme Hashtabellen Sparse Matrix Algorithmen Feste Indexterme: Momentan Indexterme=Suchterme Hashtabellen: für Indextermsuche bei zehntausenden Termen Sparse Matrix Algorithmen: für dünnbesetzte große Matrizen
4. Zusammenfassung Prototyp Vektormodell / Datenmengen Effizienz Prototyp: demonstriert Möglichkeiten der Suche Vektormodell: interessant für große, variable Datenmengen Effiziente: Implementierung nötig für gute Skalierbarkeit
5. Literaturangaben Haenelt, Karin (2001): Information Retrieval Modelle. Seminarfolien. 26.10.2001. http://www.darmstadt.gmd.de/kontext/ haenelt/kurs/folien/ir-modelle.pdf Soboroff, Ian (2002) Vector Space Model. Kursfolien. 10.2002 http://www.csee.umbc.edu/~ian/irf02/lectures/07models-vsm.pdf Popescu, Andrei Radu (2001) Implementation of term weighting in a simple IR system. Kursprojekt. 06.2001 http://www.cs.helsinki.fi/u/popescu/docs/ir.pdf Microsoft Corporation (2003) MSDN Library. C++ Sprachreferenz. Laufend Aktualisiert. http://msdn.microsoft.com/ Das sind die Quellen die ich verwendet habe
Ende! Das wars!