codequestion เป็นแอปพลิเคชันค้นหาความหมายสำหรับคำถามของนักพัฒนา
โดยทั่วไปนักพัฒนาจะเปิดหน้าต่างเว็บเบราว์เซอร์ในขณะที่ทำงานและทำการค้นหาเว็บเมื่อมีคำถามเกิดขึ้น ด้วยคำถามรหัส สิ่งนี้สามารถทำได้จากบริบทท้องถิ่น แอปพลิเคชั่นนี้ดำเนินการค้นหาความคล้ายคลึงกันเพื่อค้นหาคำถามที่คล้ายกันกับแบบสอบถามอินพุต
โมเดลเริ่มต้นสำหรับคำถามรหัสถูกสร้างขึ้นจาก Stack Exchange Dumps บน archive.org เมื่อติดตั้งโมเดลแล้ว Codequestion จะทำงานภายในเครื่อง โดยไม่จำเป็นต้องเชื่อมต่อเครือข่าย
codequestion สร้างขึ้นด้วย Python 3.8+ และ txtai
วิธีติดตั้งที่ง่ายที่สุดคือผ่าน pip และ PyPI
pip install codequestion
รองรับ Python 3.8+ แนะนำให้ใช้สภาพแวดล้อมเสมือน Python
codequestion ยังสามารถติดตั้งได้โดยตรงจาก GitHub เพื่อเข้าถึงฟีเจอร์ล่าสุดที่ยังไม่ได้เผยแพร่
pip install git+https://github.com/neuml/codequestion
ดูลิงก์นี้สำหรับการแก้ไขปัญหาเฉพาะสภาพแวดล้อม
เมื่อติดตั้ง codequestion แล้ว จะต้องดาวน์โหลดโมเดล
python -m codequestion.download
โมเดลจะถูกเก็บไว้ใน ~/.codequestion/
สามารถติดตั้งโมเดลด้วยตนเองได้หากเครื่องไม่มีการเข้าถึงอินเทอร์เน็ตโดยตรง โมเดลเริ่มต้นจะถูกดึงมาจากหน้าเผยแพร่ GitHub
unzip cqmodel.zip ~/.codequestion
เริ่มต้นเชลล์ codequestion เพื่อเริ่มต้น
codequestion
ข้อความแจ้งจะปรากฏขึ้น สามารถพิมพ์แบบสอบถามลงในคอนโซลได้ พิมพ์ help
เพื่อดูคำสั่งที่มีอยู่ทั้งหมด
รุ่นล่าสุดรวม txtai 5.0 ซึ่งได้รับการสนับสนุนกราฟความหมาย
กราฟความหมายเพิ่มการรองรับสำหรับการสร้างแบบจำลองหัวข้อและการข้ามเส้นทาง หัวข้อจะจัดคำถามเป็นกลุ่มที่มีแนวคิดคล้ายกัน การสำรวจเส้นทางใช้กราฟความหมายเพื่อแสดงว่ารายการสองรายการที่อาจต่างกันเชื่อมโยงกันอย่างไร ตัวอย่างที่ครอบคลุมทั้งการข้ามหัวข้อและเส้นทางแสดงอยู่ด้านล่าง
สามารถเริ่มพร้อมท์คำถามรหัสได้ภายใน Visual Studio Code ซึ่งช่วยให้สามารถถามคำถามเกี่ยวกับการเขียนโค้ดได้จาก IDE ของคุณ
เรียกใช้ Ctrl+`
เพื่อเปิดเทอร์มินัลใหม่ จากนั้นพิมพ์ codequestion
codequestion สร้างดัชนีการฝัง txtai มาตรฐาน ด้วยเหตุนี้ จึงรองรับการโฮสต์ดัชนีผ่านบริการ txtai API
ดำเนินการดังต่อไปนี้:
แอพ.yml
path : /home/user/.codequestion/models/stackexchange/
embeddings :
# Install API extra
pip install txtai[api]
# Start API
CONFIG=app.yml uvicorn "txtai.api:app"
# Test API
curl "http://127.0.0.1:8000/search?query=python+query+sqlite&limit=1"
เอาท์พุต:
[{
"id" : " 616429 " ,
"text" : " How to fetch data from sqlite using python? stackoverflow python sqlite " ,
"score" : 0.8401689529418945
}]
ช่องข้อมูลเมตาเพิ่มเติมสามารถดึงกลับได้ด้วยคำสั่ง SQL
curl
--get
--data-urlencode "query=select id, date, tags, question, score from txtai where similar('python query sqlite')"
--data-urlencode "limit=1"
"http://127.0.0.1:8000/search"
[{
"id" : " 616429 " ,
"date" : " 2022-05-23T10:45:40.397 " ,
"tags" : " python sqlite " ,
"question" : " How to fetch data from sqlite using python? " ,
"score" : 0.8401689529418945
}]
ต่อไปนี้เป็นภาพรวมที่ครอบคลุมถึงวิธีการทำงานของโครงการนี้
ดัมพ์ XML 7z แบบดิบจาก Stack Exchange ได้รับการประมวลผลผ่านชุดขั้นตอน (ดูการสร้างแบบจำลอง) เฉพาะคำถามที่ได้รับคะแนนสูงพร้อมคำตอบที่ยอมรับเท่านั้นที่จะถูกดึงมาเพื่อจัดเก็บในแบบจำลอง คำถามและคำตอบจะรวมอยู่ในไฟล์ SQLite ไฟล์เดียวที่เรียกว่า questions.db สคีมาสำหรับ questions.db อยู่ด้านล่าง
สคีมาของ questions.db
Id INTEGER PRIMARY KEY
Source TEXT
SourceId INTEGER
Date DATETIME
Tags TEXT
Question TEXT
QuestionUser TEXT
Answer TEXT
AnswerUser TEXT
Reference TEXT
codequestion สร้างดัชนีการฝัง txtai สำหรับ questions.db แต่ละคำถามในสกีมาของ questions.db จะถูกทำให้เป็นเวกเตอร์ด้วยโมเดลตัวแปลงประโยค เมื่อ questions.db ถูกแปลงเป็นคอลเลกชันของการฝังประโยค การฝังจะถูกทำให้เป็นมาตรฐานและจัดเก็บไว้ใน Faiss ซึ่งช่วยให้สามารถค้นหาความคล้ายคลึงกันได้อย่างรวดเร็ว
codequestion โทเค็นแต่ละแบบสอบถามโดยใช้วิธีการเดียวกันกับในระหว่างการจัดทำดัชนี โทเค็นเหล่านั้นใช้เพื่อสร้างประโยคที่ฝัง การฝังนั้นจะถูกสอบถามกับดัชนี Faiss เพื่อค้นหาคำถามที่คล้ายกันมากที่สุด
ขั้นตอนต่อไปนี้แสดงวิธีสร้างโมเดลคำถามโค้ดโดยใช้ไฟล์เก็บถาวร Stack Exchange
สิ่งนี้ไม่จำเป็นหากใช้โมเดลเริ่มต้นจากหน้าเผยแพร่ GitHub
1.) ดาวน์โหลดไฟล์จาก Stack Exchange: https://archive.org/details/stackexchange
2.) วางไฟล์ที่เลือกไว้ในโครงสร้างไดเร็กทอรีดังที่แสดงด้านล่าง (กระบวนการปัจจุบันต้องใช้ไฟล์เหล่านี้ทั้งหมด)
3.) เรียกใช้กระบวนการ ETL
python -m codequestion.etl.stackexchange.execute stackexchange
สิ่งนี้จะสร้างไฟล์ stackexchange/questions.db
4.) ตัวเลือก: สร้างเวกเตอร์คำ - จำเป็นเฉพาะในกรณีที่ใช้โมเดลเวกเตอร์คำ หากใช้โมเดลคำเวกเตอร์ ตรวจสอบให้แน่ใจว่าได้รัน pip install txtai[similarity]
python -m codequestion.vectors stackexchange/questions.db
สิ่งนี้จะสร้างไฟล์ ~/.codequestion/vectors/stackexchange-300d.magnitude
5.) สร้างดัชนีการฝัง
python -m codequestion.index index.yml stackexchange/questions.db
พบไฟล์ index.yml เริ่มต้นบน GitHub สามารถเปลี่ยนการตั้งค่าเพื่อปรับแต่งวิธีการสร้างดัชนีได้
หลังจากขั้นตอนนี้ ดัชนีจะถูกสร้างขึ้นและไฟล์ที่จำเป็นทั้งหมดก็พร้อมที่จะสืบค้น
ส่วนต่อไปนี้แสดงผลการทดสอบสำหรับ codequestion v2 และ codequestion v1 โดยใช้ Stack Exchange dumps ล่าสุด เวอร์ชัน 2 ใช้โมเดลตัวแปลงประโยค เวอร์ชัน 1 ใช้โมเดลคำเวกเตอร์ที่มีการถ่วงน้ำหนัก BM25 มีการแสดง BM25 และ TF-IDF เพื่อสร้างคะแนนพื้นฐาน
แบบสอบถาม StackExchange
แบบจำลองจะถูกให้คะแนนโดยใช้อันดับเฉลี่ยซึ่งกันและกัน (MRR)
แบบอย่าง | รพ |
---|---|
ทั้งหมด-MiniLM-L6-v2 | 85.0 |
เอสอี 300d - BM25 | 77.1 |
บีเอ็ม25 | 67.7 |
TF-IDF | 61.7 |
เกณฑ์มาตรฐาน STS
โมเดลจะได้รับคะแนนโดยใช้ Pearson Correlation โปรดทราบว่าโมเดลคำเวกเตอร์ได้รับการฝึกฝนเฉพาะกับข้อมูล Stack Exchange เท่านั้น ดังนั้นจึงไม่น่าจะมีการสรุปทั่วไปกับชุดข้อมูล STS
แบบอย่าง | การกำกับดูแล | นักพัฒนา | ทดสอบ |
---|---|---|---|
ทั้งหมด-MiniLM-L6-v2 | รถไฟ | 87.0 | 82.7 |
เอสอี 300d - BM25 | รถไฟ | 74.0 | 67.4 |
เมื่อต้องการทำซ้ำการทดสอบข้างต้น ให้รันดังต่อไปนี้ แทนที่ $TEST_PATH ด้วยพาธในเครื่องใดๆ
mkdir -p $TEST_PATH
wget https://raw.githubusercontent.com/neuml/codequestion/master/test/stackexchange/query.txt -P $TEST_PATH/stackexchange
wget http://ixa2.si.ehu.es/stswiki/images/4/48/Stsbenchmark.tar.gz
tar -C $TEST_PATH -xvzf Stsbenchmark.tar.gz
python -m codequestion.evaluate -s test -p $TEST_PATH