ช่วยปกป้อง Great Barrier Reef กับ TensorFlow บน Kaggle เข้าร่วมท้าทาย

การจัดประเภทข้อความด้วย TensorFlow Lite Model Maker

ดูบน TensorFlow.org ทำงานใน Google Colab ดูแหล่งที่มาบน GitHub ดาวน์โหลดโน๊ตบุ๊ค

ห้องสมุดชง TensorFlow Lite รุ่น ช่วยลดความยุ่งยากในการปรับตัวและการแปลงรูปแบบ TensorFlow เพื่อป้อนข้อมูลโดยเฉพาะอย่างยิ่งเมื่อมีการปรับใช้รูปแบบนี้ได้บนอุปกรณ์การใช้งานมิลลิลิตร

สมุดบันทึกนี้แสดงตัวอย่างแบบ end-to-end ที่ใช้ไลบรารี Model Maker เพื่อแสดงการดัดแปลงและการแปลงรูปแบบการจัดประเภทข้อความที่ใช้กันทั่วไปเพื่อจัดประเภทบทวิจารณ์ภาพยนตร์บนอุปกรณ์เคลื่อนที่ รูปแบบการจัดประเภทข้อความจัดประเภทข้อความเป็นหมวดหมู่ที่กำหนดไว้ล่วงหน้า อินพุตควรเป็นข้อความที่ประมวลผลล่วงหน้า และผลลัพธ์คือความน่าจะเป็นของหมวดหมู่ ชุดข้อมูลที่ใช้ในบทช่วยสอนนี้เป็นบทวิจารณ์ภาพยนตร์เชิงบวกและเชิงลบ

ข้อกำหนดเบื้องต้น

ติดตั้งแพ็คเกจที่จำเป็น

เมื่อต้องการเรียกใช้ตัวอย่างนี้ติดตั้งแพคเกจที่จำเป็นรวมทั้งแพคเกจเครื่องชงรุ่นจาก repo GitHub

pip install -q tflite-model-maker

นำเข้าแพ็คเกจที่จำเป็น

import numpy as np
import os

from tflite_model_maker import model_spec
from tflite_model_maker import text_classifier
from tflite_model_maker.config import ExportFormat
from tflite_model_maker.text_classifier import AverageWordVecSpec
from tflite_model_maker.text_classifier import DataLoader

import tensorflow as tf
assert tf.__version__.startswith('2')
tf.get_logger().setLevel('ERROR')
/tmpfs/src/tf_docs_env/lib/python3.7/site-packages/pkg_resources/__init__.py:119: PkgResourcesDeprecationWarning: 0.18ubuntu0.18.04.1 is an invalid version and will not be supported in a future release
  PkgResourcesDeprecationWarning,
/tmpfs/src/tf_docs_env/lib/python3.7/site-packages/numba/core/errors.py:168: UserWarning: Insufficiently recent colorama version found. Numba requires colorama >= 0.3.9
  warnings.warn(msg)

ดาวน์โหลดตัวอย่างข้อมูลการอบรม

ในการกวดวิชานี้เราจะใช้ SST-2 (Stanford ความเชื่อมั่น Treebank) ซึ่งเป็นหนึ่งในงานที่ กาว มาตรฐาน ประกอบด้วยบทวิจารณ์ภาพยนตร์สำหรับการฝึกอบรม 67,349 เรื่อง และบทวิจารณ์ภาพยนตร์สำหรับการทดสอบ 872 เรื่อง ชุดข้อมูลมีสองประเภท: บทวิจารณ์ภาพยนตร์เชิงบวกและเชิงลบ

data_dir = tf.keras.utils.get_file(
      fname='SST-2.zip',
      origin='https://dl.fbaipublicfiles.com/glue/data/SST-2.zip',
      extract=True)
data_dir = os.path.join(os.path.dirname(data_dir), 'SST-2')
Downloading data from https://dl.fbaipublicfiles.com/glue/data/SST-2.zip
7446528/7439277 [==============================] - 0s 0us/step
7454720/7439277 [==============================] - 0s 0us/step

ชุดข้อมูล SST-2 ถูกจัดเก็บในรูปแบบ TSV ข้อแตกต่างระหว่าง TSV และ CSV คือว่า TSV ใช้แท็บ \t ตัวอักษรเป็นตัวคั่นแทนของเครื่องหมายจุลภาค , ในรูปแบบรูปแบบ CSV

