埋め込みモデルを使用して、文や一節の意味を捉えるテキスト埋め込みを作成する。 これらのモデルは、サポートベクターマシンのような分類器と一緒に使うことができる。 モデルを埋め込むことは、検索を利用した生成タスクにも役立つ。
次の図は、エンベッディングをサポートした検索機能付き生成パターンを示している。
エンベッディングをサポートする検索機能付き生成パターンには、以下のステップが含まれる:
- コンテンツをテキスト埋め込みに変換し、ベクターデータストアに保存します。
- 同じ埋め込みモデルを使用して、ユーザー入力をテキスト埋め込みに変換する。
- ユーザーの質問に関連するコンテンツをナレッジベースで類似検索または意味検索します。
- 最も関連性の高い検索結果を文脈としてプロンプトに取り込み、「次の文章に書かれている情報のみを使って、次の質問に答えてください」といった指示を加えます
- 組み合わされたプロンプトテキスト(指示+検索結果+質問)を基礎モデルに送信する。
- 基礎モデルは、プロンプトからの文脈情報を使用して、事実に基づいた答えを生成する。
詳しくは、以下を参照してください。
USEエンベッディング
USEエンベッディングは、TFHubで利用可能なGoogleUniversal Sentence Encoderエンベッディングのラッパーです。 これらの埋め込みは、文書分類 SVM アルゴリズムで使用されます。 事前学習されたUSEエンベッディングとその対応言語のリストについては、Included pretrained USE embeddingsをご覧ください
USE 埋め込みを使用する場合は、以下の点を考慮してください。
タスクに英語のテキストが含まれる場合は、
embedding_use_en_stock
を選択します。タスクに英語以外の言語のテキストが含まれている場合、またはマルチリンガル・モデルをトレーニングする場合は、マルチリンガル USE 埋め込みのいずれかを選択します。
USE 埋め込みは、以下に説明するように、トレーニングされたモデルの品質と推論時のスループットとの間で異なるトレードオフを示します。 結果の品質と、ユース・ケースに適した推論スループットとの間のトレードオフを決定するために、さまざまな埋め込みを試してください。
embedding_use_multi_small
の品質は妥当ですが、推論時には高速です。embedding_use_en_stock
は英語のみのバージョンのembedding_embedding_use_multi_small
であるため、サイズが小さくなり、推論のスループットが高くなります。embedding_use_multi_large
は Transformer アーキテクチャーに基づいているため、結果の品質が向上し、推論時のスループットが低下します。
コード・サンプル
import watson_nlp
syntax_model = watson_nlp.load("syntax_izumo_en_stock")
embeddings_model = watson_nlp.load("embedding_use_en_stock")
text = "python"
syntax_doc = syntax_model.run(text)
embedding = embeddings_model.run(syntax_doc)
print(embedding)
コードサンプルの出力:
{
"data": {
"data": [
-0.01909315399825573,
-0.009827353060245514,
...
0.008978910744190216,
-0.0702751949429512
],
"rows": 1,
"cols": 512,
"dtype": "float32"
},
"offsets": null,
"producer_id": null
}
事前に学習されたUSE埋め込みを含む
以下の表に、使用可能な USE 埋め込み用の事前トレーニング済みブロックと、サポートされる言語をリストします。 言語コードおよび対応する言語のリストについては、『言語コード』を参照してください。
ブロック名 | モデル名 | サポート対象言語 |
---|---|---|
use |
embedding_use_en_stock |
英語のみ |
use |
embedding_use_multi_small |
ar、de、el、en、es、fr、it、ja、ko、nb、nl、pl、pt、ru、th、tr、zh_tw、zh |
use |
embedding_use_multi_large |
ar、de、el、en、es、fr、it、ja、ko、nb、nl、pl、pt、ru、th、tr、zh_tw、zh |
GloVeエンベッディング
GloVe埋め込みはCNN分類器で使用される。
ブロック名:'embedding_glove__stock
対応言語:ar, de, en, es, fr, it, ja, ko, nl, pt, zh-cn
コード・サンプル
import watson_nlp
syntax_model = watson_nlp.load("syntax_izumo_en_stock")
embeddings_model = watson_nlp.load("embedding_glove_en_stock")
text = "python"
syntax_doc = syntax_model.run(text)
embedding = embeddings_model.run(syntax_doc)
print(embedding)
コードサンプルの出力:
{
"data": {
"data": [
-0.01909315399825573,
-0.009827353060245514,
...
0.008978910744190216,
-0.0702751949429512
],
"rows": 1,
"cols": 512,
"dtype": "float32"
},
"offsets": null,
"producer_id": null
}
トランスフォーマー埋め込み
ブロック名
embedding_transformer_en_slate.125m
embedding_transformer_en_slate.30m
サポート対象言語
英語のみ
コード・サンプル
import watson_nlp
# embeddings_model = watson_nlp.load("embedding_transformer_en_slate.125m")
embeddings_model = watson_nlp.load("embedding_transformer_en_slate.30m")
text = "python"
embedding = embeddings_model.run(text)
print(embedding)
コードサンプルの出力
{
"data": {
"data": [
-0.055536773055791855,
0.008286023512482643,
...
-0.3202415108680725,
5.000295277568512e-05
],
"rows": 1,
"cols": 384,
"dtype": "float32"
},
"offsets": null,
"producer_id": {
"name": "Transformer Embeddings",
"version": "0.0.1"
}
}
親トピック Watson自然言語処理タスクカタログ