<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0">
  <channel>
    <title><![CDATA[Quynh Nguyen - Elasticsearch Labs]]></title>
    <description><![CDATA[Articles and tutorials from the Search team at Elastic]]></description>
    <copyright><![CDATA[© 2026. Elasticsearch B.V. All Rights Reserved]]></copyright>
    <image>
      <title><![CDATA[Quynh Nguyen - Elasticsearch Labs]]></title>
      <url>https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt1121c0bf0e8a6e65/6a88da6340a1841030ef456f/search-labs-thumbnail.png</url>
      <link>https://www.elastic.co/jp/search-labs/author/quynh-nguyen</link>
    </image>
    <link>https://www.elastic.co/jp/search-labs/author/quynh-nguyen</link>
    <atom:link href="https://www.elastic.co/jp/search-labs/rss/author/quynh-nguyen.xml" rel="self" type="application/rss+xml"/>
    <language><![CDATA[jp]]></language>
    <lastBuildDate>Mon, 19 Oct 2026 15:51:05 GMT</lastBuildDate>
  <item>
    <title><![CDATA[ハイブリッド検索再ランキングによる多言語埋め込みモデルの関連性の向上]]></title>
    <description><![CDATA[Cohere の再ランカーと Elasticsearch のハイブリッド検索を使用して、E5 多言語埋め込みモデルの検索結果の関連性を向上させる方法を学びます。]]></description>
    <content:encoded><![CDATA[<h2>はじめに</h2><p><a href="https://www.elastic.co/search-labs/blog/multilingual-embedding-model-deployment-elasticsearch">このシリーズの最後の部分</a>では、Elastic の事前トレーニング済み E5 モデル (および Hugging Face の他の多言語テキスト埋め込みモデル) のデプロイについて説明し、Elasticsearch と Kibana を使用してテキスト データから高密度のベクトル埋め込みを生成する方法について詳しく説明しました。このブログでは、これらの埋め込みの結果を調べ、多言語モデルを活用することの大きな利点を強調します。</p><p>インデックス<code>coco_multilingual</code>が作成されたので、検索を実行すると、参照用の「en」フィールドを含む複数の言語のドキュメントが表示されます。</p># GET coco_multilingual/_search
    {
       "_index": "coco_multilingual",
       "_id": "WAiXQJYBgf6odR9bLohZ",
       "_score": 1,
       "_source": {
         "description": "Ein Parkmeßgerät auf einer Straße mit Autos",
         "en": "A row of parked cars sitting next to parking meters.",
         "language": "de",
         "vector_description": {...}
       }
     },
     . . .<h2>英語で検索する</h2><p>英語で検索を実行して、どれくらいうまくいくか確認してみましょう。</p>GET coco_multi/_search
{
"size": 10,
"_source": [
  "description", "language", "en"
],
"knn": {
  "field": "vector_description.predicted_value",
  "k": 10,
  "num_candidates": 100,
  "query_vector_builder": {
    "text_embedding": {
      "model_id": ".multilingual-e5-small_linux-x86_64_search",
      "model_text": "query: kitty"
    }
  }
}
}{
       "_index": "coco_multi",
       "_id": "JQiXQJYBgf6odR9b6Yz0",
       "_score": 0.9334303,
       "_source": {
         "description": "Eine Katze, die in einem kleinen, gepackten Koffer sitzt.",
         "en": "A brown and white cat is in a suitcase.",
         "language": "de"
       }
     },
      {
       "_index": "coco_multi",
       "_id": "3AiXQJYBgf6odR9bFod6",
       "_score": 0.9281012,
       "_source": {
         "description": "Una bambina che tiene un gattino vicino a una recinzione blu.",
         "en": "A little girl holding a kitten next to a blue fence.",
         "language": "it"
       }
     },
     . . .<p>ここでは、クエリは一見単純に見えますが、内部的にはすべての言語のすべてのドキュメントにわたって「kitty」という単語の数値埋め込みを検索しています。また、ベクトル検索を実行しているため、「kitty」に関連する可能性のあるすべての単語を意味的に検索できます。「cat」、「kitten」、「feline」、「gatto」（イタリア語）、「mèo」（ベトナム語）、고양이（韓国語）、猫（中国語）などです。その結果、クエリが英語であっても、他のすべての言語でコンテンツを検索できるようになります。たとえば、「a kitty l <code>ying on something</code>を検索すると、イタリア語、オランダ語、ベトナム語のドキュメントも返されます。効率について話しましょう!</p><h2>他の言語でコンテンツを検索する</h2>GET coco_multi/_search
{  
 "size": 100,
 "_source": [
   "description", "language", "en"
 ],
 "knn": {
   "field": "vector_description.predicted_value",
   "k": 50,
   "num_candidates": 1000,
   "query_vector_builder": {
     "text_embedding": {
       "model_id": ".multilingual-e5-small_linux-x86_64_search",
       "model_text": "query: kitty lying on something"
     }
   }
 }
}{
 "description": "A black kitten lays on her side beside remote controls.",
 "en": "A black kitten lays on her side beside remote controls.",
 "language": "en"
},
{
 "description": "un gattino sdraiato su un letto accanto ad alcuni telefoni ",
 "en": "A black kitten lays on her side beside remote controls.",
 "language": "it"
},
{
 "description": "eine Katze legt sich auf ein ausgestopftes Tier",
 "en": "a cat lays down on a stuffed animal",
 "language": "de"
},
{
 "description": "Một chú mèo con màu đen nằm nghiêng bên cạnh điều khiển từ xa.",
 "en": "A black kitten lays on her side beside remote controls.",
 "language": "vi"
}
. . .<p>同様に、韓国語で「cat」（「고양이」）のキーワード検索を実行しても、意味のある結果が返されます。驚くべきことに、このインデックスには韓国語の文書がまったくありません。</p>GET coco_multi/_search
{
 "size": 100,
 "_source": [
   "description", "language", "en"
 ],
 "knn": {
   "field": "vector_description.predicted_value",
   "k": 50,
   "num_candidates": 1000,
   "query_vector_builder": {
     "text_embedding": {
       "model_id": ".multilingual-e5-small_linux-x86_64_search",
       "model_text": "query: 고양이"
     }
   }
 }
} {
       {
         "description": "eine Katze legt sich auf ein ausgestopftes Tier",
         "en": "a cat lays down on a stuffed animal",
         "language": "de"
       }
     },
     {
       {
         "description": "Một con chó và con mèo đang ngủ với nhau trên một chiếc ghế dài màu cam.",
         "en": "A dog and cat lying  together on an orange couch. ",
         "language": "vi"
       }
     },<p>これが機能するのは、埋め込みモデルが意味を共有セマンティック空間で表現し、インデックス付けされたキャプションとは異なる言語でのクエリでも関連する画像を取得できるためです。</p><h2>ハイブリッド検索と再ランキングによる関連性の高い検索結果の向上</h2><p>関連する結果が期待どおりに表示されたことを嬉しく思います。しかし、現実の世界では、たとえば、最も関連性の高い上位 5 ～ 10 件の結果に絞り込む必要がある e コマースや RAG アプリケーションでは、再ランク付けモデルを使用して最も関連性の高い結果を優先することができます。</p><p>ここで、ベトナム語で「猫の色は何色ですか？」と尋ねるクエリを実行すると、多くの結果が表示されますが、上位 1 つまたは 2 つが最も関連性が高いとは限りません。</p>GET coco_multi/_search
{
 "size": 20,
 "_source": [
   "description",
   "language",
   "en"
 ],
 "knn": {
   "field": "vector_description.predicted_value",
   "k": 20,
   "num_candidates": 1000,
   "query_vector_builder": {
     "text_embedding": {
       "model_id": ".multilingual-e5-small_linux-x86_64_search",
       "model_text": "query: con mèo màu gì?"
     }
   }
 }
}<p>結果にはすべて「猫」または何らかの形の色が言及されています。</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt979f5944b1708042/6a17ef76420229ff6829f6aa/33e1e887dbbdd1066cfedc7375f5e3b46538529e-859x847.png" alt="" /><p>では、それを改善しましょう!<a href="https://cohere.com/blog/rerank-3pt5">Cohere</a>の多言語再ランク付けモデルを統合して、質問に対応する推論を改善しましょう。</p>PUT _inference/rerank/cohere_rerank
{
 "service": "cohere",
 "service_settings": {
   "api_key": "your_api_key",
   "model_id": "rerank-v3.5"
 },
 "task_settings": {
   "top_n": 10,
   "return_documents": true
 }
}


GET coco_multi/_search
{
"size": 10,
"_source": [
  "description",
  "language",
  "en"
],
"retriever": {
  "text_similarity_reranker": {
    "retriever": {
      "rrf": {
        "retrievers": [
          {
            "knn": {
              "field": "vector_description.predicted_value",
              "k": 50,
              "num_candidates": 100,
              "query_vector_builder": {
                "text_embedding": {
                  "model_id": ".multilingual-e5-small_linux-x86_64_search",
                  "model_text": "query: con mèo màu gì?" // English: What color is the cat?
                }
              }
            }
          }
        ],
        "rank_window_size": 100,
        "rank_constant": 0
      }
    },
    "field": "description",
    "inference_id": "cohere_rerank",
    "inference_text": "con mèo màu gì?"
  }
}
} {
       "_index": "coco_multi",
       "_id": "rQiYQJYBgf6odR9bBYyH",
       "_score": 1.5501487,
       "_source": {
         "description": "Hai cái điện thoại được đặt trên một cái chăn cạnh một con mèo con màu đen.",
         "en": "A black kitten lays on her side beside remote controls.",
         "language": "vi"
       }
     },
     {
       "_index": "coco_multi",
       "_id": "swiXQJYBgf6odR9b04uf",
       "_score": 1.5427427,
       "_source": {
         "description": "Một con mèo sọc nâu nhìn vào máy quay.", // Real translation: A brown striped cat looks at the camera 
         "en": "This cat is sitting on a porch near a tire.",
         "language": "vi"
       }
     },<p>これで、上位の結果により、アプリケーションは子猫の色が黒か茶色で縞模様であると自信を持って答えることができます。ここでさらに興味深いのは、ベクトル検索によって、元のデータセットの英語のキャプションの欠落が実際に検出されたことです。参照の英語翻訳ではその詳細が抜けていたにもかかわらず、茶色の縞模様の猫を見つけることができます。これがベクトル検索の威力です。</p><h2>まとめ</h2><p>このブログでは、多言語埋め込みモデルの有用性と、Elasticsearch を活用してモデルを統合し埋め込みを生成する方法、ハイブリッド検索と再ランク付けによって関連性と精度を効果的に向上させる方法について説明しました。独自の<a href="https://cloud.elastic.co/registration?onboarding_token=vectorsearch&amp;cta=cloud-registration&amp;tech=trial&amp;plcmt=article%20content&amp;pg=search-labs">クラウド クラスターを作成し、</a>選択した言語とデータセットで<a href="https://www.elastic.co/docs/explore-analyze/machine-learning/nlp/ml-nlp-e5">すぐに使用できる E5 モデルを使用して、多言語セマンティック検索を</a>試すことができます。</p>]]></content:encoded>
    <link>https://www.elastic.co/search-labs/blog/multilingual-embedding-model-hybrid-search-reranking</link>
    <guid isPermaLink="true">https://www.elastic.co/search-labs/blog/multilingual-embedding-model-hybrid-search-reranking</guid>
    <category><![CDATA[Vector Database]]></category>
    <category><![CDATA[運用]]></category>
    <dc:creator><![CDATA[Quynh Nguyen]]></dc:creator>
    <enclosure url="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/bltf625e3f63fcd9f54/6a17ef7796142a61f8eb1bcd/d341b04acecc8eeec321f5404e1643447ecc8526-720x420.png" length="0" type="image/png"/>
    <pubDate>Mon, 03 Nov 2025 00:00:00 GMT</pubDate>
  </item>
  <item>
    <title><![CDATA[Elasticsearch に多言語埋め込みモデルをデプロイする]]></title>
    <description><![CDATA[Elasticsearch でベクトル検索とクロスリンガル検索を行うために、e5 多言語埋め込みモデルをデプロイする方法を学びます。]]></description>
    <content:encoded><![CDATA[<h2>はじめに</h2><p>世界中のユーザーがいる世界では、言語間情報検索 (CLIR) が非常に重要です。CLIR を使用すると、検索を 1 つの言語に限定するのではなく、<em>あらゆる</em>言語で情報を検索できるため、ユーザー エクスペリエンスが向上し、操作が効率化されます。電子商取引の顧客が自分の言語で商品を検索でき、事前にデータをローカライズする必要なく、適切な結果が表示されるグローバル市場を想像してみてください。あるいは、情報源が別の言語であっても、学術研究者がニュアンスや複雑さを含めて母国語で論文を検索できる場所です。</p><p>多言語テキスト埋め込みモデルを使用すると、まさにそれが実現できます。埋め込みは、テキストの意味を数値ベクトルとして表現する方法です。これらのベクトルは、同様の意味を持つテキストが高次元空間内で互いに近く配置されるように設計されています。多言語テキスト埋め込みモデルは、特に、異なる言語間で同じ意味を持つ単語やフレーズを同様のベクトル空間にマッピングするように設計されています。</p><p>オープンソースの Multilingual E5 のようなモデルは、多くの場合、対照学習などの手法を使用して、大量のテキスト データでトレーニングされます。このアプローチでは、モデルは類似した意味を持つテキストのペア (肯定的なペア) と類似しない意味を持つテキストのペア (否定的なペア) を区別することを学習します。モデルは、正のペア間の類似性が最大化され、負のペア間の類似性が最小化されるように、生成するベクトルを調整するようにトレーニングされます。多言語モデルの場合、このトレーニング データには、相互に翻訳された異なる言語のテキスト ペアが含まれており、モデルが複数の言語の共有表現空間を学習できるようになります。結果として得られる埋め込みは、クエリの言語に関係なく、テキスト埋め込み間の類似性を使用して関連するドキュメントを検索するクロスリンガル検索を含むさまざまな NLP タスクに使用できます。</p><h2>多言語ベクター検索のメリット</h2><ul><li><p><strong>ニュアンス</strong>: ベクター検索は、キーワードのマッチングを超えて、意味を捉えることに優れています。これは、文脈や言語の微妙なニュアンスを理解する必要があるタスクにとって非常に重要です。</p></li><li><p><strong>クロスリンガル理解</strong>: クエリとドキュメントが異なる語彙を使用している場合でも、言語間で効果的な情報検索を可能にします。</p></li><li><p><strong>関連性</strong>: クエリとドキュメント間の概念的な類似性に焦点を当てることで、より関連性の高い結果を提供します。</p></li></ul><p>たとえば、さまざまな国における「ソーシャル メディアが政治的議論に与える影響」を研究している学術研究者を考えてみましょう。ベクトル検索を使用すると、「l'impatto dei social media sul discorso politico」（イタリア語）または「ảnh hưởng của mạng xã hội đối với diễn ngôn chính trị」（ベトナム語）などのクエリを入力し、英語、スペイン語などで関連する論文を見つけることができます。他のインデックス付き言語。これは、ベクトル検索では、正確なキーワードを含む論文だけでなく、ソーシャル メディアの政治への影響の<em>概念</em>について議論している論文も特定されるためです。これにより、研究の幅と深さが大幅に向上します。</p><h2>使い始める</h2><p>Elasticsearch を使用して CLIR を設定する方法 (すぐに使用できる E5 モデルを使用) を次に示します。複数の言語の画像キャプションを含む<a href="https://huggingface.co/datasets/romrawinjp/multilingual-coco">オープンソースの多言語 COCO データセットを</a>使用して、2 種類の検索を視覚化します。</p><ol><li><p>1つの英語データセット上の他の言語のクエリと検索用語、および</p></li><li><p>複数の言語のドキュメントを含むデータセットに対する複数の言語でのクエリ。</p></li></ol><p>次に、ハイブリッド検索と再ランキングの力を活用して、検索結果をさらに改善します。</p><h2>要件</h2><ul><li><p>Python 3.6以上</p></li><li><p>Elasticsearch 8以上</p></li><li><p>Elasticsearch Pythonクライアント: pip install elasticsearch</p></li></ul><h2>データセット</h2><p><a href="https://huggingface.co/datasets/romrawinjp/multilingual-coco">COCO データセット</a>は、大規模なキャプション データセットです。データセット内の各画像には複数の異なる言語でキャプションが付けられており、言語ごとに複数の翻訳が利用可能です。デモンストレーションの目的で、各翻訳を個別のドキュメントとしてインデックス化し、参照用に最初の利用可能な英語の翻訳もインデックス化します。</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/bltfc7e508e9a7dffe8/6a17f3e2b1e113249579f394/d4f0632529c71a22fbdecf21c9f4f0bb64b8e69c-1600x567.png" alt="" /><h3>ステップ1: 多言語COCOデータセットをダウンロードする</h3><p>ブログを簡素化し、理解しやすくするために、ここでは、単純な API 呼び出しを使用して、restval の最初の 100 行をローカル JSON ファイルに読み込みます。あるいは、HuggingFace のライブラリ データセットを使用して、完全なデータセットまたはデータセットのサブセットを読み込むこともできます。</p>import requests
import json
import os
### Download multilingual coco dataset into a json file (for easy viewing)
### Here we are retrieving first 100 rows for this example
### Alternatively, you can use `datasets` library from Hugging Face
url = "https://datasets-server.huggingface.co/rows?dataset=romrawinjp%2Fmultilingual-coco&amp;config=default&amp;split=restval&amp;offset=0&amp;length=100"
response = requests.get(url)


if response.status_code == 200:
   data = response.json()
   output_file = "multilingual_coco_sample.json" 
   ### Loading the downloaded content into a json file locally
   with open(output_file, "w", encoding="utf-8") as f:
       json.dump(data, f, indent=4, ensure_ascii=False)
   print(f"Data successfully downloaded and saved to {output_file}")
else:
   print(f"Failed to download data: {response.status_code}")
   print(response.text)<p>データが JSON ファイルに正常に読み込まれると、次のようなものが表示されます。</p><p><code>Data successfully downloaded and saved to multilingual_coco_sample.json</code></p><h3>ステップ2: (Elasticsearchを起動) Elasticsearchでデータをインデックスする</h3><p>a) ローカル Elasticsearch サーバーを起動します。</p><p>b) Elasticsearch クライアントを起動します。</p>from elasticsearch import Elasticsearch
