สร้างเครื่องมือค้นหาความหมายสำหรับคอลัมน์แบบตารางด้วย Transformers และ Amazon OpenSearch Service

สร้างเครื่องมือค้นหาความหมายสำหรับคอลัมน์แบบตารางด้วย Transformers และ Amazon OpenSearch Service

โหนดต้นทาง: 1986937

ค้นหาคอลัมน์ที่คล้ายกันใน ทะเลสาบข้อมูล มีแอปพลิเคชันที่สำคัญในการทำความสะอาดข้อมูลและการเพิ่มความคิดเห็น การจับคู่สคีมา การค้นหาข้อมูล และการวิเคราะห์จากแหล่งข้อมูลต่างๆ การไม่สามารถค้นหาและวิเคราะห์ข้อมูลได้อย่างแม่นยำจากแหล่งข้อมูลที่แตกต่างกันแสดงถึงศักยภาพในการลดประสิทธิภาพสำหรับทุกคน ตั้งแต่นักวิทยาศาสตร์ข้อมูล นักวิจัยทางการแพทย์ นักวิชาการ ไปจนถึงนักวิเคราะห์ทางการเงินและรัฐบาล

โซลูชันทั่วไปเกี่ยวข้องกับการค้นหาคำหลักที่เป็นคำศัพท์หรือการจับคู่นิพจน์ทั่วไป ซึ่งมีความเสี่ยงต่อปัญหาด้านคุณภาพของข้อมูล เช่น ไม่มีชื่อคอลัมน์หรือหลักการตั้งชื่อคอลัมน์ที่แตกต่างกันในชุดข้อมูลที่หลากหลาย (ตัวอย่างเช่น zip_code, zcode, postalcode).

ในโพสต์นี้ เราสาธิตวิธีแก้ปัญหาสำหรับการค้นหาคอลัมน์ที่คล้ายกันตามชื่อคอลัมน์ เนื้อหาคอลัมน์ หรือทั้งสองอย่าง วิธีการแก้ปัญหาใช้ อัลกอริทึมเพื่อนบ้านที่ใกล้ที่สุดโดยประมาณ พร้อมใช้งานใน บริการ Amazon OpenSearch เพื่อค้นหาคอลัมน์ที่มีความหมายคล้ายกัน เพื่ออำนวยความสะดวกในการค้นหา เราสร้างการแสดงคุณลักษณะ (การฝัง) สำหรับแต่ละคอลัมน์ใน Data Lake โดยใช้แบบจำลอง Transformer ที่ผ่านการฝึกอบรมล่วงหน้าจาก ไลบรารีตัวแปลงประโยค in อเมซอน SageMaker. สุดท้าย ในการโต้ตอบและแสดงภาพผลลัพธ์จากโซลูชันของเรา เราสร้างการโต้ตอบ สตรีมไลท์ เว็บแอปพลิเคชันทำงานอยู่ AWS ฟาร์เกต.

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

ภาพรวมโซลูชัน

แผนภาพสถาปัตยกรรมต่อไปนี้แสดงเวิร์กโฟลว์สองขั้นตอนสำหรับการค้นหาคอลัมน์ที่มีความหมายคล้ายกัน ด่านแรกดำเนินการ ฟังก์ชันขั้นตอนของ AWS เวิร์กโฟลว์ที่สร้างการฝังจากคอลัมน์ตารางและสร้างดัชนีการค้นหา OpenSearch Service ขั้นตอนที่สองหรือขั้นตอนการอนุมานออนไลน์ เรียกใช้แอปพลิเคชัน Streamlit ผ่าน Fargate เว็บแอปพลิเคชันรวบรวมคำค้นหาอินพุตและดึงข้อมูลจากดัชนี OpenSearch Service คอลัมน์ที่คล้ายกันมากที่สุดโดยประมาณกับคำค้นหา

สถาปัตยกรรมโซลูชัน

รูปที่ 1 สถาปัตยกรรมโซลูชัน

