Generalizando la famosa frase de Chomsky en vectores sintácticos singulares.
Consideremos la frase de Chomsky:
Las ideas verdes incoloras duermen furiosamente.
La oración es gramaticalmente correcta (sintaxis) pero carece de significado (semántica). Es difícil imaginar una idea que sea a la vez verde e incolora y que pueda dormir con furia. Se planteó como una frase que nunca antes se había pronunciado en lengua inglesa y, sin la construcción de Chomsky, probablemente nunca se habría pronunciado. Es hermoso en su absurdo, ¡así que creemos más!
El procesamiento del lenguaje natural es difícil, así que restrinjamos el problema al proyecto principal, la Colorless green idea
. Esta es una frase nominal , una particular con la estructura de JJ JJ NN*
donde JJ
se refiere a un adjetivo y NN*
se refiere a cualquier variante nominal (sintaxis de WordNet). Si tuviéramos un corpus de texto grande, podríamos encontrar todas las frases nominales del tipo JJ ... JJ NN*
y asociar cada adjetivo con el sustantivo correspondiente, esencialmente una base de datos de bigramas.
Si el objetivo es crear frases nominales sin sentido, una base de datos de Bigram no nos dará nada que no hayamos visto antes. Esto es inaceptable. Por lo tanto, buscamos una descomposición y realizamos una descomposición en valor singular sobre la base de datos normalizada (sustantiva). Específicamente mantenemos la variación explicada algo baja; si fuera demasiado alta, simplemente se recrearía la base de datos de bigram; si fuera demasiado baja, perderíamos todas las relaciones entre palabras. Naturalmente, esto confunde los datos; los vectores singulares de la izquierda representan un subespacio donde los sustantivos están correlacionados con otros sustantivos que comparten adjetivos comunes y los vectores singulares de la derecha representan un subespacio donde los adjetivos están correlacionados con otros adjetivos que comparten un sustantivo común. Sencillo ¿verdad?
JJ JJ NN
A partir de un sustantivo NN
, elegimos un conjunto de adjetivos que están "lejos" de ese sustantivo. Seleccionando el primero JJ1
, seleccionamos un segundo adjetivo JJ2
que se aleja del primer adjetivo JJ1
. Esto nos da una puntuación para cada uno de los pares, (JJ1,JJ2)
, (JJ1,NN)
y (JJ2,NN)
. Utilizando la base de datos de muestra, un ser humano decidió arbitrariamente que una puntuación combinada, en el rango de -0.075 < s < -0.010
era óptima. ¿Por qué tener un límite inferior? Resulta que las frases que tienen puntuaciones muy absurdas son simplemente palabras comunes que son ortogonales entre sí como lugares y colores, la salida correcta pero aburrida. Prefiero un "halcón legislativo industrial".
Estos son algunos de mis favoritos:
-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
Para comenzar, cree una base de datos de frases nominales. Lo construí a partir de Wikipedia y las herramientas necesarias se pueden encontrar en este repositorio aquí. Si prefiere no crear la suya propia, puede utilizar la base de datos incluida, JJ_noun_phrase.db
y simplemente ejecutar:
python absurd_noun_pairs.py
Muchos módulos... pandas
, sqlite
, numpy
, sklearn
, BeautifulSoup
, nltk
, pattern.en
.