本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
BlazingText 演算法
Amazon SageMaker AI BlazingText 演算法提供高度最佳化的 Word2vec 和文字分類演算法實作。Word2vec 演算法適用於許多下游自然語言處理 (NLP) 任務,例如情緒分析、具名實體辨識、機器翻譯等。文字分類對執行 web 搜尋、資訊擷取、排名和文件分類的應用程式來說,是一項非常重要的任務。
Word2vec 演算法會將文字映射到高品質的分散式向量。其產生的文字向量表示稱為文字內嵌。語意上相似的文字會對應到彼此較為靠近的向量。透過這種方式,文字內嵌便能擷取文字之間的語意關係。
許多自然語言處理 (NLP) 應用程式透過訓練大型文件集合來學習文字內嵌。這種預先訓練過的向量表示,可提供語意和文字分布的相關資訊,通常可以改善後續以更有限資料訓練的其他模型一般性。Word2vec 演算法的大多數實作並未針對多核心CPU架構進行最佳化。因此難以擴展至大型資料集。
使用 BlazingText 演算法,您可以輕鬆擴展到大型資料集。與 Word2vec 類似,它提供 Skip-gram 和連續 bag-of-words (CBOW) CUDA
BlazingText 演算法不可平行化。如需訓練相關參數的詳細資訊,請參閱 SageMaker 內建演算法的 Docker 登錄檔路徑。
SageMaker AI BlazingText 演算法提供下列功能:
-
GPUs 使用高度最佳化CUDA的核心加速多核心CPUs或 上的 fastText 文字分類器訓練,GPU以及 和 Word2Vec 的訓練。如需詳細資訊,請參閱BlazingText:使用多個 擴展和加速 Word2VecGPUs
。 -
透過學習字元 n-grams 的向量表示達到的 Enriched Word Vectors with Subword Information
。此方法 BlazingText 可讓 out-of-vocabulary(OOV) 字詞產生有意義的向量,方法是將向量表示為字元 n-gram (子字) 向量的總和。 -
batch_skipgram
mode
適用於 Word2Vec 演算法的 ,允許跨多個CPU節點更快速的訓練和分散式運算。會使用陰性範例共用策略進行batch_skipgram
mode
微型批次,將 Level-1 BLAS操作轉換為 Level-3 BLAS操作。這可有效地運用現代架構的乘加指令。如需詳細資訊,請參閱 Parallelizing Word2Vec in Shared and Distributed Memory。
總而言 BlazingText 之,不同類型的執行個體支援下列模式:
模式 |
Word2Vec (非監督式學習) |
文字分類 (監督式學習) |
---|---|---|
單一CPU執行個體 |
|
|
單一GPU執行個體 (具有 1 個或多個 GPUs) |
|
|
多個CPU執行個體 |
Batch Skip-gram |
無 |
如需背後數學的詳細資訊 BlazingText,請參閱BlazingText:使用多個 擴展和加速 Word2VecGPUs
主題
演算法的 BlazingText輸入/輸出界面
BlazingText 演算法預期具有空格分隔字符的單一預先處理文字檔案。檔案中的每一行都應包含一個句子。若您需要在多個文字檔案上進行訓練,請將他們串連成一個檔案,並在個別通道中上傳檔案。
訓練及驗證資料格式
Word2Vec 演算法的訓練及驗證資料格式
針對 Word2Vec 訓練,請在訓練通道下上傳檔案。不支援其他通道。檔案中的每一行都應包含一個訓練句子。
文字分類 (Text Classification) 演算法的訓練及驗證資料格式
針對監督式模式,您可以使用檔案模式或擴增資訊清單文字格式進行訓練。
使用檔案模式訓練
針對 supervised
模式,訓練/驗證檔案中的每一行應包含一個訓練句子及標籤。標籤是加上字串 __label__ 做為字首的文字。以下是訓練/驗證檔案的範例:
__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 .
注意
句子中標籤的順序不重要。
在訓練通道下上傳訓練檔案,然後選擇性地在驗證通道下上傳驗證檔案。
以擴增資訊清單文字格式進行訓練
CPU 執行個體的監督模式也支援擴增資訊清單格式,可讓您在管道模式下進行訓練,而不需要建立 RecordIO 檔案。使用此格式時,需要產生 S3 資訊清單檔案,其中包含句子清單及其對應的標籤。資訊清單檔案格式應該是JSON行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]}
如需擴增資訊清單檔案的詳細資訊,請參閱訓練任務的增強資訊清單檔案。
模型成品和推論
Word2Vec 演算法的模型成品
對於 Word2Vec 訓練,模型成品包含 vectors.txt,其中包含 words-to-vectors映射,以及 vectors.bin, 用於託管、推論或兩者 BlazingText 的二進位。 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的檔案,並傳回向量清單。若在詞彙中找不到文字,則推論會傳回零的向量。如果在訓練True
期間將子字設為 ,模型可以產生 (OOV) 字的 out-of-vocabulary向量。
範例JSON請求
Mime-type: application/json
{ "instances": ["word1", "word2", "word3"] }
文字分類演算法的模型成品
使用監督式輸出的訓練會建立 model.bin 檔案,可供 BlazingText 託管使用。對於推論,模型 BlazingText接受包含句子清單JSON的檔案,並傳回對應的預測標籤和機率分數清單。每個句子都預期是使用空白分隔權杖、文字或兩者的字串。
範例JSON請求
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) 模式, 產生的二進位檔 (*.bin) BlazingText 可以由 交叉使用 fastText ,反之亦然。您可以使用 BlazingText 產生的二進位檔fastText。同樣地,您也可以託管 fastText 使用 建立的模型二進位檔 BlazingText。
以下是如何使用 產生的模型 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 上訓練不會產生二進位檔。
EC2 演算法的 BlazingText執行個體建議
對於 cbow
和 skipgram
模式, BlazingText 支援單一CPU和單一GPU執行個體。這兩種模式都支援學習 subwords
內嵌。為了達到最高的速度,同時不犧牲準確度,我們建議您使用 ml.p3.2xlarge 執行個體。
對於 batch_skipgram
模式, BlazingText 支援一或多個CPU執行個體。在多個執行個體上訓練時,請設定您傳遞CreateTrainingJob
給 之S3DataSource
物件S3DataDistributionType
欄位的值FullyReplicated
。 BlazingText 會負責跨機器分發資料。
針對監督式文字分類模式,若訓練資料集小於 2 GB,則建議使用 C5 執行個體。對於較大的資料集,請使用具有單一 的執行個體GPU。 BlazingText 支援 P2, P3, G4dn 和 G5 執行個體進行訓練和推論。
BlazingText 範例筆記本
如需訓練和部署 SageMaker AI BlazingText 演算法以產生單字向量的範例筆記本,請參閱使用 學習 Word2Vec 單字表示 BlazingText