[PYTHON] Wählen Sie Features mit Textdaten aus

Was in diesem Artikel einzuführen

Ist es notwendig, den Funktionsbetrag auszuwählen?

Wenn Sie dies lesen, haben Sie meiner Meinung nach bereits eine Art maschinelles Lernen versucht, indem Sie Merkmalsmengen (im Folgenden als "Elemente" bezeichnet) aus Textdaten extrahiert haben. Zum Beispiel Dokumentklassifizierung.

Selbst wenn Sie schnell nach Qiita suchen, finden Sie einige "erprobte" Artikel. Morgen Musume. Ich habe versucht, die Blogs automatisch zu klassifizieren. Verarbeitung natürlicher Sprache mit R. Dokumentklassifizierung mit Naive Bays versuchen](http://qiita.com/nezuq/items/b5cee4e38aaca1e4fc54)

Bei der Dokumentklassifizierung besteht die grundlegende Methode darin, Matrixdaten unter Verwendung von Wörtern als Hintergrund zu erstellen. Es ist eine Matrix, die Frequenzmatrix genannt wird.

Nun kommt hier eine Frage auf. __ Es gibt viele Wörter, die nicht mit der Klassifizierung zusammenhängen. Ist das in Ordnung? __ __

Das ist eine gute Frage. Das ist nicht in Ordnung. Wenn es viele Eigenschaften enthält, die nicht mit der Klassifizierung zusammenhängen, wirkt es als Rauschen. Rauschen behindert die Verbesserung der Klassifizierungsleistung, nicht wahr? Beunruhigt. Beunruhigt.

Dann kommt die Idee von __ "Sie müssen nur die relevanten Qualitäten verlassen" __. Ja, dies ist die Funktion Feature Selection.

Bei der Auswahl des Funktionsumfangs gibt es zwei Vorteile.

  1. Verbessern Sie die Leistung des Modells, indem Sie die Merkmalsmenge richtig auswählen, bevor Sie in den Algorithmus für maschinelles Lernen eintauchen (In einigen Fällen, wie in der Zufallsstruktur, ist die Auswahl der Merkmalsmenge im Algorithmus selbst enthalten, aber das ist eine andere Geschichte).
  2. Machen Sie es sich leicht, die Daten zu beobachten

Ich habe ein Paket erstellt, mit dem sich die Anzahl der Funktionen leicht auswählen lässt.

Es ist ziemlich mühsam, die Anzahl der Funktionen ernsthaft auszuwählen. Daher habe ich [Feature-Auswahlmethode packen] verwendet (https://pypi.python.org/pypi/DocumentFeatureSelection/0.9).

Funktioniert mit Python 3.x. Python 2.x wird es bald unterstützen.

Unterstützte Methoden

Paketfunktionen

(Vielleicht) früh

Bei der gesamten internen Verarbeitung werden spärliche, spärliche Matrizen verwendet. Darüber hinaus werden alle Teile, die verteilt werden können, mehrfach verarbeitet, sodass sie relativ schnell sind.

Es führt die Vorverarbeitung zum Techto durch.

Wenn Sie im Zustand der morphologischen Teilung ein Diktat machen und es hineinwerfen, wird es sogar eine spärliche Matrix bilden.

Das Eingabediktat sieht beispielsweise so aus


input_dict = {
    "label_a": [
        ["I", "aa", "aa", "aa", "aa", "aa"],
        ["bb", "aa", "aa", "aa", "aa", "aa"],
        ["I", "aa", "hero", "some", "ok", "aa"]
    ],
    "label_b": [
        ["bb", "bb", "bb"],
        ["bb", "bb", "bb"],
        ["hero", "ok", "bb"],
        ["hero", "cc", "bb"],
    ],
    "label_c": [
        ["cc", "cc", "cc"],
        ["cc", "cc", "bb"],
        ["xx", "xx", "cc"],
        ["aa", "xx", "cc"],
    ]
}

Lass uns ein bisschen spielen

Ich habe es mit viel Mühe gemacht, also werde ich es versuchen. Ich habe die Ipython-Notizen, die ich ausprobiert habe, in Gist eingefügt.

Für ipython-Notizen scipy, Wrapper-Paket für morphologische Analyse und Paket zur Funktionsauswahl Verwenden Sie 0,9).

Der Text hat fünf Genres. Ich nahm den Text, der zutreffend zu sein scheint, aus dem Netz und machte ihn durch Kopieren. (~~ Das ist kollektives Wissen ~~)

5 Genres

ist. [^ 1]

Ich habe PMI und SOA ausprobiert.

Ich werde versuchen, aus dem Ergebnis zu extrahieren.

PMI-Ergebnisse

Diese Ergebnisse wurden in absteigender Reihenfolge der Punktzahl gesehen.

{'label': 'iranian_cities', 'score': 0.67106056632551592, 'word': 'Population'},
{'label': 'conan_movies', 'score': 0.34710665998172219, 'word': 'Aussehen'},
 {'label': 'av_actress', 'score': 0.30496452198069324, 'word': 'AV-Schauspielerin'},
 {'label': 'av_actress', 'score': 0.26339266409673928, 'word': 'Aussehen'},
{'label': 'av_actress', 'score': 0.2313987055319647, 'word': 'Weiblich'},

Die Worte "Äh, ja, das stimmt ~" stehen in einer Reihe.

Wörter, die leicht mit dem Etikett in Verbindung gebracht werden können, sind stark gewichtet, sodass die Auswahl der Funktionen ein Erfolg wird.

Es scheint keinen besonderen Vorschlag zur Beobachtung der Daten zu geben.

Was passiert im Gegenteil mit den Stellen, an denen die Punktzahl niedrig ist?

 {'label': 'av_actress', 'score': 5.7340738217327128e-06, 'word': 'Mann'},
 {'label': 'conan_movies', 'score': 5.7340738217327128e-06, 'word': '3'},
 {'label': 'conan_movies', 'score': 5.7340738217327128e-06, 'word': 'Zu'},
 {'label': 'conan_movies', 'score': 5.7340738217327128e-06, 'word': 'Notation'},
 {'label': 'terror', 'score': 5.7340738217327128e-06, 'word': 'Schimmel'}

?? Das Ergebnis ist ebenfalls gemischt. Es scheint, dass es sich um ein Wort handelt, das im Dokument funktional verwendet wird. Es ist ein Fehler in der morphologischen Analyse, dass die Zahl "3" gemischt wird ... (Dies passiert häufig, wenn das Neologd-Wörterbuch von Mecab verwendet wird.)

Unterdrückte funktionale Wörter auf eine niedrige Punktzahl. In dieser Hinsicht sieht es so aus, als würde es funktionieren.

SOA-Ergebnisse

Die Reihenfolge hat sich leicht geändert. Dies ist (wahrscheinlich) häufig der Fall, weil SOA auf PMI-Ausdrücken basiert.

[{'label': 'conan_movies', 'score': 5.3625700793847084, 'word': 'Aussehen'},
 {'label': 'iranian_cities', 'score': 5.1604646721932461, 'word': 'Population'},
 {'label': 'av_actress', 'score': 5.1395513523987937, 'word': 'AV-Schauspielerin'},
 {'label': 'av_actress', 'score': 4.8765169465650002, 'word': 'Sa'},
 {'label': 'av_actress', 'score': 4.8765169465650002, 'word': 'Hmm'},
 {'label': 'av_actress', 'score': 4.8765169465650002, 'word': 'Weiblich'},
 {'label': 'terror', 'score': 4.8765169465650002, 'word': 'Syrien'},

Schauen wir uns nun den Teil an, in dem die Punktzahl niedrig ist. Der Teil mit einer niedrigen SOA-Punktzahl kann als "Relevanz für das Etikett" interpretiert werden.

{'label': 'terror', 'score': -1.4454111483223628, 'word': 'Population'},
 {'label': 'iranian_cities', 'score': -1.6468902498643583, 'word': 'Apropos'},
 {'label': 'iranian_cities', 'score': -1.6468902498643583, 'word': 'Ding'},
 {'label': 'iranian_cities', 'score': -1.6468902498643583, 'word': 'Während ~'},
 {'label': 'iranian_cities', 'score': -1.6468902498643583, 'word': 'Herstellung'},
 {'label': 'iranian_cities', 'score': -2.009460329249066, 'word': 'Ding'},
 {'label': 'airplane', 'score': -3.3923174227787602, 'word': 'Mann'}]

Irgendwie fühlt es sich nicht richtig an.

Wenn Sie sich die Häufigkeit im Dokument ansehen, wird dieses Wort nur ein- oder zweimal angezeigt. Mit anderen Worten kann gesagt werden, dass die Beziehung zum Etikett schwach ist und es vernünftig ist, dass der negative Wert zugenommen hat.

Zusammenfassung

In diesem Artikel haben wir über die Auswahl von Feature-Mengen und Pakete gesprochen, die die Auswahl von Feature-Mengen vereinfachen.

Dieses Mal habe ich die Leistung der Dokumentklassifizierung nach Auswahl des Funktionsbetrags nicht überprüft.

Es ist jedoch eine Methode, die in früheren Studien ausreichend wirksam war. Bitte verwenden Sie es für Dokumentklassifizierungsaufgaben.

Sie können es mit pip install DocumentFeature Selection installieren.

Ergänzung

Ab Paketversion 1.0 können Eingabedaten flexibel gestaltet werden.

Wenn Sie in einem Beispiel die Feature-Menge mit "(Oberflächenwort, POS)" als Bigram entwerfen möchten, können Sie eine Reihe solcher Taples angeben. Hier ist "((" er "," N "), (" ist "," V ")) eine Merkmalsgröße.

input_dict_tuple_feature = {
    "label_a": [
        [ (("he", "N"), ("is", "V")), (("very", "ADV"), ("good", "ADJ")), (("guy", "N"),) ],
        [ (("you", "N"), ("are", "V")), (("very", "ADV"), ("awesome", "ADJ")), (("guy", "N"),) ],
        [ (("i", "N"), ("am", "V")), (("very", "ADV"), ("good", "ADJ")), (("guy", "N"),) ]
    ],
    "label_b": [
        [ (("she", "N"), ("is", "V")), (("very", "ADV"), ("good", "ADJ")), (("girl", "N"),) ],
        [ (("you", "N"), ("are", "V")), (("very", "ADV"), ("awesome", "ADJ")), (("girl", "N"),) ],
        [ (("she", "N"), ("is", "V")), (("very", "ADV"), ("good", "ADJ")), (("guy", "N"),) ]
    ]
}

Da der Taple als Merkmalsmenge des Eingabesatzes angegeben werden kann, kann der Benutzer die Merkmalsmenge frei gestalten. [^ 2] Zum Beispiel kann es für solche Aufgaben verwendet werden

--Wenn Sie "(Oberflächenwort, ein Tag)" als Feature-Menge verwenden möchten --Wenn Sie die Kantenbeschriftung der Abhängigkeit als Feature-Größe verwenden möchten


[^ 1]: Ich werde oft gefragt: "Warum enthält der Beispieltext Videos für Erwachsene und Persisch oder Iran?" Das liegt daran, dass ich Videos für Erwachsene mag. Weil ich Persisch gelernt habe, habe ich eine starke Bindung daran. [^ 2]: Schon in der Vergangenheit ist es möglich, Features gewaltsam zu extrahieren, indem der "Surface Word_Tag" zu einem Str-Typ gemacht wird. Aber ist das nicht etwas Kluges? Benötigen Sie eine Vor- und Nachbearbeitung? Ich dachte, also habe ich diese Funktion hinzugefügt.

Recommended Posts

Wählen Sie Features mit Textdaten aus
Analysieren Sie Daten mit RegEx 100x Flash Text
SELECT-Daten mithilfe der Client-Bibliothek mit BigQuery
Datenanalyse mit xarray
Datenbereinigung 2 Datenbereinigung mit DataFrame
Datenbereinigung mit Python
[Memo] Textabgleich im Pandas-Datenrahmen mit Flashtext
Aufblasen von Textdaten durch erneute Übersetzung mithilfe der Google-Übersetzung in Python
Datenvisualisierungsmethode mit Matplotlib (1)
Vorverarbeitung von Textdaten (Vektorisierung, TF-IDF)
Datenvisualisierungsmethode mit Matplotlib (2)
Datenanalyse mit Python-Pandas
Textentwicklung mit Mac-Diensten
Erhalten Sie mit QIIME2 OTU-Zähldaten (Mikroorganismen) als Textdatei
[Übersetzung] scicit-learn 0.18 Tutorial Manipulation von Textdaten
Abrufen von Salesforce-Daten mithilfe der REST-API
Datenerfassung mit Python Googlemap API
Datenvisualisierungsmethode mit Matplotlib (+ Pandas) (5)
(sqlalchemy) Zeigt Text im Auswahlfeld an
Generieren mehrsprachiger Textbilder mit Python
Analysieren Sie Daten im CSV-Format mit SQL
Abrufen von Amazon-Daten mit Keep API # 1 Abrufen von Daten
Checkliste mit Checkbox Treeview → Texterstellung
Datenvisualisierungsmethode mit Matplotlib (+ Pandas) (3)
Datenerfassungsnotiz mit der Backlog-API
Empfehlung zur Datenanalyse mit MessagePack
Holen Sie sich Daten von Twitter mit Tweepy
Datenvisualisierungsmethode mit Matplotlib (+ Pandas) (4)