Recuperación de preguntas y respuestas del codificador de oraciones universal multilingüe

Ver en TensorFlow.org Ejecutar en Google Colab Ver en GitHub Descargar cuaderno Ver modelos TF Hub

Esta es una demostración para el uso de Universal Encoder Q multilingüe y un modelo para la recuperación de preguntas y respuestas de texto, que ilustra el uso de question_encoder y response_encoder del modelo. Utilizamos frases del pelotón de los párrafos como el conjunto de datos de demostración, cada frase y su contexto (el texto que rodea a la oración) se codifica en inclusiones altas dimensión con el response_encoder. Estas inclusiones se almacenan en un índice construido utilizando el simpleneighbors biblioteca para la recuperación de preguntas y respuestas.

En la recuperación de una pregunta al azar se selecciona del SquaD conjunto de datos y codifica en alta dimensión de inmersión con el question_encoder y consulta el índice simpleneighbors devolver una lista de aproximados vecinos más próximos en el espacio semántico.

Más modelos

Usted puede encontrar todo el texto actualmente alojado incorporación de los modelos aquí y todos los modelos que han sido entrenados en el escuadrón, así que aquí .

Configuración

Entorno de configuración

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

Configurar importaciones y funciones comunes

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

Ejecute el siguiente bloque de código para descargar y extraer el conjunto de datos SQuAD en:

  • frases es una lista de (texto, contexto) - tuplas cada párrafo de la escuadra conjunto de datos de todas formas separado en oraciones usando la biblioteca NLTK y las frases y párrafos como formas de texto al (texto, el contexto) de tupla.
  • preguntas es una lista de (pregunta, respuesta) tuplas.

Descarga y extrae datos de 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 siguiente configuración del bloque de código tensorflow gráfico gy sesión con el Universal Encoder Q multilingüe y un modelo question_encoder 's y las firmas response_encoder.

Cargar modelo desde tensorflow hub

El siguiente bloque de código computar las incrustaciones de todo el texto, tuplas de contexto y almacenarlas en un simpleneighbors índice mediante la response_encoder.

Calcule las incorporaciones y cree un índice de vecinos simple

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

En la recuperación, la pregunta se codifica mediante la question_encoder y la incrustación de pregunta se utiliza para consultar el índice simpleneighbors.

Recuperar vecinos más cercanos para una pregunta aleatoria de SQuAD

num_results = 25

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