Generalizando a famosa frase de Chomsky em vetores sintáticos singulares.
Considere a frase de Chomsky:
As ideias verdes incolores dormem furiosamente.
A frase é gramaticalmente correta (sintaxe), mas sem sentido (semântica). É difícil imaginar uma ideia que seja ao mesmo tempo verde e incolor e que possa dormir com fúria. Foi posta como uma frase que nunca tinha sido pronunciada antes na língua inglesa, e sem a construção de Chomsky provavelmente nunca teria sido. É lindo no seu absurdo, então vamos criar mais!
O processamento de linguagem natural é difícil, então vamos restringir o problema ao projeto titular, a Colorless green idea
. Este é um sintagma nominal , particular com a estrutura de JJ JJ NN*
onde JJ
se refere a um adjetivo e NN*
se refere a qualquer variante substantiva (sintaxe WordNet). Se tivéssemos um grande corpus de texto, poderíamos encontrar todos os sintagmas nominais do tipo JJ ... JJ NN*
e associar cada adjetivo ao substantivo correspondente, essencialmente um banco de dados de bigramas.
Se o objetivo é criar sintagmas nominais sem sentido, um banco de dados bigrama não nos dará nada que não tenhamos visto antes. Isto é inaceitável. Portanto, buscamos uma decomposição e realizamos uma decomposição de valores singulares sobre o banco de dados normalizado (substantivo). Especificamente, mantemos a variância explicada um pouco baixa; se fosse muito alta, simplesmente recriaria o banco de dados bigrama; se fosse muito baixa, perderíamos todas as relações de palavras. Isso naturalmente confunde os dados; os vetores singulares à esquerda representam um subespaço onde os substantivos são correlacionados a outros substantivos que compartilham adjetivos comuns e os vetores singulares à direita representam um subespaço onde os adjetivos são correlacionados a outros adjetivos que compartilham um substantivo comum. Simples, certo?
JJ JJ NN
Começando com um substantivo NN
, escolhemos um conjunto de adjetivos que estão “distantes” desse substantivo. Selecionando o primeiro JJ1
, selecionamos um segundo adjetivo JJ2
que se distancia do primeiro adjetivo JJ1
. Isso nos dá uma pontuação para cada um dos pares, (JJ1,JJ2)
, (JJ1,NN)
e (JJ2,NN)
. Usando o banco de dados de amostra, um ser humano decidiu arbitrariamente que uma pontuação combinada, na faixa de -0.075 < s < -0.010
era a ideal. Por que ter um limite inferior? Acontece que frases com pontuações muito absurdas são simplesmente palavras comuns ortogonais entre si, como lugares e cores, a saída correta, mas enfadonha. Prefiro um “falcão legislativo industrial”.
Aqui estão alguns dos meus 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 começar, crie um banco de dados de sintagmas nominais. Eu construí o meu na Wikipedia, e as ferramentas para ele podem ser encontradas neste repositório aqui. Se preferir não construir o seu próprio, você pode usar o banco de dados incluído, JJ_noun_phrase.db
e simplesmente executar:
python absurd_noun_pairs.py
Muitos módulos ... pandas
, sqlite
, numpy
, sklearn
, BeautifulSoup
, nltk
, pattern.en
.