質問があります? TensorFlowフォーラム訪問フォーラムでコミュニティとつながる

多言語ユニバーサルセンテンスエンコーダーのQ&A検索

TensorFlow.orgで表示 GoogleColabで実行 GitHubで表示ノートブックをダウンロードするTFハブモデルを参照してください

これは、テキストの質疑応答検索にUniveral Encoder Multilingual Q&Aモデルを使用するためのデモであり、モデルのquestion_encoderresponse_encoderの使用法を示しています。 SQuAD段落の文をデモデータセットとして使用します。各文とそのコンテキスト(文を囲むテキスト)は、 response_encoderを使用して高次元の埋め込みにエンコードされます。これらの埋め込みは、質問と回答を取得するためにsimpleneighborsライブラリを使用して作成されたインデックスに格納されます。

検索時に、ランダムな質問がSQuADデータセットから選択され、 question_encoderを使用して高次元の埋め込みにエンコードされ、 simpleneighborsインデックスにクエリを実行して、セマンティック空間で最も近い近傍のリストを返します。

その他のモデル

あなたは、モデルに埋め込む現在のすべてのホストされたテキストを見つけることができ、ここで、同様の分隊に訓練されているすべてのモデル ここを

セットアップ

セットアップ環境

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

一般的なインポートと機能を設定する

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

次のコードブロックを実行して、SQuADデータセットをダウンロードして抽出します。

  • は(テキスト、コンテキスト)タプルのリストです-SQuADデータセットの各段落はnltkライブラリを使用して文に分割され、文と段落のテキストは(テキスト、コンテキスト)タプルを形成します。
  • 質問は(質問、回答)タプルのリストです。

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:

('Warsaw Uprising Hill (121 metres (397.0 ft)), Szczęśliwice hill (138 metres '
 '(452.8 ft) – the highest point of Warsaw in general).')

context:

('Warsaw lies in east-central Poland about 300 km (190 mi) from the Carpathian '
 'Mountains and about 260 km (160 mi) from the Baltic Sea, 523 km (325 mi) '
 'east of Berlin, Germany. The city straddles the Vistula River. It is located '
 'in the heartland of the Masovian Plain, and its average elevation is 100 '
 'metres (330 ft) above sea level. The highest point on the left side of the '
 'city lies at a height of 115.7 metres (379.6 ft) ("Redutowa" bus depot, '
 'district of Wola), on the right side – 122.1 metres (400.6 ft) ("Groszówka" '
 'estate, district of Wesoła, by the eastern border). The lowest point lies at '
 'a height 75.6 metres (248.0 ft) (at the right bank of the Vistula, by the '
 'eastern border of Warsaw). There are some hills (mostly artificial) located '
 'within the confines of the city – e.g. Warsaw Uprising Hill (121 metres '
 '(397.0 ft)), Szczęśliwice hill (138 metres (452.8 ft) – the highest point of '
 'Warsaw in general).')

次のコードブロックは、テンソルフローグラフgと、 Univeral Encoder Multilingual Q&Aモデルquestion_encoderおよびresponse_encoderシグネチャとのセッションをセットアップします。

TensorFlowハブからモデルをロードします

次のコードブロックは、すべてのテキスト、コンテキストタプルの埋め込みを計算し、 response_encoderを使用してそれらをsimpleneighborsインデックスに格納します。

埋め込みを計算し、simpleneighborsインデックスを作成します

Computing embeddings for 10455 sentences
HBox(children=(HTML(value=''), FloatProgress(value=0.0, max=104.0), HTML(value='')))
simpleneighbors index for 10455 sentences built.

検索時に、質問はquestion_encoderを使用してエンコードされ、質問の埋め込みはsimpleneighborsインデックスをクエリするために使用されます。

SQuADからランダムな質問の最近傍を取得します

num_results = 25

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