Blog der SHI GmbH

Solr goes Machine Learning! Teil II

Mehr als nur eine Suchmaschine – Solr goes Machine Learning! Teil II

In einem vorherigen Blog wurde eine Einführung in das Thema Klassifikation gegeben, das hiermit mit einem konkreten Use Case fortgeführt wird. Dieser zweite Teil der Blogserie wird die Vorbereitungsmaßnahmen beleuchten, die notwendig sind, um Solr als Klassifikationsmaschine einsetzen zu können. Dieser Blog behandelt also vom Starten von Solr über das Anlegen der notwendigen Collections bis hin zur Indexierung der Trainingsdaten alle Schritte.

Download der Daten

Zunächst müssen die Daten heruntergeladen werden, anhand derer das Modell für die Klassifikation berechnet werden soll. Für dieses Fallbeispiel bildet das Enron-Spam Dataset die Grundlage. Es wurde bereits mehrfach für wissenschaftliche Forschungen in diesem Umfeld verwendet. Der Einfachheit halber greifen wir auf eine vorverarbeitete Form der Mails zu. Diese wurden z.B. bereits um Spam-Nachrichten mit Buchstaben, die nicht aus dem Lateinischen Alphabet stammen, bereinigt.
Der erste Teil wird zur Modellberechnung heruntergeladen und später indexiert werden:

curl https://www.aueb.gr/users/ion/data/enron-spam/preprocessed/enron1.tar.gz -o enron1.tar.gz

Vorbereitung von Solr für die Klassifikation

Bevor die Daten indexiert werden, müssen noch einige weitere Maßnahmen zur Vorbereitung getroffen werden. Dafür wird Solr gestartet.

./solr start –c

Als erstes wird eine Collection für die E-Mails erstellt:

./solr create -c mails

Eine zweite Collection wird zum Speichern des berechneten Modells benötigt:

./solr create -c modelCollection

Jeglicher Inhalt der einzelnen E-Mails wird in einem „Catch All“ Feld indexiert. Es ist per Default nicht stored, was jedoch für die Streaming Expressions später benötigt wird. Daher wird die Konfiguration des Felds _text_ mittels Schema API angepasst:

curl -X POST –H 'Content-type:application/json' --data-binary '{
  "replace-field":{
  "name":"_text_",
  "type":"text_general",
  "stored":true,
  "indexed":true,
  "multiValued":true }
}' https://localhost:8983/solr/mails/schema

Indexierung der Daten

Somit sind die notwendigen Anpassungen für die Indexierung der Daten durchgeführt. Nach Entpacken der Daten ist ersichtlich, dass pro E-Mail eine Datei vorhanden ist und diese Nachrichten bereits „vorklassifiziert“ sind, also eine Zuweisung „Spam“ bzw. „Kein Spam“ über die Ordnerstruktur abgebildet ist. Um diese Klassifizierung zur Indexierungszeit auch in den Index zu übernehmen, wird der Parameter „literal.out_i=1“ für Spam-Nachrichten und „literal.out_i=0“ für Nachrichten, die kein Spam sind, bei der Indexierung mitgegeben:

./post -c mails /datasets/enron1/spam/ -params "literal.out_i=1"
./post -c mails /datasets/enron1/ham/ -params "literal.out_i=0"

Eine Suche nach allen Dokumenten mit einer Feld-Facette auf dem Feld out_i zeigt, dass sich 5172 Mails im Index befinden, darunter 1500 Spam-Mails und 3672 normale Mails.
Dies bildet nun unsere Datengrundlage für die Modellberechnung.

Der nächste und letzte Teil dieser Blogreihe beschreibt dann das tatsächliche Vorgehen für die Klassifikation mittels Streaming Expressions in Solr.

Daniel Wrigley

Daniel Wrigley