นี่คือ 5 บรรทัดแรกของชุดข้อมูลการฝึกอบรม label=0 หมายถึงลบ, label=1 หมายถึงบวก

ประโยค ฉลาก
ซ่อนสารคัดหลั่งใหม่จากหน่วยผู้ปกครอง 0
ไม่มีปัญญา มีแต่มุขตลก 0
ที่ชอบตัวละครและสื่อถึงสิ่งที่ค่อนข้างสวยงามเกี่ยวกับธรรมชาติของมนุษย์ 1
ยังคงอิ่มเอมใจเหมือนเดิมตลอดไป 0
เกี่ยวกับการแก้แค้นของพวกเนิร์ดที่เลวร้ายที่สุดที่ทีมผู้สร้างสามารถขุดได้ 0

ต่อไปเราจะโหลดชุดข้อมูลลงใน dataframe นุ่นและเปลี่ยนชื่อป้ายปัจจุบัน ( 0 และ 1 ) ไปยังคนอื่น ๆ ที่มนุษย์สามารถอ่าน ( negative และ positive ) และใช้พวกเขาสำหรับการฝึกอบรมรุ่น

import pandas as pd

def replace_label(original_file, new_file):
  # Load the original file to pandas. We need to specify the separator as
  # '\t' as the training data is stored in TSV format
  df = pd.read_csv(original_file, sep='\t')

  # Define how we want to change the label name
  label_map = {0: 'negative', 1: 'positive'}

  # Excute the label change
  df.replace({'label': label_map}, inplace=True)

  # Write the updated dataset to a new file
  df.to_csv(new_file)

# Replace the label name for both the training and test dataset. Then write the
# updated CSV dataset to the current folder.
replace_label(os.path.join(os.path.join(data_dir, 'train.tsv')), 'train.csv')
replace_label(os.path.join(os.path.join(data_dir, 'dev.tsv')), 'dev.csv')

เริ่มต้นอย่างรวดเร็ว

มีห้าขั้นตอนในการฝึกโมเดลการจัดประเภทข้อความ:

ขั้นตอนที่ 1 เลือกสถาปัตยกรรมแบบจำลองการจัดประเภทข้อความ

ในที่นี้ เราใช้สถาปัตยกรรมโมเดลการฝังคำโดยเฉลี่ย ซึ่งจะสร้างแบบจำลองขนาดเล็กและรวดเร็วด้วยความแม่นยำที่เหมาะสม

spec = model_spec.get('average_word_vec')

โมเดลเครื่องยังรองรับสถาปัตยกรรมรูปแบบอื่น ๆ เช่น BERT หากคุณมีความสนใจที่จะเรียนรู้เกี่ยวกับสถาปัตยกรรมอื่น ๆ ให้ดู เลือกสถาปัตยกรรมแบบจำลองสำหรับข้อความลักษณนาม ส่วนด้านล่าง

ขั้นตอนที่ 2. โหลดการฝึกอบรมและการทดสอบข้อมูลแล้ว preprocess พวกเขาตามที่เฉพาะเจาะจง model_spec

Model Maker สามารถป้อนข้อมูลในรูปแบบ CSV เราจะโหลดชุดข้อมูลการฝึกอบรมและทดสอบด้วยชื่อป้ายกำกับที่มนุษย์อ่านได้ซึ่งสร้างขึ้นก่อนหน้านี้

สถาปัตยกรรมแบบจำลองแต่ละแบบต้องการข้อมูลที่ป้อนเข้าเพื่อประมวลผลในลักษณะเฉพาะ DataLoader อ่านความต้องการจาก model_spec โดยอัตโนมัติและดำเนินการประมวลผลเบื้องต้นที่จำเป็น

train_data = DataLoader.from_csv(
      filename='train.csv',
      text_column='sentence',
      label_column='label',
      model_spec=spec,
      is_training=True)
test_data = DataLoader.from_csv(
      filename='dev.csv',
      text_column='sentence',
      label_column='label',
      model_spec=spec,
      is_training=False)

ขั้นตอนที่ 3 ฝึกโมเดล TensorFlow ด้วยข้อมูลการฝึก

