

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# Amazon DocumentDB 生成人工知能
<a name="generative-ai"></a>

Amazon DocumentDB は、機械学習 (ML) モデルと生成人工知能 (AI) モデルが Amazon DocumentDB に保存されているデータをリアルタイムで操作できるようにする機能を提供します。お客様は、別のインフラストラクチャの管理、別のサービスに接続するためのコードの記述、プライマリデータベースからのデータの複製に時間を費やす必要がなくなります。

人工知能と AWS が AI のニーズをサポートする方法の詳細については、この[「What-is](https://aws.amazon.com/what-is/artificial-intelligence/)」記事を参照してください。

**Topics**
+ [Amazon SageMaker AI Canvas を使用したノーコード機械学習](no-code-machine-learning.md)
+ [Amazon DocumentDB のベクトル検索](vector-search.md)

# Amazon SageMaker AI Canvas を使用したノーコード機械学習
<a name="no-code-machine-learning"></a>

[Amazon SageMaker AI Canvas](https://docs.aws.amazon.com/sagemaker/latest/dg/canvas.html) を使用すると、まったくコードを記述しなくても独自の AI/ML モデルを構築できます。リグレッションや予測などの一般的なユースケース用の ML モデルを構築し、Amazon Bedrock から基盤モデル (FM) にアクセスして評価できます。あるいは Amazon SageMaker AI JumpStart からパブリック FM にアクセスしてコンテンツ生成、テキスト抽出、テキスト要約などを行い、生成 AI ソリューションをサポートすることもできます。

## SageMaker AI Canvas を使用してノーコード ML モデルを構築する方法
<a name="w2aac21b9b5"></a>

Amazon DocumentDB が Amazon SageMaker AI Canvas と統合され、Amazon DocumentDB に保存されているデータでのノーコード機械学習 (ML) が可能になりました。Amazon DocumentDB に保存されているデータを使用して、いっさいコードを記述することなく、リグレッションや予測などのニーズに合った ML モデルを構築し、コンテンツの要約や生成の基礎モデルを使用できるようになりました。

SageMaker AI Canvas は、ビジュアルインターフェースの提供により、Amazon DocumentDB を利用するお客様が AI/ML の専門知識なしに一切コードを記述することなく予測の生成等を行うことを可能にします。お客様は、 から SageMaker AI Canvas ワークスペースを起動し AWS マネジメントコンソール、データ準備とモデルトレーニングのために Amazon DocumentDB データをインポートして参加できるようになりました。Amazon DocumentDB のデータを SageMaker AI Canvas で使用することで、顧客離れの予測、不正行為の検出、メンテナンス障害の予測、ビジネスメトリクスの予測、コンテンツの生成などを行うモデルを構築および拡張できるようになりました。お客様は、SageMaker AI Canvas の Quick とのネイティブ統合を使用して、チーム間で ML 主導のインサイトを公開および共有できるようになりました。SageMaker AI Canvas のデータインジェストパイプラインは、デフォルトで Amazon DocumentDB セカンダリインスタンスで実行されるため、アプリケーションと SageMaker AI Canvas の取り込みワークロードのパフォーマンスが妨げられることはありません。

Amazon DocumentDB のお客様は、Amazon DocumentDB の新しいノーコード ML コンソールページに移動し、新規または利用可能な SageMaker AI Canvas ワークスペースに接続することで、SageMaker AI Canvas の使用を開始できます。

## SageMaker AI ドメインとユーザープロファイルの設定
<a name="sagemaker-domain"></a>

VPC 専用モードで実行されている SageMaker AI ドメインから Amazon DocumentDB クラスターに接続できます。VPC 内で SageMaker AI ドメインを起動することで、SageMaker AI Studio および Canvas 環境からのデータフローを制御できます。これにより、インターネットアクセスを制限し、標準の AWS ネットワークとセキュリティ機能を使用してトラフィックをモニタリングおよび検査し、VPC エンドポイントを介して他の AWS リソースに接続できます。SageMaker AI ドメインを作成して Amazon DocumentDB クラスターに接続する方法については、「*Amazon SageMaker AI 開発者ガイド*」の「[Amazon SageMaker AI Canvas の使用開始](https://docs.aws.amazon.com/sagemaker/latest/dg/canvas-getting-started.html)」および「[インターネットアクセスなしで VPC 内で Amazon SageMaker AI Canvas を構築する方法](https://docs.aws.amazon.com/sagemaker/latest/dg/canvas-vpc.html)」を参照してください。

## Amazon DocumentDB と SageMaker AI Canvas の IAM アクセス許可の設定
<a name="iam-access-canvas"></a>

自分に関連付けられたロールと ID に `AmazonDocDBConsoleFullAccess` がアタッチされている Amazon DocumentDB ユーザーは、 AWS マネジメントコンソールにアクセスできます。Amazon SageMaker AI Canvas によるノーコード機械学習へのアクセスを取得するために、前述のロールまたは ID に次のアクションを追加します。

```
"sagemaker:CreatePresignedDomainUrl",
"sagemaker:DescribeDomain",
"sagemaker:ListDomains",
"sagemaker:ListUserProfiles"
```

## SageMaker AI Canvas のデータベースユーザーとロールの作成
<a name="w2aac21b9c11"></a>

Amazon DocumentDB の ロールベースアクセス制御 (RBAC)を使用して、ユーザーがデータベースで実行できるアクションへのアクセスを制限できます。RBAC は、1 つ以上のロールをユーザーに付与することで機能します。これらのロールは、ユーザーがデータベースリソースに対して実行できるオペレーションを決定します。

Canvas ユーザーとして、ユーザー名とパスワードの認証情報を使用して Amazon DocumentDB データベースに接続します。Amazon DocumentDB RBAC 機能を使用して、特定のデータベースへの読み取りアクセス権を持つ Canvas ユーザーのデータベースユーザー/ロールを作成できます。

たとえば、`createUser` を使用します:

```
db.createUser({
user: "canvas_user", 
pwd: "<insert-password>", 
roles: [{role: "read", db: "sample-database-1"}]
})
```

これにより、`sample-database-1` データベースへの読み取りアクセス許可を持つ `canvas_user` が作成されます。Canvas アナリストは、この認証情報を使用して、Amazon DocumentDB クラスター内のデータにアクセスできます。詳細については、「[ロールベースのアクセス制御 (RBAC) を使用したデータベースへのアクセス](role_based_access_control.md)」を参照してください。

## 利用できるリージョン
<a name="available-regions"></a>

ノーコード統合は、Amazon DocumentDB と Amazon SageMaker AI Canvas の両方がサポートされているリージョンで使用できます。対象リージョンには以下が含まれます。
+ us-east-1 (バージニア北部)
+ us-east-2 (オハイオ)
+ us-west-2 (オレゴン)
+ ap-northeast-1 (東京)
+ ap-northeast-2 (ソウル)
+ ap-south-1 (ムンバイ)
+ ap-southeast-1 (シンガポール)
+ ap-southeast-2 (シドニー)
+ eu-central-1 (フランクフルト)
+ eu-west-1 (アイルランド)

最新のリージョンの可用性については、「*Amazon SageMaker AI 開発者ガイド*」の「[Amazon SageMaker AI Canvas](https://docs.aws.amazon.com/sagemaker/latest/dg/canvas.html)」を参照してください。

# Amazon DocumentDB のベクトル検索
<a name="vector-search"></a>

ベクトル検索は、距離または類似度メトリクスを使用して複数のベクトル表現を比較することで、特定のデータポイントに類似したデータポイントを見つけるための機械学習手法です。2 つのベクトルがベクトル空間内で互いに近い距離にあるほど、基盤となる項目が類似していると見なされます。この手法は、データのセマンティックな意味を把握するのに役立ちます。こうしたアプローチは、お勧め提案システム、自然言語処理、画像認識など、さまざまなアプリケーションで役立ちます。

Amazon DocumentDB のベクトル検索機能は、JSON ベースのドキュメントデータベースの柔軟性と豊富なクエリ機能にベクトル検索ならではのメリットを組み合わせています。既存の Amazon DocumentDB データや柔軟なドキュメントデータ構造を使用して、セマンティック検索エクスペリエンス、お勧め製品の提案、パーソナライゼーション、チャットボット、不正検出、異常検出などの機械学習や生成 AI のユースケースを構築するには、Amazon DocumentDB のベクトル検索が最適です。ベクトル検索は、Amazon DocumentDB 5.0 のインスタンスベースのクラスターで使用できます。

**Topics**
+ [ベクトルの挿入](#w2aac21c11b9)
+ [ベクトルインデックスの作成](#w2aac21c11c11)
+ [インデックス定義の取得](#w2aac21c11c13)
+ [ベクトルのクエリ](#w2aac21c11c15)
+ [特徴量と制限事項](#vector-limitations)
+ [ベストプラクティス](#w2aac21c11c19)

## ベクトルの挿入
<a name="w2aac21c11b9"></a>

Amazon DocumentDB データベースへのベクトル挿入には、既存の挿入方法を使用できます。

**例**

次の例では、テストデータベース内に 5 つのドキュメントのコレクションが作成されています。各ドキュメントには、製品名とそれに対応するベクトル埋め込みの 2 つのフィールドが含まれています。

```
db.collection.insertMany([
  {"product_name": "Product A", "vectorEmbedding": [0.2, 0.5, 0.8]},
  {"product_name": "Product B", "vectorEmbedding": [0.7, 0.3, 0.9]},
  {"product_name": "Product C", "vectorEmbedding": [0.1, 0.2, 0.5]},
  {"product_name": "Product D", "vectorEmbedding": [0.9, 0.6, 0.4]},
  {"product_name": "Product E", "vectorEmbedding": [0.4, 0.7, 0.2]}
]);
```

## ベクトルインデックスの作成
<a name="w2aac21c11c11"></a>

Amazon DocumentDB は、階層ナビゲーションスモールワールド方式 (HNSW) によるインデックス作成と、フラット圧縮付き転置ファイル方式 (IVFFlat) によるインデックス作成の両方をサポートしています。IVFFlat インデックスは、ベクトルを複数のリストに分離したうえで、クエリベクトルに最も近いリストの選択されたサブセットを検索します。一方、HNSW インデックスはベクトルデータを多層グラフに整理します。HNSW は IVFFlat に比べてビルド時間が多くかかりますが、クエリのパフォーマンスと再現性が向上します。IVFFlat とは異なり、HNSW にはトレーニングステップがないため、初期データロードなしでインデックスを生成できます。ほとんどのユースケースでは、ベクトル検索に HNSW インデックスタイプを使用することをお勧めします。

ベクトルインデックスを作成しない場合、Amazon DocumentDB は高精度な最近傍探索を実行し、完全な再現性を保証します。ただし、本番稼働シナリオでは、速度も重要となります。そのためベクトルインデックスを使用することをお勧めします。ベクトルインデックスは、再現性を若干犠牲にしても速度を向上させる効果があります。なお、ベクトルインデックスの追加によりクエリ結果が異なる可能性があることに留意してください。

**テンプレート**

次の `createIndex` または `runCommand` テンプレートを使用して、ベクトルフィールドにベクトルインデックスを構築できます。

------
#### [ Using createIndex ]

mongosh や Java などの特定のドライバーでは、`vectorOptions` のパラメータを `createIndex` に使用するとエラーが発生する可能性があります。このような場合は、`runCommand` を使用することをお勧めします。

```
db.collection.createIndex(
  { "<vectorField>": "vector" },
  { "name": "<indexName>",
    "vectorOptions": {
      "type": " <hnsw> | <ivfflat> ",
      "dimensions": <number_of_dimensions>,
      "similarity": " <euclidean> | <cosine> | <dotProduct> ",
      "lists": <number_of_lists> [applicable for IVFFlat],
      "m": <max number of connections> [applicable for HNSW],
      "efConstruction": <size of the dynamic list for index build> [applicable for HNSW]
    }
  }
);
```

------
#### [ Using runCommand ]

mongosh や Java などの特定のドライバーでは、`vectorOptions` のパラメータを `createIndex` に使用するとエラーが発生する可能性があります。このような場合は、`runCommand` を使用することをお勧めします。

```
db.runCommand(
  { "createIndexes": "<collection>", 
  "indexes": [{
      key: { "<vectorField>": "vector" },
      vectorOptions: {
          type: " <hnsw> | <ivfflat> ",
          dimensions: <number of dimensions>,
          similarity: " <euclidean> | <cosine> | <dotProduct> ",
          lists: <number_of_lists> [applicable for IVFFlat],
          m: <max number of connections> [applicable for HNSW],
          efConstruction: <size of the dynamic list for index build> [applicable for HNSW]
          },
      name: "myIndex" 
      }] 
  }
);
```

------


| パラメータ | 要件 | データ型 | 説明 | 値 (複数可) | 
| --- | --- | --- | --- | --- | 
|  **name**  |  オプション  |  string  |  インデックスの名前を指定します。  |  英数字  | 
|  **type**  |  オプション  |    |  エラーのタイプを指定します。  |  サポートされている: hnsw または ivfflat デフォルト: HNSW (エンジンパッチ 3.0.4574 以降)  | 
|  **dimensions**  |  必須  |  integer  |  ベクトルデータ内のディメンション数を指定します。  |  最大ディメンション数 2,000 個。  | 
|  **similarity**  |  必須  |  string  |  類似性の計算に使用される距離メトリクスを指定します。  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/documentdb/latest/developerguide/vector-search.html)  | 
|  **lists**  |  IVFFlat に必要です  |  integer  |  IVFFlat インデックスがベクトルデータをグループ化するために使用するクラスターの数を指定します。推奨される設定方式は、ドキュメント数最大 100 万件までについてはドキュメント 1,000 件当りのドキュメント数、ドキュメント数が最大 100 万件を超える場合には `sqrt(# of documents)` となります。  |  最小: 1 最大: 以下の [特徴量と制限事項](#vector-limitations) のインスタンスタイプごとのリストを参照してください。  | 
|  **m**  |  オプション  |  integer  |  特定の HNSW インデックス向けの最大接続数を指定します。  |  デフォルト: 16 範囲: [2, 100]  | 
|  **efConstruction**  |  オプション  |  integer  |  HNSW インデックスのグラフを作成するためのダイナミック候補リストのサイズを指定します。 `efConstruction` の値は、 (2 × m) 以上にする必要があります。  |  デフォルト: 64 範囲 [4, 1000]  | 

IVFFlat および `m` 向け `lists` や、HNSW 向け `efConstruction` などのサブパラメータの値を適切に設定することが重要です。検索の精度/再現性、ビルド時間、パフォーマンスに影響するためです。リスト値を大きくすると、リスト 1 件当りのベクトル数が減るため、クエリの速度が上がり、リージョンが小さくなります。一方、リージョンサイズが小さくなるほど再現性エラーが多くなり、精度が低下する恐れがあります。HNSW の場合、`m` や `efConstruction` の値を上げると検索精度が高まりますが、インデックスのビルド時間とサイズも増加します。以下の例を参照してください。

**例**

------
#### [ HNSW ]

```
db.collection.createIndex(
  { "vectorEmbedding": "vector" },
  { "name": "myIndex",
    "vectorOptions": {
      "type": "hnsw",
      "dimensions": 3,
      "similarity": "euclidean",
      "m": 16,
      "efConstruction": 64
    }
  }
);
```

------
#### [ IVFFlat ]

```
db.collection.createIndex(
  { "vectorEmbedding": "vector" },
  { "name": "myIndex",
    "vectorOptions": {
      "type": "ivfflat",
      "dimensions": 3,
      "similarity": "euclidean",
      "lists":1
    }
  }
)
```

------

## インデックス定義の取得
<a name="w2aac21c11c13"></a>

`getIndexes` コマンドを使用して、ベクトルインデックスを含むインデックスの詳細を表示できます。

**例**

```
db.collection.getIndexes()
```

**出力例**

```
[
 {
  "v" : 4,
  "key" : {
   "_id" : 1
  },
  "name" : "_id_",
  "ns" : "test.collection"
 },
 {
  "v" : 4,
  "key" : {
   "vectorEmbedding" : "vector"
  },
  "name" : "myIndex",
  "vectorOptions" : {
   "type" : "ivfflat",
   "dimensions" : 3,
   "similarity" : "euclidean",
   "lists" : 1
  },
  "ns" : "test.collection"
 }
]
```

## ベクトルのクエリ
<a name="w2aac21c11c15"></a>

Amazon DocumentDB は、ベクトルをクエリするための 2 つのベクトル検索演算子をサポートしています。

### クラシックベクトル検索演算子
<a name="w2aac21c11c15b5"></a>

次のテンプレートを使用して、ベクトルをクエリします。

```
db.collection.aggregate([
  {
    $search: {
      "vectorSearch": {
        "vector": <query vector>, 
        "path": "<vectorField>", 
        "similarity": "<distance metric>",
        "k": <number of results>,
        "probes":<number of probes> [applicable for IVFFlat],
        "efSearch":<size of the dynamic list during search> [applicable for HNSW]
      }
    }
  }
]);
```


| パラメータ | 要件 | 型 | 説明 | 値 (複数可) | 
| --- | --- | --- | --- | --- | 
|  **vectorSearch**  |  必須  |  オペレーター  |  \$1search コマンド内でベクトルをクエリする際に使用します。  |    | 
|  **vector**  |  必須  |  array  |  類似ベクトルの検索に使用するクエリベクトルを示します。  |    | 
|  **path**  |  必須  |  string  |  ベクトルフィールドの名前を定義します。  |    | 
|  **k**  |  必須  |  integer  |  検索から返される結果の最大数を指定します。  |    | 
|  **similarity**  |  必須  |  string  |  類似性の計算に使用される距離メトリクスを指定します。  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/documentdb/latest/developerguide/vector-search.html)  | 
|  **probes**  |  オプション  |  integer  |  ベクトル検索において検査対象とするクラスターの数。値を大きくすると、速度が低下する代わりに再現性が向上します。これは、最近傍検索のリスト数に設定できます (この時点では、プランナーはインデックスを使用しません)。微調整の開始点とするための推奨設定は `sqrt(# of lists)` です。  |  デフォルト: 1  | 
|  **efSearch**  |  オプション  |  integer  |  HNSW インデックスが検索時に使用するダイナミック候補リストのサイズを指定します。`efSearch` の値が高いほど、速度は低下しますが再現性が向上します。  |  デフォルト: 40 範囲: [1, 1000]  | 

`efSearch` (HNSW) または `probes` (IVFFlat) の値をファインチューニングして、もっとも望ましいパフォーマンスと精度を達成することが重要です。次のオペレーションの例を参照してください。

------
#### [ HNSW ]

```
db.collection.aggregate([
  {
    $search: {
      "vectorSearch": {
        "vector": [0.2, 0.5, 0.8], 
        "path": "vectorEmbedding", 
        "similarity": "euclidean",
        "k": 2,
        "efSearch": 40
      }
    }
  }
]);
```

------
#### [ IVFFlat ]

```
db.collection.aggregate([
  {
    $search: {
      "vectorSearch": {
        "vector": [0.2, 0.5, 0.8], 
        "path": "vectorEmbedding", 
        "similarity": "euclidean",
        "k": 2,
        "probes": 1
      }
    }
  }
]);
```

------

**出力例**

このオペレーションによる出力は、次のようになります。

```
{ "_id" : ObjectId("653d835ff96bee02cad7323c"), "product_name" : "Product A", "vectorEmbedding" : [ 0.2, 0.5, 0.8 ] }
{ "_id" : ObjectId("653d835ff96bee02cad7323e"), "product_name" : "Product C", "vectorEmbedding" : [ 0.1, 0.2, 0.5 ] }
```

### `$vectorSearch` 演算子 (Amazon DocumentDB 8.0 以降で利用可能)
<a name="w2aac21c11c15b7"></a>

次のテンプレートを使用して、ベクトルをクエリします。

```
db.collection.aggregate([
{
  "$vectorSearch": {
    "exact": true | false,
    "index": "<index-name>" [supports only HNSW index],
    "limit": <number-of-results> [same as k],
    "path": "<vector field-to-search>",
    "queryVector": <array-of-numbers>,
    "numCandidates": <number-of-candidates> [same as efSearch], 
  }
}])
```

## 特徴量と制限事項
<a name="vector-limitations"></a>

**バージョン互換性**
+ Amazon DocumentDB のベクトル検索は、Amazon DocumentDB 5.0 以降のインスタンスベースのクラスターでのみ使用できます。

**ベクトル**
+ Amazon DocumentDB は、最大 2,000 個のディメンションのベクトルをインデックス化できます。ただし、インデックスなしであれば最大 16,000 個のディメンションを保存できます。

**インデックス**
+ IVFFlat インデックス作成の場合、lists パラメータの推奨設定方法は、ドキュメント数最大 100 万件までについては 1000 件あたりのドキュメント数、ドキュネント数が最大 100 万を超える場合には `sqrt(# of documents)` となります。作業メモリの制限により、Amazon DocumentDB はディメンション数に応じて、lists パラメータの特定の最大値をサポートします。参考までに、次の表は、ディメンション数が 500、1000、2,000 の場合のベクトルのリストパラメータの最大値を示します。    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/documentdb/latest/developerguide/vector-search.html)
+ `compound`、`sparse`、`partial` などの他のインデックスオプションは、ベクトルインデックスではサポートされていません。
+ Amazon DocumentDB 5.0 の HNSW インデックスでは、並列インデックスビルドはサポートされていません。

**ベクトルクエリ**
+ ベクトル検索クエリでは、最適な結果を得るために、`probes` や `efSearch` などのパラメータを微調整することが重要です。`probes` または `efSearch` パラメータの値が高いほど、再現性は高くなりますが、速度が低下します。検索パラメータの微調整の開始点としての推奨設定は `sqrt(# of lists)` です。

## ベストプラクティス
<a name="w2aac21c11c19"></a>

Amazon DocumentDB でベクトル検索を使用するためのベストプラクティスについて説明します。新しいベストプラクティスが確認されると、このセクションは更新されます。
+ フラット圧縮付き転置ファイル方式 (IVFFlat ) によるインデックス作成には、類似点に基づいてデータポイントをクラスター化および整理することが含まれます。したがって、インデックスをより効果的に運用するには、インデックスを作成する前に少なくとも一部のデータをロードしてみることをお勧めします。
+ ベクトル検索クエリでは、最適な結果を得るために、`probes` や `efSearch` などのパラメータをファインチューニングすることが重要です。`probes` または `efSearch` パラメータの値が高いほど、再現性は高くなりますが、速度が低下します。`probes` パラメータの微調整の開始点としての推奨設定は `sqrt(lists)` です。

**リソース**
+ [ベクトル検索に関する新しいブログ記事](https://aws.amazon.com/blogs/aws/vector-search-for-amazon-documentdb-with-mongodb-compatibility-is-now-generally-available)
+ [セマンティック検索コードのサンプル](https://github.com/aws-samples/amazon-documentdb-samples/tree/master/blogs/semanticsearch-docdb)
+ [Amazon DocumentDB ベクトル検索コードのサンプル](https://github.com/aws-samples/amazon-documentdb-samples/tree/master/samples/vector-search)