Wiki

Clone wiki

BMCr / Gensim Implementation

Gensim Applikation

Auf Basis von Gensim wurde eine python Anwendung entwickelt. Diese kann Canvases in json-Format entgegen nehmen und weiterverarbeiten. Die Anwendung greift entweder direkt auf die Cloudant-Datenbank in Bluemix zu oder kann die Daten aus einem lokalen File auslesen. Bisher ist zur Bestimmung der Ähnlichkeiten die TF-IDF Methode implementiert. In der Parametrisierung der Anwendung wird neben dem Suchstring auch spezifiziert mit welchem Canvas Feld verglichen wird und ob die einzelnen Karten des Feldes einer Canvas zusammengefasst betrachtet werden oder ob jeweils einzeln die Ähnlichkeit berechnet wird.

Gensim Application Parameters

Der Source-Code unserer Gensim Application ist im Bitbucket Repo verfügbar: Gensim Application Source Code

config_neu.JPG

TF-IDF bei Gensim

Gensim verwendet folgende Formel zur Berechnung der TF-IDF Gewichtung: weight = term_frequency * log2(total_documents / document_frequency) (source: Gensim Mailinglist, Post von Radim Řehůřek)

Erste Erkenntnisse

  • Beim Vergleich eines Suchstrings mit allen Lean Canvases der Datenbank:
  1. "False Positives" auf Grund von einem Wort (dieses hat für den Context der Canvases keine Bedeutung)
  2. Wenn Karten eines Canvase Feldes vor dem Vergleich zusammengefasst werden, werden die Ähnlichkeitswerte sehr gering und die Aussagekraft sinkt stark ab.

Welche weiteren Ähnlichkeitsanalyse-Methoden unterstützt Gensim

  • LSI, Latent Semantic Indexing (semantischer Raum wird einbezogen, größere Datenbasis erforderlich)
  • RP, Random Projections ("approximating TF-IDF Distances")
  • LDA, Latent Dirichlet Allocation
  • HDP, Hierachical Dirichlet PRrocess (not fully implemented in Gensim)

allgemeine Hinweise Gensim Installation

siehe auch: Gensim Installationsanleitung

Für die Business Model Crunching Gensim Implementierung gibt es im Readme zum Code auch einen Button zum direkten Deployment in Bluemix. Hinweise zur allgemeine Installtion gibt es in den folgenden Abschnitten:

Installation unter Windows

Python & NumPy & SciPy ist im Bundle in der Enthought Distribution verfügbar. Für Studenten steht diese in erweiterter Funktionalität kostenlos zur Verfügung. https://www.enthought.com/products/epd.php Enthält auch eine abgespeckte Python IDE / Editor.

Gensim funktioniert dann auch auf dieser Basis.

Installation unter Linux

Gensim lässt sich einfach aus dem Python Package Repository installieren (sudo pip install --upgrade gensim).

Für NumPy & SciPy sind beispielsweise in der Anaconda Distribution verfügbar Anaconda Distribution. In der Praxis hat allerdings die Installation von SciPy sowohl mit der Distribution als auch mit dem PIP nicht funktioniert. SciPy steht aber auch im Linux Package Repository (Ubuntu & Debian) zur Verfügung. Hierüber konnte es erfolgreich installiert werden (sudo apt-get install python-scipy).

Ermittlung der Ähnlichkeitswerte mit Gensim

Die Werte werden nach folgendem Ablauf ermittelt: Schematischer Ablauf der Implementierung

Die Gensim-Application kann wie folgt aufgerufen werden: gensimbmcr.eu-gb.mybluemix.net/api/getsimi/<sameMode>/<compareKey>/<sourceField>/<destField>/<inputString>

zur den Parametern der URL:

  • sameMode: Die Ermittlung der Ähnlichkeitswerte erfolgt in einem zweistufigen Verfahren. Dieser Boolean Parameter gibt an ob zuerst mit dem Feld das befüllt wurde vergleichen werden soll (--> true) oder mit dem Zielfeld (--> false)
  • compareKey: Die Variable gibt an auf welche Daten bei dem Vergleich zurückgegriffen wird. (um stopwords bereinigte daten, gestemmte daten, um synonyme erweiterte Daten, ...) Als Inhalt wird hier die Bezeichnung des Element in der json Struktur der Datenbank erwartet.
  • sourceField: Hier wird das LeanCanvas Feld erwartet in dem die Eingabe durch den Nutzer stattgefunden hat. Es wird ein String mit Feldbezeichnung im selben Format wie in den jsons der DB erwartet ("Problem", "Solution", "Key Metrics",...)
  • destField: Hier wird das LeanCanvas Feld erwartet, für das eine Recommendation gegeben werden soll. Es wird ein String mit Feldbezeichnung im selben Format wie in den jsons der DB erwartet ("Problem", "Solution", "Key Metrics",...)
  • inputString: Der Eingabestring des Nutzers, der gegeben die vorhanden Canvases vergleichen werden soll.

Ablauf der Ermittlung des Ähnlichkeitswertes

  1. Aus der DB werden alle LeanCanvases mit einem Quality-Index größer als 0.65 und in der Sprache Englisch ausgelesen.
  2. Der Korpus gegen den der Eingabestring des Nutzers verglichen werden soll wird vorbereitet. Dazu werden alle Karten des Feldes <sourceField> aus den in 1. geladenen Canvases zum Korpus hinzugefügt. Dabei werden die Titel der Karten und die Inhalte der Karten zu einem String zusammengefasst. Als Grundlage dienen die Daten in dem durch <compareKey> definierten Format.
  3. Für alle Texte wird die Tf-idf Matrix ermittelt, um einen Vergleich durch Cosine Similarity zu ermöglichen.
  4. Es werden die Cosine Similarity Werte zwischen Eingabestring und allen Dokumenten des Korpusses ermittelt. Diese werden in einer sortierten Liste abgelegt.
  5. Jetzt folgt der zweite Schritt des Vergleichs. Es wird ein neuer Korpus wie folgt gefüllt. Aus der sortierten Liste werden zu den 7 Karten, die am ähnlichsten zum Eingabestring sind, die zugehörigen Canvases ermittelt. Alle Karten aus dem <destField> dieser Canvases werden als einzelne Dokumente einem neuen Korpus hinzugefügt.
  6. Es folgt der Vergleich: Alle in Vergleich 1 identifizierten ähnlichen Karten (#7) werden mit dem zweiten Korpus verglichen und der Ähnlichkeitswert wie folgt berechnet: cosSim Vergleich1 * 0.3 + cosSim Vergleich2 * 0.7 Die Ergebnisse werden in einer sortierten Liste abgelegt.
  7. Als der Ergebnis Liste werden doppelte Einträge sowie Einträge mit dem Ählichkeitswert 0 entfernt.
  8. Die ähnlichsten 3 Karten werden als json zurückgeliefert.

Updated