Recupero domande e risposte del codificatore di frasi universale multilingue

Visualizza su TensorFlow.org Esegui in Google Colab Visualizza su GitHub Scarica taccuino Vedi i modelli di mozzo TF

Questa è una demo per l'utilizzo di Universal Encoder multilingue Q & Un modello per la domanda-risposta il recupero di testi, che illustra l'uso di question_encoder e response_encoder del modello. Usiamo frasi da SQUAD paragrafi come il set di dati demo, ogni frase e il suo contesto (il testo che circonda la frase) è codificato in incastri di alta quota con il response_encoder. Queste immersioni sono memorizzate in un indice costruito utilizzando il simpleneighbors libreria per domanda-risposta di recupero.

Su una domanda di recupero casuale è selezionata dal Squad set di dati e codificato in alta dimensione embedding con la question_encoder query e l'indice simpleneighbors restituire un elenco di approssimative vicini più prossimi nello spazio semantico.

Più modelli

È possibile trovare tutto il testo attualmente ospitati incorporando modelli qui e tutti i modelli che sono stati addestrati in squadra pure qui .

Impostare

Ambiente di installazione

%%capture
# Install the latest Tensorflow version.
!pip install -q tensorflow_text
!pip install -q simpleneighbors[annoy]
!pip install -q nltk
!pip install -q tqdm

Imposta importazioni e funzioni comuni

[nltk_data] Downloading package punkt to /home/kbuilder/nltk_data...
[nltk_data]   Unzipping tokenizers/punkt.zip.

Eseguire il seguente blocco di codice per scaricare ed estrarre il set di dati SQuAD in:

  • frasi è una lista di (testo, contesto) tuple - Ogni paragrafo dal SQUAD set di dati sono suddivisi in frasi usando biblioteca NLTK e la frase e paragrafo forme di testo il (testo, contesto) tuple.
  • domande è un elenco di (domanda, risposta) tuple.

Scarica ed estrai i dati SQuAD

squad_url = 'https://rajpurkar.github.io/SQuAD-explorer/dataset/dev-v1.1.json'

squad_json = download_squad(squad_url)
sentences = extract_sentences_from_squad_json(squad_json)
questions = extract_questions_from_squad_json(squad_json)
print("%s sentences, %s questions extracted from SQuAD %s" % (len(sentences), len(questions), squad_url))

print("\nExample sentence and context:\n")
sentence = random.choice(sentences)
print("sentence:\n")
pprint.pprint(sentence[0])
print("\ncontext:\n")
pprint.pprint(sentence[1])
print()
10455 sentences, 10552 questions extracted from SQuAD https://rajpurkar.github.io/SQuAD-explorer/dataset/dev-v1.1.json

Example sentence and context:

sentence:

('The Mongol Emperors had built large palaces and pavilions, but some still '
 'continued to live as nomads at times.')

context:

("Since its invention in 1269, the 'Phags-pa script, a unified script for "
 'spelling Mongolian, Tibetan, and Chinese languages, was preserved in the '
 'court until the end of the dynasty. Most of the Emperors could not master '
 'written Chinese, but they could generally converse well in the language. The '
 'Mongol custom of long standing quda/marriage alliance with Mongol clans, the '
 'Onggirat, and the Ikeres, kept the imperial blood purely Mongol until the '
 'reign of Tugh Temur, whose mother was a Tangut concubine. The Mongol '
 'Emperors had built large palaces and pavilions, but some still continued to '
 'live as nomads at times. Nevertheless, a few other Yuan emperors actively '
 'sponsored cultural activities; an example is Tugh Temur (Emperor Wenzong), '
 'who wrote poetry, painted, read Chinese classical texts, and ordered the '
 'compilation of books.')

La configurazione che segue il blocco di codice tensorflow grafo G e sessione con l'Universal Encoder multilingue Q & Un modello question_encoder 's e le firme response_encoder.

Carica il modello dall'hub tensorflow

Il seguente blocco di codice calcolare le immersioni per tutto il testo, tuple contesto e memorizzarli in una simpleneighbors indice utilizzando il response_encoder.

Calcola incorporamenti e crea un indice dei vicini semplici

Computing embeddings for 10455 sentences
0%|          | 0/104 [00:00<?, ?it/s]
simpleneighbors index for 10455 sentences built.

Sul recupero, la domanda è codificato utilizzando la question_encoder e l'incorporamento questione viene utilizzato per interrogare l'indice simpleneighbors.

Recupera i vicini più prossimi per una domanda casuale da SQuAD

num_results = 25

query = random.choice(questions)
display_nearest_neighbors(query[0], query[1])