Dice Tech Jobs - พื้นที่เก็บข้อมูลของ Dice.com สำหรับการสร้าง 'Conceptual Search Engine' โดย Simon Hughes (Dice Data Scientist) พื้นที่เก็บข้อมูลนี้มีโค้ด Python สำหรับฝึกโมเดล Word2Vec ของ Thomas Mikolov บนชุดเอกสาร ผลลัพธ์ของกระบวนการนี้สามารถฝังลงใน solr (หรือเครื่องมือค้นหาอื่น ๆ ) โดยใช้ไฟล์คำพ้องความหมายรวมกับปลั๊กอิน solr บางตัวเพื่อให้ฟังก์ชันการค้นหาตามแนวคิดภายในเครื่องมือค้นหา ผลลัพธ์ยังสามารถนำมาใช้ในเครื่องมือค้นหาอื่นๆ ได้ หากสนับสนุนไฟล์คำพ้องความหมาย การค้นหาเชิงแนวคิดเรียกอีกอย่างว่าการค้นหาเชิงความหมาย และเรียนรู้ที่จะจับคู่แนวคิดต่างๆ ในโดเมน แทนที่จะใช้คำหลักเพื่อปรับปรุงการจดจำ
โปรดตรวจสอบคลังข้อมูล 'เวกเตอร์ในการค้นหา' ของฉัน ซึ่งขยายงานนี้ มันมีลิงก์ไปยังสไลด์และวิดีโอจากการพูดคุยนั้นด้วย
สคริปต์ประกอบด้วยโค้ดเพื่อประมวลผลล่วงหน้าและสร้างโทเค็นให้กับเอกสาร แยกคำศัพท์และวลีทั่วไปตามความถี่ของเอกสาร ฝึกโมเดล word2vec โดยใช้การใช้ gensim และจัดกลุ่มเวกเตอร์คำที่เป็นผลลัพธ์โดยใช้ไลบรารีการจัดกลุ่มของ sci-kit learn สคริปต์หลามจะส่งออกไฟล์คำพ้องความหมาย solr จำนวนหนึ่ง ซึ่งสามารถใช้เพื่อเปิดใช้งานฟังก์ชันการค้นหาตามแนวคิดภายใน solr เมื่อรวมกับปลั๊กอิน solr ลูกเต๋าแบบกำหนดเองบางตัว
ดู https://github.com/DiceTechJobs/SolrPlugins สำหรับปลั๊กอิน solr เพื่อใช้เวกเตอร์ที่เรียนรู้และไฟล์คำพ้องความหมายภายในเครื่องมือค้นหา Apache Solr
ดู https://github.com/DiceTechJobs/SolrConfigExamples สำหรับตัวอย่างรายการการกำหนดค่า solr สำหรับการกำหนดค่าการค้นหาเชิงแนวคิดภายใน solr รวมถึงการตั้งค่าปลั๊กอิน
สคริปต์อยู่ในรูปแบบของสมุดบันทึก Jupyter python ที่จะรันตามลำดับ (1,2,3 และหนึ่งใน 4 ตัวใดตัวหนึ่ง) และเป็นสคริปต์บรรทัดคำสั่งแยกต่างหาก (ดูด้านล่าง) หากคุณไม่ต้องการใช้ Jupyter สคริปต์ Python นั้นสะอาดกว่า และแบ่งปันไฟล์กำหนดค่าทั่วไปพร้อมกับการตั้งค่าที่จำเป็นทั้งหมด และได้รับการออกแบบให้เรียกใช้จากเชลล์ ดังนั้นสคริปต์เหล่านี้จึงน่าจะเริ่มต้นด้วย . สมุดบันทึกและสคริปต์เหล่านี้จะประมวลผลเอกสารล่วงหน้า และฝึกโมเดล Word2Vec โฟลเดอร์ ./Settings มีไฟล์กำหนดค่าตัวอย่างสำหรับแต่ละสคริปต์ พร้อมคำอธิบายของการตั้งค่าแต่ละรายการในความคิดเห็น หากต้องการเรียกใช้สคริปต์บรรทัดคำสั่ง ให้ส่งไฟล์กำหนดค่าที่เกี่ยวข้องเป็นพารามิเตอร์เดียว เช่น
python pre_process_documents.py ./Settings/pre_process_documents.cfg
สคริปต์บรรทัดคำสั่งควรรันตามลำดับ:
pre_process_documents.py - จำเป็นสำหรับการตัดอักขระเครื่องหมายวรรคตอนบางส่วนออก (เครื่องหมายจุลภาค ยัติภังค์ ฯลฯ) แยกวิเคราะห์ html หากจำเป็น และแยกประโยคในเอกสารออก หาก คุณต้องการข้ามขั้นตอนนี้และย้ายไปที่ 2 หรือ 3 ให้จัดเตรียมชุดไฟล์ในขั้นตอนที่ 2 และ 3 โดยมีเครื่องหมายวรรคตอนที่คุณต้องการลบออก และแยกประโยคใหม่ทุกบรรทัด
extract_keywords.py - (เป็นทางเลือก) หากคุณไม่มีชุดคีย์วลีที่ดีและครอบคลุมจากโดเมนของคุณ (เช่น คำหลักและวลีค้นหา 5,000 อันดับแรกของคุณ วลีเป็นส่วนสำคัญ) หรือคุณต้องการเพิ่มความครอบคลุมนอกเหนือจากรายการนี้ ให้เรียกใช้ สคริปต์นี้เพื่อแยกคำสำคัญและวลีทั้งหมดที่อยู่เหนือเกณฑ์ความถี่ของเอกสารที่ระบุ
train_word2vec_model.py - ฝึกและบันทึกโมเดล Word2Vec บนเอกสารที่ประมวลผลล่วงหน้าจาก 1 ใช้ชุดของคำหลักและวลี เช่น เอาต์พุตจาก 2 โปรดทราบ - โมเดลนี้เร็วมาก แต่ต้องใช้คอมไพเลอร์ C พร้อมใช้งานและติดตั้งไว้ล่วงหน้าเพื่อใช้งานเวอร์ชัน C ภายใต้ฝาครอบ ไม่เช่นนั้นการใช้งาน python จะช้ากว่ามาก หากไม่พร้อมใช้งาน คุณจะได้รับคำเตือนรันไทม์เมื่อมีการฝึกโมเดลครั้งแรก
ขั้นตอนนี้มีหลายไฟล์ขึ้นอยู่กับวิธีแก้ปัญหาที่ต้องการ (ดูคำพูดของฉัน):
เอาท์พุตเวกเตอร์ - เร็วๆ นี้! ดู Jupyter Notebook 4.a
Generate_topn_synonyms_file.py - สร้างคำพ้องความหมาย n อันดับแรกสำหรับคำหลักหรือวลีเป้าหมายแต่ละรายการ ซึ่งจะสร้างไฟล์ 2 ไฟล์ ได้แก่ ไฟล์ที่มีเพย์โหลด และไฟล์ที่ไม่มี กรณีการใช้งานที่ง่ายที่สุดคือการใช้ไฟล์โดยไม่มีเพย์โหลด สามารถรับประสิทธิภาพที่ดีขึ้นได้โดยใช้ไฟล์เพย์โหลดเพื่อชั่งน้ำหนักคำพ้องความหมายตามความคล้ายคลึงกัน ซึ่งสามารถทำได้ในเวลาแบบสอบถามโดยใช้ตัวแยกวิเคราะห์ queryboost โปรดทราบว่าในการดำเนินการนี้ คุณต้องสร้างโทเค็นบนเครื่องหมายจุลภาคและช่องว่างในเวลาสืบค้น เนื่องจากเราแทนที่ช่องว่างด้วยเครื่องหมายจุลภาคเพื่อแก้ไขปัญหาคำพ้องความหมายที่มีหลายคำ อีกทางเลือกหนึ่ง (และแนะนำ) ใช้การขยายคำพ้องความหมาย ณ เวลาดัชนี ร่วมกับตัวแยกวิเคราะห์แบบสอบถาม PayloadEdismax คลาส PayloadAwareDefaultSimilarity (ใช้เป็นค่าเริ่มต้นที่คล้ายคลึงกัน หรือใช้ความคล้ายคลึงกันของสคีมาเพื่อกำหนดค่าต่อฟิลด์) และตรวจสอบให้แน่ใจว่าประเภทฟิลด์สำหรับฟิลด์เหล่านี้มีคำว่า 'เพย์โหลด' หรือ 'เวกเตอร์'
Generate_cluster_synonyms_file.py - สร้าง k คลัสเตอร์จากคำว่าเวกเตอร์ที่สร้างขึ้นในขั้นตอนก่อนหน้า สิ่งเหล่านี้สามารถฝังโดยตรงใน solr ผ่านไฟล์คำพ้องความหมาย - ไม่จำเป็นต้องใช้ปลั๊กอินพิเศษ ฉันขอแนะนำให้สร้างกลุ่มคำพ้องความหมายที่แตกต่างกันจำนวนหนึ่งที่มีขนาดแตกต่างกัน และกำหนดค่าเหล่านี้เป็นฟิลด์แยกต่างหากโดยมีน้ำหนักฟิลด์ที่สูงกว่าที่ใช้กับคลัสเตอร์ขนาดเล็ก (เช่น สร้างด้วยค่า k ที่มากกว่า)
สร้างโดยใช้ python 2.7.10 ยังไม่ทดสอบกับ python 3
การใช้งาน Word2Vec นั้นเป็นแพ็คเกจ gensim ที่ยอดเยี่ยม ประกอบด้วยการใช้งาน LSA, LDA, Word2Vec และอัลกอริธึมการเรียนรู้ของเครื่องอื่นๆ อย่างรวดเร็ว
https://radimrehurek.com/gensim/models/word2vec.html
นี่เป็นแพ็คเกจที่ยอดเยี่ยมสำหรับการสร้างแบบจำลองหัวข้อ และการเรียนรู้การแสดงความหมายของเอกสารและคำ
Google เปิดตัวชุดเวกเตอร์คำศัพท์ที่ได้รับการฝึกอบรมล่วงหน้า ซึ่งฝึกฝนจากคลังคำกว่า 100 พันล้านคำของ Google News สำหรับผู้ที่ไม่ได้มุ่งเน้นในขอบเขตเฉพาะแต่เน้นที่ชุดเอกสารที่กว้างมาก เช่น บริษัทที่สร้างเครื่องมือค้นหาข่าว (เช่น Reuters, Bloomberg, หน่วยงานของรัฐ ฯลฯ) คุณสามารถใช้แบบจำลองที่ได้รับการฝึกอบรมล่วงหน้านี้เท่านั้น แทน. จากนั้น คุณสามารถข้าม 3 ขั้นตอนแรก และไปที่การใช้สคริปต์ขั้นตอนที่ 4 ด้านบนที่ใช้โมเดลที่ได้รับการฝึกล่วงหน้าและคำนวณไฟล์คำพ้องความหมายเอาต์พุต แค่นี้คุณก็ควรมีแล้ว โพสต์นี้อธิบายสถานที่รับเวกเตอร์ที่ผ่านการฝึกอบรมมาแล้ว: https://groups.google.com/forum/#!topic/gensim/_XLEbmoqVCg จากนั้นคุณสามารถใช้ฟังก์ชัน model.load ของ Word2Vec ของ gensim ได้:
model = Word2Vec . load ( MODEL_FILE )
หากคุณใช้ระบบคลาวด์ Solr Zookeeper ไม่ชอบไฟล์กำหนดค่าใดๆ ที่มีขนาดใหญ่กว่า 1M ดังนั้น หากไฟล์คำพ้องความหมายผลลัพธ์ของคุณมีขนาดใหญ่กว่านี้ คุณจะต้อง 1) เปลี่ยนการตั้งค่าผู้ดูแลสวนสัตว์เริ่มต้น 2) แบ่งไฟล์คำพ้องความหมายออกเป็นไฟล์หลายไฟล์ และใช้ตัวกรองคำพ้องความหมายตามลำดับ หรือ 3) โหลดคำพ้องความหมายจากฐานข้อมูลโดยใช้ ปลั๊กอิน (เช่น https://github.com/shopping24/solr-jdbc-synonyms)
NLP boffins ของ Stanford ได้พัฒนาอัลกอริธึมการเรียนรู้คำเวกเตอร์ที่แข่งขันกับ Word2Vec โดยมีความแม่นยำใกล้เคียงกัน หากคุณต้องการทดลองใช้แพ็คเกจ python นี้จะช่วยให้คุณทำได้: https://github.com/hans/glove.py ฉันยังไม่ได้ลองเลย ดังนั้นฉันจึงไม่สามารถรับรองได้ในขณะนี้
สคริปต์เริ่มต้นคาดว่าจะมีโฟลเดอร์ที่มีไฟล์ raw *.txt หรือ html หากคุณมีเนื้อหา html มีเหตุผลในสคริปต์ในการแยกวิเคราะห์ html แต่ซุปที่สวยงามอาจเป็นขุยเล็กน้อย ดังนั้นคุณควรแยกวิเคราะห์ล่วงหน้าก่อนที่จะผลักมันผ่านไปป์ไลน์ โปรดทราบว่าไม่มีรูปแบบไฟล์พิเศษ ซึ่งดูเหมือนว่าจะเป็นปัญหาที่คนส่วนใหญ่พบเมื่อพยายามเรียกใช้สคริปต์นี้ หากเกิดข้อผิดพลาดในการโหลดไฟล์ ฉันขอแนะนำให้ใช้สคริปต์ python ไม่ใช่โน้ตบุ๊ก และเปิดดีบักเกอร์เพื่อดูว่าเกิดอะไรขึ้น นอกจากนี้ ตรวจสอบให้แน่ใจว่าคุณได้ตั้งค่า config.file_mask ให้ตรงกับไฟล์ที่คุณต้องการโหลดใน https://github.com/DiceTechJobs/ConceptualSearch/blob/master/Settings/pre_process_documents.cfg ค่าเริ่มต้นนี้เป็น .*.txt (เป็น regex ไม่ใช่ไฟล์ blob) ดังนั้นคุณจะต้องเปลี่ยนแปลงสิ่งนี้หากไฟล์ของคุณไม่ใช่ไฟล์ .txt
กรุณาโพสต์คำถาม ข้อบกพร่อง หรือคำขอคุณสมบัติใด ๆ ลงในรายการปัญหา และใส่ @mention - @simonhughes22 เพื่อที่ฉันจะได้รับอีเมลที่ทันเวลาพร้อมคำถามของคุณ ฉันมีบางคนส่งอีเมลถึงฉันโดยตรงเพื่อถามคำถามเกี่ยวกับการซื้อคืนนี้ แม้ว่าฉันจะไม่รังเกียจที่จะตอบอีเมล แต่โปรดส่งปัญหา GitHub และ @mention ฉันแทน ด้วยวิธีนี้ ทุกคนจะสามารถเห็นคำถามและคำตอบของฉันเพื่อใช้อ้างอิงในอนาคต
ฉันเพิ่งบรรยายเรื่อง Vector Search รหัสอยู่ด้านล่าง นี่เป็นส่วนขยายตามธรรมชาติของงานค้นหาแนวความคิดที่ฉันทำ
โปรดตรวจสอบปลั๊กอิน Solr ของเรา: