온라인 대화는 비디오 게임에서 통신에 이르기까지 산업 전반에 걸쳐 현대 생활에서 어디에서나 볼 수 있습니다. 이로 인해 온라인 대화 데이터의 양이 기하급수적으로 증가했으며, 이는 챗봇 및 자연어 생성(NLG) 모델과 같은 최첨단 자연어 처리(NLP) 시스템 개발에 도움이 되었습니다. 시간이 지남에 따라 텍스트 분석을 위한 다양한 NLP 기술도 발전했습니다. 따라서 광범위한 머신 러닝(ML) 전문 지식 없이도 API 호출을 사용하여 애플리케이션에 통합할 수 있는 완전 관리형 서비스에 대한 요구 사항이 필요합니다. AWS는 다음과 같은 사전 훈련된 AWS AI 서비스를 제공합니다. 아마존 이해분류, 텍스트 요약, 엔티티 인식 등과 관련된 NLP 사용 사례를 효과적으로 처리하여 텍스트에서 통찰력을 수집할 수 있습니다.
또한 온라인 대화로 인해 비 전통적 언어 사용 현상이 널리 퍼졌습니다. 기존의 NLP 기술은 서로 다른 플랫폼 내에 존재하는 지속적으로 발전하고 도메인별 어휘로 인해 이 텍스트 데이터에서 종종 제대로 수행되지 않을 뿐만 아니라 우연히 또는 의도적으로 적대적 공격의 한 형태로 적절한 영어에서 단어의 상당한 어휘 편차로 인해 성능이 저하됩니다. .
이 게시물에서는 AWS에서 사용할 수 있는 도구 및 서비스를 사용하여 온라인 대화의 텍스트 분류를 위한 여러 ML 접근 방식을 설명합니다.
사전 조건
이 사용 사례에 대해 자세히 알아보기 전에 다음 전제 조건을 완료하십시오.
- 설정 AWS 계정 과 IAM 사용자 생성.
- 설정 AWS CLI 과 AWS SDK.
- (선택 사항) 설정 Cloud9 IDE 환경.
데이터 세트
이 게시물에는 독성 분류 데이터 세트에서 퍼즐 맞추기 의도하지 않은 편향, 온라인 대화에서 독성 분류의 특정 문제에 대한 벤치마크. 데이터 세트는 외설, 신원 공격, 모욕, 위협 및 성적으로 노골적인 것과 같은 여러 하위 그룹 속성뿐만 아니라 독성 레이블을 제공합니다. 레이블은 만장일치로 거의 만장일치로 드물게 주어진 텍스트 조각에 속성이 적용되었다고 믿는 인간 주석자의 비율을 나타내는 분수 값으로 제공됩니다. 이진 레이블(예: 독성 또는 무독성)을 생성하기 위해 임계값 0.5가 분수 값에 적용되고 임계값보다 큰 값이 있는 주석은 해당 레이블에 대한 양성 클래스로 처리됩니다.
하위 단어 임베딩 및 RNN
첫 번째 모델링 접근 방식에서는 하위 단어 임베딩과 순환 신경망(RNN)의 조합을 사용하여 텍스트 분류 모델을 훈련합니다. 하위 단어 임베딩은 Bojanowski et al. 2017년 이전 단어 수준 임베딩 방법에 대한 개선으로. 기존 Word2Vec skip-gram 모델은 해당 단어의 컨텍스트를 최적으로 예측하는 대상 단어의 정적 벡터 표현을 학습하도록 훈련되었습니다. 반면에 하위 단어 모델은 각 대상 단어를 단어를 구성하는 문자 n-그램의 백으로 나타냅니다. 여기서 n-그램은 n개의 연속 문자 집합으로 구성됩니다. 이 방법을 사용하면 임베딩 모델이 말뭉치에서 관련 단어의 기본 형태를 더 잘 나타낼 수 있을 뿐만 아니라 새로운 OOV(어휘 외) 단어에 대한 임베딩 계산을 더 잘 나타낼 수 있습니다. 이것은 사용자가 종종 단어의 철자를 틀리고(때로는 의도적으로 탐지를 피하기 위해) 문제 공간인 온라인 대화의 맥락에서 중요하며 또한 일반 교육 자료에서 포착할 수 없는 독특하고 지속적으로 발전하는 어휘를 사용합니다.
아마존 세이지 메이커 내장된 도메인별 텍스트 데이터 모음에서 감독되지 않은 하위 단어 임베딩 모델을 쉽게 훈련하고 최적화할 수 있습니다. BlazingText 알고리즘. 또한 다음과 같은 대규모 온라인 텍스트 데이터 세트에 대해 훈련된 기존 범용 모델을 다운로드할 수 있습니다. fastText에서 직접 사용할 수 있는 영어 모델. SageMaker 노트북 인스턴스에서 다음을 실행하기만 하면 사전 훈련된 fastText 모델을 다운로드할 수 있습니다.
!wget -O vectors.zip https://dl.fbaipublicfiles.com/fasttext/vectors-english/crawl-300d-2M-subword.zip
BlazingText로 자체 임베딩을 훈련했든 사전 훈련된 모델을 다운로드했든 결과는 gensim 라이브러리와 함께 사용하여 주어진 대상 단어를 구성 하위 단어를 기반으로 하는 벡터로 포함할 수 있는 압축된 모델 바이너리입니다.
# Imports
import os
from zipfile import ZipFile
from gensim.models.fasttext import load_facebook_vectors # Unzip the model binary into 'dir_path'
with ZipFile('vectors.zip', 'r') as zipObj: zipObj.extractall(path=<dir_path_name>) # Load embedding model into memory
embed_model = load_facebook_vectors(os.path.join(<dir_path_name>, 'vectors.bin')) # Compute embedding vector for 'word'
word_embedding = embed_model[word]
주어진 텍스트 세그먼트를 사전 처리한 후 이 접근 방식을 사용하여 각 구성 단어(공백으로 구분)에 대한 벡터 표현을 생성할 수 있습니다. 그런 다음 SageMaker와 PyTorch와 같은 딥 러닝 프레임워크를 사용하여 이진 또는 다중 레이블 분류 목표로 맞춤형 RNN을 훈련하여 레이블이 지정된 훈련 예제를 기반으로 텍스트의 독성 여부와 독성의 특정 하위 유형을 예측합니다.
사전 처리된 텍스트를 업로드하려면 아마존 단순 스토리지 서비스 (Amazon S3)의 경우 다음 코드를 사용합니다.
import boto3
s3 = boto3.client('s3') bucket = <bucket_name>
prefix = <prefix_name> s3.upload_file('train.pkl', bucket, os.path.join(prefix, 'train/train.pkl'))
s3.upload_file('valid.pkl', bucket, os.path.join(prefix, 'valid/valid.pkl'))
s3.upload_file('test.pkl', bucket, os.path.join(prefix, 'test/test.pkl'))
SageMaker로 확장 가능한 다중 GPU 모델 교육을 시작하려면 다음 코드를 입력하십시오.
import sagemaker
sess = sagemaker.Session()
role = iam.get_role(RoleName= ‘AmazonSageMakerFullAccess’)['Role']['Arn'] from sagemaker.pytorch import PyTorch # hyperparameters, which are passed into the training job
hyperparameters = { 'epochs': 20, # Maximum number of epochs to train model 'train-batch-size': 128, # Training batch size (No. sentences) 'eval-batch-size': 1024, # Evaluation batch size (No. sentences) 'embed-size': 300, # Vector dimension of word embeddings (Must match embedding model) 'lstm-hidden-size': 200, # Number of neurons in LSTM hidden layer 'lstm-num-layers': 2, # Number of stacked LSTM layers 'proj-size': 100, # Number of neurons in intermediate projection layer 'num-targets': len(<list_of_label_names>), # Number of targets for classification 'class-weight': ' '.join([str(c) for c in <list_of_weights_per_class>]), # Weight to apply to each target during training 'total-length':<max_number_of_words_per_sentence>, 'metric-for-best-model': 'ap_score_weighted', # Metric on which to select the best model
} # create the Estimator
pytorch_estimator = PyTorch( entry_point='train.py', source_dir=<source_dir_path>, instance_type=<train_instance_type>, volume_size=200, instance_count=1, role=role, framework_version='1.6.0’, py_version='py36', hyperparameters=hyperparameters, metric_definitions=[ {'Name': 'validation:accuracy', 'Regex': 'eval_accuracy = (.*?);'}, {'Name': 'validation:f1-micro', 'Regex': 'eval_f1_score_micro = (.*?);'}, {'Name': 'validation:f1-macro', 'Regex': 'eval_f1_score_macro = (.*?);'}, {'Name': 'validation:f1-weighted', 'Regex': 'eval_f1_score_weighted = (.*?);'}, {'Name': 'validation:ap-micro', 'Regex': 'eval_ap_score_micro = (.*?);'}, {'Name': 'validation:ap-macro', 'Regex': 'eval_ap_score_macro = (.*?);'}, {'Name': 'validation:ap-weighted', 'Regex': 'eval_ap_score_weighted = (.*?);'}, {'Name': 'validation:auc-micro', 'Regex': 'eval_auc_score_micro = (.*?);'}, {'Name': 'validation:auc-macro', 'Regex': 'eval_auc_score_macro = (.*?);'}, {'Name': 'validation:auc-weighted', 'Regex': 'eval_auc_score_weighted = (.*?);'} ]
) pytorch_estimator.fit( { 'train': 's3://<bucket_name>/<prefix_name>/train', 'valid': 's3://<bucket_name>/<prefix_name>/valid', 'test': 's3://<bucket_name>/<prefix_name>/test' }
)
이내 , 우리는 다음에서 사용되는 PyTorch 데이터 세트를 정의합니다. train.py
모델 학습 및 평가를 위한 텍스트 데이터 준비:
def pad_matrix(m: torch.Tensor, max_len: int =100)-> tuple[int, torch.Tensor] : """Pads an embedding matrix to a specified maximum length.""" if m.ndim == 1: m = m.reshape(1, -1) mask = np.ones_like(m) if m.shape[0] > max_len: m = m[:max_len, :] mask = mask[:max_len, :] else: m = np.pad(m, ((0, max_len - m.shape[0]), (0,0))) mask = np.pad(mask, ((0, max_len - mask.shape[0]), (0,0))) return m, mask class EmbeddingDataset(Dataset: torch.utils.data.Dataset): """PyTorch dataset representing pretrained sentence embeddings, masks, and labels.""" def __init__(self, text: str, labels: int, max_len: int=100): self.text = text self.labels = labels self.max_len = max_len def __len__(self) -> int: return len(self.labels) def __getitem__(self, idx: int) -> dict: e = embed_line(self.text[idx]) length = e.shape[0] m, mask = pad_matrix(e, max_len=self.max_len) item = {} item['embeddings'] = torch.from_numpy(m) item['mask'] = torch.from_numpy(mask) item['labels'] = torch.tensor(self.labels[idx]) if length > self.max_len: item['lengths'] = torch.tensor(self.max_len) else: item['lengths'] = torch.tensor(length) return item
이 코드는 vectors.zip
fastText 또는 BlazingText 임베딩이 포함된 파일은 다음 위치에 저장됩니다. .
또한 사전 훈련된 fastText 모델을 자체적으로 라이브 SageMaker 끝점에 쉽게 배포하여 관련 단어 수준 작업에 사용할 임베딩 벡터를 즉시 계산할 수 있습니다. 다음을 참조하십시오 GitHub 예시 자세한 내용은.
포옹하는 얼굴을 한 트랜스포머
두 번째 모델링 접근 방식의 경우 백서에 소개된 Transformers 사용으로 전환합니다. 주의 만 있으면됩니다. 트랜스포머는 입력과 출력 사이의 전역 종속성을 끌어내기 위해 self-attention 메커니즘에 의존하여 RNN의 함정을 의도적으로 피하도록 설계된 딥 러닝 모델입니다. Transformer 모델 아키텍처는 훨씬 더 나은 병렬화를 허용하고 비교적 짧은 훈련 시간에 고성능을 달성할 수 있습니다.
백서에 소개된 Transformers, BERT의 성공을 기반으로 합니다. BERT : 언어 이해를위한 딥 양방향 트랜스포머의 사전 교육, 언어 표현을 위한 양방향 사전 교육이 추가되었습니다. Cloze 작업에서 영감을 받은 BERT는 MLM(masked Language Modeling)으로 사전 훈련되었으며, 여기서 모델은 무작위로 마스킹된 토큰의 원래 단어를 복구하는 방법을 학습합니다. BERT 모델은 NSP(다음 문장 예측) 작업에서도 사전 훈련되어 두 문장이 올바른 읽기 순서인지 예측합니다. 2018년에 등장한 이후로 BERT와 그 변형은 텍스트 분류 작업에 널리 사용되었습니다.
우리의 솔루션은 RoBERTa로 알려진 BERT의 변종을 사용합니다. RoBERTa : 강력하게 최적화 된 BERT 사전 훈련 접근법. RoBERTa는 최적화된 하이퍼파라미터, 동적 랜덤 마스킹, NSP 작업 제거 등을 사용하여 10배 더 큰 코퍼스에서 더 긴 모델 훈련을 포함하여 최적화된 모델 훈련을 통해 다양한 자연어 작업에서 BERT 성능을 더욱 향상시킵니다.
RoBERTa 기반 모델은 다음을 사용합니다. 포옹 얼굴 변압기 다양한 NLP 작업을 위해 모든 종류의 최첨단 Transformer 모델의 고품질 구현을 제공하는 인기 있는 오픈 소스 Python 프레임워크인 라이브러리입니다. Hugging Face는 AWS와 파트너십을 맺었습니다. SageMaker에서 Transformer 모델을 쉽게 교육하고 배포할 수 있습니다. 이 기능은 다음을 통해 사용할 수 있습니다. 포옹 얼굴 AWS Deep Learning Container 이미지Transformers, Tokenizers 및 Datasets 라이브러리를 포함하고 모델 교육 및 추론을 위해 SageMaker와의 최적화된 통합을 포함합니다.
구현 시 Hugging Face Transformers 프레임워크에서 RoBERTa 아키텍처 백본을 상속하고 SageMaker를 사용하여 RoBERTox라고 하는 자체 텍스트 분류 모델을 교육 및 배포합니다. RoBERTox는 에서 도입된 BPE(바이트 쌍 인코딩)를 사용합니다. 하위 단어 단위로 희귀 단어의 신경 기계 번역, 입력 텍스트를 하위 단어 표현으로 토큰화합니다. 그런 다음 Jigsaw 데이터 또는 대규모 도메인별 코퍼스(예: 특정 게임의 채팅 로그)에 대해 모델과 토크나이저를 훈련하고 사용자 지정 텍스트 분류에 사용할 수 있습니다. 다음 코드에서 사용자 정의 분류 모델 클래스를 정의합니다.
class RoBERToxForSequenceClassification(CustomLossMixIn, RobertaPreTrainedModel): _keys_to_ignore_on_load_missing = [r"position_ids"] def __init__(self, config: PretrainedConfig, *inputs, **kwargs): """Initialize the RoBERToxForSequenceClassification instance Parameters ---------- config : PretrainedConfig num_labels : Optional[int] if not None, overwrite the default classification head in pretrained model. mode : Optional[str] 'MULTI_CLASS', 'MULTI_LABEL' or "REGRESSION". Used to determine loss class_weight : Optional[List[float]] If not None, add class weight to BCEWithLogitsLoss or CrossEntropyLoss """ super().__init__(config, *inputs, **kwargs) # Define model architecture self.roberta = RobertaModel(self.config, add_pooling_layer=False) self.classifier = RobertaClassificationHead(self.config) self.init_weights() @modeling_roberta.add_start_docstrings_to_model_forward( modeling_roberta.ROBERTA_INPUTS_DOCSTRING.format("batch_size, sequence_length") ) @modeling_roberta.add_code_sample_docstrings( tokenizer_class=modeling_roberta._TOKENIZER_FOR_DOC, checkpoint=modeling_roberta._CHECKPOINT_FOR_DOC, output_type=SequenceClassifierOutput, config_class=modeling_roberta._CONFIG_FOR_DOC, ) def forward( self, input_ids: torch.Tensor = None, attention_mask: torch.Tensor = None, token_type_ids: torch.Tensor = None, position_ids: torch.Tensor =None, head_mask: torch.Tensor =None, inputs_embeds: torch.Tensor =None, labels: torch.Tensor =None, output_attentions: torch.Tensor =None, output_hidden_states: torch.Tensor =None, return_dict: bool =None, sample_weights: torch.Tensor =None, ) -> : dict: """Forward pass to return loss, logits, ... Returns -------- output : SequenceClassifierOutput has those keys: loss, logits, hidden states, attentions """ return_dict = return_dict or self.config.use_return_dict outputs = self.roberta( input_ids, attention_mask=attention_mask, token_type_ids=token_type_ids, position_ids=position_ids, head_mask=head_mask, inputs_embeds=inputs_embeds, output_attentions=output_attentions, output_hidden_states=output_hidden_states, return_dict=return_dict, ) sequence_output = outputs[0] # [CLS] embedding logits = self.classifier(sequence_output) loss = self.compute_loss(logits, labels, sample_weights=sample_weights) if not return_dict: output = (logits,) + outputs[2:] return ((loss,) + output) if loss is not None else output return SequenceClassifierOutput( loss=loss, logits=logits, hidden_states=outputs.hidden_states, attentions=outputs.attentions, ) def compute_loss(self, logits: torch.Tensor, labels: torch.Tensor, sample_weights: Optional[torch.Tensor] = None) -> torch.FloatTensor: return super().compute_loss(logits, labels, sample_weights)
훈련 전에 Hugging Face의 데이터 세트 라이브러리를 사용하여 텍스트 데이터와 레이블을 준비하고 결과를 Amazon S3에 업로드합니다.
from datasets import Dataset
import multiprocessing data_train = Dataset.from_pandas(df_train)
… tokenizer = <instantiated_huggingface_tokenizer> def preprocess_function(examples: examples) -> torch.Tensor: result = tokenizer(examples["text"], padding="max_length", max_length=128, truncation=True) return result num_proc = multiprocessing.cpu_count()
print("Number of CPUs =", num_proc) data_train = data_train.map( preprocess_function, batched=True, load_from_cache_file=False, num_proc=num_proc
)
… import botocore
from datasets.filesystems import S3FileSystem s3_session = botocore.session.Session() # create S3FileSystem instance with s3_session
s3 = S3FileSystem(session=s3_session) # saves encoded_dataset to your s3 bucket
data_train.save_to_disk(f's3://<bucket_name>/<prefix_name>/train', fs=s3)
…
RNN과 유사한 방식으로 모델 학습을 시작합니다.
import sagemaker
sess = sagemaker.Session()
role = sagemaker.get_execution_role()
from sagemaker.huggingface import HuggingFace # hyperparameters, which are passed into the training job
hyperparameters = { 'model-name': <huggingface_base_model_name>, 'epochs': 10, 'train-batch-size': 32, 'eval-batch-size': 64, 'num-labels': len(<list_of_label_names>), 'class-weight': ' '.join([str(c) for c in <list_of_class_weights>]), 'metric-for-best-model': 'ap_score_weighted', 'save-total-limit': 1,
} # create the Estimator
huggingface_estimator = HuggingFace( entry_point='train.py', source_dir=<source_dir_path>, instance_type=<train_instance_type>, instance_count=1, role=role, transformers_version='4.6.1', pytorch_version='1.7.1', py_version='py36', hyperparameters=hyperparameters, metric_definitions=[ {'Name': 'validation:accuracy', 'Regex': 'eval_accuracy = (.*?);'}, {'Name': 'validation:f1-micro', 'Regex': 'eval_f1_score_micro = (.*?);'}, {'Name': 'validation:f1-macro', 'Regex': 'eval_f1_score_macro = (.*?);'}, {'Name': 'validation:f1-weighted', 'Regex': 'eval_f1_score_weighted = (.*?);'}, {'Name': 'validation:ap-micro', 'Regex': 'eval_ap_score_micro = (.*?);'}, {'Name': 'validation:ap-macro', 'Regex': 'eval_ap_score_macro = (.*?);'}, {'Name': 'validation:ap-weighted', 'Regex': 'eval_ap_score_weighted = (.*?);'}, {'Name': 'validation:auc-micro', 'Regex': 'eval_auc_score_micro = (.*?);'}, {'Name': 'validation:auc-macro', 'Regex': 'eval_auc_score_macro = (.*?);'}, {'Name': 'validation:auc-weighted', 'Regex': 'eval_auc_score_weighted = (.*?);'} ]
) huggingface_estimator.fit( { 'train': 's3://<bucket_name>/<prefix_name>/train', 'valid': 's3://<bucket_name>/<prefix_name>/valid', 'test': 's3://<bucket_name>/<prefix_name>/test'
)
마지막으로 다음 Python 코드 조각은 JSON 요청에 대한 실시간 텍스트 분류를 위해 라이브 SageMaker 엔드포인트를 통해 RoBERTox를 제공하는 프로세스를 보여줍니다.
from sagemaker.huggingface import HuggingFaceModel
from sagemaker import get_execution_role
from sagemaker.predictor import Predictor
from sagemaker.serializers import JSONSerializer
from sagemaker.deserializers import JSONDeserializer class Classifier(Predictor): def __init__(self, endpoint_name, sagemaker_session): super().__init__(endpoint_name, sagemaker_session, serializer=JSONSerializer(), deserializer=JSONDeserializer()) hf_model = HuggingFaceModel( role=get_execution_role(), model_data=<s3_model_and_tokenizer.tar.gz>, entry_point="inference.py", transformers_version="4.6.1", pytorch_version="1.7.1", py_version="py36", predictor_cls=Classifier
) predictor = hf_model.deploy(instance_type=<deploy_instance_type>, initial_instance_count=1)
모델 성능 평가: Jigsaw 의도하지 않은 편향 데이터 세트
다음 표에는 Jigsaw Unintented Bias in Toxicity Detection Kaggle 대회의 데이터에 대해 훈련 및 평가된 모델에 대한 성능 메트릭이 포함되어 있습니다. 우리는 서로 다르지만 상호 관련된 세 가지 작업에 대해 모델을 훈련했습니다.
- 바이너리 케이스 – 모델은 전체 훈련 데이터 세트에서 훈련되어 예측
toxicity
라벨만
- 세밀한 케이스 – 훈련 데이터의 하위 집합
toxicity>=0.5
다른 독성 하위 유형 레이블을 예측하는 데 사용되었습니다(obscene
, threat
, insult
, identity_attack
, sexual_explicit
)
- 멀티태스킹 케이스 – 전체 교육 데이터 세트를 사용하여 XNUMX개의 모든 레이블을 동시에 예측했습니다.
우리는 레이블이 텍스트에 적합하다고 생각한 주석가의 비율에 해당하는 Jigsaw 제공 분수 레이블과 네트워크의 클래스 가중치와 결합된 이진 레이블을 사용하여 이 세 가지 작업 각각에 대해 RNN 및 RoBERTa 모델을 훈련했습니다. 손실 함수. 이진 레이블링 체계에서 비율은 사용 가능한 각 레이블에 대해 0.5로 임계값이 지정되었으며(label>=1인 경우 0.5, 그렇지 않은 경우 0) 모델 손실 함수는 훈련 데이터 세트의 각 이진 레이블의 상대적 비율을 기반으로 가중치가 부여되었습니다. 모든 경우에 우리는 분수 레이블을 직접 사용하는 것이 최상의 성능을 낸다는 것을 발견했으며, 이는 주석자 간의 일치 정도에 내재된 정보의 부가가치를 나타냅니다.
각 분류 임계값에서 달성된 정밀도 값의 가중 평균을 계산하여 정밀도-재현율 곡선의 요약을 제공하는 평균 정밀도(AP)와 수신기 작동 특성 곡선(AUC) 아래 영역의 두 가지 모델 메트릭을 표시합니다. , 참 양성률 및 거짓 양성률과 관련하여 분류 임계값 전반에 걸쳐 모델 성능을 집계합니다. 테스트 세트의 주어진 텍스트 인스턴스에 대한 실제 클래스는 실제 비율이 0.5보다 크거나 같은지 여부에 해당합니다(label>=1이면 0.5, 그렇지 않으면 0).
. |
서브워드 임베딩 + RNN |
로베르타 |
. |
분수 레이블 |
바이너리 레이블 + 클래스 가중치 |
분수 레이블 |
바이너리 레이블 + 클래스 가중치 |
이진 |
AP=0.746, AUC=0.966 |
AP=0.730, AUC=0.963 |
AP=0.758, AUC=0.966 |
AP=0.747, AUC=0.963 |
세밀한 |
AP=0.906, AUC=0.909 |
AP=0.850, AUC=0.851 |
AP=0.913, AUC=0.913 |
AP=0.911, AUC=0.912 |
멀티태스킹 |
AP=0.721, AUC=0.972 |
AP=0.535, AUC=0.907 |
AP=0.740, AUC=0.972 |
AP=0.711, AUC=0.961 |
결론
이 게시물에서는 AWS ML 서비스를 사용하여 온라인 대화를 위한 두 가지 텍스트 분류 접근 방식을 제시했습니다. 온라인 커뮤니케이션 플랫폼 전반에 걸쳐 이러한 솔루션을 일반화할 수 있으며 게임과 같은 산업은 특히 유해 콘텐츠를 감지하는 향상된 기능의 이점을 누릴 수 있습니다. 향후 게시물에서 AWS 계정에 모델을 원활하게 배포하기 위한 종단 간 아키텍처에 대해 더 자세히 논의할 계획입니다.
제품 및 프로세스에서 ML 사용을 가속화하는 데 도움이 필요하면 Amazon ML 솔루션 랩.
저자에 관하여
라이언 브랜드 Amazon Machine Learning Solutions Lab의 데이터 과학자입니다. 그는 기계 학습을 의료 및 생명 과학 분야의 문제에 적용한 경험이 있으며 여가 시간에는 역사와 공상 과학을 읽는 것을 즐깁니다.
수라브 바베시 Amazon ML Solutions Lab의 데이터 과학자입니다. 그는 다양한 산업 분야의 AWS 고객을 위한 AI/ML 솔루션을 개발하고 있습니다. 그의 전문 분야는 자연어 처리(NLP)이며 딥 러닝에 열정적입니다. 그는 일 외에는 책 읽기와 여행을 즐깁니다.
저우 류통 Amazon ML Solutions Lab의 응용 과학자입니다. 그는 다양한 산업 분야의 AWS 고객을 위한 맞춤형 AI/ML 솔루션을 구축합니다. 그는 자연어 처리(NLP)를 전문으로 하며 다중 모드 딥 러닝에 열정적입니다. 그는 서정적인 테너이며 직장 밖에서 오페라를 부르는 것을 즐깁니다.
시아 골라미 Amazon ML Solutions Lab의 선임 데이터 과학자로 다양한 산업 분야의 고객을 위한 AI/ML 솔루션을 구축하고 있습니다. 그는 자연어 처리(NLP)와 딥 러닝에 열정적입니다. 일 외에는 자연 속에서 시간을 보내고 테니스를 치는 것을 즐깁니다.
다니엘 호로비츠 응용 AI 과학 관리자입니다. 그는 Amazon ML Solutions Lab의 과학자 팀을 이끌고 ML을 통해 고객 문제를 해결하고 클라우드 채택을 촉진하기 위해 노력하고 있습니다.