Généraliser la célèbre phrase de Chomsky en vecteurs syntaxiques singuliers.
Considérez la phrase de Chomsky :
Les idées vertes et incolores dorment furieusement.
La phrase est grammaticalement correcte (syntaxe) mais dénuée de sens (sémantique). Il est difficile d’imaginer une idée à la fois verte et incolore et une idée qui puisse dormir avec fureur. Il s'agissait d'une phrase qui n'avait jamais été prononcée auparavant en langue anglaise et qui, sans la construction de Chomsky, ne l'aurait probablement jamais été. C'est beau dans son absurdité, alors créons plus !
Le traitement du langage naturel est difficile, limitons donc le problème au projet titulaire, l' Colorless green idea
. Il s'agit d'une expression nominale , particulière avec la structure JJ JJ NN*
où JJ
fait référence à un adjectif et NN*
fait référence à n'importe quelle variante de nom (syntaxe WordNet). Si nous disposions d'un grand corpus de texte, nous pourrions trouver toutes les phrases nominales du type JJ ... JJ NN*
et associer chaque adjectif au nom correspondant, essentiellement une base de données de bigrammes.
Si l’objectif est de créer des phrases nominales dénuées de sens, une base de données bigramme ne nous donnera rien que nous n’ayons jamais vu auparavant. C'est inacceptable. Par conséquent, nous recherchons une décomposition et effectuons une décomposition en valeurs singulières sur la base de données normalisée (nom). Nous gardons spécifiquement la variance expliquée quelque peu faible, si elle était trop élevée, cela recréerait simplement la base de données bigramme, si elle était trop faible, nous perdrions toutes les relations de mots. Cela brouille naturellement les données ; les vecteurs singuliers de gauche représentent un sous-espace où les noms sont corrélés à d'autres noms partageant des adjectifs communs et les vecteurs singuliers de droite représentent un sous-espace où les adjectifs sont corrélés à d'autres adjectifs partageant un nom commun. Simple, non ?
JJ JJ NN
En commençant par un nom NN
, nous choisissons un ensemble d'adjectifs « éloignés » de ce nom. En sélectionnant le premier JJ1
, nous sélectionnons un deuxième adjectif JJ2
aussi éloigné du premier adjectif JJ1
. Cela nous donne un score pour chacune des paires, (JJ1,JJ2)
, (JJ1,NN)
et (JJ2,NN)
. À l’aide de l’échantillon de base de données, un humain a arbitrairement décidé qu’un score combiné compris entre -0.075 < s < -0.010
était optimal. Pourquoi avoir une limite inférieure ? Il s'avère que les phrases qui ont des partitions très absurdes sont simplement des mots courants orthogonaux les uns aux autres comme les lieux et les couleurs, le résultat est correct mais ennuyeux. Je préfère un « faucon législatif industriel ».
Voici quelques-uns de mes favoris :
-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
Pour commencer, créez une base de données d’expressions nominales. J'ai construit mon fichier à partir de Wikipédia et les outils correspondants peuvent être trouvés dans ce référentiel ici. Si vous préférez ne pas créer la vôtre, vous pouvez utiliser la base de données incluse, JJ_noun_phrase.db
et simplement exécuter :
python absurd_noun_pairs.py
Beaucoup de modules... pandas
, sqlite
, numpy
, sklearn
, BeautifulSoup
, nltk
, pattern.en
.