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