เวิร์กโฟลว์อัตโนมัติดำเนินการตามขั้นตอนต่อไปนี้:

  1. ผู้ใช้อัปโหลดชุดข้อมูลแบบตารางลงใน บริการจัดเก็บข้อมูลอย่างง่ายของ Amazon บัคเก็ต (Amazon S3) ซึ่งเรียกใช้ไฟล์ AWS แลมบ์ดา ฟังก์ชันที่เริ่มต้นเวิร์กโฟลว์ของ Step Functions
  2. เวิร์กโฟลว์เริ่มต้นด้วย AWS กาว งานที่แปลงไฟล์ CSV เป็น อาปาเช่ปาร์เก้ รูปแบบข้อมูล
  3. งาน SageMaker Processing สร้างการฝังสำหรับแต่ละคอลัมน์โดยใช้โมเดลที่ผ่านการฝึกอบรมมาแล้วหรือโมเดลการฝังคอลัมน์แบบกำหนดเอง งานการประมวลผล SageMaker จะบันทึกการฝังคอลัมน์สำหรับแต่ละตารางใน Amazon S3
  4. ฟังก์ชัน Lambda สร้างโดเมน OpenSearch Service และคลัสเตอร์เพื่อจัดทำดัชนีการฝังคอลัมน์ที่สร้างในขั้นตอนก่อนหน้า
  5. ในที่สุด เว็บแอปพลิเคชัน Streamlit แบบอินเทอร์แอกทีฟจะถูกปรับใช้กับ Fargate เว็บแอ็พพลิเคชันมีส่วนต่อประสานสำหรับผู้ใช้ในการป้อนข้อความค้นหาเพื่อค้นหาโดเมน OpenSearch Service สำหรับคอลัมน์ที่คล้ายกัน

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

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

ในการใช้โซลูชันนี้ คุณต้องมีสิ่งต่อไปนี้:

  • An บัญชี AWS.
  • ความคุ้นเคยเบื้องต้นกับบริการของ AWS เช่น ชุดพัฒนา AWS Cloud (AWS CDK), Lambda, OpenSearch Service และ SageMaker Processing
  • ชุดข้อมูลแบบตารางเพื่อสร้างดัชนีการค้นหา คุณสามารถนำข้อมูลแบบตารางมาเองหรือดาวน์โหลดชุดข้อมูลตัวอย่างได้ GitHub.

สร้างดัชนีการค้นหา

ขั้นตอนแรกสร้างดัชนีเครื่องมือค้นหาของคอลัมน์ รูปต่อไปนี้แสดงเวิร์กโฟลว์ของ Step Functions ที่รันสเตจนี้

เวิร์กโฟลว์ของฟังก์ชันขั้นตอน

รูปที่ 2 – เวิร์กโฟลว์ของฟังก์ชันขั้นตอน – โมเดลการฝังหลายตัว

ชุดข้อมูล

ในโพสต์นี้ เราสร้างดัชนีการค้นหาเพื่อรวมกว่า 400 คอลัมน์จากชุดข้อมูลแบบตารางกว่า 25 ชุด ชุดข้อมูลมาจากแหล่งสาธารณะต่อไปนี้:

สำหรับรายการทั้งหมดของตารางที่รวมอยู่ในดัชนี โปรดดูบทช่วยสอนเกี่ยวกับโค้ด GitHub.

คุณสามารถนำชุดข้อมูลแบบตารางของคุณเองมาเสริมข้อมูลตัวอย่างหรือสร้างดัชนีการค้นหาของคุณเองได้ เรามีฟังก์ชัน Lambda สองฟังก์ชันที่เริ่มต้นเวิร์กโฟลว์ของ Step Functions เพื่อสร้างดัชนีการค้นหาสำหรับไฟล์ CSV แต่ละไฟล์หรือชุดไฟล์ CSV ตามลำดับ

แปลง CSV เป็น Parquet

ไฟล์ Raw CSV จะถูกแปลงเป็นรูปแบบข้อมูล Parquet ด้วย AWS Glue Parquet เป็นรูปแบบไฟล์รูปแบบคอลัมน์ที่ต้องการในการวิเคราะห์ข้อมูลขนาดใหญ่ที่ให้การบีบอัดและการเข้ารหัสที่มีประสิทธิภาพ ในการทดลองของเรา รูปแบบข้อมูล Parquet มีขนาดพื้นที่จัดเก็บลดลงอย่างมากเมื่อเทียบกับไฟล์ CSV ดิบ นอกจากนี้ เรายังใช้ Parquet เป็นรูปแบบข้อมูลทั่วไปในการแปลงรูปแบบข้อมูลอื่นๆ (เช่น JSON และ NDJSON) เนื่องจากสนับสนุนโครงสร้างข้อมูลที่ซ้อนกันขั้นสูง

