

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# BlazingText 알고리즘
<a name="blazingtext"></a>

Amazon SageMaker AI BlazingText 알고리즘은 Word2Vec 및 텍스트 분류 알고리즘을 고도로 최적화해 구현합니다. Word2vec 알고리즘은 감정 분석, 명명된 엔터티 인식, 기계 번역 등 여러 가지 다운스트림 자연 언어 처리(NLP) 작업에 유용합니다. 텍스트 분류는 웹 검색, 정보 검색, 순위 지정 및 문서 분류를 수행하는 애플리케이션에 중요한 작업입니다.

Word2vec 알고리즘은 고품질 분산 벡터로 단어를 매핑합니다. 단어의 결과 벡터 표현은 단어 임베딩이라고 합니다.** 의미적으로 유사한 단어는 가까이 있는 벡터에 해당합니다. 이러한 방식으로 단어 임베딩은 단어 간 의미 관계를 파악합니다.

많은 자연 언어 처리(NLP) 애플리케이션이 다량의 문서 모음을 훈련해 단어 임베딩을 배웁니다. 사전 훈련된 벡터 표현은 이후에 보다 제한된 양의 데이터로 훈련된 다른 모델의 일반화 가능성을 개선하는 의미 및 단어 분포에 대한 정보를 제공합니다. 대부분의 Word2vec 알고리즘 구현은 멀티 코어 CPU 아키텍처에 대해 최적화되어 있습니다. 이로 인해 크기가 큰 데이터 세트로 크기 조정하기 어렵습니다.

