3 คะแนน โดย GN⁺ 2024-07-28 | 1 ความคิดเห็น | แชร์ทาง WhatsApp
  • sgrep เป็นเครื่องมือบรรทัดคำสั่งที่ใช้ word embedding เพื่อทำการค้นหาเชิงความหมายสำหรับข้อความที่ป้อนเข้าไป
    • ค้นหาคำที่มีความใกล้เคียงกันในเชิงความหมายกับคำค้น แทนการจับคู่สตริงแบบตรงตัวอย่างเดียว
    • ออกแบบมาเพื่อมอบประสบการณ์การใช้งานที่คล้ายกับ grep
  • ความสามารถ
    • ค้นหาเชิงความหมายด้วย Word2Vec embedding
    • ตั้งค่า similarity threshold ได้
    • แสดงบริบทรอบบรรทัดที่ตรงกันทั้งก่อนและหลัง
    • แสดงผลแบบไฮไลต์สีสำหรับคำที่ตรงกันและหมายเลขบรรทัด
    • รองรับการอ่านจากไฟล์หรือ standard input
    • ตั้งค่าได้ผ่านไฟล์ JSON และอาร์กิวเมนต์บรรทัดคำสั่ง
  • ตัวอย่างการใช้งาน
    • ค้นหาคำที่มีความหมายใกล้เคียงกับ "death" ใน "The Old Man and the Sea" ของ Hemingway พร้อมบริบทและหมายเลขบรรทัด:
      curl -s 'https://gutenberg.ca/ebooks/hemingwaye-oldmanandthesea/…' \  
      | sgrep -C 2 -n -threshold 0.55 death  
      
    • คำสั่งนี้จะทำสิ่งต่อไปนี้:
      • ดึงข้อความของ "The Old Man and the Sea" จาก Project Gutenberg Canada
      • pipe ข้อความเข้าไปยัง sgrep
      • ค้นหาคำที่มีความหมายใกล้เคียงกับ "death"
      • ตั้งค่า similarity threshold เป็น 0.55 (-threshold 0.55)
      • แสดงบริบท 2 บรรทัดก่อนและหลังแต่ละผลลัพธ์ที่ตรงกัน (-C 2)
      • แสดงหมายเลขบรรทัด (-n)
    • เอาต์พุตจะแสดงคะแนนความคล้าย คำที่ถูกเน้น บริบท และหมายเลขบรรทัด
  • Word2Vec model
    • sgrep ต้องใช้โมเดล Word2Vec ในรูปแบบไบนารี สามารถใช้โมเดลที่ฝึกไว้ล่วงหน้า เช่น Word2Vec ของ Google หรือฝึกเองด้วยเครื่องมืออย่าง gensim ได้
    • ดาวน์โหลดไฟล์ .bin มาไว้ในเครื่องและอัปเดต config.json
    • download-model.sh เป็นสคริปต์ตัวช่วยแบบง่ายที่บันทึกโมเดล word2vec ขนาดเล็กที่ eyaler โฮสต์ไว้ลงในไดเรกทอรี models/googlenews-slim/

สรุปโดย GN⁺

  • sgrep เป็นเครื่องมือที่ใช้ word embedding เพื่อค้นหาคำที่มีความหมายใกล้เคียงกันในข้อความ
  • มอบประสบการณ์การใช้งานคล้าย grep แต่มีความสามารถที่ไปไกลกว่าการจับคู่สตริงแบบตรงตัว
  • ใช้โมเดล Word2Vec ในการตัดสินความคล้าย และสามารถใช้งานได้อย่างยืดหยุ่นผ่านตัวเลือกการตั้งค่าหลากหลาย
  • มีประโยชน์สำหรับงานวิเคราะห์ข้อความและงานประมวลผลภาษาธรรมชาติ โดยเฉพาะเมื่อจำเป็นต้องค้นหาแบบอิงบริบท

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

 
GN⁺ 2024-07-28
ความคิดเห็นจาก Hacker News
  • ขณะแกะอ่านโค้ด มีการแชร์ทิปเล็ก ๆ น้อย ๆ หลายข้อ

    • สามารถอ่านเวกเตอร์ได้ทีเดียว
    • ใช้ BLAS เพื่อคำนวณความคล้ายได้เร็วขึ้น
    • หากทำ normalization ตอนโหลดเวกเตอร์ cosine similarity จะกลายเป็น inner product ของเวกเตอร์
    • สงสัยว่าสามารถรองรับหลาย CPU ได้หรือไม่
    • รีโพซิทอรี word2vec ใช้โควตาดาต้าเกินแล้ว
    • เสนอ Stack Overflow และ Hugging Face เป็นแหล่งทางเลือก
  • ไอเดียนี้มีประโยชน์มาก จนสงสัยว่าทำไมตัวเองไม่เคยนึกถึง

  • มีทั้งเครื่องมือและบริษัทชื่อ semgrep อยู่แล้ว

  • ถ้าเครื่องมือนี้จัดการกับวลีเชิงอธิบายหรือวลีผสมได้ ก็จะมีประโยชน์มาก

    • ตอนนี้ข้อเสียใหญ่ที่สุดของเสิร์ชเอนจินคือการค้นหาแบบ hit เดี่ยว
  • เป็นเครื่องมือที่เจ๋งมาก

    • ดูเหมือนจะแยกแต่ละบรรทัดเป็นคำ แล้วใช้ embedding ของแต่ละคำ
    • สงสัยว่าสามารถค้นหาเชิงความหมายกับลำดับข้อความยาว ๆ ได้หรือไม่
    • การใช้เวกเตอร์คำจะเร็วและเบากว่าการใช้โมเดล Transformer
    • อาจพิจารณาวิธีตรวจจับคำที่แยกไม่ชัด และหาคำทั้งหมดที่ปรากฏเป็น substring ได้ด้วย
  • เครื่องมือนี้เจ๋งมากและอยากลองใช้จริง ๆ

    • การค้นหาเชิงความหมายตลอดทั้งข้อความน่าจะมอบประสบการณ์ผู้ใช้ที่ดีกว่าในหลายแอปพลิเคชัน
  • เสนอ fltr เป็นเครื่องมือคล้ายกัน

    • คล้าย grep สำหรับคำถามภาษาธรรมชาติ
  • เจ๋งมาก และสงสัยว่าสามารถค้นหาชื่อไฟล์ได้ด้วยหรือไม่

  • ได้เจอเครื่องมือที่เจ๋งมาก

    • เนื่องจากชื่อ semgrep ถูกใช้อยู่แล้ว จึงควรพิจารณาชื่ออื่น