ค่าเฉลี่ยของคำว่าการฝังรูปแบบการใช้งาน batch_size = 32 โดยค่าเริ่มต้น ดังนั้น คุณจะเห็นว่าต้องใช้ 2104 ขั้นตอนในการดำเนินการ 67,349 ประโยคในชุดข้อมูลการฝึกอบรม เราจะฝึกแบบจำลองสำหรับ 10 ยุค ซึ่งหมายความว่าต้องผ่านชุดข้อมูลการฝึกอบรม 10 ครั้ง

model = text_classifier.create(train_data, model_spec=spec, epochs=10)
Epoch 1/10
2104/2104 [==============================] - 7s 3ms/step - loss: 0.6777 - accuracy: 0.5657
Epoch 2/10
2104/2104 [==============================] - 6s 3ms/step - loss: 0.5666 - accuracy: 0.7200
Epoch 3/10
2104/2104 [==============================] - 6s 3ms/step - loss: 0.4484 - accuracy: 0.7955
Epoch 4/10
2104/2104 [==============================] - 6s 3ms/step - loss: 0.3982 - accuracy: 0.8262
Epoch 5/10
2104/2104 [==============================] - 6s 3ms/step - loss: 0.3735 - accuracy: 0.8387
Epoch 6/10
2104/2104 [==============================] - 6s 3ms/step - loss: 0.3595 - accuracy: 0.8476
Epoch 7/10
2104/2104 [==============================] - 6s 3ms/step - loss: 0.3476 - accuracy: 0.8541
Epoch 8/10
2104/2104 [==============================] - 6s 3ms/step - loss: 0.3379 - accuracy: 0.8593
Epoch 9/10
2104/2104 [==============================] - 6s 3ms/step - loss: 0.3329 - accuracy: 0.8628
Epoch 10/10
2104/2104 [==============================] - 6s 3ms/step - loss: 0.3258 - accuracy: 0.8646

ขั้นตอนที่ 4 ประเมินแบบจำลองด้วยข้อมูลการทดสอบ

หลังจากฝึกแบบจำลองการจัดประเภทข้อความโดยใช้ประโยคในชุดข้อมูลการฝึก เราจะใช้ประโยคที่เหลือ 872 ประโยคในชุดข้อมูลทดสอบเพื่อประเมินว่าแบบจำลองดำเนินการอย่างไรกับข้อมูลใหม่ที่ไม่เคยเห็นมาก่อน

เนื่องจากขนาดแบทช์เริ่มต้นคือ 32 จะใช้เวลา 28 ขั้นตอนในการดำเนินการผ่าน 872 ประโยคในชุดข้อมูลทดสอบ

loss, acc = model.evaluate(test_data)
28/28 [==============================] - 0s 2ms/step - loss: 0.5149 - accuracy: 0.8268

ขั้นตอนที่ 5. ส่งออกเป็นโมเดล TensorFlow Lite

ส่งออกการจัดประเภทข้อความที่เราฝึกในรูปแบบ TensorFlow Lite เราจะระบุโฟลเดอร์ที่จะส่งออกโมเดล โดยค่าเริ่มต้น โมเดล float TFLite จะถูกส่งออกสำหรับสถาปัตยกรรมโมเดลการฝังคำโดยเฉลี่ย

model.export(export_dir='average_word_vec')
2021-11-02 12:53:52.418162: W tensorflow/python/util/util.cc:348] Sets are not currently considered sequences, but this may change in the future, so consider avoiding using them.
2021-11-02 12:53:52.887037: W tensorflow/compiler/mlir/lite/python/tf_tfl_flatbuffer_helpers.cc:351] Ignored output_format.
2021-11-02 12:53:52.887073: W tensorflow/compiler/mlir/lite/python/tf_tfl_flatbuffer_helpers.cc:354] Ignored drop_control_dependency.

คุณสามารถดาวน์โหลดไฟล์รุ่น TensorFlow Lite ได้โดยใช้แถบด้านข้างทางซ้ายของ Colab ไปใน average_word_vec โฟลเดอร์ที่เราระบุไว้ใน export_dir พารามิเตอร์ข้างต้นคลิกขวาบน model.tflite ไฟล์และเลือก Download เพื่อดาวน์โหลดไปยังเครื่องคอมพิวเตอร์ของคุณ

