Récupération de questions/réponses sur l'encodeur de phrases universel multilingue

Voir sur TensorFlow.org Exécuter dans Google Colab Voir sur GitHub Télécharger le cahier Voir les modèles TF Hub

Ceci est une démonstration pour l' utilisation du codeur universel multilingue Q et un modèle pour la recherche de questions-réponses de texte, ce qui illustre l'utilisation de question_encoder et response_encoder du modèle. Nous utilisons des phrases de SQUAD paragraphes comme le jeu de données de démonstration, chaque phrase et son contexte (le texte entourant la phrase) est codée en incorporations haute dimension avec le response_encoder. Ces incorporations sont stockés dans un index construit en utilisant la simpleneighbors bibliothèque pour la récupération de questions-réponses.

Sur la récupération d' une question aléatoire est choisi parmi le SQUAD ensemble de données et codées en grande dimension avec l'intégration question_encoder et l'index de requête simpleneighbors retour une liste des voisins les plus proches approximatives dans l' espace sémantique.

Plus de modèles

Vous pouvez trouver tous les modèles intégrant texte actuellement hébergé ici et tous les modèles qui ont été formés sur SQUAD aussi bien ici .

Installer

Environnement de configuration

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

Configurer les importations et les fonctions communes

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

Exécutez le bloc de code suivant pour télécharger et extraire l'ensemble de données SQuAD dans :

  • phrases est une liste de (texte, contexte) tuples - chaque paragraphe du jeu de données sont SQUAD en phrases en utilisant fente bibliothèque NLTK et les phrases et les formes de texte paragraphe le (texte, contexte) tuple.
  • des questions est une liste de (question, réponse) tuples.

Télécharger et extraire les données 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 configuration du bloc de code suivant le tensorflow graphique g et session avec le codeur universel multilingue Questions et réponses modèle « de la question_encoder et les signatures response_encoder.

Charger le modèle à partir du concentrateur tensorflow

Le bloc de code suivant calculer les incorporations pour tout le texte, tuples de contexte et de les stocker dans un simpleneighbors index à l' aide du response_encoder.

Calculer les plongements et construire un index de voisins simples

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

En recherche, la question est codée en utilisant la question_encoder et l'intégration de la question est utilisée pour interroger l'index de simpleneighbors.

Récupérer les voisins les plus proches pour une question aléatoire de SQuAD

num_results = 25

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