from getpass import getpass


# Initialize Elasticsearch client
es = Elasticsearch(getpass("Host: "), api_key=getpass("API Key: "))


index_name = "coco"


# Create the index if it doesn't exist
if not es.indices.exists(index=index_name):
   es.indices.create(index=index_name, body=mapping)<p>c) インデックスデータ</p># Load the JSON data
with open('./multilingual_coco_sample.json', 'r') as f:
   data = json.load(f)


rows = data["rows"]
# List of languages to process
languages = ["en", "es", "de", "it", "vi", "th"]


# For each image, we will process each individual caption as its own document
bulk_data = []
for data in rows:
   row = data["row"]
   image = row.get("image")
   image_url = image["src"]


   # Process each language
   for lang in languages:
       # Skip if language not present in this row
       if lang not in row:
           continue


       # Get all descriptions for this language
 # along with first available English caption for reference
       descriptions = row[lang]
       first_eng_caption = row["en"][0]


       # Prepare bulk indexing data
       for description in descriptions:
           if description == "":
               continue
           # Add index operation
           bulk_data.append(
               {"index": {"_index": index_name}}
           )
           # Add document
           bulk_data.append({
               "language": lang,
               "description": description,
               "en": first_eng_caption,
               "image_url": image_url,
           })


# Perform bulk indexing
if bulk_data:
   try:
       response = es.bulk(operations=bulk_data)
       if response["errors"]:
           print("Some documents failed to index")
       else:
           print(f"Successfully bulk indexed {len(bulk_data)} documents")
   except Exception as e:
       print(f"Error during bulk indexing: {str(e)}")