รุ่นนี้สามารถรวมเข้ากับ Android หรือ iOS ของแอปโดยใช้ API NLClassifier ของ Lite ห้องสมุด TensorFlow งาน

ดู TFLite ข้อความแอปตัวอย่างการจัดหมวดหมู่ สำหรับรายละเอียดเพิ่มเติมเกี่ยวกับวิธีการรูปแบบที่ใช้ในการทำงานแอพพลิเค

หมายเหตุ 1: การผูกโมเดล Android Studio ยังไม่รองรับการจัดประเภทข้อความ ดังนั้นโปรดใช้ไลบรารีงาน TensorFlow Lite

หมายเหตุ 2: มีความเป็น model.json ไฟล์ในโฟลเดอร์เดียวกันกับรุ่น TFLite มันไม่ได้มีการแสดง JSON ของ เมตาดาต้า รวมภายในรุ่น TensorFlow Lite ข้อมูลเมตาของโมเดลช่วยให้ไลบรารีงาน TFLite รู้ว่าโมเดลทำอะไร และวิธีการประมวลผลข้อมูลก่อน/หลังการประมวลผลสำหรับโมเดล คุณไม่จำเป็นต้องดาวน์โหลด model.json ไฟล์มันเป็นเพียงเพื่อวัตถุประสงค์ในการให้ข้อมูลและเนื้อหาที่มีอยู่แล้วภายในแฟ้ม TFLite

หมายเหตุ 3: หากคุณฝึกรูปแบบการจัดหมวดหมู่ข้อความโดยใช้ MobileBERT หรือสถาปัตยกรรม BERT-Base คุณจะต้องใช้ BertNLClassifier API แทนเพื่อบูรณาการรูปแบบการฝึกอบรมเป็น app มือถือ

ส่วนต่อไปนี้จะอธิบายทีละขั้นตอนเพื่อแสดงรายละเอียดเพิ่มเติม

เลือกสถาปัตยกรรมแบบจำลองสำหรับตัวแยกข้อความ

แต่ละ model_spec วัตถุหมายถึงรูปแบบเฉพาะสำหรับลักษณนามข้อความ TensorFlow Lite รุ่นชงขณะนี้สนับสนุน MobileBERT , embeddings เฉลี่ยคำพูดและการ BERT-Base รุ่น

รุ่นที่รองรับ ชื่อรุ่น_spec รายละเอียดรุ่น ขนาดรุ่น
การฝังคำเฉลี่ย 'average_word_vec' เฉลี่ยการฝังคำข้อความด้วยการเปิดใช้งาน RELU <1MB
โมบายเบิร์ต 'mobilebert_classifier' เล็กกว่า 4.3 เท่า และเร็วกว่า BERT-Base 5.5 เท่า ในขณะที่บรรลุผลการแข่งขัน เหมาะสำหรับการใช้งานบนอุปกรณ์ 25MB พร้อม quantization
100MB โดยไม่มี quantization
BERT-เบส 'bert_classifier' โมเดล BERT มาตรฐานที่ใช้กันอย่างแพร่หลายในงาน NLP 300MB

ในการเริ่มต้นอย่างรวดเร็ว เราได้ใช้รูปแบบการฝังคำโดยเฉลี่ย สวิทช์ Let 's ไป MobileBERT ในการฝึกอบรมรุ่นที่มีความถูกต้องสูง

mb_spec = model_spec.get('mobilebert_classifier')

โหลดข้อมูลการฝึก

คุณสามารถอัปโหลดชุดข้อมูลของคุณเองเพื่อใช้ในบทช่วยสอนนี้ได้ อัปโหลดชุดข้อมูลของคุณโดยใช้แถบด้านข้างทางซ้ายใน Colab

อัพโหลดไฟล์

หากคุณไม่ต้องการที่จะอัปโหลดชุดข้อมูลของคุณไปยังเมฆคุณยังสามารถเรียกใช้ภายในห้องสมุดโดยทำตาม คำแนะนำ

เพื่อให้ง่าย เราจะนำชุดข้อมูล SST-2 ที่ดาวน์โหลดมาก่อนหน้านี้มาใช้ซ้ำ ลองใช้ DataLoader.from_csv วิธีการในการโหลดข้อมูล

