La risposta breve è "no, non è possibile farlo in un modo di principio che funziona anche lontanamente bene". È un problema irrisolto nella ricerca sull'elaborazione del linguaggio naturale ed è anche il tema del mio dottorato. Cercherò di riassumere molto brevemente dove siamo e puntare a un paio di pubblicazioni:
significato delle parole
Il presupposto più importante qui è che è possibile ottenere un vettore che rappresenta ogni parola nella frase in questione. Questo vettore viene solitamente scelto per catturare i contesti in cui la parola può apparire. Ad esempio, se consideriamo solo i tre contesti "mangia", "rosso" e "soffice", la parola "gatto" potrebbe essere rappresentata come [98, 1 , 87], perché se dovessi leggere un pezzo di testo molto lungo (qualche miliardo di parole non è raro per gli standard odierni), la parola "gatto" apparirebbe molto spesso nel contesto di "birichino" e "mangia" , ma non così spesso nel contesto del "rosso". Allo stesso modo, "cane" potrebbe essere rappresentato come [87,2,34] e "ombrello" potrebbe essere [1,13,0]. Immaginando questi vettori come punti nello spazio 3D, "gatto" è chiaramente più vicino a "cane" che a "ombrello", quindi "gatto" significa anche qualcosa di più simile a "cane" che a un "ombrello".
Questa linea di lavoro è stata studiata fin dai primi anni '90 (ad esempio this di Greffenstette) e ha prodotto risultati sorprendentemente buoni. Ad esempio, ecco un paio di voci casuali in un thesaurus ho costruito di recente per avere il mio computer leggono wikipedia:
theory -> analysis, concept, approach, idea, method
voice -> vocal, tone, sound, melody, singing
james -> william, john, thomas, robert, george, charles
Questi elenchi di parole simili sono stati ottenuti del tutto priva di umana intervention- si alimenta testo in e torni a pochi ore dopo.
Il problema con frasi
Si potrebbe chiedere perché non stiamo facendo la stessa cosa per le frasi più lunghe, come ad esempio "volpi zenzero amano la frutta". È perché non abbiamo abbastanza testo. Per fare in modo che in modo affidabile stabilisca quale X è simile a, abbiamo bisogno di vedere molti esempi di X usati nel contesto. Quando X è una singola parola come "voce", questo non è troppo difficile. Tuttavia, quando X si allunga, le possibilità di trovare le occorrenze naturali di X diventano esponenzialmente più lente. Per fare un confronto, Google ha circa 1B di pagine contenenti la parola "volpe" e non una singola pagina che contiene "zenzero volpe amore frutto", nonostante sia una frase inglese perfettamente valida e tutti noi capiamo cosa significa.
Composizione
Per affrontare il problema della scarsità di dati, si desidera eseguire la composizione, cioè di prendere vettori per le parole, che sono facili da ottenere da un testo vero e proprio, e di mettere il insieme in un modo che cattura il loro significato. La cattiva notizia è che nessuno è stato in grado di farlo bene finora.
Il modo più semplice e più ovvio è di aggiungere o moltiplicare i singoli vettori di parole. Questo porta a effetti collaterali indesiderati che "i cani inseguono i cani" e "i cani inseguono i gatti" significherebbe lo stesso per il vostro sistema. Inoltre, se stai moltiplicando, devi essere molto attento o ogni frase finirà per essere rappresentata da [0,0,0, ..., 0], che sconfigge il punto.
Ulteriore lettura
Non voglio discutere i metodi più sofisticati per la composizione che sono stati proposti finora. Ti suggerisco di leggere lo "Vector space models of word meaning and phrase meaning: a survey" di Katrin Erk. Questo è un ottimo sondaggio di alto livello per iniziare. Sfortunatamente, non è disponibile gratuitamente sul sito Web dell'editore, invia direttamente l'autore all'autore per ottenerne una copia. In quel documento troverai riferimenti a molti altri metodi concreti. I più comprensibili sono da Mitchel and Lapata (2008) e Baroni and Zamparelli (2010).
Edit dopo commento di @vpekar: La linea di fondo di questa risposta è sottolineare il fatto che, mentre metodi naive esistono (es addizione, moltiplicazione, somiglianza superficiale, ecc), questi sono fondamentalmente imperfetto e in generale non ci si deve aspettare grandi prestazioni da loro.
Non ho la risposta, ma qualcosa come word2vec (https://code.google.com/p/word2vec/) sarebbe probabilmente un buon inizio se si desidera ottenere risultati significativi. –