ผสานรวมตัวแยกประเภทภาษาธรรมชาติ

NLClassifier API ของคลังงานจะจัดประเภทข้อความอินพุตเป็นหมวดหมู่ต่างๆ และเป็น API ที่หลากหลายและกำหนดค่าได้ซึ่งสามารถจัดการโมเดลการจัดประเภทข้อความส่วนใหญ่ได้

ฟีเจอร์หลักของ NLClassifier API

  • รับสตริงเดียวเป็นอินพุต ทำการจัดประเภทด้วยสตริง และ แสดงผลคู่ <label, score=""> เป็นผลลัพธ์การจัดประเภท</label,>

  • การแยกโทเค็น Regex ที่ไม่บังคับพร้อมใช้งานสำหรับข้อความอินพุต

  • กำหนดค่าได้เพื่อปรับให้เข้ากับโมเดลการจัดประเภทต่างๆ

โมเดล NLClassifier ที่รองรับ

เรารับประกันว่ารุ่นต่อไปนี้จะใช้ได้กับ NLClassifier API

เรียกใช้การอนุมานใน Java

ดูตัวอย่างวิธีใช้ NLClassifier ในแอป Android ได้ที่ข้อมูลอ้างอิงการจัดประเภทข้อความ แอป

ขั้นตอนที่ 1: นำเข้าการอ้างอิง Gradle และการตั้งค่าอื่นๆ

คัดลอก.tfliteไฟล์โมเดลไปยังไดเรกทอรีชิ้นงานของโมดูล Android ที่จะเรียกใช้โมเดล ระบุว่าไม่ควรบีบอัดไฟล์ และ เพิ่มไลบรารี TensorFlow Lite ลงในไฟล์ build.gradle ของโมดูล

android {
    // Other settings

    // Specify tflite file should not be compressed for the app apk
    aaptOptions {
        noCompress "tflite"
    }

}

dependencies {
    // Other dependencies

    // Import the Task Vision Library dependency
    implementation 'org.tensorflow:tensorflow-lite-task-text:0.4.4'
    // Import the GPU delegate plugin Library for GPU inference
    implementation 'org.tensorflow:tensorflow-lite-gpu-delegate-plugin:0.4.4'
}

ขั้นตอนที่ 2: เรียกใช้การอนุมานโดยใช้ API

// Initialization, use NLClassifierOptions to configure input and output tensors
NLClassifierOptions options =
    NLClassifierOptions.builder()
        .setBaseOptions(BaseOptions.builder().useGpu().build())
        .setInputTensorName(INPUT_TENSOR_NAME)
        .setOutputScoreTensorName(OUTPUT_SCORE_TENSOR_NAME)
        .build();
NLClassifier classifier =
    NLClassifier.createFromFileAndOptions(context, modelFile, options);

// Run inference
List<Category> results = classifier.classify(input);

ดูตัวเลือกเพิ่มเติมในการกำหนดค่า NLClassifier ได้ในซอร์สโค้ด

เรียกใช้การอนุมานใน Swift

ขั้นตอนที่ 1: นำเข้า CocoaPods

เพิ่มพ็อด TensorFlowLiteTaskText ใน Podfile

target 'MySwiftAppWithTaskAPI' do
  use_frameworks!
  pod 'TensorFlowLiteTaskText', '~> 0.4.4'
end

ขั้นตอนที่ 2: เรียกใช้การอนุมานโดยใช้ API

// Initialization
var modelOptions:TFLNLClassifierOptions = TFLNLClassifierOptions()
modelOptions.inputTensorName = inputTensorName
modelOptions.outputScoreTensorName = outputScoreTensorName
let nlClassifier = TFLNLClassifier.nlClassifier(
      modelPath: modelPath,
      options: modelOptions)

// Run inference
let categories = nlClassifier.classify(text: input)

ดูรายละเอียดเพิ่มเติมได้ในซอร์สโค้ด

เรียกใช้การอนุมานใน C++

// Initialization
NLClassifierOptions options;
options.mutable_base_options()->mutable_model_file()->set_file_name(model_path);
std::unique_ptr<NLClassifier> classifier = NLClassifier::CreateFromOptions(options).value();

