2016-04-07 5 views
0

Ich benutze SVM-Light (auf der Website http://svmlight.joachims.org/). Ich möchte Ihnen ein Problem stellen. Ich habe einen Satz "Er ist schlau und er ist ein guter Schüler". Dieser Satz ist ein positiver Satz. Wenn ich eine Liste von Wörtern aus diesem Satz erstelle, werde ich eine Liste mit dem Index jedes Wortes wie folgt haben: {1 - er, 2 - ist, 3 - schlau, 4 - und, 5 - a, 6 - gut, 7 - Schüler}. Dann schreibe ich Satz nach Index der Wörter wie folgt um: "1 2 3 4 1 2 5 6 7". Und der Wert jedes Wortes ist "1: 0,4 2: 0,2 3: 0,8 4: 0,3 1: 0,2 2: 0,4 5: 0,5 6: 0,7 7: 0,6" Entsprechend dem Format der Zugdatei muss der Index der Wörter durch bestellt werden steigende Indexzahl, so stelle ich wie folgt "1 1: 0,4 1: 0,2 2: 0,2 2: 0,4 3: 0,8 4: 0,3 5: 0,5 6: 0,7 7: 0,6" ein. Allerdings bekomme ich einen Fehler "Features müssen in aufsteigender Reihenfolge sein !!!" wenn ich svm_learn starte. Ich habe diesen Fehler bemerkt, weil mein Satz zwei "er" Wörter und zwei "is" Wörter hat. Während Ihrer Zugdatei erscheint jedes Merkmal nur einmal. Wie soll ich dieses Problem lösen? Erklärst du für mich? Ich danke Ihnen sehr.Wie erstellt man die Zugdatei für SVM Licht, wenn ein Wort mehrmals in einem Satz auftritt

Antwort

0

Sie können nicht mehrere Werte für dieselbe Funktion haben. Von dem, was Sie in Ihrer Frage geschrieben haben, denke ich, die Lösung für diesen Fall würde nur ignorieren, dass einige Wörter zweimal gesehen werden, da im Wesentlichen diese Wörter unterschiedliche Werte im Satz haben.

Sie können davon ausgehen, dass Sie so viele Funktionen haben wie viele Wörter in einem Satz. Das erste Merkmal ist das Gewicht des ersten Wortes im Satz, das zweite Merkmal ist das Gewicht des zweiten Wortes im Satz, das dritte ist das Gewicht des dritten Wortes im Satz und so weiter. Also für Ihr Beispiel haben Sie einen Feature-Vektor [1:0.4 2:0.2 3:0.8 4:0.3 5:0.2 6:0.4 7:0.5 8:0.7 9:0.6]. Das Problem bei diesem Ansatz besteht darin, dass unterschiedliche Sätze unterschiedliche Längen haben. In diesem Fall wird SVMlight annehmen, dass jeder Satz die Länge des längsten hat, und der Rest der Werte sind einfach Nullen (das ist im Wesentlichen die Idee hinter dem Bereitstellen von Indizes für Merkmale in Ihrer Eingabe: im Falle von spärlichen Daten erlaubt dies nur zu erwähnen die Features, die Werte ungleich Null haben. Wenn der zweite Satz in Ihren Daten zufällig lautet: "Er ist nicht nur schlau, sondern auch ein guter Schüler", wird der Merkmalsvektor für den ersten-Satz folgendermaßen interpretiert: [1:0.4 2:0.2 3:0.8 4:0.3 5:0.2 6:0.4 7:0.5 8:0.7 9:0.6 10:0.0 11:0.0 12:0.0].

Eine andere Lösung wäre, ein "Wörterbuch" wie Sie zu erstellen und dann die Werte für dasselbe Wort zu kombinieren, wenn das Wort mehr als einmal in einem Satz gesehen wird. Dies kann durch den Max/Min-Wert, Mittelwert, Summe, Produkt usw. erfolgen. Die Art und Weise, wie Sie die Features kombinieren möchten, hängt von der Domäne der Anwendung ab. Wenn Sie sich beispielsweise für die Summe aller Werte für ein Wort entscheiden, lautet Ihr Merkmalsvektor für das Wörterbuch {1 - he, 2 - is, 3 - smart, 4 - and, 5 - a, 6 - good, 7 - student}: 1:0.6 2:0.6 3:0.8 4:0.3 5:0.5 6:0.7 7:0.6

Verwandte Themen