สร้างการฝังคอลัมน์แบบตาราง

ในการแยกการฝังสำหรับแต่ละคอลัมน์ของตารางในชุดข้อมูลตารางตัวอย่างในโพสต์นี้ เราใช้โมเดลที่ผ่านการฝึกอบรมมาแล้วต่อไปนี้จาก sentence-transformers ห้องสมุด. สำหรับรุ่นเพิ่มเติม โปรดดูที่ โมเดลสำเร็จรูป.

งานประมวลผล SageMaker กำลังทำงาน create_embeddings.py(รหัส) สำหรับรุ่นเดียว สำหรับการแยกการฝังจากหลายรุ่น เวิร์กโฟลว์จะรันงาน SageMaker Processing แบบคู่ขนานตามที่แสดงในเวิร์กโฟลว์ Step Functions เราใช้แบบจำลองเพื่อสร้างการฝังสองชุด:

  • column_name_embeddings – การฝังชื่อคอลัมน์ (ส่วนหัว)
  • column_content_embeddings – การฝังเฉลี่ยของแถวทั้งหมดในคอลัมน์

สำหรับข้อมูลเพิ่มเติมเกี่ยวกับกระบวนการฝังคอลัมน์ โปรดดูบทช่วยสอนเกี่ยวกับโค้ด GitHub.

อีกทางเลือกหนึ่งสำหรับขั้นตอนการประมวลผล SageMaker คือการสร้างการแปลงเป็นชุดของ SageMaker เพื่อรับการฝังคอลัมน์ในชุดข้อมูลขนาดใหญ่ ซึ่งจำเป็นต้องปรับใช้โมเดลกับตำแหน่งข้อมูล SageMaker สำหรับข้อมูลเพิ่มเติม โปรดดูที่ ใช้การแปลงเป็นชุด.

การฝังดัชนีด้วยบริการ OpenSearch

ในขั้นตอนสุดท้ายของขั้นตอนนี้ ฟังก์ชัน Lambda จะเพิ่มการฝังคอลัมน์ในบริการ OpenSearch โดยประมาณ k-Nearest-Neighbor (kNN) ดัชนีการค้นหา. แต่ละรุ่นได้รับการกำหนดดัชนีการค้นหาของตัวเอง สำหรับข้อมูลเพิ่มเติมเกี่ยวกับพารามิเตอร์ดัชนีการค้นหา kNN โดยประมาณ โปรดดูที่ เค-เอ็น.

การอนุมานออนไลน์และการค้นหาความหมายด้วยเว็บแอป

ขั้นตอนที่สองของเวิร์กโฟลว์เรียกใช้ สตรีมไลท์ เว็บแอปพลิเคชันที่คุณสามารถป้อนข้อมูลและค้นหาคอลัมน์ที่มีความหมายคล้ายกันซึ่งจัดทำดัชนีใน OpenSearch Service ชั้นแอปพลิเคชันใช้ไฟล์ แอปพลิเคชัน Load Balancerฟาร์เกตและแลมบ์ดา โครงสร้างพื้นฐานของแอปพลิเคชันจะถูกปรับใช้โดยอัตโนมัติโดยเป็นส่วนหนึ่งของโซลูชัน

แอปพลิเคชันอนุญาตให้คุณป้อนข้อมูลและค้นหาชื่อคอลัมน์ที่มีความหมายคล้ายกัน เนื้อหาคอลัมน์ หรือทั้งสองอย่าง นอกจากนี้ คุณสามารถเลือกรูปแบบการฝังและจำนวนเพื่อนบ้านที่ใกล้ที่สุดเพื่อส่งคืนจากการค้นหา แอปพลิเคชันรับอินพุต ฝังอินพุตด้วยโมเดลที่ระบุ และใช้งาน การค้นหา kNN ใน OpenSearch Service เพื่อค้นหาการฝังคอลัมน์ที่จัดทำดัชนีและค้นหาคอลัมน์ที่คล้ายกันมากที่สุดกับอินพุตที่กำหนด ผลการค้นหาที่แสดงประกอบด้วยชื่อตาราง ชื่อคอลัมน์ และคะแนนความคล้ายคลึงกันสำหรับคอลัมน์ที่ระบุ ตลอดจนตำแหน่งของข้อมูลใน Amazon S3 สำหรับการสำรวจเพิ่มเติม

