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

TensorFlow.org で表示 Google Colab で実行 GitHub でソースを表示 ノートブックをダウンロード TF Hub モデルを参照

これは、テキストの質問と回答の取得に使用する多言語ユニバーサルエンコーダー Q&A モデルを使用して、モデルの question_encoderresponse_encoder の使用方法を説明するデモです。デモ用データセットとして SQuAD 段落の文を使用します。各文とその文脈(その文の前後にあるテキスト)は、response_encoder を使って高次元埋め込みにエンコードされています。この埋め込みは、質問と回答の取得に使用できるように simpleneighbors ライブラリを使用して構築されたインデックスに格納されています。

取得時、質問は SQuAD データセットからランダムに選択され、question_encoder を使って高次元埋め込みにエンコードされます。simpleneighbors インデックスをクエリすると、セマンティック空間の最近傍のリストが返されます。

その他のモデル

現在ホストされているテキスト埋め込みモデルはこちらを、SQuAD でもトレーニングされたすべてのモデルはこちらをご覧ください。

セットアップ

Setup Environment

Setup common imports and functions

2024-01-11 19:25:22.190880: W tensorflow/compiler/xla/stream_executor/platform/default/dso_loader.cc:64] Could not load dynamic library 'libcudart.so.11.0'; dlerror: libcudart.so.11.0: cannot open shared object file: No such file or directory
2024-01-11 19:25:22.859136: W tensorflow/compiler/xla/stream_executor/platform/default/dso_loader.cc:64] Could not load dynamic library 'libnvinfer.so.7'; dlerror: libnvinfer.so.7: cannot open shared object file: No such file or directory
2024-01-11 19:25:22.859257: W tensorflow/compiler/xla/stream_executor/platform/default/dso_loader.cc:64] Could not load dynamic library 'libnvinfer_plugin.so.7'; dlerror: libnvinfer_plugin.so.7: cannot open shared object file: No such file or directory
2024-01-11 19:25:22.859268: W tensorflow/compiler/tf2tensorrt/utils/py_utils.cc:38] TF-TRT Warning: Cannot dlopen some TensorRT libraries. If you would like to use Nvidia GPU with TensorRT, please make sure the missing libraries mentioned above are installed properly.
[nltk_data] Downloading package punkt to /home/kbuilder/nltk_data...
[nltk_data]   Unzipping tokenizers/punkt.zip.

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

  • sentences: (text, context) のタプル式のリストです。SQuAD データセットの各段落は nltk ライブラリを使って文章ごとに分割され、その文章と段落のテキストによって (text, context) タプル式を形成します。
  • questions: (question, answer) タプル式のリストです。

注意: 以下の squad_url を選択すると、このデモを使用して、SQuAD の train データセットまたはより小規模な dev データセット(1.1 または 2.0)のインデックスを作成できます。

Download and extract SQuAD data

10455 sentences, 10552 questions extracted from SQuAD https://rajpurkar.github.io/SQuAD-explorer/dataset/dev-v1.1.json

Example sentence and context:

sentence:

('The internationalist tendencies of the early revolution would be abandoned '
 'until they returned in the framework of a client state in competition with '
 'the Americans during the Cold War.')

context:

('Trotsky, and others, believed that the revolution could only succeed in '
 'Russia as part of a world revolution. Lenin wrote extensively on the matter '
 'and famously declared that Imperialism was the highest stage of capitalism. '
 "However, after Lenin's death, Joseph Stalin established 'socialism in one "
 "country' for the Soviet Union, creating the model for subsequent inward "
 'looking Stalinist states and purging the early Internationalist elements. '
 'The internationalist tendencies of the early revolution would be abandoned '
 'until they returned in the framework of a client state in competition with '
 'the Americans during the Cold War. With the beginning of the new era, the '
 'after Stalin period called the "thaw", in the late 1950s, the new political '
 'leader Nikita Khrushchev put even more pressure on the Soviet-American '
 'relations starting a new wave of anti-imperialist propaganda. In his speech '
 'on the UN conference in 1960, he announced the continuation of the war on '
 'imperialism, stating that soon the people of different countries will come '
 'together and overthrow their imperialist leaders. Although the Soviet Union '
 'declared itself anti-imperialist, critics argue that it exhibited tendencies '
 'common to historic empires. Some scholars hold that the Soviet Union was a '
 'hybrid entity containing elements common to both multinational empires and '
 'nation states. It has also been argued that the USSR practiced colonialism '
 'as did other imperial powers and was carrying on the old Russian tradition '
 'of expansion and control. Mao Zedong once argued that the Soviet Union had '
 'itself become an imperialist power while maintaining a socialist façade. '
 'Moreover, the ideas of imperialism were widely spread in action on the '
 'higher levels of government. Non Russian Marxists within the Russian '
 'Federation and later the USSR, like Sultan Galiev and Vasyl Shakhrai, '
 'considered the Soviet Regime a renewed version of the Russian imperialism '
 'and colonialism.')

次のコードブロックは、多言語ユニバーサルエンコーダ Q&A モデルquestion_encoderresponse_encoder シグネチャを使用して、TensorFlow グラフ gsession をセットアップします。

Load model from tensorflow hub

2024-01-11 19:25:29.628545: W tensorflow/compiler/xla/stream_executor/platform/default/dso_loader.cc:64] Could not load dynamic library 'libcudart.so.11.0'; dlerror: libcudart.so.11.0: cannot open shared object file: No such file or directory
2024-01-11 19:25:29.628652: W tensorflow/compiler/xla/stream_executor/platform/default/dso_loader.cc:64] Could not load dynamic library 'libcublas.so.11'; dlerror: libcublas.so.11: cannot open shared object file: No such file or directory
2024-01-11 19:25:29.628720: W tensorflow/compiler/xla/stream_executor/platform/default/dso_loader.cc:64] Could not load dynamic library 'libcublasLt.so.11'; dlerror: libcublasLt.so.11: cannot open shared object file: No such file or directory
2024-01-11 19:25:29.628792: W tensorflow/compiler/xla/stream_executor/platform/default/dso_loader.cc:64] Could not load dynamic library 'libcufft.so.10'; dlerror: libcufft.so.10: cannot open shared object file: No such file or directory
2024-01-11 19:25:29.686245: W tensorflow/compiler/xla/stream_executor/platform/default/dso_loader.cc:64] Could not load dynamic library 'libcusparse.so.11'; dlerror: libcusparse.so.11: cannot open shared object file: No such file or directory
2024-01-11 19:25:29.686454: W tensorflow/core/common_runtime/gpu/gpu_device.cc:1934] Cannot dlopen some GPU libraries. Please make sure the missing libraries mentioned above are installed properly if you would like to use GPU. Follow the guide at https://www.tensorflow.org/install/gpu for how to download and setup the required libraries for your platform.
Skipping registering GPU devices...

次のコードブロックは、すべての (text, context) タプル式の埋め込みを計算し、response_encoder を使って simpleneighbors インデックスに格納します。

Compute embeddings and build simpleneighbors index

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

取得時、質問は question_encoder でエンコードされ、質問の埋め込みを使って simpleneighbors インデックスがクエリされます。

Retrieve nearest neighbors for a random question from SQuAD