前のモジュールでは、トピックベクトルを作成しました。このモジュールでは、トピックベクトルのインデックスを保持するコンテンツレコメンドモジュールを構築してデプロイします。
まず、シャッフルされたラベルをトレーニングデータの元のラベルにリンクする辞書を作成します。ノートブックで、以下のコードをコピーして貼り付け、[実行] を選択します。
labels = newidx
labeldict = dict(zip(newidx,idx))
次に、次のコードを使用してトレーニングデータを S3 バケットに保存します。
import io
import sagemaker.amazon.common as smac
print('train_features shape = ', predictions.shape)
print('train_labels shape = ', labels.shape)
buf = io.BytesIO()
smac.write_numpy_to_dense_tensor(buf, predictions, labels)
buf.seek(0)
bucket = BUCKET
prefix = PREFIX
key = 'knn/train'
fname = os.path.join(prefix, key)
print(fname)
boto3.resource('s3').Bucket(bucket).Object(fname).upload_fileobj(buf)
s3_train_data = 's3://{}/{}/{}'.format(bucket, prefix, key)
print('uploaded training data location: {}'.format(s3_train_data))
次に、次のヘルパー関数を使用して、モジュール 3 で作成した NTM 推定器とよく似た k-NN 推定器を作成します。
def trained_estimator_from_hyperparams(s3_train_data, hyperparams, output_path, s3_test_data=None):
"""
Create an Estimator from the given hyperparams, fit to training data,
and return a deployed predictor
"""
# set up the estimator
knn = sagemaker.estimator.Estimator(get_image_uri(boto3.Session().region_name, "knn"),
get_execution_role(),
train_instance_count=1,
train_instance_type='ml.c4.xlarge',
output_path=output_path,
sagemaker_session=sagemaker.Session())
knn.set_hyperparameters(**hyperparams)
# train a model. fit_input contains the locations of the train and test data
fit_input = {'train': s3_train_data}
knn.fit(fit_input)
return knn
hyperparams = {
'feature_dim': predictions.shape[1],
'k': NUM_NEIGHBORS,
'sample_size': predictions.shape[0],
'predictor_type': 'classifier' ,
'index_metric':'COSINE'
}
output_path = 's3://' + bucket + '/' + prefix + '/knn/output'
knn_estimator = trained_estimator_from_hyperparams(s3_train_data, hyperparams, output_path)
トレーニングジョブの実行中に、ヘルパー関数のパラメータを詳しく見てください。
Amazon SageMaker k-NN アルゴリズムは、最近傍を計算するためのいくつかの異なる距離メトリクスを提供します。自然言語処理で使用される 1 つの一般的なメトリクスは、コサイン距離です。数学的には、2 つのベクトル A と B の間のコサイン「類似性」は、次の方程式で与えられます。
index_metric を COSINE に設定すると、Amazon SageMaker は自動的にコサイン類似度を使用して最近傍を計算します。デフォルトの距離は L2 ノルムで、これは標準のユークリッド距離です。公開時には、COSINE は faiss.IVFFlat インデックスタイプでのみサポートされ、faiss.IVFPQ インデックス方法ではサポートされないことに注意してください。
Completed - Training job completed
成功しました。 このモデルは特定のテストトピックを与えられた最近傍を返すようにしたいので、ホストされたライブエンドポイントとしてデプロイする必要があります。