Semantic Search
ご覧のページは、お客様の利便性のために一部機械翻訳されています。また、ドキュメントは頻繁に更新が加えられており、翻訳は未完成の部分が含まれることをご了承ください。最新情報は都度公開されておりますため、必ず英語版をご参照ください。翻訳に問題がある場合は、 こちら までご連絡ください。

セマンティック検索のための検索ブループリントの作成

7.4 U70+ ベータ機能

モデルが選択され、テキスト埋め込みがインデックス化されたら、検索時に埋め込みを考慮するように Liferay を構成する必要があります。 概念的には 2 つの選択肢があります。

  1. Liferay のデフォルトの検索リクエストを完全に上書きするためのブループリントを作成し、テキスト埋め込みのみを使用して純粋なセマンティック検索クエリを実行するブループリントをゼロから構築します。
  2. すぐに使用できる Rescore by Text Embedding 要素を使用して、標準のキーワードベースのクエリを実行し、インデックス付けされた dense_vector フィールドのテキスト埋め込みと検索フレーズの埋め込み間の類似度関数を使用して結果を再スコアリングするブループリントを作成します。

設定した埋め込みプロバイダーによって作成されたテキスト埋め込みを活用したセマンティック検索エクスペリエンスを構築するために、Liferay には、テキスト埋め込み値を使用して元のクエリの結果を再スコアリングする Rescore by Text Embedding というすぐに使用できる要素が含まれています。 要素を使用して、 検索ブループリントを構築します。 この要素とブループリントのビジュアル クエリ ビルダーを使用すると、検索クエリを構成およびテストして、適切なセマンティック検索ソリューションを構築できます。

重要

Rescore by Text Embedding 要素を埋め込みプロバイダーと連携するように構成すると、一部のデータ セットに対してよりターゲットを絞った検索結果を生成できます。 ただし、多くのセマンティック検索ソリューションでは、堅牢な検索ソリューションを実現するために、手動での調整や場合によっては新しい要素が必要になります。

Rescore by Text Embedding 要素は、Liferay に基本的なセマンティック検索をもたらします。

この要素は、埋め込みプロバイダーが有効になっていて、特定のコンテンツ タイプと言語で動作するように構成されている場合にのみ有効です。 テキスト埋め込みプロバイダーの設定を参照してください。

テキスト埋め込み要素による再スコアリングの追加

セマンティック検索を有効にして初めてLiferayを起動すると、Search Blueprints UIでRescore by Text Embedding要素を使用できるようになります。 インスタンス内に要素が表示されない場合は、手動で追加できます。

  1. Liferayで、 グローバルメニューGlobal Menu)を開き、 アプリケーションブループリントをクリックします。

  2. 要素をクリックし、次に 追加 (Add) をクリックします。

  3. タイトルに「 テキスト埋め込みによるスコア再設定 」と入力し、「 作成」をクリックします。

  4. 以下のセクションから要素の JSON をコピーします。 参照: テキスト埋め込み要素による再スコアリング

  5. デフォルトの JSON を以下からコピーした JSON で上書きします。

必要に応じて、テキスト埋め込みによる再スコアリング要素を追加します。

テキスト埋め込み要素による再スコアリングの設定

Rescore by Text Embedding 要素には、いくつかの構成可能なオプションが用意されています。

ブースト: デフォルトは 10 で、この設定により再スコアリングされた結果をどの程度ブーストするかが決まります。

ベクトル場関数: コサイン類似度関数またはドット積関数から選択します。 デフォルトではコサイン類似度関数が使用され、選択された関数は検索されたキーワードとターゲット ドキュメントのテキスト埋め込み間の類似度を測定します。 どの関数が最も適しているかを判断するには、モデルのドキュメントを確認してください。

最小スコア: デフォルトは 1 です。この設定の整数 (または 0) は、返されるドキュメントが再スコアリング クエリに含まれるために必要な最小スコアを設定します。

クエリの重み: デフォルトは 0.01 で、この設定は最終スコア計算における元のクエリの重みを制御します。

再スコアリングクエリの重み: デフォルトは 10 で、最終スコア計算における再スコアリングクエリの重みを設定します。

スコア モード: デフォルトでは平均に設定されており、この設定は元のクエリ スコアと再スコアリングの結果を組み合わせるときに使用する戦略を決定します。 平均、最大、最小、乗算、合計から選択します。