รูปภาพต่อไปนี้แสดงตัวอย่างเว็บแอปพลิเคชัน ในตัวอย่างนี้ เราค้นหาคอลัมน์ใน Data Lake ของเราที่มีลักษณะคล้ายกัน Column Names (ประเภทน้ำหนักบรรทุก) มัน district (น้ำหนักบรรทุก). แอพพลิเคชั่นที่ใช้ all-MiniLM-L6-v2 เป็น รูปแบบการฝัง และกลับมา 10 (k) เพื่อนบ้านที่ใกล้ที่สุดจากดัชนี OpenSearch Service ของเรา

แอปพลิเคชันกลับมา transit_district, city, boroughและ location เป็นสี่คอลัมน์ที่คล้ายกันมากที่สุดตามข้อมูลที่จัดทำดัชนีใน OpenSearch Service ตัวอย่างนี้แสดงให้เห็นถึงความสามารถของแนวทางการค้นหาในการระบุคอลัมน์ที่มีความหมายคล้ายกันในชุดข้อมูลต่างๆ

ส่วนติดต่อผู้ใช้เว็บแอปพลิเคชัน

รูปที่ 3: ส่วนติดต่อผู้ใช้เว็บแอปพลิเคชัน

ทำความสะอาด

หากต้องการลบทรัพยากรที่สร้างโดย AWS CDK ในบทช่วยสอนนี้ ให้เรียกใช้คำสั่งต่อไปนี้:

cdk destroy --all

สรุป

ในโพสต์นี้ เรานำเสนอเวิร์กโฟลว์แบบ end-to-end สำหรับการสร้างเครื่องมือค้นหาความหมายสำหรับคอลัมน์แบบตาราง

เริ่มต้นวันนี้ด้วยข้อมูลของคุณเองด้วยการสอนโค้ดของเราที่มีอยู่บน GitHub. หากคุณต้องการความช่วยเหลือในการเร่งการใช้ ML ในผลิตภัณฑ์และกระบวนการของคุณ โปรดติดต่อ ห้องปฏิบัติการโซลูชันแมชชีนเลิร์นนิงของ Amazon.


เกี่ยวกับผู้เขียน

คาจิ โอโดเมเนะ เป็นนักวิทยาศาสตร์ประยุกต์ที่ AWS AI เขาสร้างโซลูชัน AI/ML เพื่อแก้ปัญหาทางธุรกิจให้กับลูกค้า AWS

เทย์เลอร์ แมคแนลลี่ เป็นสถาปนิก Deep Learning ที่ Amazon Machine Learning Solutions Lab เขาช่วยลูกค้าจากอุตสาหกรรมต่างๆ สร้างโซลูชันที่ใช้ประโยชน์จาก AI/ML บน AWS เขาเพลิดเพลินกับกาแฟดีๆ สักถ้วย กลางแจ้ง และมีเวลาอยู่กับครอบครัวและสุนัขที่กระฉับกระเฉง

ออสติน เวลช์ เป็นนักวิทยาศาสตร์ข้อมูลใน Amazon ML Solutions Lab เขาพัฒนาโมเดลการเรียนรู้เชิงลึกแบบกำหนดเองเพื่อช่วยให้ลูกค้าภาครัฐของ AWS เร่งการนำ AI และระบบคลาวด์ไปใช้ ในเวลาว่าง เขาชอบอ่านหนังสือ เดินทาง และยิวยิตสู

ประทับเวลา:

เพิ่มเติมจาก AWS ข้อมูลขนาดใหญ่

ปรับจุดตรวจสอบให้เหมาะสมใน Amazon Managed Service ของคุณสำหรับแอปพลิเคชัน Apache Flink พร้อมการลดบัฟเฟอร์และจุดตรวจสอบที่ไม่ได้จัดแนว – ส่วนที่ 1 | อเมซอนเว็บเซอร์วิส

โหนดต้นทาง: 2881428
ประทับเวลา: กันยายน 14, 2023