คำแนะนำการฝังข้อความสำหรับ Android

งานเครื่องมือฝังข้อความ MediaPipe ช่วยให้คุณสร้างการนำเสนอข้อมูลข้อความในรูปแบบตัวเลขเพื่อ จับความหมายในเชิงอรรถศาสตร์ได้ วิธีการเหล่านี้จะแสดงวิธีใช้ เครื่องมือฝังข้อความด้วยแอป Android

สำหรับข้อมูลเพิ่มเติมเกี่ยวกับความสามารถ โมเดล และตัวเลือกการกำหนดค่า ของงานนี้ โปรดดูภาพรวม

ตัวอย่างโค้ด

โค้ดตัวอย่าง MediaPipe Tasks เป็นการใช้งานที่เรียบง่ายของเครื่องมือฝังข้อความ แอปสำหรับ Android ตัวอย่างนี้ประเมินความคล้ายคลึงกันทางความหมายระหว่าง 2 ค่า และต้องใช้อุปกรณ์ Android จริงหรือ Android โปรแกรมจำลอง

คุณสามารถใช้แอปนี้เป็นจุดเริ่มต้นสำหรับแอป Android ของคุณเอง หรืออ้างอิงถึงแอปนั้น เมื่อแก้ไขแอปที่มีอยู่ โค้ดตัวอย่างของเครื่องมือฝังข้อความโฮสต์อยู่บน GitHub

ดาวน์โหลดโค้ด

วิธีการต่อไปนี้แสดงวิธีสร้างสำเนาตัวอย่างในเครื่อง โดยใช้เครื่องมือบรรทัดคำสั่ง git

วิธีดาวน์โหลดโค้ดตัวอย่าง

  1. โคลนที่เก็บ Git โดยใช้คำสั่งต่อไปนี้
    git clone https://github.com/google-ai-edge/mediapipe-samples
    
  2. นอกจากนี้ คุณสามารถกำหนดค่าอินสแตนซ์ Git ให้ใช้การชำระเงินแบบกระจัดกระจายเพื่อให้คุณมี เฉพาะไฟล์สำหรับแอปตัวอย่างของเครื่องมือฝังข้อความเท่านั้น
    cd mediapipe
    git sparse-checkout init --cone
    git sparse-checkout set examples/text_embedder/android
    

หลังจากสร้างโค้ดตัวอย่างในเวอร์ชันในเครื่องแล้ว คุณจะนำเข้าโปรเจ็กต์ได้ ลงใน Android Studio และเรียกใช้แอป โปรดดูวิธีการในคู่มือการตั้งค่าสำหรับ Android

องค์ประกอบสำคัญ

ไฟล์ต่อไปนี้มีโค้ดที่สำคัญสำหรับตัวอย่างเครื่องมือฝังข้อความนี้ แอปพลิเคชัน:

  • TextEmbedderHelper.kt เริ่มต้นเครื่องมือฝังข้อความและจัดการโมเดลและมอบสิทธิ์การเลือก
  • MainActivity.kt ใช้งานแอปพลิเคชันและประกอบส่วนประกอบต่างๆ ของอินเทอร์เฟซผู้ใช้

ตั้งค่า

ส่วนนี้จะอธิบายขั้นตอนสำคัญในการตั้งค่าสภาพแวดล้อมในการพัฒนาซอฟต์แวร์ และ โค้ดเพื่อใช้ตัวฝังข้อความโดยเฉพาะ สำหรับข้อมูลทั่วไปเกี่ยวกับ การตั้งค่าสภาพแวดล้อมในการพัฒนาซอฟต์แวร์ของคุณสำหรับการใช้งาน MediaPipe ซึ่งรวมถึง ข้อกำหนดด้านเวอร์ชันของแพลตฟอร์ม โปรดดูคู่มือการตั้งค่าสำหรับ Android

การอ้างอิง

เครื่องมือฝังข้อความใช้ไลบรารี com.google.mediapipe:tasks-text เพิ่มรายการนี้ จะขึ้นอยู่กับไฟล์ build.gradle ของโปรเจ็กต์การพัฒนาแอป Android ของคุณ คุณสามารถนำเข้าทรัพยากร Dependency ที่จำเป็นด้วยโค้ดต่อไปนี้

dependencies {
    implementation 'com.google.mediapipe:tasks-text:latest.release'
}

รุ่น

งานเครื่องมือฝังข้อความ MediaPipe ต้องการโมเดลที่ผ่านการฝึกซึ่งสามารถทำงานร่วมกับ งาน สำหรับข้อมูลเพิ่มเติมเกี่ยวกับโมเดลที่ผ่านการฝึกที่ใช้ได้สำหรับเครื่องมือฝังข้อความ โปรดดู ภาพรวมงานส่วนโมเดล

เลือกและดาวน์โหลดโมเดล จากนั้นเก็บโมเดลไว้ในไดเรกทอรีโปรเจ็กต์ของคุณ:

<dev-project-root>/src/main/assets

ระบุเส้นทางของโมเดลภายในพารามิเตอร์ ModelAssetPath ใน โค้ดตัวอย่าง โมเดลจะได้รับการกำหนดในฟังก์ชัน setupTextEmbedder() ใน TextEmbedderHelper.kt ไฟล์:

ใช้ฟังก์ชัน BaseOptions.Builder.setModelAssetPath() เพื่อระบุเส้นทาง ที่โมเดลใช้อยู่ มีการอ้างอิงเมธอดนี้ในตัวอย่างโค้ดถัดไป