BlazingText 알고리즘을 사용하면 대규모 데이터 세트로 쉽게 확장할 수 있습니다. Word2vec과 유사하게 Skip-gram 및 CBOW(Continuous Bag-Of-Words) 훈련 아키텍처를 제공합니다. BlazingText의 지도 멀티 클래스, 멀티 레이블 텍스트 분류 알고리즘 구현은 사용자 지정 [CUDA ](https://docs.nvidia.com/cuda/index.html) 커널과 함께 GPU 액셀러레이션을 사용하도록 fastText 텍스트 분류자를 확장합니다. 멀티 코어 CPU 또는 GPU를 사용하여 몇 분 내에 10억 개 이상의 단어를 모델에게 훈련시킬 수 있습니다. 그러면 최신 딥 러닝 텍스트 분류 알고리즘과 동등한 성능을 얻을 수 있습니다.

BlazingText 알고리즘은 병렬화할 수 없습니다. 훈련과 관련된 파라미터에 대한 추가 정보는 [SageMaker 기본 제공 알고리즘의 도커 레지스트리 경로](https://docs.aws.amazon.com/en_us/sagemaker/latest/dg/sagemaker-algo-docker-registry-paths.html)를 참고하세요.

 SageMaker AI BlazingText 알고리즘은 다음과 같은 이점을 제공합니다.
+ 멀티 코어 CPU 또는 GPU의 fastText 텍스트 분류자 및 고도로 최적화된 CUDA 커널을 사용하는 GPU의 Word2Vec 훈련을 가속화합니다. 추가 정보는 [BlazingText: Scaling and Accelerating Word2Vec using Multiple GPUs](https://dl.acm.org/citation.cfm?doid=3146347.3146354)를 참고하세요.
+ character n-gram에 대한 벡터 표현을 학습하여 [형태소(subword) 정보로 풍부해진 단어 벡터](https://arxiv.org/abs/1607.04606). 이러한 접근 방식은 BlazingText가 벡터를 character n-gram(형태소) 벡터의 합계로 표시하도록 해 미등록(OOV) 단어에 대한 의미 있는 벡터를 생성하도록 합니다.
+ 여러 CPU 노드 간에 더욱 빠른 훈련 및 분산 컴퓨팅을 허용하는 Word2Vec 알고리즘을 위한 `batch_skipgram` `mode`. `batch_skipgram` `mode`에서는 Negative Sample Sharing 전략으로 미니 배치를 훈련하여 레벨 1 BLAS 작업을 레벨 3 BLAS 작업으로 변환합니다. 이렇게 하면 최신 아키텍처의 곱셈-누산 지침을 효율적을 활용할 수 있습니다. 추가 정보는 [Parallelizing Word2Vec in Shared and Distributed Memory](https://arxiv.org/pdf/1604.04661.pdf)를 참고하세요.

요약을 위해 BlazingText에서는 여러 유형의 인스턴스에서 다음 모드를 지원합니다.


| Modes |  Word2Vec (비지도 학습)  |  텍스트 분류 (지도 학습)  | 
| --- | --- | --- | 
|  단일 CPU 인스턴스  |  `cbow` `Skip-gram` `Batch Skip-gram`  |  `supervised`  | 
|  단일 GPU 인스턴스(GPU 1개 이상)  |  `cbow` `Skip-gram`  |  GPU 하나를 사용하는 `supervised`  | 
|  다중 CPU 인스턴스  | Batch Skip-gram  | 없음 | 

BlazingText의 수학적 계산에 대한 추가 정보는 [BlazingText: Scaling and Accelerating Word2Vec using Multiple GPUs](https://dl.acm.org/citation.cfm?doid=3146347.3146354)를 참고하세요.

**Topics**
+ [BlazingText 알고리즘을 위한 입력/출력 인터페이스](#bt-inputoutput)
+ [BlazingText 알고리즘을 위한 EC2 인스턴스 권장 사항](#blazingtext-instances)
+ [BlazingText 샘플 노트북](#blazingtext-sample-notebooks)
+ [BlazingText 하이퍼파라미터](blazingtext_hyperparameters.md)
+ [BlazingText 모델 튜닝](blazingtext-tuning.md)

## BlazingText 알고리즘을 위한 입력/출력 인터페이스
<a name="bt-inputoutput"></a>

BlazingText 알고리즘에는 공백으로 구분된 토큰이 포함된 사전 처리 텍스트 파일이 하나 필요합니다. 이 파일의 각 행에는 문장이 하나 포함되어 있어야 합니다. 여러 텍스트 파일에 대해 훈련해야 하는 경우 해당 텍스트 파일을 하나의 파일로 연결한 다음 각 채널에서 파일을 업로드합니다.

### 훈련 및 검증 데이터 형식
<a name="blazingtext-data-formats"></a>

#### Word2Vec 알고리즘에 대한 훈련 및 검증 데이터 형식
<a name="blazingtext-data-formats-word2vec"></a>

Word2Vec 훈련을 위해 *train* 채널에서 파일을 업로드합니다. 다른 채널은 지원되지 않습니다. 이 파일에는 행마다 훈련 문장이 포함되어 있어야 합니다.

#### 텍스트 분류 알고리즘에 대한 훈련 및 검증 데이터 형식
<a name="blazingtext-data-formats-text-class"></a>

지도 모드의 경우에는 파일 모드 또는 증강 매니페스트 텍스트 형식을 사용하여 훈련할 수 있습니다.

##### 파일 모드를 사용하여 훈련
<a name="blazingtext-data-formats-text-class-file-mode"></a>

`supervised` 모드의 경우 훈련/검증 파일에는 레이블과 함께 행마다 훈련 문장이 하나씩 포함되어 있어야 합니다. 레이블은 문자열 *\$1\$1label\$1\$1*로 시작하는 단어입니다. 다음은 훈련/검증 파일의 예입니다.

```
__label__4  linux ready for prime time , intel says , despite all the linux hype , the open-source movement has yet to make a huge splash in the desktop market . that may be about to change , thanks to chipmaking giant intel corp .

__label__2  bowled by the slower one again , kolkata , november 14 the past caught up with sourav ganguly as the indian skippers return to international cricket was short lived .
```

**참고**  
문장 내 레이블의 순서는 중요하지 않습니다.

train 채널에서 훈련 파일을 업로드하고, validation 채널에서 검증 파일을 선택적으로 업로드합니다.

##### 증강 매니페스트 텍스트 형식으로 훈련
<a name="blazingtext-data-formats-text-class-augmented-manifest"></a>

또한 CPU 인스턴스의 지도 모드에서는 RecordIO 파일을 생성할 필요 없이 파이프 모드에서 훈련하도록 하는 증강 매니페스트 형식도 지원합니다. 이 형식을 사용하는 동안 문장 목록과 문장의 해당 레이블을 포함한 S3 매니페스트 파일을 생성해야 합니다. 매니페스트 파일 형식은 각 행이 샘플 하나를 나타내는 [JSON Lines](http://jsonlines.org/) 형식이어야 합니다. 문장은 `source` 태그를 사용하여 지정되고, 레이블은 `label` 태그를 사용하여 지정할 수 있습니다. `source` 및 `label` 태그는 둘 모두 요청으로 지정된 `AttributeNames` 파라미터 값 아래에서 제공되어야 합니다.

```
{"source":"linux ready for prime time , intel says , despite all the linux hype", "label":1}
{"source":"bowled by the slower one again , kolkata , november 14 the past caught up with sourav ganguly", "label":2}
```

다중 레이블 훈련도 레이블의 JSON 배열을 지정하여 지원됩니다.

```
{"source":"linux ready for prime time , intel says , despite all the linux hype", "label": [1, 3]}
{"source":"bowled by the slower one again , kolkata , november 14 the past caught up with sourav ganguly", "label": [2, 4, 5]}
```

증강 매니페스트 파일에 대한 추가 정보는 [훈련 작업용 증강 매니페스트 파일](augmented-manifest.md) 섹션을 참조하세요.

### 모델 아티팩트 및 추론
<a name="blazingtext-artifacts-inference"></a>

#### Word2Vec 알고리즘의 모델 아티팩트
<a name="blazingtext--artifacts-inference-word2vec"></a>

Word2Vec 훈련의 경우 모델 아티팩트는 단어-벡터 매핑이 포함된 vectors.txt와 BlazingText에서 호스팅, 추론 또는 둘 다에 사용하는 바이너리인 vectors.bin으로 구성되어 있습니다. vectors.txt는 Gensim 및 Spacy 등과 같은 기타 도구와 호환 가능한 형식으로 벡터를 저장합니다.****** 예를 들어, Gensim 사용자는 다음 명령을 실행하여 vectors.txt 파일을 로드할 수 있습니다.

```
from gensim.models import KeyedVectors
word_vectors = KeyedVectors.load_word2vec_format('vectors.txt', binary=False)
word_vectors.most_similar(positive=['woman', 'king'], negative=['man'])
word_vectors.doesnt_match("breakfast cereal dinner lunch".split())
```

평가 파라미터가 `True`로 설정된 경우에는 추가 파일인 eval.json이 생성됩니다.** 이 파일에는 WS-353 데이터 세트에 대한 유사성 검증 결과(Spearman 순위 상관 계수)가 포함되어 있습니다. 훈련 코퍼스에 없는 WS-353 데이터 세트의 단어 수가 보고됩니다.

추론 요청의 경우 이 모델은 문자열 목록이 포함된 JSON 파일을 수락하고 벡터 목록을 반환합니다. 단어가 어휘에 등록되지 않은 경우 추론에서는 0으로 구성된 벡터를 반환합니다. 훈련 중 형태소(subword)s가 `True`로 설정되면 모델이 미등록(OOV) 단어에 대한 벡터를 생성할 수 있습니다.

##### 샘플 JSON 요청
<a name="word2vec-json-request"></a>

Mime-type:` application/json`

```
{
"instances": ["word1", "word2", "word3"]
}
```

#### 텍스트 분류 알고리즘의 모델 아티팩트
<a name="blazingtext-artifacts-inference-text-class"></a>

지도 출력을 사용한 훈련에서는 BlazingText 호스팅에서 사용할 수 있는 model.bin 파일이 생성됩니다.** 추론을 위해 BlazingText 모델은 문장 목록이 포함된 JSON 파일을 수락하고 예상되는 해당 레이블 및 확률 점수 목록을 반환합니다. 각 문장은 공백으로 구분된 토큰, 단어 또는 둘 다가 포함된 문자열이어야 합니다.

##### 샘플 JSON 요청
<a name="text-class-json-request"></a>

Mime-type:` application/json`

```
{
 "instances": ["the movie was excellent", "i did not like the plot ."]
}
```

기본적으로 서버는 확률이 가장 높은 예측을 하나만 반환합니다. 상위 k 예측을 가져오기 위해 구성에서 k를 다음과 같이 설정할 수 있습니다.****

```
{
 "instances": ["the movie was excellent", "i did not like the plot ."],
 "configuration": {"k": 2}
}
```

BlazingText의 경우 ` content-type` 및 `accept` 파라미터는 동일해야 합니다. 배치 변환을 위해 이러한 파라미터는 둘 다 `application/jsonlines`여야 합니다. 다른 경우 `Accept` 필드가 무시됩니다. 입력 형식은 다음과 같습니다.

```
content-type: application/jsonlines

{"source": "source_0"}
{"source": "source_1"}

if you need to pass the value of k for top-k, then you can do it in the following way:

{"source": "source_0", "k": 2}
{"source": "source_1", "k": 3}
```

출력 형식은 다음과 같습니다.

```
accept: application/jsonlines


{"prob": [prob_1], "label": ["__label__1"]}
{"prob": [prob_1], "label": ["__label__1"]}

If you have passed the value of k to be more than 1, then response will be in this format:

{"prob": [prob_1, prob_2], "label": ["__label__1", "__label__2"]}
{"prob": [prob_1, prob_2], "label": ["__label__1", "__label__2"]}
```

지도(텍스트 분류) 및 비지도(Word2Vec) 모드의 경우 BlazingText에서 생성하는 바이너리(\$1.bin)는 fastText에서 교차 사용이 가능하고, 그 반대의 경우에도 마찬가지입니다.** BlazingText와 fastText에서 생성한 바이너리를 사용할 수 있습니다. 마찬가지로, BlazingText를 사용하여 fastText에서 생성한 모델 바이너리를 호스팅할 수 있습니다.

다음은 BlazingText로 생성된 모델을 FastText와 함께 사용하는 방법의 예제입니다.

```
#Download the model artifact from S3
aws s3 cp s3://<YOUR_S3_BUCKET>/<PREFIX>/model.tar.gz model.tar.gz

#Unzip the model archive
tar -xzf model.tar.gz

#Use the model archive with fastText
fasttext predict ./model.bin test.txt
```

그러나 바이너리는 CPU 및 단일 GPU에 대한 훈련인 경우에만 지원됩니다. 다중 GPU에 대한 훈련은 바이너리를 생성하지 않습니다.

## BlazingText 알고리즘을 위한 EC2 인스턴스 권장 사항
<a name="blazingtext-instances"></a>

`cbow` 및 `skipgram` 모드의 경우 BlazingText는 단일 CPU 및 단일 GPU 인스턴스를 지원합니다. 이러한 두 모드에서는 `subwords` 임베딩 학습을 지원합니다. 정확도의 저하 없이 속도를 최대한 높이려면 ml.p3.2xlarge 인스턴스를 사용하는 것이 좋습니다.

`batch_skipgram` 모드의 경우 BlazingText는 단일 또는 다중 CPU 인스턴스를 지원합니다. 여러 인스턴스에서 훈련 시 [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTrainingJob.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTrainingJob.html)으로 전달하는 [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_S3DataSource.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_S3DataSource.html) 객체의 `S3DataDistributionType` 필드 값을 `FullyReplicated`로 설정합니다. BlazingText는 머신 간 데이터 분산을 처리합니다.

지도 텍스트 분류 모드의 경우 훈련 데이터 세트가 2GB 미만인 경우 C5 인스턴스가 권장됩니다. 대규모 데이터 세트의 경우 단일 GPU가 있는 인스턴스를 사용하세요. BlazingText는 훈련 및 추론을 위해 P2, P3, G4dn 및 G5 인스턴스를 지원합니다.

## BlazingText 샘플 노트북
<a name="blazingtext-sample-notebooks"></a>

SageMaker AI BlazingText 알고리즘을 훈련하고 배포하여 워드 벡터를 생성하는 샘플 노트북은 [Learning Word2Vec Word Representations using BlazingText](https://sagemaker-examples.readthedocs.io/en/latest/introduction_to_amazon_algorithms/blazingtext_word2vec_text8/blazingtext_word2vec_text8.html)를 참조하세요. SageMaker AI에서 예시를 실행하는 데 사용할 수 있는 Jupyter Notebook 인스턴스를 만들어 해당 인스턴스에 액세스에 관한 설명은 [Amazon SageMaker 노트북 인스턴스](nbi.md) 섹션을 참조하세요. 노트북 인스턴스를 만들어 연 다음, **SageMaker AI 예시** 탭을 선택하면 모든 SageMaker AI 예시 목록이 나타납니다. Blazing Text를 사용하는 주제 모델링 예제 노트북은 **Introduction to Amazon algorithms(Amazon 알고리즘 소개)** 섹션에 있습니다. 노트북을 열려면 노트북의 **사용** 탭을 선택하고 **복사본 생성**을 선택합니다.