7 คะแนน โดย GN⁺ 2024-09-03 | 1 ความคิดเห็น | แชร์ทาง WhatsApp
  • บทความสรุปประสบการณ์การพัฒนาเว็บสแครปเปอร์ที่มี AI ช่วย โดยใช้ฟีเจอร์ structured outputs ใหม่ของ OpenAI

ขอให้ GPT-4o สแครปข้อมูล

  • การทดลองแรกคือขอให้ GPT-4o ดึงข้อมูลจากสตริง HTML
  • ตั้งค่า structured output โดยใช้โมเดล Pydantic
    from typing import List, Dict  
    class ParsedColumn(BaseModel):  
        name: str  
        values: List[str]  
    
    class ParsedTable(BaseModel):  
        name: str  
        columns: List[ParsedColumn]  
    
  • system prompt มีดังนี้:

    คุณเป็นผู้เชี่ยวชาญด้านเว็บสแครปปิง ต้องรับเนื้อหาของตาราง HTML และดึงข้อมูลแบบมีโครงสร้างออกมา

การพาร์สตารางที่ซับซ้อน

  • หลังจากทดลองกับตารางแบบง่ายแล้ว ได้ทดสอบตารางที่ซับซ้อน เช่น พยากรณ์อากาศ 10 วันของ Weather.com
  • GPT-4o พาร์สข้อมูลได้อย่างแม่นยำโดยเพิ่มคอลัมน์ Day/Night
  • ตอนแรกคิดว่าคอลัมน์ Condition เป็น Hallucination เพราะมองไม่เห็นบนเว็บไซต์ แต่เมื่อตรวจดูซอร์สโค้ดพบว่าเป็นแท็กที่มีอยู่จริง

แถวที่ถูกผสานทำให้โมเดลพัง

  • ได้ทดสอบตารางแบบง่ายของ Wikipedia (Human Development Index) แต่โมเดลล้มเหลวเพราะมีแถวที่ถูกผสาน
  • ลองแก้ system prompt แล้ว แต่ก็ไม่ได้ผล

ขอให้ GPT-4o ส่งคืน XPath

  • เพื่อลดค่าใช้จ่ายของการเรียก OpenAI API จึงขอให้ส่งคืน XPath แทนข้อมูลที่พาร์สแล้ว
  • อย่างไรก็ตาม โมเดลมักส่งคืน XPath ที่ผิดหรือไม่ส่งข้อมูลกลับมาเลย

ผสานสองแนวทางเข้าด้วยกัน

  • ได้ลองใช้แนวทางดึงข้อมูลออกมาก่อน แล้วจึงอ้างอิงข้อมูลนั้นเพื่อขอ XPath
  • วิธีนี้ให้ผลลัพธ์ดีกว่า แต่เกิดปัญหาที่รูปภาพถูกแปลงเป็นข้อความ

GPT-4o มีค่าใช้จ่ายสูงมาก

  • การสแครปด้วย GPT-4o มีค่าใช้จ่ายสูง
  • จึงเพิ่มตรรกะสำหรับทำความสะอาดสตริง HTML เพื่อลบข้อมูลที่ไม่จำเป็นและลดต้นทุน

บทสรุปและเดโม

  • ผู้เขียนประทับใจกับคุณภาพการดึงข้อมูลของ GPT-4o แต่ก็ผิดหวังกับปัญหาเรื่องค่าใช้จ่าย
  • มีการให้เดโมอย่างง่ายที่สร้างด้วย Streamlit
  • ยังมีอีกหลายจุดที่ต้องปรับปรุงผ่านการทดลองเพิ่มเติม

สรุปโดย GN⁺

  • บทความนี้สำรวจทั้งศักยภาพและข้อจำกัดของเว็บสแครปปิงที่ใช้ AI
  • แสดงให้เห็นว่าสามารถใช้ฟีเจอร์ structured outputs ของ GPT-4o เพื่อดึงข้อมูลตารางที่ซับซ้อนได้อย่างแม่นยำ
  • แม้จะมีปัญหาเรื่องต้นทุนและข้อจำกัดทางเทคนิคบางส่วน แต่ก็สะท้อนให้เห็นศักยภาพของเครื่องมือเว็บสแครปปิงที่มี AI ช่วย
  • โครงการอื่นที่มีฟังก์ชันคล้ายกัน ได้แก่ BeautifulSoup, Scrapy เป็นต้น