โปรดทราบว่าเมื่อเราเปลี่ยนสถาปัตยกรรมโมเดล เราจะต้องโหลดชุดข้อมูลการฝึกอบรมและทดสอบใหม่เพื่อใช้ตรรกะก่อนการประมวลผลใหม่

train_data = DataLoader.from_csv(
      filename='train.csv',
      text_column='sentence',
      label_column='label',
      model_spec=mb_spec,
      is_training=True)
test_data = DataLoader.from_csv(
      filename='dev.csv',
      text_column='sentence',
      label_column='label',
      model_spec=mb_spec,
      is_training=False)

ห้องสมุดชงรุ่นยังสนับสนุน from_folder() วิธีการในการโหลดข้อมูล โดยถือว่าข้อมูลข้อความของคลาสเดียวกันอยู่ในไดเร็กทอรีย่อยเดียวกัน และชื่อโฟลเดอร์ย่อยเป็นชื่อคลาส ไฟล์ข้อความแต่ละไฟล์มีตัวอย่างการวิจารณ์ภาพยนตร์หนึ่งตัวอย่าง class_labels พารามิเตอร์จะใช้ในการระบุโฟลเดอร์ย่อย

ฝึกโมเดล TensorFlow

ฝึกแบบจำลองการจัดประเภทข้อความโดยใช้ข้อมูลการฝึก

model = text_classifier.create(train_data, model_spec=mb_spec, epochs=3)
Epoch 1/3
1403/1403 [==============================] - 322s 193ms/step - loss: 0.3882 - test_accuracy: 0.8464
Epoch 2/3
1403/1403 [==============================] - 257s 183ms/step - loss: 0.1303 - test_accuracy: 0.9534
Epoch 3/3
1403/1403 [==============================] - 257s 183ms/step - loss: 0.0759 - test_accuracy: 0.9753

ตรวจสอบโครงสร้างแบบจำลองโดยละเอียด

model.summary()
Model: "model"
__________________________________________________________________________________________________
Layer (type)                    Output Shape         Param #     Connected to                     
==================================================================================================
input_word_ids (InputLayer)     [(None, 128)]        0                                            
__________________________________________________________________________________________________
input_mask (InputLayer)         [(None, 128)]        0                                            
__________________________________________________________________________________________________
input_type_ids (InputLayer)     [(None, 128)]        0                                            
__________________________________________________________________________________________________
hub_keras_layer_v1v2 (HubKerasL (None, 512)          24581888    input_word_ids[0][0]             
                                                                 input_mask[0][0]                 
                                                                 input_type_ids[0][0]             
__________________________________________________________________________________________________
dropout_1 (Dropout)             (None, 512)          0           hub_keras_layer_v1v2[0][0]       
__________________________________________________________________________________________________
output (Dense)                  (None, 2)            1026        dropout_1[0][0]                  
==================================================================================================
Total params: 24,582,914
Trainable params: 24,582,914
Non-trainable params: 0
__________________________________________________________________________________________________

ประเมินแบบจำลอง

ประเมินแบบจำลองที่เราเพิ่งฝึกโดยใช้ข้อมูลการทดสอบและวัดค่าความสูญเสียและความแม่นยำ

loss, acc = model.evaluate(test_data)
28/28 [==============================] - 7s 48ms/step - loss: 0.3859 - test_accuracy: 0.9071

ส่งออกเป็นรุ่น TensorFlow Lite

แปลงรูปแบบการฝึกอบรมเพื่อจัดรูปแบบรูปแบบ TensorFlow Lite กับ เมตาดาต้า เพื่อให้คุณหลังจากนั้นสามารถใช้ในโปรแกรมประยุกต์ ML บนอุปกรณ์ ไฟล์ป้ายกำกับและไฟล์คำศัพท์ถูกฝังอยู่ในข้อมูลเมตา ชื่อไฟล์ TFLite เริ่มต้นคือ model.tflite

ในแอปพลิเคชัน ML บนอุปกรณ์จำนวนมาก ขนาดโมเดลเป็นปัจจัยสำคัญ ดังนั้น ขอแนะนำให้คุณใช้ quantize model เพื่อทำให้เล็กลงและอาจทำงานได้เร็วขึ้น เทคนิคการหาปริมาณหลังการฝึกเริ่มต้นคือการหาปริมาณช่วงไดนามิกสำหรับรุ่น BERT และ MobileBERT

model.export(export_dir='mobilebert/')
2021-11-02 13:09:19.810703: W tensorflow/compiler/mlir/lite/python/tf_tfl_flatbuffer_helpers.cc:351] Ignored output_format.
2021-11-02 13:09:19.810749: W tensorflow/compiler/mlir/lite/python/tf_tfl_flatbuffer_helpers.cc:354] Ignored drop_control_dependency.
2021-11-02 13:09:19.810755: W tensorflow/compiler/mlir/lite/python/tf_tfl_flatbuffer_helpers.cc:360] Ignored change_concat_input_ranges.