print("Indexing complete!")<p>データがインデックスされると、次のようなものが表示されます。</p><p><code>Successfully bulk indexed 4840 documents</code></p><p><code>Indexing complete!</code></p><h3>ステップ3: E5トレーニング済みモデルをデプロイする</h3><p>Kibanaで、スタック管理 &gt;<strong>トレーニング済みモデル</strong>ページに移動し、.multilingual-e5-small_linux-x86_64の<strong>デプロイを</strong>クリックします。オプション。この E5 モデルは、linux-x86_64 向けに最適化された小型の多言語モデルで、そのまま使用できます。「デプロイ」をクリックすると、デプロイ設定または vCPU 構成を調整できる画面が表示されます。簡単にするために、デフォルト オプションを使用し、適応型リソースを選択します。これにより、使用状況に応じてデプロイメントが自動的にスケーリングされます。</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/bltfbc09867063a8e6f/6a17f3e3148009a295b4889d/95cd8f352425d1db2d04b00c3c88d1e71d1ef19a-1600x440.png" alt="" /><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt264a2016341e9b6f/6a17f3f0e8fbce18de3a1aa7/1599d99949dda8267acc58f400a403a3af5373ef-1600x655.png" alt="" /><p>オプションとして、他のテキスト埋め込みモデルを使用することもできます。たとえば、BGE-M3 を使用するには、 <a href="https://www.elastic.co/docs/reference/elasticsearch/clients/eland/machine-learning#ml-nlp-pytorch">Elastic の Eland Python クライアント</a>を使用して HuggingFace からモデルをインポートできます。</p>export MODEL_ID="bge-m3"
export HUB_MODEL_ID="BAAI/bge-m3"
export CLOUD_ID={{CLOUD_ID}}
export ES_API_KEY={{API_KEY}}
docker run -it --rm docker.elastic.co/eland/eland \
eland_import_hub_model --cloud-id $CLOUD_ID --es-api-key $ES_API_KEY --hub-model-id $HUB_MODEL_ID --es-model-id $MODEL_ID --task-type text_embedding --start<p>次に、「トレーニング済みモデル」ページに移動し、インポートしたモデルを必要な構成でデプロイします。</p><h3>ステップ4: デプロイされたモデルを使用して元のデータをベクトル化または埋め込みを作成する</h3><p>埋め込みを作成するには、まずテキストを取得して推論テキスト埋め込みモデルに通すことができる取り込みパイプラインを作成する必要があります。これは、Kibana のユーザー インターフェースまたは Elasticsearch の API を通じて実行できます。</p><p><strong>Kibana インターフェース経由でこれを行うには</strong>、トレーニング済みモデルをデプロイした後、 <strong>[テスト]</strong>ボタンをクリックします。これにより、生成された埋め込みをテストおよびプレビューできるようになります。<code>coco</code>の新しいデータビューを作成しますインデックスを作成し、データ ビューを新しく作成した coco データ ビューに設定し、フィールドを<code>description</code>に設定します。これは、埋め込みを生成するフィールドだからです。</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt24a2b9a9a5111bbc/6a17f3f13e9e452c7fba15d5/cfe189e13dc118d325e7fb90bdace0c912e29f51-1088x1600.png" alt="" /><p>それは素晴らしいですね！これで、取り込みパイプラインの作成に進み、元のドキュメントのインデックスを再作成し、パイプラインに渡して、埋め込みを含む新しいインデックスを作成できます。これを実現するには、 <strong>「パイプラインの作成」を</strong>クリックします。これにより、埋め込みの作成に必要なプロセッサが自動的に入力され、パイプラインの作成プロセスがガイドされます。</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blte39c5ad52702103d/6a17f3f3e9ea87dd05a9c734/1e043c1c3279b66fbdf19c06b41e76e613043998-1600x1126.png" alt="" /><p>ウィザードでは、データの取り込みと処理中に障害を処理するために必要なプロセッサを自動的に入力することもできます。</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt63e002a79d177cf4/6a17f3f596142a3e91eb1c48/8804d31b4f869078e3b2245040bbb0ab1720a94a-1600x1084.png" alt="" /><p>それでは、取り込みパイプラインを作成しましょう。パイプラインに<code>coco_e5</code>という名前を付けます。パイプラインが正常に作成されたら、ウィザードで元のインデックス付きデータを新しいインデックスに再インデックスすることで、パイプラインをすぐに使用して埋め込みを生成できます。プロセスを開始するには、 <strong>「再インデックス」</strong>をクリックします。</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt39243d9ad1779fdf/6a17f3f696142a13eaeb1c4c/e34b1b18f5b24420d4581fe4d657c569926c2023-1600x1126.png" alt="" /><h2>より複雑な構成の場合は、Elasticsearch API を使用できます。</h2><p>一部のモデルでは、モデルのトレーニング方法により、埋め込みを生成する前に実際の入力の先頭または末尾に特定のテキストを追加する必要がある場合があります。そうしないと、パフォーマンスが低下します。</p><p>たとえば、e5 の場合、モデルは入力テキストが「passage: {content of passage} 」に続くことを想定します。これを実現するために、取り込みパイプラインを活用しましょう。新しい取り込みパイプライン<strong>vectorize_descriptions を</strong>作成します。このパイプラインでは、新しい一時的な<code>temp_desc</code>フィールドを作成し、 <code>description</code>テキストの先頭に「passage:」を追加し、モデルで<code>temp_desc</code>を実行してテキスト埋め込みを生成し、 <code>temp_desc</code>を削除します。</p>PUT _ingest/pipeline/vectorize_descriptions
{
"description": "Pipeline to run the descriptions text_field through our inference text embedding model",
"processors": [
 {
   "set": {
     "field": "temp_desc",
     "value": "passage: {{description}}"
   }
 },
 {
   "inference": {     
"field_map": {
       "temp_desc": "text_field"
     },
     "model_id": ".multilingual-e5-small_linux-x86_64_search",
     "target_field": "vector_description"
   }
 },
 {
   "remove": {
     "field": "temp_desc"
   }
 }
]
}<p>さらに、生成されたベクトルに使用する<a href="https://www.elastic.co/docs/reference/elasticsearch/mapping-reference/dense-vector#dense-vector-quantization">量子化の種類</a>を指定することもできます。デフォルトでは、Elasticsearch は<code>int8_hnsw</code>を使用しますが、ここでは各次元を 1 ビットの精度に削減する<a href="https://www.elastic.co/search-labs/blog/better-binary-quantization-lucene-elasticsearch">Better Binary Quantization</a> (または<code>bqq_hnsw</code> ) を使用します。これにより、精度は犠牲になりますが、メモリ フットプリントが 96% (または 32 倍) 削減されます。後で再ランク付けを使用して精度の低下を改善することが分かっているため、この量子化タイプを選択しています。</p><p>そのためには、 <strong>coco_multi</strong>という名前の新しいインデックスを作成し、マッピングを指定します。ここでの魔法は vector_description フィールドにあり、そこで<strong>index_options</strong>のタイプを<strong>bbq_hnsw</strong>に指定します。</p>PUT coco_multi
{
 "mappings": {
   "properties": {
     "description": {
       "type": "text"
     },
     "en": {
       "type": "text"
     },
     "image_url": {
       "type": "keyword"
     },
     "language": {
       "type": "keyword"
     },
     "vector_description.predicted_value": {
       "type": "dense_vector",
       "dims": 384,
       "index": "true",
       "similarity": "cosine",
       "index_options": {
         "type": "bbq_hnsw" 
       }
     }
   }
 }
}<p>これで、説明フィールドを「ベクトル化」または埋め込みを作成する取り込みパイプラインを使用して、元のドキュメントを新しいインデックスに再インデックスできます。</p>POST _reindex?wait_for_completion=false
{
 "source": {
   "index": "coco"
 },
 "dest": {
   "index": "coco_multilingual",
   "pipeline": "vectorize_descriptions"
 }
}<p>以上です！Elasticsearch と Kibana を使用して多言語モデルを正常にデプロイし、Kibana ユーザー インターフェースまたは Elasticsearch API を使用して Elastic でデータにベクトル埋め込みを作成する方法を段階的に学習しました。このシリーズの第 2 部では、多言語モデルを使用した場合の結果とニュアンスについて説明します。その間、独自の<a href="https://cloud.elastic.co/registration?onboarding_token=vectorsearch&amp;cta=cloud-registration&amp;tech=trial&amp;plcmt=article%20content&amp;pg=search-labs">クラウド クラスターを作成し</a>、選択した言語とデータセットで<a href="https://www.elastic.co/docs/explore-analyze/machine-learning/nlp/ml-nlp-e5">すぐに使用できる E5 モデルを使用して多言語セマンティック検索を</a>試すことができます。</p>]]></content:encoded>
    <link>https://www.elastic.co/search-labs/blog/multilingual-embedding-model-deployment-elasticsearch</link>
    <guid isPermaLink="true">https://www.elastic.co/search-labs/blog/multilingual-embedding-model-deployment-elasticsearch</guid>
    <category><![CDATA[Vector Database]]></category>
    <category><![CDATA[運用]]></category>
    <dc:creator><![CDATA[Quynh Nguyen]]></dc:creator>
    <enclosure url="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt59254226694f93a6/6a17f3f81480098988b488a1/8f2aa7bebb6b2f701e274ba7282273f9ab4abed6-720x432.png" length="0" type="image/png"/>
    <pubDate>Wed, 22 Oct 2025 00:00:00 GMT</pubDate>
  </item>
  </channel>
</rss>