Es ist ein Herausforderungsrekord von 100 Sprachverarbeitungsklopfen 2015. Die Umgebung ist Ubuntu 16.04 LTS + Python 3.5.2 : : Anaconda 4.1.1 (64-Bit). Klicken Sie hier, um eine Liste der vergangenen Schläge anzuzeigen (http://qiita.com/segavvy/items/fb50ba8097d59475f760).
In diesem Kapitel wird die Aufgabe, Sätze mithilfe des Satzpolaritätsdatensatzes v1.0 der von Bo Pang und Lillian Lee veröffentlichten Filmkritikdaten in positive (positive) oder negative (negative) zu klassifizieren (Polaritätsanalyse). Arbeiten Sie daran.
Überprüfen Sie die Top 10 Merkmale mit hohem Gewicht und die Top 10 Merkmale mit niedrigem Gewicht im logistischen Regressionsmodell, das in> 73 gelernt wurde.
main.py
# coding: utf-8
import codecs
import numpy as np
fname_features = 'features.txt'
fname_theta = 'theta.npy'
fencoding = 'cp1252' # Windows-1252 scheint
#Identitätslesung
with codecs.open(fname_features, 'r', fencoding) as file_in:
features = list(file_in)
#Lernergebnisse lesen
theta = np.load(fname_theta)
#Nach Gewicht sortieren und Indexarray erstellen
index_sorted = np.argsort(theta)
#Die oberen und unteren 10 Elemente werden angezeigt
print('top 10')
for index in index_sorted[:-11:-1]:
print('\t{}\t{}'.format(theta[index],
features[index - 1].strip() if index > 0 else '(none)'))
print('worst 10')
for index in index_sorted[0:10:]:
print('\t{}\t{}'.format(theta[index],
features[index - 1].strip() if index > 0 else '(none)'))
Ausführungsergebnis
top 10
2.5513381450571875 refresh
2.3661550679971954 engross
2.1686400756091198 unexpect
1.9558595013013638 examin
1.921611726928927 remark
1.8642762301453122 glorious
1.6736177761639448 quiet
1.6361584092330672 delight
1.6264395695012035 confid
1.6207851665872708 beauti
worst 10
-2.6661835195544206 bore
-2.381809993645082 dull
-2.264732545707236 wast
-2.0944221636736557 fail
-2.043315628825945 flat
-1.9875250134818985 mediocr
-1.921981567258377 worst
-1.9199082235005225 suppos
-1.9103686908457609 routin
-1.8511208689897838 appar
Das Gewicht der Identität ist der Wert von $ \ theta $ selbst. Wenn der Wert groß ist, steigt der Wert der hypothetischen Funktion auf die positive Seite, wenn das Wort erscheint, und wenn der Wert negativ ist, nimmt er auf die negative Seite ab. Da es das Ergebnis des Stemmings ist, werden einige Wörter in der Mitte abgeschnitten, aber es scheint, dass die Top 10 positive und die schlechtesten 10 negative Wörter sind, sodass Sie das Gewicht der Identität wie erwartet lernen können. Es scheint zu geben.
Es ist leicht, nach dem Gewicht der Natur zu sortieren, aber es erfordert etwas Einfallsreichtum.
In dem Code werden die Elementgewichte $ \ theta $ in der Matrix "Theta" gespeichert, und das entsprechende Elementzeichenfolgenarray wird in "Features" gespeichert. Wenn Sie hier einfach nach dem Wert von "Theta" sortieren, wird nur "Theta" neu angeordnet, und obwohl Sie die Gewichtswerte der Top 10 und der schlechtesten 10 sehen können, können Sie die entsprechende Identität nicht kennen. Daher müssen "Features" auch zusammen sortiert werden. Das ist etwas nervig.
Ein nützlicher Ort hier ist Numpy.argsort ()
. Dies sortiert das Zielarray, aber das Ergebnis ist kein Array sortierter Werte, sondern ein Array sortierter Indexindizes.
Wenn Sie beispielsweise wie dieses Mal in aufsteigender Reihenfolge sortieren, hat der Rückgabewert die Form [Index des minimalen Elements, Index des zweiten Elements, ... Index des maximalen Elements]. Daher können Sie anhand des zurückgegebenen Index die entsprechende Identität finden, indem Sie das entsprechende Element im Array der Features "Features" betrachten. Das ist praktisch!
Eine Sache zu beachten ist, dass "Theta" eine Matrix von 3.228 Elementen ist, während "Merkmale" 3.227 Elemente sind. Wie in Vektorisierung von Problem 73 erläutert, ist das erste Element von "Theta" ein Gewicht, das "keine Identität" entspricht, und wird daher um eins verschoben. Ich bin. Setzen Sie daher den Index auf -1, wenn Sie das entsprechende Element von features
überprüfen. Wenn der Index 0 ist, ist dies das Gewicht, das "keine Identität" entspricht.
Das ist alles für den 76. Schlag. Wenn Sie Fehler haben, würde ich mich freuen, wenn Sie darauf hinweisen könnten.
Recommended Posts