แฟ้มรุ่น TensorFlow Lite สามารถบูรณาการใน app มือถือโดยใช้ BertNLClassifier API ใน TensorFlow Lite ห้องสมุดงาน โปรดทราบว่านี้จะแตกต่างจาก NLClassifier API ใช้เพื่อบูรณาการการจัดหมวดหมู่ข้อความที่ได้รับการฝึกฝนกับคำเฉลี่ยสถาปัตยกรรมรูปแบบเวกเตอร์

รูปแบบการส่งออกสามารถเป็นหนึ่งหรือรายการต่อไปนี้:

โดยค่าเริ่มต้น จะเอ็กซ์พอร์ตเฉพาะไฟล์โมเดล TensorFlow Lite ที่มีข้อมูลเมตาของโมเดล คุณยังสามารถเลือกที่จะส่งออกไฟล์อื่นๆ ที่เกี่ยวข้องกับโมเดลเพื่อการตรวจสอบที่ดียิ่งขึ้น ตัวอย่างเช่น การส่งออกเฉพาะไฟล์เลเบลและไฟล์คำศัพท์ดังนี้:

model.export(export_dir='mobilebert/', export_format=[ExportFormat.LABEL, ExportFormat.VOCAB])

คุณสามารถประเมินรูปแบบ TFLite กับ evaluate_tflite วิธีการวัดความถูกต้อง การแปลงโมเดล TensorFlow ที่ได้รับการฝึกมาเป็นรูปแบบ TFLite และใช้ quantization อาจส่งผลต่อความถูกต้องของโมเดล ดังนั้นจึงแนะนำให้ประเมินความถูกต้องของโมเดล TFLite ก่อนนำไปใช้งาน

accuracy = model.evaluate_tflite('mobilebert/model.tflite', test_data)
print('TFLite model accuracy: ', accuracy)
TFLite model accuracy:  {'accuracy': 0.9002293577981652}

การใช้งานขั้นสูง

create ฟังก์ชั่นการทำงานของโปรแกรมควบคุมที่รุ่นใช้ห้องสมุด Maker เพื่อสร้างแบบจำลอง model_spec พารามิเตอร์กำหนดสเปครุ่น AverageWordVecSpec และ BertClassifierSpec เรียนได้รับการสนับสนุน create ประกอบด้วยฟังก์ชั่นขั้นตอนต่อไปนี้:

  1. สร้างแบบจำลองสำหรับลักษณนามข้อความตาม model_spec
  2. ฝึกแบบจำลองลักษณนาม epochs เริ่มต้นและขนาดชุดเริ่มต้นจะถูกกำหนดโดย default_training_epochs และ default_batch_size ตัวแปรใน model_spec วัตถุ

ส่วนนี้ครอบคลุมหัวข้อการใช้งานขั้นสูง เช่น การปรับโมเดลและไฮเปอร์พารามิเตอร์การฝึก

ปรับแต่งไฮเปอร์พารามิเตอร์รุ่น MobileBERT

พารามิเตอร์โมเดลที่คุณปรับได้คือ:

  • seq_len : ความยาวของลำดับที่จะป้อนเข้าสู่รูปแบบ
  • initializer_range : ค่าเบี่ยงเบนมาตรฐานของ truncated_normal_initializer สำหรับการเริ่มต้นทุกการฝึกอบรมน้ำหนัก
  • trainable : บูลีนที่ระบุว่าชั้นก่อนได้รับการฝึกฝนเป็นสุวินัย