สร้างงาน

คุณจะใช้ฟังก์ชันใดฟังก์ชันหนึ่งของ createFrom...() เพื่อสร้างงานได้ ฟังก์ชัน createFromOptions() ยอมรับตัวเลือกการกำหนดค่าเพื่อตั้งค่าเครื่องมือฝัง ตัวเลือก คุณยังเริ่มต้นงานโดยใช้โรงงาน createFromFile() ได้ด้วย ฟังก์ชัน createFromFile() จะยอมรับเส้นทางแบบสัมพัทธ์หรือสัมบูรณ์ไปยัง ไฟล์โมเดลที่ฝึกแล้ว ดูข้อมูลเพิ่มเติมเกี่ยวกับตัวเลือกการกําหนดค่าได้ที่ ตัวเลือกการกำหนดค่า

โค้ดต่อไปนี้แสดงวิธีสร้างและกำหนดค่างานนี้

val baseOptions = baseOptionsBuilder.build()
val optionsBuilder =
    TextEmbedderOptions.builder().setBaseOptions(baseOptions)
val options = optionsBuilder.build()
textEmbedder = TextEmbedder.createFromOptions(context, options)

ตัวอย่างการใช้โค้ดจะกำหนดตัวเลือกเครื่องมือฝังข้อความใน setupTextEmbedder() ในฟังก์ชัน TextEmbedderHelper.kt

ตัวเลือกการกำหนดค่า

งานนี้มีตัวเลือกการกำหนดค่าต่อไปนี้สำหรับแอป Android

ชื่อตัวเลือก คำอธิบาย ช่วงค่า ค่าเริ่มต้น
l2_normalize เลือกว่าจะแปลงเวกเตอร์ฟีเจอร์ที่ส่งคืนด้วยบรรทัดฐาน L2 หรือไม่ ใช้ตัวเลือกนี้ก็ต่อเมื่อโมเดลยังไม่มีโฆษณาเนทีฟ L2_NORMALIZATION TFLite Op. ในกรณีส่วนใหญ่ กรณีเช่นนี้มักจะเกิดขึ้น และ การแปลงข้อมูลมาตรฐาน L2 จึงทำได้ผ่านการอนุมาน TFLite โดยไม่จำเป็นต้อง สำหรับตัวเลือกนี้ Boolean False
quantize ควรแปลงการฝังที่แสดงผลเป็นไบต์เป็นไบต์ผ่านหรือไม่ การวัดสเกลาร์ การฝังจะถูกสันนิษฐานโดยนัยว่าเป็นหน่วยบรรทัดฐานและ ดังนั้น ทุกมิติข้อมูลต้องมีค่าเป็น [-1.0, 1.0] ใช้ ตัวเลือก l2_normalize หากไม่เป็นเช่นนั้น Boolean False

เตรียมข้อมูล

เครื่องมือฝังข้อความใช้งานได้กับข้อมูลข้อความ (String) งานจะจัดการอินพุตข้อมูล การประมวลผลล่วงหน้า ซึ่งรวมถึงการแปลงเป็นโทเค็นและการประมวลผลล่วงหน้า Tensor ทั้งหมด การประมวลผลล่วงหน้าจะดำเนินการภายในฟังก์ชัน embed() ไม่จำเป็นต้องใช้ การประมวลผลข้อความอินพุตเพิ่มเติมล่วงหน้า

val inputText = "The input text to be embedded."

เรียกใช้งาน

เครื่องมือฝังข้อความใช้ฟังก์ชัน embed เพื่อเรียกใช้การอนุมาน สำหรับข้อความ การฝัง ซึ่งหมายความว่าการแสดงผลเวกเตอร์ที่มีการฝังสำหรับข้อความที่ป้อน

โค้ดต่อไปนี้แสดงวิธีประมวลผลการประมวลผลด้วยโมเดลงาน

textEmbedder?.let {
    val firstEmbed =
        it.embed(firstText).embeddingResult().embeddings().first()
    val secondEmbed =
        it.embed(secondText).embeddingResult().embeddings().first()
    ...
}

ในโค้ดตัวอย่าง มีการเรียกฟังก์ชัน embed ใน TextEmbedderHelper.kt

จัดการและแสดงผลลัพธ์

หลังจากเรียกใช้การอนุมาน งานเครื่องมือฝังข้อความจะแสดงผล TextEmbedderResult ที่มีรายการการฝัง (ทั้งจุดทศนิยมหรือ สเกลาร์-ควอนซ์) สำหรับข้อความอินพุต

ตัวอย่างต่อไปนี้แสดงตัวอย่างข้อมูลเอาต์พุตจากงานนี้

TextEmbedderResult:
  Embedding #0 (sole embedding head):
    float_embedding: {0.2345f, 0.1234f, ..., 0.6789f}
    head_index: 0

คุณสามารถเปรียบเทียบความคล้ายคลึงกันทางอรรถศาสตร์ของการฝัง 2 อย่างโดยใช้ TextEmbedder.cosineSimilarity ดูตัวอย่างจากโค้ดต่อไปนี้

val similarity = TextEmbedder.cosineSimilarity(firstEmbed, secondEmbed)

ในโค้ดตัวอย่าง มีการเรียกฟังก์ชัน TextEmbedder.cosineSimilarity() ใน TextEmbedderHelper.kt