โครงการสุดท้ายสำหรับหลักสูตรการดึงข้อมูล CS 582 ที่ University of Illinois ที่ Chicago
ในการเรียกใช้โปรแกรมจากเทอร์มินัลให้ใช้คำสั่ง:
Python Main.py
มีรายงานเพื่ออธิบายฟังก์ชันการทำงานและ UI ของเครื่องมือค้นหาได้ดีขึ้นโปรดดูที่:
report.pdf
เอกสารนี้เป็นรายงานสำหรับโครงการสุดท้ายของการดึงข้อมูล CS 582 ที่ University of Illinois ที่ Chicago โครงการประกอบด้วยการสร้างเครื่องมือค้นหาเว็บสำหรับโดเมน UIC ตั้งแต่เริ่มต้น ซอฟต์แวร์ถูกสร้างขึ้นอย่างเป็นโมดูลเริ่มต้นจากการรวบรวมข้อมูลเว็บผ่านหน้าการประมวลผลล่วงหน้าการจัดทำดัชนีและในที่สุดก็เพิ่มส่วนต่อประสานกราฟิกผู้ใช้ ยิ่งไปกว่านั้นองค์ประกอบ“ สมาร์ท” ที่เราคิดค้นขึ้นมานั้นเป็นสิ่งจำเป็น
ฉันตัดสินใจที่จะทดลองใช้การเพิ่มประสิทธิภาพกลไกค้นหาโดยใช้การขยายแบบสอบถามตามวิธีการตอบรับแบบ pseudo-relevance ที่พยายามรับบริบทที่กว้างขวางจากการสืบค้นของผู้ใช้ฉันเรียกมันว่าบริบทการตอบรับแบบหลอก ( CPRF ) สิ่งนี้ควรเพิ่มการปรับปรุงสองประเภทส่วนใหญ่ในเครื่องมือค้นหา:
อย่ามุ่งเน้นผลลัพธ์ทั้งหมดเฉพาะในคำในการสืบค้น แต่รวมถึงเนื้อหาที่หลากหลายและเกี่ยวข้องกับชุดหน้าเว็บที่ดึงมา
การขยายจำนวนผลลัพธ์ทั้งหมดรวมถึงหน้าเว็บที่ไม่มีคำใด ๆ ที่มีอยู่ในแบบสอบถาม แต่ยังคงเป็นที่สนใจของผู้ใช้ตั้งแต่รักษาหัวข้อเดียวกัน
การใช้งานอันดับหน้านั้นรวมอยู่ด้วยและสามารถเปิดหรือปิดจากแอปพลิเคชัน UI รายละเอียดเพิ่มเติมเกี่ยวกับส่วนประกอบอัจฉริยะทั้งสองสามารถพบได้ในภายหลังในเอกสารนี้
พื้นที่เก็บข้อมูลที่มีซอฟต์แวร์สามารถเข้าถึงได้ผ่าน GitHub ที่:
https://github.com/mirkomantovani/web-search-engine-uic
ซอฟต์แวร์นี้เขียนขึ้นใน Python3 ในแฟชั่นการเขียนโปรแกรมเชิงวัตถุเพื่อให้สามารถขยายได้อย่างง่ายดายสำหรับอนาคต เพื่อให้ง่ายต่อการดาวน์โหลดและทดสอบรหัสโดยไม่ต้องดำเนินการรวบรวมข้อมูลที่ครอบคลุมและใช้เวลานานและการประมวลผลล่วงหน้าชุดข้อมูลที่มี 10,000 หน้าคลานจากโดเมน UIC: https://www.uic.edu/ URL) รวมอยู่ในที่เก็บ ด้วยวิธีนี้โดยการโคลนนิ่งที่เก็บข้อมูล main.py สามารถเรียกใช้และในเวลาน้อยกว่าวินาทีเครื่องมือค้นหาพร้อมที่จะรับการสืบค้นในอินพุต อย่างไรก็ตามสคริปต์เพื่อเรียกใช้การรวบรวมข้อมูลและการประมวลผลล่วงหน้าจะรวมอยู่และอธิบายไว้ในส่วนย่อยต่อไปนี้กับส่วนประกอบอื่น ๆ ทั้งหมด
การรวบรวมข้อมูลเว็บสามารถทำได้โดยการดำเนินการสคริปต์ multithreaded_crawling.py การคลานเกิดขึ้นแบบขนานโดยใช้โมดูล คิว เพื่อเข้าถึงทรัพยากรในวิธีที่ซิงโครไนซ์จำนวนเธรดสามารถเปลี่ยนแปลงได้
การคลานเริ่มต้นจากโดเมนย่อย UIC CS: https://www.cs.uic.edu/ ที่ระบุไว้ในสคริปต์ multithreaded_crawling.py
การรวบรวมข้อมูลเกิดขึ้นกับกลยุทธ์ที่กว้างก่อนทุกหน้าจะถูกยกเลิกดาวน์โหลดและแยกวิเคราะห์โดยใช้ไลบรารี HTMLParser ลิงก์ของมันจะถูกสกัดและตรวจสอบว่าเป็นของโดเมน UIC จากนั้นเพิ่มเข้ากับคิว FIFO หากอยู่ในรูปแบบที่เหมาะสม บัญชีดำของรูปแบบที่ไม่ดีทั้งหมดได้มาจากฉันในขณะที่เห็นผลลัพธ์ที่ฉันได้รับในการคลานและมันประกอบด้วยใน 18 รูปแบบนี้: ".docx", ".doc", ".avi", ".mp4", ".jpg",. jpeg "," .png "," ".tgz", ".zip", ".exe", ".js", ".css", ".ppt" การหมดเวลา 10 วินาทีจะถูกระบุเป็นเวลาสูงสุดในการดาวน์โหลดหน้าก่อนปิดการเชื่อมต่อและส่งผ่านไปยังหน้าถัดไป
URL ได้รับการแก้ไขหลังจากสกัดทุกครั้ง HTTP เริ่มต้นจะกลายเป็น HTTPS ทั้งหมดที่ถูกเฉือนในตอนท้ายจะถูกกำจัดสายการค้นหาจะถูกลบออกและยังมีการเชื่อมโยงภายในหน้าเว็บที่แสดงออกมา ยิ่งไปกว่านั้นการจัดการลิงก์ที่มีการเปิดแท็ก <a> และแท็กอื่นจะเปิดอยู่ข้างในก่อนที่จะปิด HREF โดยการแยกลิงก์ไปยังการเปิดแท็กอื่น“ <” ในสตริง
ในระหว่างการรวบรวมข้อมูลพจนานุกรมสองตัว URL จากรหัสและรหัสจาก URL จะถูกบันทึกไว้ในดิสก์อย่างต่อเนื่องเพื่อใช้ในภายหลังรหัสของหน้าเว็บคือจำนวนหน้าดาวน์โหลดตามลำดับเวลา
การประมวลผลล่วงหน้าของหน้าคลานสามารถดำเนินการได้จากสคริปต์ run_preprocessing.py ที่นั่นคุณสามารถระบุจำนวนหน้าเพื่อพิจารณาและจำนวนสูงสุดของการทำซ้ำของอันดับหน้าโดยการเปลี่ยนค่าคงที่ที่สอดคล้องกัน page_rank_max_iter และ n_pages
ในระหว่างการประมวลผลล่วงหน้าจะใช้วัตถุ customtokenizer จาก preprocess.py script แต่ละหน้าจะถูกประมวลผลล่วงหน้าก่อนที่จะได้รับข้อความธรรมดาในแท็กทั้งหมดยกเว้น <script> และ <style> สำหรับขั้นตอนนี้ฉันตัดสินใจที่จะใช้ไลบรารีที่รวดเร็วมาก: Selectolax ซึ่งเป็น Python API ที่ใช้เครื่องยนต์ขนาดเล็กที่เขียนใน C. Cpython แน่นอนว่าจะให้ขนาดอย่างน้อยหนึ่งขนาดน้อยกว่าในการคำนวณเวลาที่เกี่ยวข้องกับการวิเคราะห์ HTML ใด ๆ ที่เขียนด้วย Python บริสุทธิ์ จากนั้นหน้าจะถูกโทเค็นโทเค็นจะเกิดขึ้นโดยใช้ PorterStemmer โดย NLTK คำหยุดจะถูกกำจัดโดยใช้รายการของคำหยุดที่ให้ไว้ในไฟล์ หยุดไฟล์ txt ตัวเลขจะถูกลบออกและคำที่สั้นกว่า 3 ตัวอักษรไม่ได้รับการพิจารณา
ในการประมวลผลล่วงหน้าดัชนีคว่ำจะถูกสร้างขึ้นและ TF-IDF ของแต่ละคู่คำศัพท์จะถูกคำนวณและเก็บไว้ในดัชนีคว่ำ กราฟเว็บกำกับ ( กราฟ. py ) ยังถูกสร้างและป้อนไปยังการใช้งานอันดับหน้าใน page_rank.py ไฟล์ทั้งหมดที่จำเป็นในภายหลังเพื่อตอบคำถามจะถูกบันทึกเป็นไฟล์ไบนารี
เวลาทั้งหมดที่ใช้สำหรับการประมวลผลล่วงหน้าและการบรรจบกันของ PAGE_RANK สำหรับ 10,000 หน้าอยู่ที่ประมาณ 236 วินาทีเวลาทำงานของหน้าจะอยู่ที่ประมาณ 11 วินาที
สคริปต์ Main.py มีจุดเชื่อมต่อไปยังเครื่องมือค้นหา เมื่อโปรแกรมเริ่มต้นวัตถุ CustomTokenizer ถูกสร้างขึ้นเพื่อทำข้อสอบโทเค็นวัตถุ TFIDFranker แทนจะถูกสร้างอินสแตนซ์เพื่อจัดอันดับเอกสารตามการสืบค้น
เมื่อเอกสารได้รับการจัดอันดับตามแบบสอบถามของผู้ใช้จะมีการพิจารณาเอกสารสูงสุด 100 ฉบับค่าคงที่นี้สามารถเปลี่ยนแปลงได้ใน Main.py : MAX_RESULTS_TO_CONSING พารามิเตอร์ที่ปรับแต่งได้อื่น ๆ คือจำนวนผลลัพธ์ที่แสดงในเวลาที่ส่งผล
อินเทอร์เฟซผู้ใช้เป็นกราฟิกและใช้งานโดยใช้แพ็คเกจ Python: EasyGui GUI เป็นโมดูลที่ขยายได้ Customgui.py ซึ่งมี API หลักสำหรับฟังก์ชันพื้นฐานของโปรแกรม
เมื่อโปรแกรมเริ่มต้นผู้ใช้จะถูกถามการตั้งค่าพื้นฐานไม่ว่าเขาจะต้องการใช้อันดับหน้าและข้อเสนอแนะแบบ pseudo relevance บริบทหรือไม่ หลังจากนั้นเมนูหลักจะปรากฏขึ้น เมนูหลักแสดงการตั้งค่าปัจจุบันของเครื่องมือค้นหาและปุ่มบางปุ่มสำหรับการกระทำหลักที่สามารถทำได้ การตั้งค่าสามารถเปลี่ยนแปลงได้แบบไดนามิกที่รันไทม์โดยเลือกปุ่มที่เหมาะสมจากเมนูหลัก อีกสองตัวเลือกคือ: เลิกโปรแกรมและเรียกใช้แบบสอบถาม หากผู้ใช้กดปุ่มเพื่อสร้างแบบสอบถามใหม่หน้าต่างใหม่จะปรากฏขึ้นและผู้ใช้จะได้รับแจ้งให้แทรกแบบสอบถามใหม่ เมื่อเขาคลิกโอเคแบบสอบถามจะถูกประมวลผลล่วงหน้าและเอกสารจะได้รับการจัดอันดับและเอกสาร 10 (ตัวแปรแรกในโปรแกรม) จะแสดงพร้อมกับข้อมูลเกี่ยวกับการสืบค้นที่ผ่านการประมวลผลล่วงหน้าและอาจเป็นโทเค็นที่ขยายออกไป ขณะนี้ผู้ใช้สามารถดับเบิลคลิกที่ผลลัพธ์เพื่อเปิดหน้าบนแท็บใหม่บนเบราว์เซอร์เริ่มต้นของระบบของเขาหรือสามารถกดซ้ำ“ แสดงผลลัพธ์เพิ่มเติม” ในตอนท้ายของรายการเพื่อแสดงผลลัพธ์เพิ่มเติม 10 รายการ ยิ่งไปกว่านั้นหากข้อเสนอแนะแบบหลอกกลับกลายเป็นปิดผู้ใช้จะได้รับความเป็นไปได้ที่จะเรียกใช้การสืบค้นเดียวกันกับการขยายตัวอีกครั้ง
หลังจากเรียกใช้แบบสอบถามและตัดสินใจที่จะยกเลิกหรือเปิดผลลัพธ์ผู้ใช้จะได้รับแจ้งกลับไปที่เมนูหลักที่เขาสามารถเปลี่ยนการตั้งค่าและ/หรือเรียกใช้แบบสอบถามใหม่หรือแบบเดียวกันกับการตั้งค่าที่แตกต่างกันเพื่อเปรียบเทียบผลลัพธ์กับที่ได้รับก่อนหน้านี้
ความท้าทายหลักที่ฉันเคยประสบในระหว่างการพัฒนาโครงการนี้คือ:
ตอนแรกมันยากมากที่จะเลือกองค์ประกอบอัจฉริยะในการออกแบบ ฉันไม่มีประสบการณ์ในแอปพลิเคชันประเภทนี้และคิดเกี่ยวกับการปรับปรุงโดยไม่ต้องมีการสาธิตในการทดสอบเป็นเรื่องยากมาก
ในระหว่างการใช้งานส่วนหนึ่งฉันใช้เวลามากมายในการเรียนรู้เกี่ยวกับไลบรารี Python และสร้างที่ฉันยังไม่ทราบเช่นเธรดวิธีการใช้งานหรือทำเว็บขูดเพื่อรับลิงก์ออกจากหน้า HTML อีกสิ่งหนึ่งที่ฉันต้องเรียนรู้ตั้งแต่เริ่มต้นคือการสร้าง GUI ใน Python
สิ่งที่น่ารำคาญคือความจริงที่ว่าฉันต้องคลานหน้า 10,000 หน้ามากกว่าหนึ่งครั้งเพราะฉันพบในหน้ารูปแบบต่าง ๆ และผิด ในที่สุดรายการทั้งหมดของรูปแบบที่ฉันต้องขึ้นบัญชีดำมีขนาด 18 และมันรวม ".docx", ".doc", ".avi", ".mp4", ".jpg", ".jpeg" ".exe", ".js", ".css", ".ppt"
สิ่งที่ท้าทายมากคือการปรับแต่งพารามิเตอร์ Hyperparameters และการรวมตัวของอันดับหน้าเข้ากับเอกสารจัดอันดับ พารามิเตอร์“ E ” ในการตัดสินใจว่าจะให้ความสำคัญกับโทเค็นของการสืบค้นแบบขยายเป็นเรื่องยากที่สุดที่จะปรับแต่งเพราะคุณไม่สามารถรู้การแสดงเฉลี่ยของเครื่องมือค้นหาของคุณหากคุณไม่มีข้อมูลที่มีป้ายกำกับ (เอกสารที่เกี่ยวข้องสำหรับแต่ละแบบสอบถาม) นอกจากนี้ความเกี่ยวข้องแบบสอบถามเป็นเรื่องส่วนตัวคุณไม่เคยรู้เลยว่าบุคคลใดต้องการเรียกคืนและคุณสามารถเดาได้ตามการสืบค้นเท่านั้น ฉันตัดสินใจว่า E ควรเป็น 0.5 มากที่สุดและในตอนท้ายฉันตั้งค่าประมาณ 0.1-0.2 คุณไม่ต้องการอคติแบบสอบถามมากโดยให้ความสำคัญกับคำที่ผู้ใช้ไม่ได้พิมพ์
รูปแบบการถ่วงน้ำหนักที่ฉันใช้คือ TF-IDF ที่เรียบง่ายของคำในเอกสารเนื่องจากได้รับการพิสูจน์แล้วว่าเป็นหนึ่งในสิ่งที่มีประสิทธิภาพมากที่สุดเมื่อพูดถึงเครื่องมือค้นหาเว็บและบัญชีสำหรับความสำคัญของคำในแต่ละเอกสารในวิธีที่ถูกต้อง ฉันไม่ได้คิดเกี่ยวกับการลองมาตรการอื่นเพียงเพราะมันไม่ใช่จุดประสงค์ของโครงการนี้และสิ่งนี้ดูเหมือนจะทำงานได้ดี
การวัดความคล้ายคลึงกันที่ใช้ในการจัดอันดับเอกสารคือ ความคล้ายคลึงกันของโคไซน์ ฉันดำเนินการเริ่มต้นจากความคล้ายคลึงกันของผลิตภัณฑ์ภายในและเปลี่ยนไปใช้สิ่งนั้นจะเป็นเรื่องของการเปลี่ยนรหัสบรรทัดเดียว ฉันคิดว่าความคล้ายคลึงกันของโคไซน์นั้นดีกว่าที่จะใช้เพราะคำนึงถึงความยาวของเอกสารและความยาวของการสืบค้น มันซับซ้อนกว่าและมักจะใช้งานได้ดีในทางปฏิบัติในแอปพลิเคชันประเภทนี้ดังนั้นการเลือกการวัดความคล้ายคลึงกันนั้นไม่ใช่ปัญหาจริงๆฉันเพิ่งรู้ว่าความคล้ายคลึงกันของโคไซน์เป็นสิ่งที่ถูกต้อง
ฉันทำการประเมินความแม่นยำที่ 10 (พิจารณาเพียง 10 ผลลัพธ์แรกที่เรียกคืน) สำหรับการสืบค้นแบบสุ่มและหลากหลายที่ฉันคิดขึ้นมา นี่คือผลลัพธ์:
แบบสอบถาม: “ วิทยานิพนธ์ที่ปรึกษา” ผลลัพธ์แรกคือ https://grad.uic.edu/electronic-thesisdissertation-faqs และฉันคิดว่าผลลัพธ์ทั้งหมดเกี่ยวข้องกับวิทยานิพนธ์และสิ่งที่สัมพันธ์กันฉันจะให้ความแม่นยำ: p = 1.0 กับแบบสอบถามนี้
แบบสอบถาม: “ งานอาชีพ” ผลลัพธ์แรกคือ https://ecc.uic.edu/career-fairs และฉันคิดว่าผลลัพธ์ทั้งหมดมีความเกี่ยวข้องกับงานแสดงสินค้าอาชีพบริการอาชีพกิจกรรมและการจ้างงานฉันจะให้ความแม่นยำ: p = 1.0 กับคำถามนี้
แบบสอบถาม: “ ผู้ช่วยวิจัย” ผลลัพธ์แรกคือ http://grad.uic.edu/assistantships และฉันคิดว่าทั้งหมดยกเว้นคนสุดท้ายที่เกี่ยวข้องกับผู้ช่วยการเป็น Ra, TA หรือ GA เพียงเพราะโดเมน UIC ไม่มีหน้าเฉพาะสำหรับ RA ดังนั้นฉันจะให้ความแม่นยำ: P = 0.9
แบบสอบถาม: “ การฝึกงานและงาน” ผลลัพธ์แรกคือ https://careerservices.uic.edu/students/internships และคราวนี้มีเพียง 6 หน้าเว็บเท่านั้นที่เกี่ยวข้องอย่างไรก็ตามสิ่งที่ไม่เกี่ยวข้องกับอาชีพและการจ้างงาน ฉันจะให้ความแม่นยำ: p = 0.6 กับแบบสอบถามนี้
แบบสอบถาม: “ ที่อยู่ศูนย์นักเรียนตะวันออก” ผลลัพธ์แรกคือ https://fimweb.fim.uic.edu/buildingsdata.aspx แบบสอบถามนี้มีความเฉพาะเจาะจงและซับซ้อนมากขึ้นและในความเป็นจริงจาก 4 ผลลัพธ์ที่เราสามารถแยกที่อยู่ของอาคารได้ผลลัพธ์อื่น ๆ ทั้งหมด ฉันจะให้ความแม่นยำ: p = 0.4 กับแบบสอบถามนี้
ด้วยความแม่นยำโดยเฉลี่ย 0.78 และความจริงที่ว่าทุกคำถามส่งคืนผลลัพธ์ที่เกี่ยวข้องอย่างน้อยหนึ่งรายการฉันคิดว่าผลลัพธ์นั้นไม่ต่อเนื่อง
อัจฉริยะคนแรกที่ฉันทดลองคืออันดับหน้าง่ายและเรียบง่าย ในระหว่างการประมวลผลล่วงหน้าของหน้าลิงก์จะถูกสกัดและขึ้นอยู่กับการเชื่อมต่อลิงก์ที่กราฟโลกถูกสร้างขึ้น การใช้งานของอันดับหน้านั้นเป็นเช่นนั้นมันสร้างองค์ประกอบที่เชื่อมต่ออย่างรุนแรงด้วยกราฟทั้งหมดซึ่งหมายความว่าจากทุกโหนดมันเป็นไปได้ที่จะไปยังโหนดอื่นของกราฟที่มีความน่าจะเป็นที่ไม่ใช่ Null ด้วยการตีความนี้ไม่มีความเป็นไปได้ที่วอล์คเกอร์แบบสุ่มจะติดอยู่ในหน้า
การจัดอันดับหน้านั้นค่อนข้างยากที่จะรวมเข้ากับการให้คะแนนของเอกสารเพื่อจัดอันดับ ตอนแรกฉันพยายามที่จะผสมผสานความคล้ายคลึงกันเชิงเส้นของโคไซน์และอันดับหน้าและดูว่ามันทำงานอย่างไรและมันค่อนข้างแย่เพราะถ้าน้ำหนักของอันดับหน้ามากเกินไปมากกว่าหน้าแรกและหน้าเว็บที่มีอำนาจอื่น ๆ จะปรากฏในผลลัพธ์เสมอ หากน้ำหนักพิงไปสู่ความคล้ายคลึงกันของโคไซน์มากขึ้นการจัดอันดับหน้าจะไม่มีผลเลย
ความพยายามครั้งที่สองให้ผลลัพธ์ที่ดีทีเดียว โดยทั่วไปฉันเพิ่งใช้ผลลัพธ์ 100 รายการแรกที่ใช้และทิ้งทุกสิ่งที่พวกเขาอื่น ๆ และคิดว่าพวกเขาไม่เกี่ยวข้อง จากนั้นฉันก็รวมกันเป็นเส้นตรงกับอันดับหน้า ครั้งนี้มันใช้งานได้เพราะมันเป็นเพียงการเปลี่ยนแปลงที่แตกต่างกันของเอกสารที่เกี่ยวข้องแล้วและตัวอย่างเช่นหน้าแรกและเอกสารที่เชื่อถือได้อื่น ๆ ได้ถูกยกเลิกไปแล้วในตอนนี้
ฉันคิดว่าจุดประสงค์ของการจัดอันดับหน้าในแอปพลิเคชันประเภทนี้ประสบความสำเร็จฉันสามารถมีอคติการค้นหาปกติเพื่อพิจารณาหน้าเว็บที่เกี่ยวข้องมากขึ้นเพื่อให้ผู้ใช้มีแนวโน้มที่จะหาแหล่งข้อมูลที่ดีและเชื่อถือได้มากขึ้นนอกเหนือจากผลลัพธ์ที่คล้ายกับสิ่งที่เขาพิมพ์ในแบบสอบถามของเขา
บริบทการตอบรับแบบหลอก ( CPRF ) ฉันได้คิดแนวคิดเกี่ยวกับหลักการของฉันและองค์ประกอบอัจฉริยะที่ปรับแต่งได้เกือบหนึ่งเดือนจากการใช้งานจริง เมื่อฉันดำเนินการฉันไม่แน่ใจว่ามันจะทำงานได้ตามที่คาดไว้และฉันก็กลัวจริงๆว่าฉันทำทุกอย่างเพื่ออะไร
เมื่อฉันกำลังคิดว่าเครื่องมือค้นหาเว็บสมาร์ทเป็นองค์ประกอบใดฉันคิดว่ามันคงจะดีถ้าเราสามารถเดาบริบทของการสืบค้นผู้ใช้และให้เขานอกเหนือจากสิ่งที่เขาขอเป็นพิเศษผลลัพธ์บางอย่างที่เกี่ยวข้องกับสิ่งที่เขาค้นหา การขยายการสืบค้นแบบสแตติกแบบง่าย ๆ ตามคำพ้องความหมายนั้นง่ายเกินไปและจะไม่สามารถจับเนื้อหาที่เกี่ยวข้อง แต่มีความหมายที่แตกต่างกัน
อย่างไรก็ตามจุดเริ่มต้นจะต้องเป็นแบบสอบถามของผู้ใช้เสมอเนื่องจากไม่มีอะไรอื่นนอกจากตอนแรก ฉันชอบความคิดที่ว่าข้อเสนอแนะแบบ pseudo-relevance สามารถให้คุณปรับเปลี่ยนแบบสอบถามของคุณในแบบอิสระได้อย่างไร แน่นอนว่าข้อเสนอแนะที่เกี่ยวข้องอย่างชัดเจนเมื่อผู้ใช้ถูกถามว่าคำอื่น ๆ ที่เขาต้องการรวมไว้ในคำถามของเขาอาจจะดีกว่า แต่ในขณะเดียวกันก็อาจน่ารำคาญสำหรับเขาที่จะต้องตอบคำถามบางอย่างขณะค้นหา คำติชมแบบหลอกแบบหลอกดูเหมือนว่าเป็นวิธีที่เหมาะสมและง่ายกว่าในการทำงานในพื้นหลังแบบสอบถามที่ซับซ้อนยิ่งขึ้นซึ่งผู้ใช้ไม่ได้ตระหนักถึง
เพื่อแยกคำบางคำที่สามารถแสดงบริบทของการสืบค้นสูตรฉันตัดสินใจใช้ข้อมูลที่แท้จริงบางอย่างที่เอกสารที่ดึงมาครั้งแรกมี โดยเฉพาะอย่างยิ่งฉันคิดว่าคำที่มี TF-IDF สูงสุดในเอกสารสามารถแสดงหัวข้อของเอกสารนั้นและสิ่งที่แตกต่างจากคนอื่น ๆ เพราะ TF-IDF สูงเมื่อคำไม่ได้อยู่ในเอกสารจำนวนมาก แต่มันเกิดขึ้นอีกในเอกสารนั้น
กระบวนการในการแยกคำบริบทมีดังต่อไปนี้: จากเอกสารที่จัดอันดับฉันใช้เอกสาร number_docs_expansion ซึ่งฉันตั้งค่าเป็น 30 แต่สามารถเปลี่ยนได้ใน pseudo_relevance_feedback.py สำหรับแต่ละเอกสารฉันใช้โทเค็นด้วย TF-IDF สูงสุด (หมายเลขคงที่ number_top_tokens) และสำหรับโทเค็นที่แตกต่างกันในแต่ละรายการฉันจะรวม TF-IDF ทั้งหมดของคำนี้ของแต่ละเอกสารหากมีคำว่า ในตอนท้ายฉันจัดอันดับโทเค็นและคำที่ติดอันดับสูงสุดเป็นคำทั่วไปของเอกสารที่ดึงมาแต่ละฉบับซึ่งแสดงถึงบริบทของการสืบค้น จากนั้นฉันก็ส่งคืนคำที่ขยายตัว n (ค่าคงที่ number_expansion_tokens) ซึ่งโทเค็นแบบสอบถามดั้งเดิมถูกลบออกเพื่อไม่ให้มีการทำซ้ำและให้ความสำคัญกับคำเหล่านั้นมากเกินไป
โทเค็นที่ขยายตัวจะได้รับน้ำหนักที่แตกต่างน้อยกว่าคำดั้งเดิมในแบบสอบถาม e_const นี้สามารถเปลี่ยนแปลงได้ในสคริปต์ สถิติ
ขึ้นอยู่กับการสืบค้นที่ฉันลองคิดว่าองค์ประกอบอัจฉริยะให้การปรับปรุงบางอย่างในบางกรณี
ผลลัพธ์ที่ยิ่งใหญ่ครั้งแรกที่ใช้งานได้เสมอคือความสามารถในการขยายชุดของเอกสารที่ดึงมาได้จริงถ้ามีเพียงไม่กี่เอกสารที่มีคำใด ๆ ในการสืบค้นเครื่องมือค้นหาธรรมดาจะดึงเอกสารสองสามฉบับเหล่านั้น ด้วยส่วนประกอบ Smart CPRF ชุดผลลัพธ์จะใหญ่ขึ้นและอาจนำไปสู่ชุดที่ดึงมาได้ซึ่งมีขนาดมากกว่า 100 เอกสาร
ผลลัพธ์ที่เป็นบวกอีกประการหนึ่งที่ฉันสังเกตเห็นในข้อสงสัยบางอย่างคือมันพบสิ่งที่ฉันกำลังมองหาเป็นผลลัพธ์แรกในขณะที่เครื่องมือค้นหาง่าย ๆ ไม่พบแม้แต่ในสิบอันดับแรก ตัวอย่างนี้สามารถสังเกตได้โดยการค้นหา "หลักสูตรวิทยาศาสตร์คอมพิวเตอร์" สิ่งที่ฉันต้องการค้นหาคือรายการหลักสูตรหลักทั้งหมดที่นำเสนอโดยแผนกวิทยาศาสตร์คอมพิวเตอร์ที่ UIC นี่เป็นผลลัพธ์แรกที่ดึงมาโดยเครื่องยนต์เมื่อส่วนประกอบอัจฉริยะทำงานอยู่ แต่โดยไม่ต้องเปิดใช้งานหน้านั้นไม่ได้อยู่ในผลลัพธ์แรก
สุดท้ายฉันพยายามค้นหา “ การดึงข้อมูล” เครื่องมือค้นหาที่ไม่มี CPRF นั้นแย่มากผลลัพธ์แรกคือหน้าการค้นหาสำหรับแผนกของ UIC นี่อาจเป็นเพราะไม่มีหน้าสำหรับการดึงข้อมูลในโดเมน UIC หรือไม่รวมอยู่ในโดเมน อย่างไรก็ตามด้วยองค์ประกอบที่ชาญฉลาดบนหน้าเว็บจำนวนมากที่เกี่ยวข้องกับเรื่องนี้ถูกค้นพบ 2 คำที่ขยายออกไปคือ “ คอร์เนเลียคาเรีย” ศาสตราจารย์ที่สอนหลักสูตรนี้หน้าเว็บจำนวนมากเกี่ยวข้องกับสิ่งพิมพ์ของเธอและงานของเธอในการดึงข้อมูลนี่เป็นทรัพย์สินที่ดีมากของเครื่องมือค้นหา ในกรณีที่ไม่พบผลลัพธ์ที่เกี่ยวข้องมากมันยังคงสามารถค้นหาผลลัพธ์ที่ดีที่สุดเกี่ยวกับสิ่งที่เกี่ยวข้อง
ตามที่อธิบายไว้ใน 5.3 เมื่อฉันทำการเปรียบเทียบระหว่างเครื่องมือค้นหาธรรมดาและการใช้ส่วนประกอบอัจฉริยะฉันคิดว่าผลลัพธ์ที่ผลิตนั้นค่อนข้างดีและฉันได้รับสิ่งที่คาดหวังเมื่อฉันคิดเกี่ยวกับเรื่องนี้ สิ่งที่ดีสรุปที่ฉันสังเกตเห็นโดยการทดสอบมันคือ:
ความสามารถในการค้นหาผลลัพธ์อีกมากมายแม้ว่าแบบสอบถามต้นฉบับจะส่งออกเพียงเว็บไซต์เท่านั้น
ความสามารถในการค้นหาสิ่งที่ฉันกำลังมองหาเป็นผลลัพธ์แรกเช่นในคำค้นหา "หลักสูตรวิทยาศาสตร์คอมพิวเตอร์" เช่นที่ฉันอธิบายไว้ในวรรค 5.3
คุณสมบัติที่ดีมากในการดึงเนื้อหาที่ไม่ต่อเนื่องแม้ในกรณีที่คลังข้อมูลไม่มีหน้าเว็บที่เกี่ยวข้องกับการสืบค้นมากและอาจเป็นสิ่งที่ผู้ใช้กำลังค้นหาฉันสังเกตเห็นสิ่งนี้สำหรับคำค้นหา "การดึงข้อมูล" ตามที่อธิบายไว้ในวรรค 5.3
วิธีหนึ่งที่แสดงให้ฉันเห็นว่าสิ่งนี้กำลังให้ผลลัพธ์ที่ถูกต้องคือความจริงที่ว่าใน 10 อันดับแรกที่ขยายคำที่แสดงถึงบริบทคำบางคำที่อยู่ในแบบสอบถามของผู้ใช้มีอยู่ สิ่งนี้แสดงให้เห็นว่าวิธีนี้สามารถจับหัวข้อได้อย่างมีประสิทธิภาพและไม่มีวิธีอื่นในการอธิบายคำอื่น ๆ ในชุดนั้นหากไม่เป็นคำที่เป็นของบริบทเดียวกับที่อยู่ในแบบสอบถามดั้งเดิม
พูดถึงอันดับหน้าแทน ฉันคิดว่ามันทำงานได้ แต่มันไม่ได้เปลี่ยนการจัดอันดับมากเกินไปในแบบที่ฉันนำไปใช้มันเป็นเพียงวิธีที่จะอคติผลลัพธ์ที่จะชอบหน้าเว็บที่มีอำนาจมากขึ้นหากมี
แน่นอนว่าสิ่งหนึ่งที่ต้องได้รับการแก้ไขจากที่นี่คือการปรับจูนพารามิเตอร์ มันเป็นเรื่องยากที่สุดที่จะทำส่วนใหญ่เนื่องจากขาดข้อมูลที่มีป้ายกำกับ ฉันไม่สามารถรู้ได้ว่าค่าของพารามิเตอร์ใดที่ทำงานได้ดีกว่านี้หากฉันไม่สามารถประเมินความแม่นยำของการสืบค้นและเพื่อปรับแต่งโดยอัตโนมัติควรมีข้อมูลที่มีป้ายกำกับมากมาย