BLOG
Amazon SageMaker BlazingText 알고리즘에 대한 몇 가지 새로운 기능이 추가되었습니다. 감정 분석, 명명 개체 인식 및 기계 번역과 같은 많은 다운스트림 NLP (자연어 처리) 작업은 텍스트 데이터를 실제로 가치있는 벡터로 변환해야 합니다. 고객은 수백 기가 바이트의 텍스트 문서에서 이러한 벡터를 학습하기 위해 Word2Vec 알고리즘의 BlazingText의 고도로 최적화된 구현을 사용하고 있습니다. 결과로 나오는 벡터는 단어를 읽을 때 인식하는 풍부한 의미와 문맥을 포함합니다. BlazingText는 fastText 및 Gensim과 같은 다른 대중적인 대안보다 20 배 이상 빠르므로 고객은 GPU 및 다중 CPU 시스템을 사용하여 수십억 단어를 포함하는 자체 데이터셋에서 이러한 벡터를 훈련할 수 있으므로 훈련 시간을 며칠에서 단 몇 분으로 단축 할 수 있습니다.
이전에 BlazingText로 작업하지 않았다면 이 알고리즘에 대한 문서 또는 이전 블로그 게시물로 시작하는 것이 좋습니다.
BlazingText에 다음과 같은 새롭고 향상된 기능을 추가했습니다.
- 서브워드 정보를 사용하여 단어 벡터를 풍부하게하는 문자 n-gram에 대한 벡터 표현을 학습합니다. 저희가 훈련 데이터셋에서 추론 할 때 보는 모든 단어를 갖는 것은 불가능합니다. 따라서 이 단어에 대한 의미론적 표현을 생성하는 것은 이 단어들을 모두 무시하거나 무작위 벡터를 사용하는 것보다 훨씬 더 유용합니다. BlazingText는 벡터를 문자 n-gram (서브워드) 벡터의 합으로 표시함으로써 어휘 이외의 음성 (OOV) 단어에 의미 있는 벡터를 생성할 수 있습니다.
- 고속 멀티 클래스 및 멀티 라벨 텍스트 분류를 수행할 수 있는 능력입니다. 텍스트 분류의 목표는 텍스트 문서를 스팸 탐지, 감정 분석 또는 사용자 검토 범주화와 같이 하나 이상의 정의된 범주로 자동 분류하는 것입니다. BlazingText는 fastText 텍스트 분류자를 확장하여 최적화된 CUDA 커널을 사용하여 GPU 가속을 활용합니다. 딥 러닝 텍스트 분류 모델 (Conneau et al., 2016, Zhang and LeCun (2015))은 훈련하는 데 몇 시간 또는 며칠이 걸릴 수 있지만 BlazingText는 2 분 만에 훈련을 수행 할 수 있으므로 비슷한 정확도를 달성하며 속도도 100 배 이상 빠릅니다.
- 실시간 추론을 위해 fastText에서 제공하는 BlazingText 또는 사전 훈련된 모델을 사용하여 모델을 호스팅 하십시오. 이 모델은 감독된 텍스트 분류자나 그렇지 않은 Word2Vec 모델 중 하나일 수 있습니다. 후자는 서브워드 삽입으로 훈련을 받았을 때 실시간으로 OOV 단어에 대한 표현을 계산하는 데 사용할 수 있습니다. NLP 모델의 훈련 데이터셋이 가능한 모든 단어를 포함할 수는 없으므로, 이는 특히 실시간 추론에 유용할 수 있습니다.(예: Alexa의 의도적인 분류)
보다 광범위한 차원에서 BlazingText는 텍스트 분류 (감독 모드) 및 Word2Vec 벡터 학습 (Skip-gram, CBOW 및 batch_skipgram 모드)을 지원합니다. Skip-gram과 CBOW는 모두 서브워드 삽입에 대한 학습을 지원합니다.
BlazingText의 다양한 훈련 모드가 서로 다른 하드웨어 구성을 지원하기 때문에 다음 표에서 EC2 인스턴스 호환성을 요약하였습니다.
Word2Vec (unsupervised learning) | Text Classification (supervised learning) | |||
Modes | Skip-gram (supports subwords) | CBOW (supports subwords) | batch_skipgram | supervised |
Single CPU instance | ✔ | ✔ | ✔ | ✔ |
Single GPU instance (with 1 or more GPUs) | ✔ | ✔ | ✔* | |
Multiple CPU instances | ✔ |
*는 단지 하나의 GPU 만 레버리지합니다.
자, 이제는 각각의 기능에 대해 더 구체적으로 이야기해봅시다.
서브워드 정보로 단어 벡터 강화
각 단어에 별개의 벡터를 할당하여 단어 표현을 생성하는 데에는 몇 가지 한계가 있습니다. 그것은 어휘 이외의 음성 (OOV) 단어, 즉 훈련 도중 보지 못한 단어를 처리 할 수 없습니다. 일반적으로 이러한 단어는 알 수 없는 (UNK) 토큰으로 설정되며 같은 벡터가 할당됩니다. 이는 OOV 단어의 수가 많으면 비효율적인 선택입니다. 더욱이 이러한 표현은 단어의 형태를 무시하므로 독일어, 터키어 및 핀란드어와 같이 형태가 풍부한 언어의 경우 표현력을 제한합니다.
Bojanowski et al 등은 문자 n-gram에 대한 표현을 배우고, 문자 n-gram 벡터의 합으로 단어 벡터를 표현할 것을 제안했습니다. 이들은 서브워드 정보를 고려한 Skip-gram 및 CBOW 모델의 확장을 도입합니다. 예를 들어, Skip-gram 모델의 중심 단어 w는 문자 n-gram의 백으로 표현됩니다. 단어의 시작과 끝 부분에 특수 경계 기호 <및>를 추가하여 알고리즘이 다른 문자 시퀀스의 접두사 및 접미어를 구별할 수 있도록 합니다. 단어 w 자체는 n-gram 집합에 포함되어 각 단어에 대한 표현을 학습합니다.(문자 n-gram 이외에)
“fast”라는 단어를 예로 들어 봅시다. 최소 문자 n-gram 길이 (알고리즘의 min_char 매개 변수)가 3이고 최대 문자 n-gram 길이 (알고리즘의 max_char 매개 변수)가 6 인 경우 “fast”는 다음 문자 n-gram의 벡터 합계로 표시됩니다.
‘fast’, ‘<fa’, ‘<fas’, ‘<fast’, ‘<fast>’, ‘fas’, ‘fast>’, ‘ast’, ‘ast>’, ‘st>’
fastText는 멀티 코어 CPU에서 이 방법을 구현하므로 확장성이 제한됩니다. BlazingText에서 맞춤 CUDA 커널을 사용하여 GPU 가속을 활용하는 방법을 확장했습니다.
사용법
서브워드 포함 학습을 활성화하고 조정하기 위해 세 가지 새로운 하이퍼 매개 변수가 추가되었습니다.
[json]
{
“mode”: “skipgram” # or “cbow”
# Other BlazingText hyper-parameters
“subwords”: “true”, # Enables learning of subword embeddings
“min_char”: “3”, # min length of char ngrams
“max_char”: “6”, # max length of char ngrams
}
서브워드 포함 학습은 subwords 매개 변수를 “true”로 설정하여 활성화 할 수 있습니다. 기본적으로 min_char 및 max_char은 Bojanowski et al에 의해 제안된대로 각각 3과 6으로 설정됩니다.
현재 이 기능은 단일 CPU 인스턴스의 Skipgram 및 CBOW 모드 또는 1 GPU (p3.2xlarge 또는 p2.xlarge)와 함께 GPU 인스턴스에서 지원됩니다. 속도, 정확성 및 비용 측면에서 최상의 성능을 얻으려면 p3.2xlarge 인스턴스를 사용하는 것이 좋습니다.
성능 벤치 마크
p3.2xlarge 및 c4.2xlarge 인스턴스에서 각각 동일한 매개 변수를 사용하여 BlazingText 및 fastText를 모두 훈련합니다. 우리는 Stanford rare word 데이터셋 (RW) 과 WS-353 데이터셋을 사용하여 단어 유사성 / 관련성에 대한 학습된 표현의 품질을 평가합니다. 단어 유사성 과제는 주어진 단어와 유사한 단어를 검색하는 것입니다. 이 데이터셋에는 사람이 지정한 유사성 판단과 함께 단어 페어가 들어 있습니다. 학습된 단어 표현은 코사인(cosine) 유사성에 따라 페어의 순위를 지정하고 Spearmans 순위 상관 계수를 사람의 판단으로 측정하여 평가됩니다.
10 억 단어 벤치 마크 데이터셋에서 훈련된 삽입의 경우 BlazingText는 동일한 비용과 동일한 수준의 정확도로 스킵-그램 모드에 대해 fastText보다 17 배 빠릅니다.
또한 CBOW의 경우 BlazingText가 FastText의 1.5 배의 비용으로 14.5 배 빠르고 정확도가 10 % 이상 높습니다. BlazingText의 경우 Amazon SageMaker에서 비용을 계산하지만 fastText의 경우 작업 기간 동안 Amazon EC2 인스턴스를 실행하는 비용을 계산합니다.
자신의 데이터셋에 서브워드 포함 학습을 사용하여 Word2Vec 모델을 학습하려면 이 notebook을 살펴보십시오.
텍스트 분류 가속화
텍스트 분류는 웹 검색, 정보 검색, 순위 지정 및 문서 분류와 같은 많은 응용 프로그램에서 자연어 처리에서 중요한 작업입니다. 텍스트 분류의 목표는 텍스트 문서를 스팸 탐지, 감정 분석 또는 사용자 검토 범주화와 같이 하나 이상의 정의된 범주로 자동 분류하는 것입니다. 최근에, 신경망을 기반으로 한 모델들이 점점 대중적으로 보급되고 있습니다(Johnson et al., 2017, Conneau et al., 2016). 이 모델은 실제 성능이 매우 우수하지만 훈련이나 테스트 시간 모두에서 상대적으로 느린 경향이 있어 매우 큰 데이터셋에서의 사용이 제한됩니다.
확장성과 정확성 사이의 올바른 균형을 유지하기 위해 BlazingText는 첨단 기술과 동등한 성능을 달성하면서 10 분 이내에 10 억 단어 이상을 훈련할 수 있는 fastText 분류 모델을 구현합니다. Amazon SageMaker의 BlazingText는 조기 정지 및 모델 튜닝과 같은 다른 부속 서비스와 함께 CUDA 커널을 사용하여 GPU 가속을 사용함으로써 이 모델을 확장합니다. 사용자가 올바른 하이퍼 매개 변수 설정에 대해 걱정할 필요가 없습니다.
다음 그림은 간단하면서도 강력한 텍스트 분류 모델을 보여줍니다.
문서에서 단어의 벡터 표현을 얻기 위해 삽입 매트릭스에서 검색이 수행됩니다. 그런 다음 단어 표현을 텍스트 표현으로 평균화하여 선형 분류자로 보냅니다. 텍스트 표현은 잠재적으로 재사용할 수 있는 숨겨진 변수입니다.
bag-of-words는 단어 순서에 절대 변하지 않으므로 이 모델은 bag-of-words n-gram을 추가 기능으로 사용하여 로컬 단어 순서에 대한 일부 정보를 캡처합니다. 예를 들어 앞의 그림에서 2-word n-gram을 훈련에 사용하면 w1w2, w2w3, …wn-1wn은 학습되어 개별 단어 벡터와 함께 숨겨진 레이어를 계산하는 데 사용되는 것을 벡터가 표시합니다. 이것은 해싱 트릭(hashing trick)을 사용하여 더 많은 메모리 사용을 초래합니다. n-gram이라는 단어에 대한 삽입 매트릭스의 크기는 buckets x vector_dim으로 고정되어 있습니다. 버킷의 수는 기본적으로 2 백만으로 설정됩니다. 해시 함수 (hash function)는 n-gram이라는 단어를 벡터 검색을 위한 버킷 인덱스에 매핑하는 데 사용됩니다.
사용법
BlazingTex를 사용하여 텍스트 분류를 위해 다음 하이퍼 매개 변수를 정의할 수 있습니다
{
“mode”: “supervised”,{
“vector_dim”: “10”, # Although a default of 100 is used for word2vec,
# 10 is sufficient for text classification in most of the cases
“epochs”: “5”,
“early_stopping”: “true”,
“patience”: “4”, # Number of epochs to wait before early stopping if no progress on the validation set is observed
“min_epochs”: “5”
“learning_rate”: “0.05”,
“buckets” : “2000000”, # No. of hash buckets to use for word n-grams
“word_ngrams”: “2” # Number of word n-grams features to use.\
# This is an important parameter and can have
# a significant impact on accuracy
}
유효성 검사 정확도가 개선되지 않은 n 연속 에포치(epoch) 후에 훈련을 중지하기를 원한다면 조기 중지를 사용 가능하게 설정할 수 있습니다.(early_stopping 매개 변수를 true로 설정되어 있는 경우) 그 중 n은 patience(patience parameter)로 기본값인 4로 설정되어 있습니다.작업을 조기에 멈추려면, “유효성” 채널에서 유효성 데이터를 지정해야 합니다.
BlazingText 텍스트 분류 (“감독”모드)는 단일 CPU 인스턴스 또는 1 GPU (p3.2xlarge 또는 p2.xlarge)가 있는 단일 GPU 인스턴스에서 지원됩니다.
자세한 내용은 BlazingText 문서 및 텍스트 분류 notebook을 참조하십시오.
사전 훈련된 FastText 모델 호스팅
훈련된 모델은 실시간 또는 일괄 유추에 사용되기 전까지는 유용하지 않습니다. BlazingText를 사용하여 텍스트 분류 호스팅 및 Word2Vec 모델 훈련을 지원하는 것 외에도 BlazingText는 사전 훈련된 FastText 모델의 호스팅을 지원합니다. FastText 모델은 몇 줄의 코드로 번거롭지 않게 호스팅 할 수 있습니다. fastText 모델 파일 (.bin 또는 .vec)을 .tar.gz 형식으로 압축하고 Amazon S3에 업로드 한 후 다음 행을 실행해야 합니다.
import sagemaker as sage
import boto3
import json
region_name = boto3.Session().region_name
container = sage.amazon.amazon_estimator.get_image_uri(region_name, “blazingtext”, “latest”)
role = sage.get_execution_role()
sess = sage.Session()
model = sage.Model(model_data=model_location, # .tar.gz model S3 location
image=container, # BlazingText docker image
role=role,
sagemaker_session=sess)
model.deploy(initial_instance_count=1, instance_type=’ml.m4.xlarge’)
predictor = sage.RealTimePredictor(endpoint=model.endpoint_name,
sagemaker_session=sess,
serializer=json.dumps,
deserializer=sage.predictor.json_deserializer)
결론
Amazon SageMaker BlazingText 호스팅은 자동으로 텍스트 분류 또는 Word2Vec (서브워드 포함 또는 제외) 모델을 식별하고 요청 처리를 시작합니다. 예측자는 다음과 같은 방식으로 사용할 수 있습니다.
sentences = [“hi which language is this?”, “mon nom est Pierre”,
“Dem Jungen gab ich einen Ball.”, “Oi Como vai você”]
payload = {“instances” : sentences}
predictor.predict(payload)
만약 사전 훈련된 fastText 모델을 호스팅 하고싶다면 this notebook을 보십시오.
원문 URL: https://aws.amazon.com/ko/blogs/machine-learning/enhanced-text-classification-and-word-vectors-using-amazon-sagemaker-blazingtext/
** 메가존 TechBlog는 AWS BLOG 영문 게재글중에서 한국 사용자들에게 유용한 정보 및 콘텐츠를 우선적으로 번역하여 내부 엔지니어 검수를 받아서, 정기적으로 게재하고 있습니다. 추가로 번역및 게재를 희망하는 글에 대해서 관리자에게 메일 또는 SNS페이지에 댓글을 남겨주시면, 우선적으로 번역해서 전달해드리도록 하겠습니다.