埋め込みモデルを使用して、文や一節の意味を捉えるテキスト埋め込みを作成する。 これらのモデルは、サポートベクターマシンのような分類器と一緒に使うことができる。 モデルを埋め込むことは、検索を利用した生成タスクにも役立つ。
次の図は、エンベッディングをサポートした検索機能付き生成パターンを示している。
エンベッディングをサポートする検索機能付き生成パターンには、以下のステップが含まれる:
- コンテンツをテキスト埋め込みに変換し、ベクターデータストアに保存します。
- 同じ埋め込みモデルを使用して、ユーザー入力をテキスト埋め込みに変換する。
- ユーザーの質問に関連するコンテンツをナレッジベースで類似検索または意味検索します。
- 最も関連性の高い検索結果を文脈としてプロンプトに取り込み、「次の文章に書かれている情報のみを使って、次の質問に答えてください」といった指示を加えます
- 組み合わされたプロンプトテキスト(指示+検索結果+質問)をfoundation modelモデルに送信する。
- foundation modelは、プロンプトからの文脈情報を使って事実に基づいた答えを生成する。
詳しくは、以下を参照してください。
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自然言語処理タスクカタログ