1 ความคิดเห็น

 
GN⁺ 2024-09-03
ความเห็นจาก Hacker News
  • การแปลง HTML เป็นรูปแบบที่เรียบง่ายกว่า (เช่น markdown) แล้วค่อยส่งให้ LLM ได้ผลดี

    • เคยลองใช้ Extractus และ dom-to-semantic-markdown
    • ภายในใช้ Apify และ Firecrawl เพื่อรัน Magic Loops บนคลาวด์
    • ใน Chrome Extension ใช้ dom-to-semantic-markdown
    • กำลังสำรวจวิธีดึงองค์ประกอบเฉพาะผ่านโฟลว์สนับสนุนผู้ใช้
    • เมื่อทำให้ปัญหาง่ายลง ก็ประสบความสำเร็จได้แม้ใช้ GPT-4o mini
  • สำหรับคอนเทนต์ที่มีโครงสร้างชัดเจน (เช่น รายการข้อมูลหรือตารางง่าย ๆ) ไม่จำเป็นต้องใช้ LLM

    • เคยสร้างเว็บสแครปเปอร์เวอร์ชันแรกด้วย AI แต่ heuristic ที่อิงจากแอตทริบิวต์และตำแหน่งขององค์ประกอบนั้นเร็วกว่า ถูกกว่า และแม่นยำกว่า
    • สำหรับเว็บไซต์ส่วนใหญ่ แนวทางที่ไม่ใช้ AI ทำงานได้ดีมาก
    • ควรตรวจสอบก่อนว่าจำเป็นต้องใช้ AI จริงหรือไม่
  • น่าแปลกใจที่ผู้เขียนทำงานเสร็จไปแล้ว 99% แต่ไม่ได้ดาวน์โหลด ollama มาทดสอบสำหรับอีก 1% ที่เหลือ

    • โมเดล 7B หรือ 30B อาจทำงานได้ดีในกรณีนี้
    • ไม่จำเป็นต้องใช้ GPT-4o
  • มีการใช้วิธีแคปภาพหน้าจอของหน้าเว็บ แล้วครอปเฉพาะส่วนที่ต้องการส่งให้ GPT

    • มีประโยชน์เมื่อต้องทำงานแบบแมนนวลเพื่อเปรียบเทียบราคาจากผู้ให้บริการหลายราย
    • แม้จะมีค่าใช้จ่ายสูง แต่ก็ยังถูกกว่าการใช้คนจริง และทำให้ไปทำงานที่มีความหมายมากกว่าได้
  • OpenAI เพิ่งประกาศ Batch API

    • สามารถเตรียมพรอมป์ต์ทั้งหมดแล้วรันเป็นแบตช์ได้
    • ลดต้นทุนลงได้ครึ่งหนึ่ง
    • มีประโยชน์สำหรับแอปพลิเคชันที่ไม่ต้องทำงานแบบเรียลไทม์
  • วิธีให้ตัวอย่าง HTML แล้วขอ code snippet ของ beautifulsoup นั้นได้ผลดี

    • โครงสร้างที่ต้องการสแครปยังคงเหมือนเดิม
    • การใช้ LLM กับการพาร์สจริง ๆ ถือว่าเกินความจำเป็นและมีความเสี่ยงที่ผลลัพธ์จะเพี้ยน
  • สงสัยว่ามี "html reducer" หรือไม่

    • 90% ของโทเค็นในซอร์สของหน้าเว็บเป็นสิ่งที่ไม่จำเป็น
    • หากใช้ DOM parser เพื่อคงไว้เฉพาะโหนดที่มีข้อความ ก็น่าจะช่วยประหยัดได้มาก
    • ใช้ readability อยู่ แต่คุณภาพจะลดลงในเว็บไซต์ที่มี JS หนัก ๆ
  • แทนที่จะให้ GPT-4o สแครปโดยตรง อาจให้ GPT-4o เขียนสคริปต์เว็บสแครปเปอร์แบบง่ายแทนได้

    • หากมีปัญหา ก็ใช้พรอมป์ต์ลูป
    • การสร้างและรันตัวแก้ข้อจำกัดจะมีประสิทธิภาพมากกว่า
  • ที่ Kadoa กำลังทำงานด้าน AI automation สำหรับเว็บสแครปปิง

    • ช่วงแรกใช้ GPT-3 แต่ภายหลังพัฒนาโซลูชันที่คุ้มค่ากว่า
    • ใช้ codegen เพื่อสร้างโค้ดสำหรับดึงข้อมูลด้วย CSS selector หรือ XPath
    • ใช้ LLM ขนาดเล็กเพื่อจัดระเบียบข้อมูลและแมปให้อยู่ในรูปแบบที่ต้องการ
    • ใช้ LLM เป็นผู้ตัดสินเพื่อประเมินคุณภาพข้อมูล
    • ผสานวิธีวิศวกรรม ETL แบบดั้งเดิมเข้ากับขั้นตอนของ LLM ขนาดเล็ก
  • กำลังสร้างฐานข้อมูลดนตรีคลาสสิก

    • ใช้ ChatGPT เพื่อดึงรายการเหตุการณ์จาก Wikipedia
    • ใช้ chatgpt-mini เพื่อลดต้นทุน
    • ใช้ BeautifulSoup(html).text เพื่อลดจำนวนโทเค็น
    • เมื่อต้องสแครป 10,000 หน้า การให้ HTML แล้วให้เขียนโค้ด Python กลับมีประสิทธิภาพมากกว่า
    • ฟังก์ชัน from_html ของ Pandas มีประโยชน์ แต่ไม่ใช่ทุกตารางจะใช้แท็ก <table>