Verallgemeinerung von Chomskys berühmtem Satz in syntaktische Singularvektoren.
Betrachten Sie Chomskys Satz:
Farblose grüne Ideen schlafen wütend.
Der Satz ist grammatikalisch korrekt (Syntax), aber bedeutungslos (Semantik). Es ist schwer, sich eine Idee vorzustellen, die sowohl grün als auch farblos ist und vor Wut schlafen kann. Es wurde als ein Satz postuliert, der noch nie zuvor in der englischen Sprache ausgesprochen worden war und ohne Chomskys Konstruktion wahrscheinlich auch nie ausgesprochen worden wäre. Es ist wunderschön in seiner Absurdität, also lasst uns mehr schaffen!
Die Verarbeitung natürlicher Sprache ist schwierig, daher beschränken wir das Problem auf das Titelprojekt, die Colorless green idea
. Dies ist eine Nominalphrase , eine bestimmte mit der Struktur JJ JJ NN*
wobei JJ
sich auf ein Adjektiv und NN*
auf eine beliebige Nomenvariante bezieht (WordNet-Syntax). Wenn wir einen großen Textkorpus hätten, könnten wir alle Nominalphrasen des Typs JJ ... JJ NN*
finden und jedes Adjektiv dem entsprechenden Nomen zuordnen, im Wesentlichen eine Bigramm-Datenbank.
Wenn das Ziel darin besteht, bedeutungslose Nominalphrasen zu erstellen, liefert uns eine Bigram-Datenbank nichts, was wir nicht schon einmal gesehen haben. Das ist inakzeptabel. Daher suchen wir nach einer Zerlegung und führen eine Singulärwertzerlegung über die (Substantiv-)normalisierte Datenbank durch. Wir halten die erklärte Varianz ausdrücklich etwas niedrig. Wenn sie zu hoch wäre, würde die Bigramm-Datenbank einfach neu erstellt. Wenn sie zu niedrig wäre, würden alle Wortbeziehungen verloren gehen. Dadurch werden die Daten natürlich unscharf; Die linken Singularvektoren stellen einen Unterraum dar, in dem Substantive mit anderen Substantiven korreliert werden, die gemeinsame Adjektive haben, und die rechten Singularvektoren stellen einen Unterraum dar, in dem die Adjektive mit anderen Adjektiven korreliert werden, die ein gemeinsames Substantiv haben. Einfach, oder?
JJ JJ NN
Beginnend mit einem Substantiv NN
wählen wir eine Reihe von Adjektiven aus, die „weit weg“ von diesem Substantiv sind. Indem wir das erste Adjektiv JJ1
auswählen, wählen wir ein zweites Adjektiv JJ2
aus, das weit vom ersten Adjektiv JJ1
entfernt ist. Dies gibt uns eine Punktzahl für jede der Paarungen (JJ1,JJ2)
, (JJ1,NN)
und (JJ2,NN)
. Anhand der Beispieldatenbank entschied ein Mensch willkürlich, dass ein kombinierter Score im Bereich von -0.075 < s < -0.010
optimal sei. Warum eine Untergrenze? Es stellt sich heraus, dass Phrasen mit sehr absurden Werten einfach gewöhnliche Wörter sind, die wie Orte und Farben orthogonal zueinander sind. Die korrekte Ausgabe ist jedoch langweilig. Ich bevorzuge einen „industriellen Gesetzgebungsfalken“.
Hier sind einige meiner Favoriten:
-0.0290 severe municipal jazz
-0.0329 old sole beard
-0.0371 hot racial archbishop
-0.0428 municipal professional everything
-0.0427 legal high ballad
-0.0427 single spanish sin
-0.0420 successful specific seal
-0.0419 chief live foliage
-0.0417 spiritual guilty warship
-0.0393 agricultural professional click
-0.0382 possible urban king
-0.0381 coastal senior methodology
-0.0365 entire dry institutes
-0.0328 federal minor upbringing
-0.0308 secret psychological fragment
-0.0305 professional free gown
-0.0297 earliest electric litigation
Erstellen Sie zunächst eine Datenbank für Nominalphrasen. Ich habe meine aus Wikipedia erstellt und die Tools dafür finden Sie in diesem Repository hier. Wenn Sie lieber keine eigene erstellen möchten, können Sie die mitgelieferte Datenbank JJ_noun_phrase.db
verwenden und einfach Folgendes ausführen:
python absurd_noun_pairs.py
Viele Module ... pandas
, sqlite
, numpy
, sklearn
, BeautifulSoup
, nltk
, pattern.en
.