PdfGptIndexer - จัดทำดัชนีและสืบค้นเอกสาร PDF ด้วย OpenAI embeddings และ FAISS
(github.com/raghavan)- เป็นเครื่องมือสำหรับจัดทำดัชนีและสืบค้นเอกสาร PDF โดยใช้ OpenAI embeddings และ FAISS เพื่อสร้างระบบ RAG ที่สามารถสนทนากับเอกสาร PDF ได้
- ดึงข้อความจากโฟลเดอร์ PDF แล้วแบ่งเป็นชังก์ขนาด 1000 อักขระ โดยมีส่วนซ้อนทับ 200 อักขระ จากนั้นสร้าง embedding ด้วยโมเดล OpenAI
text-embedding-ada-002และบันทึกไว้ใน FAISS index แบบโลคัล - ในขั้นตอนการสืบค้น จะโหลดดัชนีเวกเตอร์ FAISS ที่บันทึกไว้ แปลงคำถามเป็น embedding แล้วค้นหาชังก์เอกสาร 3 อันดับแรกที่มีความคล้ายสูงสุด พร้อมแสดงคะแนนความคล้ายและข้อความตัวอย่าง
- การสร้างคำตอบใช้ GPT-4 สังเคราะห์คำตอบที่สอดคล้องกันโดยอิงจากบริบทที่ค้นคืนมา
- สามารถเก็บ embedding ไว้ในเครื่องได้ จึงไม่จำเป็นต้องสร้าง embedding ใหม่ทุกครั้งที่สืบค้น และหลังจากสร้างครั้งแรกแล้วก็สามารถสืบค้นข้อมูลได้โดยไม่ต้องเชื่อมต่ออินเทอร์เน็ตกับ OpenAI โดยจะเรียก API เฉพาะตอนสร้างคำตอบเท่านั้น
- ขั้นตอนการใช้งานหลักคือใช้
python indexer.pyเพื่อประมวลผล PDF และสร้างฐานข้อมูลเวกเตอร์ แล้วใช้python chatbot.pyเพื่อเริ่มอินเทอร์เฟซถามตอบแบบโต้ตอบ- สามารถระบุโฟลเดอร์ PDF และตำแหน่งบันทึกดัชนีผ่านอาร์กิวเมนต์คำสั่งได้
- จำเป็นต้องรันตัวจัดทำดัชนีใหม่เฉพาะเมื่อมีการเพิ่ม PDF ใหม่เข้าไปในคอลเลกชัน
- ข้อกำหนดในการใช้งานคือ Python 3.8 ขึ้นไป และ OpenAI API key ซึ่งตั้งค่าได้ผ่านค่า
OPENAI_API_KEYในไฟล์.env
1 ความคิดเห็น
ความคิดเห็นจาก Hacker News
สิ่งที่น่าหงุดหงิดที่สุดคือแอปแทบทั้งหมดที่ลอกไอเดียแนวนี้ต่างก็ ต้องใช้ OpenAI
พอได้แล้ว
ตัวเลือกที่ต้องใช้ OpenAI หรือคลาวด์ควรถูกวางไว้เป็น “การตั้งค่าขั้นสูงที่ทำได้ในทางเทคนิคแต่ค่อนข้างยุ่งยาก” และค่าเริ่มต้นควรไปในทางตรงกันข้าม แบบนั้นจะได้ผู้ใช้มากกว่ามาก
ผมคิดว่าแอปแบบนี้ควรทำให้ รันแบบโลคัลทั้งหมด เป็นค่าเริ่มต้น และให้เปลี่ยนไปใช้โมเดล Hugging Face ที่ต้องการได้ด้วยการแก้สตริงเพียงตัวเดียวในไฟล์
.tomlถ้าจำเป็นต้องใช้ OpenAI จริง ๆ ก็ทำให้เป็นไปได้ผ่านวิธีจัดการคีย์อย่าง Docker secret หรือเชน
passพร้อมกับการเปลี่ยนการตั้งค่าค่าเริ่มต้นควรเป็นโลคัลก่อน และควรประมวลผลในเครื่องให้มากที่สุด แล้วค่อยส่งโทเค็นจำนวนน้อยมากจากพรอมป์ที่รวบรวมแล้วไปยัง OpenAI เฉพาะเมื่อผู้ใช้ต้องการจริง ๆ เท่านั้น
บริษัทที่ใหญ่กว่านั้นต้องการความสามารถในการขยายระบบ และถึงอย่างนั้นก็ยังแข่งกับราคาของ OpenAI ได้ยาก
คนที่มีแนวทางแบบผู้ประกอบการอาจตั้งสตาร์ทอัพ OpenLLaMA ที่ให้บริการคิดเงินตามจำนวนคำขอ, fine-tuning และ vector storage ได้
ตอนนี้พ้นช่วงความว้าวไปแล้ว และผมอยากให้งานเสร็จอย่างมีประสิทธิภาพ
จากที่ทดสอบมาจนถึงตอนนี้ โมเดลเดียวที่ทำให้งานเดินได้ค่อนข้างเสถียรคือ GPT-4
ไม่รู้ว่าผมยังไม่เก่งเอง หรือว่ากำลังเป็นการคิดเข้าข้างแบบ HN ว่า LLM ตัวอื่นดีกว่ามากในแง่คุณภาพ ความสม่ำเสมอ และความน่าเชื่อถือที่จำเป็นสำหรับงานจริง
เดาว่านี่เป็นผลจากการที่ OpenAI ไม่มีโปรแกรมรับรองของตัวเอง
ตอนนี้ OpenAI มี embedding ที่ทั้งดีและถูกที่สุดตัวหนึ่งสำหรับโปรเจกต์ส่วนตัว
หลังจากสร้างเวกเตอร์แล้ว ถ้าต้องการก็ออกจากคลาวด์ทั้งหมดได้
LangChain ได้ abstract จุดที่คนไม่พอใจนั้นไว้แล้ว จึงเปลี่ยนตัวสร้าง embedding ได้ตลอด
ส่วนที่เหลือก็ใช้ Hugging Face อยู่แล้ว และเปลี่ยนไปใช้โมเดลอื่นนอกจาก GPT-2 ที่รองรับพรอมป์ได้
ต้องเก็บข้อมูลไว้เป็นส่วนตัวและไม่ให้รั่วไปยังบุคคลที่สาม ใช้อะไรอย่าง privateGPT ก็ได้ มีดาวบน GitHub 32,000 ดวง
ถ้าคีย์ไม่ใช่ของผม ข้อมูลก็ไม่ใช่ของผม
“โต้ตอบกับเอกสารของคุณแบบส่วนตัวด้วยพลังของ GPT, เป็นส่วนตัว 100%, ไม่มีข้อมูลรั่วไหล”[0]
[0] https://github.com/imartinez/privateGPT
ตอนนี้ยังไม่ใช่
มันจะดึงบริบทออกมาเพื่อเข้าใจคำถามเกี่ยวกับบันทึกล่าสุดได้ไหม?
ยังหาเครื่องซีรีส์ M ไม่ได้ เลยกำลังชั่งใจว่ารันบนสภาพแวดล้อมคลาวด์คอมพิวติงที่มี GPU จะดีกว่าหรือเปล่า
คือเขียนเอกสารไว้ แล้วแค่ถามคำถามเกี่ยวกับเนื้อหานั้นได้เลย
ดูจากระดับความหวาดระแวงของผู้มีอำนาจต่อ LLM แบบโลคัลแล้ว ถ้า telemetry ของ Windows รายงานว่าผู้คนทำอะไรกับ LLM โลคัล ผมก็คงไม่แปลกใจเลย
ใครที่คิดว่าไม่เป็นอย่างนั้น ผมว่าซื่อเกินไป
นี่คือการส่งข้อมูลส่วนตัวของผมไปให้ OpenAI ใช่ไหม? นั่นไม่ใช่ปัญหาร้ายแรงเหรอ?
ดูไม่ฉลาดเลยถ้าไม่ได้ลบข้อมูลส่วนบุคคลที่อ่อนไหวทั้งหมดออกจากข้อมูลก่อน ผมพลาดอะไรไปหรือเปล่า?
นโยบายการใช้ข้อมูล: https://openai.com/policies/api-data-usage-policies
นโยบายการใช้ข้อมูลแยกตามโมเดล: https://platform.openai.com/docs/models/how-we-use-your-data
นอกจากตรวจแค่ว่าต้องใช้คีย์ OpenAI หรือไม่ มีวิธีรู้ให้ละเอียดกว่านี้ไหมว่าข้อมูลส่วนตัวถูกใช้อย่างไร?
README ชวนสับสนมาก
เขียนว่าใช้โทเคไนเซอร์ GPT-2 และใช้ GPT-2 เป็นโมเดล embedding แต่ดูจากโค้ดแล้วเหมือนใช้ LangChain
OpenAIEmbeddingsค่าเริ่มต้นกับ OpenAI LLMนั่นคือ text-embedding-ada-002 กับ text-davinci-003 ตามลำดับไม่ใช่เหรอ?
ไม่เข้าใจเลยว่า GPT-2 เข้ามาเกี่ยวตรงไหน
GPT-2 ใช้แค่ในขั้นตอน tokenization เพื่อคำนวณความยาวโทเค็นอย่างมีประสิทธิภาพ
มีบริษัทไหนให้บริการแบบนี้ในรูปแบบโฮสต์ไหม?
อยากได้ AI ตัวเล็ก ๆ ที่ป้อนข้อมูลของผมทั้งหมดเข้าไปแล้วถามคำถามได้มากทีเดียว
มีฟีเจอร์อำนวยความสะดวกอย่างการผสานกับ Google Drive, วิดีโอ YouTube เป็นต้นด้วย
มีผู้ใช้งานรายวันมากกว่า 50,000 คน
ไม่เข้าใจ GPT-2 เป็นหนึ่งในโมเดลไม่กี่ตัวของ OpenAI ที่เปิดเผยต่อสาธารณะ เลยรันในเครื่องได้ทันที แล้วทำไมถึงใช้ API สำหรับงานนี้?
https://github.com/openai/gpt-2
ใช้
from langchain.embeddings import OpenAIEmbeddingsอยู่ และนี่คือ API embeddings ของ OpenAI คือ text-embedding-ada-002ส่วนที่ใช้ GPT-2 มีแค่
GPT2TokenizerFast.from_pretrained("gpt2")เท่านั้น และใช้เป็นฟังก์ชันนับความยาวจำนวนโทเค็นในยูทิลิตีRecursiveCharacterTextSplitter()ของ LangChainอันนี้ก็ไม่ค่อยสมเหตุสมผลเหมือนกัน ไม่รู้ว่าทำไมถึงใช้ tokenizer ของ GPT-2 ตรงนี้
แค่นับจำนวนอักขระ หรือนับจำนวนคำด้วย
.split()ก็พอแล้ว วิธีนับตรงนี้ไม่ได้สำคัญมากนักGPT-2 ใช้แค่เพื่อคำนวณความยาวโทเค็นอย่างมีประสิทธิภาพในกระบวนการ tokenize เท่านั้น
อัปเดต README ให้สะท้อนข้อมูลนี้อย่างถูกต้องแล้ว
มีแค่ผมหรือเปล่าที่ไม่จำเป็นต้องค้นหาข้อมูลทั้งหมดของตัวเอง? use case ตรงนี้คืออะไร?
ที่ทำงานมีกลุ่มที่คุยกันเรื่องการลงทุนหลายหัวข้อ และผู้จัดมีคอนเนกชันดี เลยพยายามพาวิทยากรภายนอกมาทุกสัปดาห์ ค่อนข้างได้ความรู้
ผมมีโน้ตดิบของแต่ละการบรรยาย เป้าหมายคือไล่ดูโน้ตเหล่านั้นแล้วจัดระเบียบความรู้ให้ดี ๆ เป็นรูปแบบคล้ายวิกิ
ผ่านมา 3 ปีตั้งแต่เริ่ม แต่ยังไม่มีเวลา และถ้ามองตามความเป็นจริงก็คงมีแนวโน้มว่าจะไม่มีเวลาต่อไป
ถ้าจะหาข้อมูลจากโน้ตเหล่านั้นก็ใช้การค้นหาข้อความได้ แต่มันไวต่อสตริงค้นหามากเกินไป เลยมักหาไม่เจอสิ่งที่ต้องการ
ถ้าข้อมูลกระจัดกระจายอยู่หลายไฟล์ ก็ต้องเปิดผลการค้นหาทั้งหมดมาไล่ดู
ถ้าใช้เทคโนโลยีแบบนี้ ก็ใส่โน้ตทั้งหมดลงใน vector DB แล้วถามสิ่งที่ต้องการด้วยภาษาธรรมชาติได้
ระบบในเครื่องจะตีความคำถาม ค้นหาเอกสารที่เกี่ยวข้องที่สุดจาก DB แล้วส่งคำถามกับผลการค้นหาไปยัง OpenAI เพื่อให้ตีความคำถามและหาคำตอบในโน้ต
เคยทำ proof of concept ด้วย LangChain และมันใช้งานได้ ครั้งหนึ่งมีโมเมนต์ “อ๋อ” ตอนที่มันรวมข้อมูลที่กระจายอยู่ในสองการบรรยายต่างกันมาตอบให้
สิ่งที่กังวลคือมีพารามิเตอร์ให้ปรับได้มากเกินไป และยังคิดวิธีหรือเมตริกสำหรับประเมินประสิทธิภาพของระบบไม่ออก ถ้ามีคำแนะนำก็คงดี
โน้ตนี้ไม่มีข้อมูลส่วนบุคคล จึงไม่มีปัญหาเรื่องความเป็นส่วนตัว
เคยอยากตั้งค่าอะไรคล้าย ๆ กันกับอีเมลกว่า 20 ปี แต่ไม่ได้ทำเพราะเรื่องความเป็นส่วนตัว อีกอย่างก็ใช้ mail indexer ชื่อ notmuch อยู่แล้ว เลยไม่ได้จำเป็นต้องใช้ AI มากขนาดนั้น
แต่สำหรับโน้ตอื่นที่ไม่ใช่ข้อมูลส่วนตัว ถ้าทำให้ระบบนี้ทำงานได้ดีพอ มันอาจเป็นตัวช่วยชีวิตได้เลย
หลายปีมานี้ผมจดโน้ตไว้หลายหัวข้อมากเกินไป และการไม่ต้องจัดระเบียบให้ดีมีมูลค่าเป็นเงินจริง ๆ
แค่ให้ผมจดโน้ต แล้วให้ AI ไปหาสิ่งที่ต้องการกลับมาก็พอ
บางครั้งรู้ตำแหน่งข้อมูล แต่มีปริมาณมาก และสิ่งที่ต้องการก็แค่คำอธิบายสั้น ๆ เกี่ยวกับเรื่องใดเรื่องหนึ่ง
บางครั้งมีข้อมูลจำนวนมากจากหลายแหล่ง และสิ่งที่ต้องการสุดท้ายคือสรุปว่าส่วนใหญ่หรือทั้งหมดเห็นตรงกันว่าอะไร หรือสรุปว่าต่างกันอย่างไร
use case มีเยอะ และเพราะเราคุ้นเคยกับวิธีเดิม ๆ ในการจัดการงานแบบนี้ ผมคิดว่าความมีประโยชน์มักจะยังไม่เกิดเป็นโมเมนต์แบบ “ไฟติด” จนกว่าจะได้ลงมือขุดดูความเป็นไปได้เอง
ขอบเขตกว้างพอสมควร โปรเจกต์ที่ผมกำลังทำอยู่ก็เป็นรูปแบบหนึ่งของสิ่งนี้ คือใส่โน้ตส่วนตัวและไดอารี่หลายปีเข้าไป แล้ว query เพื่อ การทบทวนตนเองและการเติบโตส่วนบุคคล
ผมคิดว่าพื้นที่นี้โดยรวมมีศักยภาพมาก
มีใครรู้ไหมว่า Milvus, Quickwit, Pinecone เปรียบเทียบกันอย่างไร?
กำลังคิดอยู่ว่าจะมีโอกาสให้คำปรึกษาเกี่ยวกับ LLM, การปรับแต่งแบบ fine-tuning/การค้นหาเวกเตอร์, แชตบอต สำหรับธุรกิจท้องถิ่นหรือไม่
อยากทำเครื่องมือที่แค่ลากไฟล์มาวางก็ได้การอนุมานแบบปรับให้เฉพาะบุคคลได้ง่าย ๆ ด้วย
ช่วงหลังในฟีด LinkedIn เห็น https://gpt-trainer.com/ โผล่ขึ้นมา และสำหรับงานเอกสารก็เห็นตัวอื่นอีกสองสามตัว
https://www.explainpaper.com/
https://www.konjer.xyz/
ไม่อยากแข่งกันด้านราคา
การให้บริการ LLM โอเพนซอร์สแบบโลคัลบน 3090 ก็คงเจ๋งดี แต่คงสเกลไม่ได้
เคยเห็นสตาร์ทอัพด้าน fine-tuning หรือ บริบทการค้นหาเวกเตอร์ อื่น ๆ บ้างไหม?
คิดว่าความต่างของ embedding น่าจะรู้สึกได้มากกว่าจากสิ่งที่ใช้สร้าง embedding มากกว่าจากทางเลือกด้านที่เก็บ/การค้นหา
เช่น ใช้ของในนี้ https://news.ycombinator.com/item?id=36649579 แทน OpenAI embeddings API
นึกความต่างระหว่างทางเลือกด้านที่เก็บ/การค้นหา embedding ไม่ค่อยออก นอกจากประสิทธิภาพในสเกลใหญ่ ต้นทุน ความชอบส่วนตัว หรือประสบการณ์นักพัฒนา
Quickwit เพิ่งเคยได้ยินครั้งแรก แต่ดูเว็บคร่าว ๆ แล้วไม่เหมือน vector store และน่าจะเกี่ยวข้องน้อยกว่า
ถ้าต้องการเครื่องมือสำหรับสร้าง ChatGPT แบบกำหนดเอง ดูลิสต์ของผมได้: https://llm-utils.org/List+of+tools+for+making+a+%22ChatGPT+...
สำหรับ fine-tuning แบบบริการ มี Lamini AI ที่มุ่งเป้าไปที่องค์กร
สตาร์ทอัพด้าน embedding อื่น ๆ ก็มี Weaviate
คิดว่า Milvus, Quickwit, Pinecone เหมาะกับองค์กรใหญ่มากกว่าและใช้งานยาก
ไม่เข้าใจว่าทำไมต้องมี dependency กับ OpenAI ในเมื่อมีโมเดล embedding แบบโลคัลที่เร็วกว่าและแม่นยำกว่าด้วย
ผมทำงานอยู่ที่บริษัทที่ทำหน้าที่เป็น ชั้นความปลอดภัย ระหว่างข้อมูลองค์กรที่ละเอียดอ่อนกับ LLM
ไม่ว่าโมเดลจะเป็น HF, ChatGPT, Bard หรือสื่อจะเป็นข้อมูลสนทนา, PDF, knowledge base อย่าง Notion ก็ไม่สำคัญ
เราซ่อนข้อมูลละเอียดอ่อนเพื่อป้องกันการใช้งานที่เสี่ยง และในขณะเดียวกันก็ตรวจสอบข้อเท็จจริงด้วย
ถ้าสิ่งที่กำลังมองหาเป็นแนวนี้ แนะนำให้ได้ครับ tothepoint.tech