codequestion adalah aplikasi pencarian semantik untuk pertanyaan pengembang.
Pengembang biasanya membuka jendela browser web saat mereka bekerja dan menjalankan pencarian web saat pertanyaan muncul. Dengan pertanyaan kode, hal ini dapat dilakukan dari konteks lokal. Aplikasi ini mengeksekusi kueri kesamaan untuk menemukan pertanyaan serupa dengan kueri masukan.
Model default untuk pertanyaan kode dibuat dari Stack Exchange Dumps di archive.org. Setelah model diinstal, pertanyaan kode berjalan secara lokal, tidak diperlukan koneksi jaringan.
codequestion dibuat dengan Python 3.8+ dan txtai.
Cara termudah untuk menginstal adalah melalui pip dan PyPI
pip install codequestion
Python 3.8+ didukung. Disarankan menggunakan lingkungan virtual Python.
codequestion juga dapat diinstal langsung dari GitHub untuk mengakses fitur-fitur terbaru yang belum dirilis.
pip install git+https://github.com/neuml/codequestion
Lihat tautan ini untuk pemecahan masalah khusus lingkungan.
Setelah pertanyaan kode diinstal, model perlu diunduh.
python -m codequestion.download
Model akan disimpan di ~/.codequestion/
Model ini juga dapat diinstal secara manual jika mesin tidak memiliki akses internet langsung. Model default diambil dari halaman rilis GitHub
unzip cqmodel.zip ~/.codequestion
Mulai shell pertanyaan kode untuk memulai.
codequestion
Sebuah perintah akan muncul. Kueri dapat diketik di konsol. Ketik help
untuk melihat semua perintah yang tersedia.
Rilis terbaru mengintegrasikan txtai 5.0, yang memiliki dukungan untuk grafik semantik.
Grafik semantik menambahkan dukungan untuk pemodelan topik dan penjelajahan jalur. Topik mengatur pertanyaan ke dalam kelompok dengan konsep serupa. Penjelajahan jalur menggunakan grafik semantik untuk menunjukkan bagaimana dua entri yang berpotensi berbeda terhubung. Contoh yang mencakup penjelajahan topik dan jalur ditunjukkan di bawah.
Prompt pertanyaan kode dapat dimulai dalam Visual Studio Code. Ini memungkinkan mengajukan pertanyaan pengkodean langsung dari IDE Anda.
Jalankan Ctrl+`
untuk membuka terminal baru lalu ketik codequestion
.
codequestion membuat indeks penyematan txtai standar. Dengan demikian, ini mendukung hosting indeks melalui layanan API txtai.
Menjalankan yang berikut ini:
app.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"
Keluaran:
[{
"id" : " 616429 " ,
"text" : " How to fetch data from sqlite using python? stackoverflow python sqlite " ,
"score" : 0.8401689529418945
}]
Bidang metadata tambahan dapat ditarik kembali dengan pernyataan 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
}]
Berikut ini adalah ikhtisar yang mencakup cara kerja proyek ini.
Dump XML 7z mentah dari Stack Exchange diproses melalui serangkaian langkah (lihat membuat model). Hanya pertanyaan dengan skor tinggi dan jawaban yang diterima yang diambil untuk disimpan dalam model. Pertanyaan dan jawaban digabungkan ke dalam satu file SQLite yang disebut question.db. Skema untuk question.db ada di bawah.
skema question.db
Id INTEGER PRIMARY KEY
Source TEXT
SourceId INTEGER
Date DATETIME
Tags TEXT
Question TEXT
QuestionUser TEXT
Answer TEXT
AnswerUser TEXT
Reference TEXT
codequestion membuat indeks penyematan txtai untuk question.db. Setiap pertanyaan dalam skema question.db divektorkan dengan model pengubah kalimat. Setelah question.db diubah menjadi kumpulan penyematan kalimat, penyematan tersebut dinormalisasi dan disimpan di Faiss, yang memungkinkan pencarian kesamaan dengan cepat.
codequestion memberi token pada setiap kueri menggunakan metode yang sama seperti saat pengindeksan. Token tersebut digunakan untuk membuat penyematan kalimat. Penyematan tersebut ditanyakan terhadap indeks Faiss untuk menemukan pertanyaan yang paling mirip.
Langkah-langkah berikut menunjukkan cara membuat model pertanyaan kode menggunakan arsip Stack Exchange.
Ini tidak diperlukan jika menggunakan model default dari halaman rilis GitHub
1.) Unduh file dari Stack Exchange: https://archive.org/details/stackexchange
2.) Tempatkan file yang dipilih ke dalam struktur direktori seperti yang ditunjukkan di bawah ini (proses saat ini memerlukan semua file ini).
3.) Jalankan proses ETL
python -m codequestion.etl.stackexchange.execute stackexchange
Ini akan membuat file stackexchange/questions.db
4.) OPSIONAL: Membangun vektor kata - hanya diperlukan jika menggunakan model vektor kata. Jika menggunakan model vektor kata, pastikan untuk menjalankan pip install txtai[similarity]
python -m codequestion.vectors stackexchange/questions.db
Ini akan membuat file ~/.codequestion/vectors/stackexchange-300d.magnitude
5.) Bangun indeks penyematan
python -m codequestion.index index.yml stackexchange/questions.db
File index.yml default ditemukan di GitHub. Pengaturan dapat diubah untuk menyesuaikan cara indeks dibuat.
Setelah langkah ini, indeks dibuat dan semua file yang diperlukan siap untuk dikueri.
Bagian berikut menunjukkan hasil pengujian untuk codequestion v2 dan codequestion v1 menggunakan dump Stack Exchange terbaru. Versi 2 menggunakan model pengubah kalimat. Versi 1 menggunakan model vektor kata dengan bobot BM25. BM25 dan TF-IDF ditampilkan untuk menetapkan skor dasar.
Kueri StackExchange
Model diberi skor menggunakan Mean Reciprocal Rank (MRR).
Model | MRR |
---|---|
semua-MiniLM-L6-v2 | 85.0 |
SE 300d - BM25 | 77.1 |
BM25 | 67.7 |
TF-IDF | 61.7 |
Tolok Ukur STS
Model diberi skor menggunakan Korelasi Pearson. Perhatikan bahwa model vektor kata hanya dilatih pada data Stack Exchange, sehingga model ini tidak diharapkan dapat digeneralisasi dengan baik terhadap kumpulan data STS.
Model | Pengawasan | Dev | Tes |
---|---|---|---|
semua-MiniLM-L6-v2 | Kereta | 87.0 | 82.7 |
SE 300d - BM25 | Kereta | 74.0 | 67.4 |
Untuk mereproduksi tes di atas, jalankan yang berikut ini. Gantikan $TEST_PATH dengan jalur lokal mana pun.
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