Bộ mã hóa câu đa ngôn ngữ Hỏi & Đáp Truy xuất

Xem trên TensorFlow.org Chạy trong Google Colab Xem trên GitHub Tải xuống sổ ghi chép Xem các mẫu TF Hub

Đây là một bản demo cho việc sử dụng phổ Bộ mã hóa đa ngôn ngữ Q & A mô hình để thu hồi câu hỏi-câu trả lời của văn bản, minh họa việc sử dụng question_encoderresponse_encoder của mô hình. Chúng tôi sử dụng câu từ Squad đoạn như dataset demo, mỗi câu và ngữ cảnh của nó (văn bản xung quanh câu) được mã hóa thành embeddings chiều cao với response_encoder. Những embeddings được lưu trữ trong một chỉ số được xây dựng bằng cách sử dụng simpleneighbors thư viện để thu hồi câu hỏi-câu trả lời.

Vào hồi một câu hỏi ngẫu nhiên được chọn từ đội hình dữ liệu và mã hóa vào chiều cao nhúng với question_encoder và truy vấn các chỉ số simpleneighbors trả về một danh sách các nước láng giềng khu vực gần gần đúng trong không gian ngữ nghĩa.

Nhiều mô hình hơn

Bạn có thể tìm thấy tất cả các văn bản hiện tổ chức nhúng mô hình ở đây và tất cả các mô hình đã được tập huấn về Squad cũng ở đây .

Thành lập

Môi trường thiết lập

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

Thiết lập các chức năng và nhập khẩu chung

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

Chạy khối mã sau để tải xuống và giải nén tập dữ liệu SQuAD thành:

  • câu là danh sách (văn bản, ngữ cảnh) tuples - mỗi đoạn từ Squad bộ dữ liệu được tách ra thành câu sử dụng thư viện NLTK và câu và đoạn hình thức văn bản (văn bản, ngữ cảnh) tuple.
  • câu hỏi là danh sách (câu hỏi, câu trả lời) tuples.

Tải xuống và giải nén dữ liệu 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.')

Sau khi thiết lập khối mã tensorflow đồ thị gphiên với Phổ mã hóa đa ngôn ngữ Q & A mô hình question_encoder 's và chữ ký response_encoder.

Tải mô hình từ trung tâm tensorflow

Khối mã sau tính embeddings cho tất cả các văn bản, các bộ bối cảnh và lưu trữ chúng trong một simpleneighbors chỉ số sử dụng response_encoder.

Tính toán các lần nhúng và xây dựng chỉ mục simpleneighbors

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

Về thu hồi, câu hỏi được mã hóa bằng cách sử dụng question_encoder và nhúng câu hỏi được sử dụng để truy vấn các chỉ số simpleneighbors.

Truy cập những người hàng xóm gần nhất cho một câu hỏi ngẫu nhiên từ SQuAD

num_results = 25

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