// Run inference with your input, `input_text`.
std::vector<core::Category> categories = classifier->Classify(input_text);

ดูรายละเอียดเพิ่มเติมได้ในซอร์สโค้ด

เรียกใช้การอนุมานใน Python

ขั้นตอนที่ 1: ติดตั้งแพ็กเกจ pip

pip install tflite-support

ขั้นตอนที่ 2: การใช้โมเดล

# Imports
from tflite_support.task import text

# Initialization
classifier = text.NLClassifier.create_from_file(model_path)

# Run inference
text_classification_result = classifier.classify(text)

ดูตัวเลือกเพิ่มเติมในการกำหนดค่า NLClassifier ได้ในซอร์สโค้ด

ตัวอย่างผลการแข่ง

นี่คือตัวอย่างผลการจัดประเภทของโมเดลรีวิวภาพยนตร์

อินพุต: "เสียเวลาชะมัด"

เอาต์พุต:

category[0]: 'Negative' : '0.81313'
category[1]: 'Positive' : '0.18687'

ลองใช้เครื่องมือสาธิต CLI แบบง่ายสำหรับ NLClassifier กับโมเดลและข้อมูลทดสอบของคุณเอง

ข้อกำหนดความเข้ากันได้ของโมเดล

NLClassifier API สามารถโหลดโมเดล TFLite ที่มีหรือไม่มีข้อมูลเมตาของโมเดล TFLite ทั้งนี้ขึ้นอยู่กับกรณีการใช้งาน ดู ตัวอย่างการสร้างข้อมูลเมตาสำหรับตัวแยกประเภทภาษาธรรมชาติโดยใช้ TensorFlow Lite Metadata Writer API

รุ่นที่รองรับควรเป็นไปตามข้อกำหนดต่อไปนี้

  • Tensor อินพุต: (kTfLiteString/kTfLiteInt32)

    • อินพุตของโมเดลควรเป็นอินพุตดิบของเทนเซอร์ kTfLiteString สตริง หรือเทนเซอร์ kTfLiteInt32 สำหรับดัชนีที่โทเค็นด้วยนิพจน์ทั่วไปของอินพุตดิบ สตริง
    • หากประเภทอินพุตเป็น kTfLiteString คุณไม่จำเป็นต้องใช้Metadata สำหรับโมเดล
    • หากประเภทอินพุตเป็น kTfLiteInt32 จะต้องตั้งค่า RegexTokenizer ใน ข้อมูลเมตาของ เทนเซอร์อินพุต
  • Tensor คะแนนเอาต์พุต: (kTfLiteUInt8/kTfLiteInt8/kTfLiteInt16/kTfLiteFloat32/kTfLiteFloat64)

    • Tensor เอาต์พุตที่จำเป็นสำหรับคะแนนของแต่ละหมวดหมู่ที่จัดประเภท

    • หากประเภทเป็นประเภท Int ให้ยกเลิกการหาปริมาณเป็น double/float เพื่อ แพลตฟอร์มที่เกี่ยวข้อง

    • อาจมีไฟล์ที่เชื่อมโยงซึ่งไม่บังคับในข้อมูลเมตาที่เกี่ยวข้องของเทนเซอร์เอาต์พุตสำหรับป้ายกำกับหมวดหมู่ ไฟล์ควรเป็นไฟล์ข้อความธรรมดาที่มีป้ายกำกับ 1 รายการต่อบรรทัด และจำนวนป้ายกำกับควรตรงกับจำนวนหมวดหมู่ตามที่โมเดลเอาต์พุต ดูไฟล์ป้ายกำกับตัวอย่าง

  • Tensor ป้ายกำกับเอาต์พุต: (kTfLiteString/kTfLiteInt32)

    • Tensor เอาต์พุตที่ไม่บังคับสำหรับป้ายกำกับของแต่ละหมวดหมู่ ควรมีความยาวเท่ากับ Tensor คะแนนเอาต์พุต หากไม่มีเทนเซอร์นี้ API จะใช้ดัชนีคะแนนเป็นชื่อคลาส

    • จะถูกละเว้นหากมีไฟล์ป้ายกำกับที่เชื่อมโยงอยู่ในข้อมูลเมตาของเทนเซอร์คะแนนเอาต์พุต