이전 모듈에서는 주제 벡터를 생성했습니다. 이 모듈에서는 주제 벡터의 인덱스를 유지하는 콘텐츠 추천 모듈을 구축하고 배포합니다.
먼저 셔플링된 레이블을 훈련 데이터의 원래 레이블에 연결하는 사전을 생성합니다. 다음 코드를 복사하여 노트북에 붙여 넣은 다음 [실행]을 선택합니다.
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 알고리즘은 최근접 이웃을 계산하기 위한 다양한 거리 지표를 제공합니다. 자연어 처리에 가장 많이 사용되는 지표 중 하나는 코사인 거리입니다. 수학적으로, 벡터 A와 B 사이의 코사인 “유사 계수”는 다음 등식을 사용하여 계산됩니다.
index_metric을 COSINE으로 설정하면 Amazon SageMaker가 자동으로 코사인 유사 계수를 사용하여 최근접 이웃을 계산합니다. 기본 거리는 표준 유클리드 거리인 L2 norm입니다. 게시 당시를 기준으로, COSINE은 faiss.IVFFlat 인덱스 유형에만 지원되고 faiss.IVFPQ 인덱싱 방식에는 지원되지 않습니다.
Completed - Training job completed
성공입니다! 이 모델에서는 특정 테스트 주제가 주어졌을 때 최근접 이웃을 반환하도록 해야 하므로, 라이브 호스팅 엔드포인트로 모델을 배포해야 합니다.