พารามิเตอร์ไปป์ไลน์การฝึกอบรมที่คุณปรับได้คือ:

  • model_dir : ตำแหน่งของไฟล์รูปแบบด่าน หากไม่ได้ตั้งค่าไว้ ระบบจะใช้ไดเร็กทอรีชั่วคราว
  • dropout_rate : อัตราการออกกลางคัน
  • learning_rate : อัตราการเรียนรู้เริ่มต้นสำหรับการเพิ่มประสิทธิภาพของอดัม
  • tpu : TPU อยู่เพื่อเชื่อมต่อกับ

ตัวอย่างเช่นคุณสามารถตั้งค่า seq_len=256 (ค่าเริ่มต้นคือ 128) ซึ่งช่วยให้โมเดลสามารถจัดประเภทข้อความที่ยาวขึ้นได้

new_model_spec = model_spec.get('mobilebert_classifier')
new_model_spec.seq_len = 256

ปรับแต่งไฮเปอร์พารามิเตอร์โมเดลการฝังคำโดยเฉลี่ย

คุณสามารถปรับโครงสร้างพื้นฐานรูปแบบเช่น wordvec_dim และ seq_len ตัวแปรใน AverageWordVecSpec ระดับ

ตัวอย่างเช่นคุณสามารถฝึกอบรมรุ่นที่มีมูลค่าขนาดใหญ่ของ wordvec_dim โปรดทราบว่าคุณจะต้องสร้างใหม่ model_spec หากคุณปรับเปลี่ยนรูปแบบ

new_model_spec = AverageWordVecSpec(wordvec_dim=32)

รับข้อมูลที่ประมวลผลล่วงหน้า

new_train_data = DataLoader.from_csv(
      filename='train.csv',
      text_column='sentence',
      label_column='label',
      model_spec=new_model_spec,
      is_training=True)

ฝึกโมเดลใหม่

model = text_classifier.create(new_train_data, model_spec=new_model_spec)
Epoch 1/3
2104/2104 [==============================] - 8s 4ms/step - loss: 0.6545 - accuracy: 0.6055
Epoch 2/3
2104/2104 [==============================] - 6s 3ms/step - loss: 0.4822 - accuracy: 0.7712
Epoch 3/3
2104/2104 [==============================] - 6s 3ms/step - loss: 0.3993 - accuracy: 0.8217

ปรับไฮเปอร์พารามิเตอร์การฝึกอบรม

นอกจากนี้คุณยังสามารถปรับแต่ง hyperparameters การฝึกอบรมเช่น epochs และ batch_size ที่มีผลต่อความถูกต้องของรูปแบบ ตัวอย่างเช่น

  • epochs : ยุคสมัยมากขึ้นสามารถบรรลุความถูกต้องดีขึ้น แต่อาจนำไปสู่ overfitting
  • batch_size : จำนวนตัวอย่างที่จะใช้ในขั้นตอนการฝึกอบรมหนึ่ง

ตัวอย่างเช่น คุณสามารถฝึกได้หลายยุคสมัย