再スコアリング ウィンドウのサイズ: デフォルトは 50 で、一度に再スコアリングする結果の数を選択できます。 非常に大きなウィンドウ サイズを選択すると、パフォーマンスに悪影響を与える可能性があります。

参考: テキスト埋め込み要素によるスコアの再設定

便宜上、Rescore by Text Embedding 要素の次の JSON をコピーできます。

{
	"description_i18n": {
		"en_US": "rescore-by-text-embedding-description"
	},
	"elementDefinition": {
		"category": "semantic search",
		"configuration": {
			"queryConfiguration": {
				"queryEntries": [
					{
						"condition": {
							"exists": {
								"parameterName": "keywords"
							}
						},
						"rescores": [
							{
								"query": {
									"script_score": {
										"boost": "${configuration.boost}",
										"min_score": "${configuration.min_score}",
										"query": {
											"bool": {
												"filter": [
													{
														"exists": {
															"field": "text_embedding_${ml.text_embeddings.vector_dimensions}_${context.language_id}"
														}
													}
												],
												"must": [
													{
														"match_all": {
														}
													}
												]
											}
										},
										"script": {
											"params": {
												"query_vector": "${ml.text_embeddings.keywords_embedding}"
											},
											"source": "${configuration.vector_field_function}(params.query_vector, 'text_embedding_${ml.text_embeddings.vector_dimensions}_${context.language_id}') + 1"
										}
									}
								},
								"queryWeight": "${configuration.query_weight}",
								"rescoreQueryWeight": "${configuration.rescore_query_weight}",
								"scoreMode": "${configuration.score_mode}",
								"windowSize": "${configuration.window_size}"
							}
						]
					}
				]
			}
		},
		"icon": "custom-field",
		"uiConfiguration": {
			"fieldSets": [
				{
					"fields": [
						{
							"defaultValue": 10,
							"label": "boost",
							"name": "boost",
							"type": "number",
							"typeOptions": {
								"min": 0
							}
						},
						{
							"defaultValue": "cosineSimilarity",
							"helpText": "vector-field-function-field-help",
							"label": "vector-field-function",
							"name": "vector_field_function",
							"type": "select",
							"typeOptions": {
								"nullable": false,
								"options": [
									{
										"label": "Cosine Similarity",
										"value": "cosineSimilarity"
									},
									{
										"label": "Dot Product",
										"value": "dotProduct"
									}
								]
							}
						},
						{
							"defaultValue": 1,
							"helpText": "min-score-field-help",
							"label": "min-score",
							"name": "min_score",
							"type": "number",
							"typeOptions": {
								"min": 0
							}
						},
						{
							"defaultValue": 0.01,
							"helpText": "query-weight-field-help",
							"label": "query-weight",
							"name": "query_weight",
							"type": "slider",
							"typeOptions": {
								"min": 0.01,
								"step": 0.1
							}
						},
						{
							"defaultValue": 10,
							"helpText": "rescore-query-weight-field-help",
							"label": "rescore-query-weight",
							"name": "rescore_query_weight",
							"type": "slider",
							"typeOptions": {
								"min": 0.01,
								"step": 0.1
							}
						},
						{
							"defaultValue": "avg",
							"helpText": "score-mode-field-help",
							"label": "score-mode",
							"name": "score_mode",
							"type": "select",
							"typeOptions": {
								"nullable": false,
								"options": [
									{
										"label": "Average",
										"value": "avg"
									},
									{
										"label": "Max",
										"value": "max"
									},
									{
										"label": "Min",
										"value": "min"
									},
									{
										"label": "Multiply",
										"value": "multiply"
									},
									{
										"label": "Total",
										"value": "total"
									}
								]
							}
						},
						{
							"defaultValue": 50,
							"helpText": "rescore-window-size-field-help",
							"label": "rescore-window-size",
							"name": "window_size",
							"type": "number",
							"typeOptions": {
								"min": 1
							}
						}
					]
				}
			]
		}
	},
	"externalReferenceCode": "RESCORE_BY_TEXT_EMBEDDING",
	"title_i18n": {
		"en_US": "rescore-by-text-embedding"
	},
	"type": 0
}