Codequestion هو تطبيق بحث دلالي لأسئلة المطورين.
عادةً ما يكون للمطورين نافذة متصفح ويب مفتوحة أثناء عملهم ويقومون بإجراء عمليات بحث على الويب عند ظهور الأسئلة. باستخدام الأسئلة البرمجية، يمكن القيام بذلك من سياق محلي. ينفذ هذا التطبيق استعلامات التشابه للعثور على أسئلة مشابهة لاستعلام الإدخال.
النموذج الافتراضي لسؤال التعليمات البرمجية مبني على Stack Exchange Dumps على archive.org. بمجرد تثبيت النموذج، يتم تشغيل أسئلة التعليمات البرمجية محليًا، ولا يلزم الاتصال بالشبكة.
تم إنشاء Codequestion باستخدام Python 3.8+ وtxtai.
أسهل طريقة للتثبيت هي عبر النقطة وPyPI
pip install codequestion
بايثون 3.8+ مدعوم. يوصى باستخدام بيئة بايثون الافتراضية.
يمكن أيضًا تثبيت codequestion مباشرة من GitHub للوصول إلى أحدث الميزات التي لم يتم إصدارها.
pip install git+https://github.com/neuml/codequestion
راجع هذا الرابط لاستكشاف الأخطاء وإصلاحها الخاصة بالبيئة.
بمجرد تثبيت Codequestion، يجب تنزيل النموذج.
python -m codequestion.download
سيتم تخزين النموذج في ~/.codequestion/
يمكن أيضًا تثبيت النموذج يدويًا إذا لم يكن الجهاز مزودًا بإمكانية الوصول المباشر إلى الإنترنت. يتم سحب النموذج الافتراضي من صفحة إصدار GitHub
unzip cqmodel.zip ~/.codequestion
قم بتشغيل shell codequestion للبدء.
codequestion
سوف تظهر مطالبة. يمكن كتابة الاستعلامات في وحدة التحكم. اكتب help
لرؤية كافة الأوامر المتاحة.
الإصدار الأخير يدمج txtai 5.0، الذي يدعم الرسوم البيانية الدلالية.
تضيف الرسوم البيانية الدلالية دعمًا لنمذجة الموضوع واجتياز المسار. تنظم المواضيع الأسئلة في مجموعات ذات مفاهيم متشابهة. يستخدم اجتياز المسار الرسم البياني الدلالي لإظهار كيفية ربط إدخالين محتملين متباينين. يظهر أدناه مثال يغطي كلاً من الموضوع واجتياز المسار.
يمكن بدء مطالبة الأسئلة البرمجية داخل Visual Studio Code. يتيح ذلك طرح أسئلة الترميز مباشرة من IDE الخاص بك.
قم بتشغيل Ctrl+`
لفتح محطة جديدة ثم اكتب codequestion
.
ينشئ Codequestion فهرسًا قياسيًا لتضمينات txtai. وعلى هذا النحو، فهو يدعم استضافة الفهرس عبر خدمة txtai API.
تشغيل ما يلي:
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"
النواتج:
[{
"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 للأسئلة.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. يستخدم الإصدار 2 نموذج محولات الجملة. يستخدم الإصدار 1 نموذج متجهات الكلمات مع وزن BM25. يتم عرض BM25 وTF-IDF لتحديد درجة خط الأساس.
استعلام StackExchange
يتم تسجيل النماذج باستخدام متوسط الرتبة المتبادلة (MRR).
نموذج | MRR |
---|---|
الكل-MiniLM-L6-v2 | 85.0 |
SE 300d - BM25 | 77.1 |
بي ام 25 | 67.7 |
قوة العمل-جيش الدفاع الإسرائيلي | 61.7 |
معيار STS
يتم تسجيل النماذج باستخدام ارتباط بيرسون. لاحظ أن نموذج متجهات الكلمات يتم تدريبه فقط على بيانات Stack Exchange، لذلك ليس من المتوقع تعميمه أيضًا على مجموعة بيانات STS.
نموذج | الإشراف | ديف | امتحان |
---|---|---|---|
الكل-MiniLM-L6-v2 | يدرب | 87.0 | 82.7 |
SE 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