งานเครื่องมือฝังข้อความ MediaPipe ช่วยให้คุณสร้างการนำเสนอข้อมูลข้อความในรูปแบบตัวเลขเพื่อ จับความหมายในเชิงอรรถศาสตร์ได้ วิธีการเหล่านี้จะแสดงวิธีใช้ เครื่องมือฝังข้อความด้วยแอป Android
สำหรับข้อมูลเพิ่มเติมเกี่ยวกับความสามารถ โมเดล และตัวเลือกการกำหนดค่า ของงานนี้ โปรดดูภาพรวม
ตัวอย่างโค้ด
โค้ดตัวอย่าง MediaPipe Tasks เป็นการใช้งานที่เรียบง่ายของเครื่องมือฝังข้อความ แอปสำหรับ Android ตัวอย่างนี้ประเมินความคล้ายคลึงกันทางความหมายระหว่าง 2 ค่า และต้องใช้อุปกรณ์ Android จริงหรือ Android โปรแกรมจำลอง
คุณสามารถใช้แอปนี้เป็นจุดเริ่มต้นสำหรับแอป Android ของคุณเอง หรืออ้างอิงถึงแอปนั้น เมื่อแก้ไขแอปที่มีอยู่ โค้ดตัวอย่างของเครื่องมือฝังข้อความโฮสต์อยู่บน GitHub
ดาวน์โหลดโค้ด
วิธีการต่อไปนี้แสดงวิธีสร้างสำเนาตัวอย่างในเครื่อง โดยใช้เครื่องมือบรรทัดคำสั่ง git
วิธีดาวน์โหลดโค้ดตัวอย่าง
- โคลนที่เก็บ Git โดยใช้คำสั่งต่อไปนี้
git clone https://github.com/google-ai-edge/mediapipe-samples
- นอกจากนี้ คุณสามารถกำหนดค่าอินสแตนซ์ 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