model = text_classifier.create(new_train_data, model_spec=new_model_spec, epochs=20)
Epoch 1/20
2104/2104 [==============================] - 7s 3ms/step - loss: 0.6595 - accuracy: 0.5994
Epoch 2/20
2104/2104 [==============================] - 6s 3ms/step - loss: 0.4904 - accuracy: 0.7655
Epoch 3/20
2104/2104 [==============================] - 6s 3ms/step - loss: 0.4036 - accuracy: 0.8177
Epoch 4/20
2104/2104 [==============================] - 6s 3ms/step - loss: 0.3690 - accuracy: 0.8392
Epoch 5/20
2104/2104 [==============================] - 6s 3ms/step - loss: 0.3516 - accuracy: 0.8500
Epoch 6/20
2104/2104 [==============================] - 6s 3ms/step - loss: 0.3391 - accuracy: 0.8569
Epoch 7/20
2104/2104 [==============================] - 6s 3ms/step - loss: 0.3301 - accuracy: 0.8608
Epoch 8/20
2104/2104 [==============================] - 6s 3ms/step - loss: 0.3237 - accuracy: 0.8654
Epoch 9/20
2104/2104 [==============================] - 6s 3ms/step - loss: 0.3190 - accuracy: 0.8674
Epoch 10/20
2104/2104 [==============================] - 6s 3ms/step - loss: 0.3151 - accuracy: 0.8703
Epoch 11/20
2104/2104 [==============================] - 6s 3ms/step - loss: 0.3103 - accuracy: 0.8725
Epoch 12/20
2104/2104 [==============================] - 6s 3ms/step - loss: 0.3074 - accuracy: 0.8737
Epoch 13/20
2104/2104 [==============================] - 6s 3ms/step - loss: 0.3036 - accuracy: 0.8757
Epoch 14/20
2104/2104 [==============================] - 6s 3ms/step - loss: 0.3015 - accuracy: 0.8772
Epoch 15/20
2104/2104 [==============================] - 6s 3ms/step - loss: 0.3001 - accuracy: 0.8773
Epoch 16/20
2104/2104 [==============================] - 6s 3ms/step - loss: 0.2981 - accuracy: 0.8779
Epoch 17/20
2104/2104 [==============================] - 6s 3ms/step - loss: 0.2954 - accuracy: 0.8797
Epoch 18/20
2104/2104 [==============================] - 6s 3ms/step - loss: 0.2939 - accuracy: 0.8798
Epoch 19/20
2104/2104 [==============================] - 6s 3ms/step - loss: 0.2924 - accuracy: 0.8809
Epoch 20/20
2104/2104 [==============================] - 6s 3ms/step - loss: 0.2903 - accuracy: 0.8822

ประเมินแบบจำลองที่ได้รับการอบรมใหม่ด้วย 20 ช่วงเวลาการฝึก

new_test_data = DataLoader.from_csv(
      filename='dev.csv',
      text_column='sentence',
      label_column='label',
      model_spec=new_model_spec,
      is_training=False)

loss, accuracy = model.evaluate(new_test_data)
28/28 [==============================] - 0s 2ms/step - loss: 0.5021 - accuracy: 0.8291

เปลี่ยนรูปแบบสถาปัตยกรรม

คุณสามารถเปลี่ยนรูปแบบโดยการเปลี่ยน model_spec ต่อไปนี้จะแสดงวิธีการเปลี่ยนเป็น BERT-Base model

เปลี่ยน model_spec กับรูปแบบ BERT-Base สำหรับลักษณนามข้อความ

spec = model_spec.get('bert_classifier')

ขั้นตอนที่เหลือเหมือนกัน

ปรับแต่งการหาปริมาณหลังการฝึกในรุ่น TensorFlow Lite

โพสต์การฝึกอบรม quantization เป็นเทคนิคการแปลงที่สามารถลดขนาดรูปแบบและแฝงอนุมานในขณะที่ยังมีการปรับปรุงความเร็วของ CPU และการเร่งความเร็วฮาร์ดแวร์อนุมานกับการย่อยสลายเล็ก ๆ น้อย ๆ ในความถูกต้องรูปแบบ ดังนั้นจึงใช้กันอย่างแพร่หลายในการปรับโมเดลให้เหมาะสม

ไลบรารี Model Maker จะใช้เทคนิคการวัดค่าหลังการฝึกเริ่มต้นเมื่อส่งออกโมเดล หากคุณต้องการที่จะปรับแต่งควอนโพสต์การฝึกอบรมรุ่นชงสนับสนุนตัวเลือกการโพสต์การฝึกอบรม quantization ต่างๆโดยใช้ QuantizationConfig เช่นกัน ลองใช้การควอนไทซ์ float16 เป็นตัวอย่าง ขั้นแรก กำหนดการกำหนดค่า quantization

config = QuantizationConfig.for_float16()

จากนั้นเราจะส่งออกโมเดล TensorFlow Lite ด้วยการกำหนดค่าดังกล่าว

model.export(export_dir='.', tflite_filename='model_fp16.tflite', quantization_config=config)

อ่านเพิ่มเติม

คุณสามารถอ่านของเรา จำแนกข้อความ ตัวอย่างเช่นการเรียนรู้รายละเอียดทางเทคนิค สำหรับข้อมูลเพิ่มเติม โปรดดูที่: