
في السنوات الأخيرة ، حقق المستردون الكثيفون القائم على نماذج اللغة التي تم تدريبها مسبقًا تقدمًا ملحوظًا. لتسهيل المزيد من المطورين الذين يستخدمون التقنيات المتطورة ، يوفر هذا المستودع مجموعة أدوات سهلة الاستخدام لتشغيل وضبط المسترجعين الكثفيين على أحدث طراز ، أي Rocketqa . تحتوي مجموعة الأدوات هذه على المزايا التالية:

نحن نقدم طريقتين للتثبيت: حزمة تثبيت Python وبيئة Docker
أولا ، تثبيت paddlepaddle.
# GPU version:
$ pip install paddlepaddle-gpu
# CPU version:
$ pip install paddlepaddleثانياً ، قم بتثبيت حزمة Rocketqa (أحدث إصدار: 1.1.0):
$ pip install rocketqaملاحظة: يجب أن تعمل مجموعة الأدوات هذه على Python3.6+ مع Paddlepaddle 2.0+.
docker pull rocketqa/rocketqa
docker run -it docker.io/rocketqa/rocketqa bashارجع إلى الأمثلة أدناه ، يمكنك إنشاء وتشغيل محرك البحث الخاص بك مع عدة أسطر من التعليمات البرمجية. كما نقدم ملعبًا مع Jupyternotebook. جرب Rocketqa على الفور في متصفحك!
جينا هي إطار بحث عصبي من السحابة لإنشاء SOTA وتطبيقات البحث العميقة القابلة للتطوير في دقائق. فيما يلي مثال بسيط لإنشاء محرك بحث يعتمد على Jina و Rocketqa.
cd examples/jina_example
pip3 install -r requirements.txt
# Generate vector representations and build a libray for your Documents
# JINA will automaticlly start a web service for you
python3 app.py index toy_data/test.tsv
# Try some questions related to the indexed Documents
python3 app.py query_cliيرجى عرض مثال جينا لمعرفة المزيد.
نحن نقدم أيضًا مثالًا بسيطًا مبنيًا على Faiss.
cd examples/faiss_example/
pip3 install -r requirements.txt
# Generate vector representations and build a libray for your Documents
python3 index.py zh ../data/dureader.para test_index
# Start a web service on http://localhost:8888/rocketqa
python3 rocketqa_service.py zh ../data/dureader.para test_index
# Try some questions related to the indexed Documents
python3 query.pyيمكنك أيضًا دمج Rocketqa بسهولة في مهمتك الخاصة. نحن نقدم نوعين من النماذج ، التشفير المزدوج المستند إلى Ernie لاسترجاع الإجابة و Ernie Cross Crosser من أجل إعادة التصنيف. لتشغيل نماذجنا ، يمكنك استخدام الوظائف التالية.
rocketqa.available_models()إرجاع أسماء نماذج Rocketqa المتاحة. لمعرفة المزيد عن النماذج المتاحة ، يرجى الاطلاع على تعليق الرمز.
rocketqa.load_model(model, use_cuda=False, device_id=0, batch_size=1)إرجاع النموذج المحدد بواسطة معلمة الإدخال. يمكن تهيئة كل من التشفير المزدوج والتشفير المتقاطع. من خلال إعداد معلمة الإدخال ، يمكنك تحميل إما طرز RocketQa التي يتم إرجاعها بواسطة "Available_Models ()" أو نقاط التفتيش الخاصة بك.
يدعم المشفر المزدوج الذي تم إرجاعه بواسطة "load_model ()" الوظائف التالية:
model.encode_query(query: List[str])بالنظر إلى قائمة الاستعلامات ، يعيد ناقلات التمثيل المشفرة حسب النموذج.
model.encode_para(para: List[str], title: List[str])بالنظر إلى قائمة الفقرات والألقاب المقابلة (اختياري) ، إرجاع ناقلات التمثيلات المشفرة حسب النموذج.
model.matching(query: List[str], para: List[str], title: List[str])بالنظر إلى قائمة الاستعلامات والفقرات (والعناوين) ، تُرجع درجات المطابقة الخاصة بها (منتج DOT بين متجهات التمثيل).
model.train(train_set: str, epoch: int, save_model_path: str, args) بالنظر إلى Hyperparameters train_set و epoch و save_model_path ، يمكنك تدريب طراز التشفير المزدوج الخاص بك أو نماذجنا. يمكن أيضًا تعيين إعدادات أخرى مثل save_steps و learning_rate في args . يرجى الرجوع إلى أمثلة/example.py للحصول على التفاصيل.
يدعم المشفر المتقاطع الذي تم إرجاعه بواسطة "load_model ()" الوظيفة التالية:
model.matching(query: List[str], para: List[str], title: List[str])بالنظر إلى قائمة الاستعلامات والفقرات (والعناوين) ، تُرجع درجات المطابقة الخاصة بها (احتمال أن تكون الفقرة هي الإجابة الصحيحة للاستعلام).
model.train(train_set: str, epoch: int, save_model_path: str, args) بالنظر إلى Hyperparameters train_set و epoch و save_model_path ، يمكنك تدريب طراز التشفير المتقاطع الخاص بك أو نماذجنا. يمكن أيضًا تعيين إعدادات أخرى مثل save_steps و learning_rate في args . يرجى الرجوع إلى أمثلة/example.py للحصول على التفاصيل.
باتباع الأمثلة أدناه ، يمكنك استرداد تمثيل المتجه لمستنداتك وتوصيل Rocketqa بمهامك الخاصة.
لتشغيل نماذج Rocketqa ، يجب عليك تعيين model المعلمة في "load_model ()" مع اسم طراز Rocketqa الذي تم إرجاعه بواسطة "Available_Models ()".
import rocketqa
query_list = [ "trigeminal definition" ]
para_list = [
"Definition of TRIGEMINAL. : of or relating to the trigeminal nerve.ADVERTISEMENT. of or relating to the trigeminal nerve. ADVERTISEMENT." ]
# init dual encoder
dual_encoder = rocketqa . load_model ( model = "v1_marco_de" , use_cuda = True , device_id = 0 , batch_size = 16 )
# encode query & para
q_embs = dual_encoder . encode_query ( query = query_list )
p_embs = dual_encoder . encode_para ( para = para_list )
# compute dot product of query representation and para representation
dot_products = dual_encoder . matching ( query = query_list , para = para_list ) لتدريب النماذج الخاصة بك ، يمكنك استخدام وظيفة train() مع مجموعة البيانات والمعلمات. تحتوي بيانات التدريب على 4 أعمدة: الاستعلام ، العنوان ، الفقرة ، التسمية (0 أو 1) ، مفصولة بـ " t". للحصول على تفاصيل حول المعلمات ومجموعة البيانات ، يرجى الرجوع إلى './examples/example.py'
import rocketqa
# init cross encoder, and set device and batch_size
cross_encoder = rocketqa . load_model ( model = "zh_dureader_ce" , use_cuda = True , device_id = 0 , batch_size = 32 )
# finetune cross encoder based on "zh_dureader_ce_v2"
cross_encoder . train ( './examples/data/cross.train.tsv' , 2 , 'ce_models' , save_steps = 1000 , learning_rate = 1e-5 , log_folder = 'log_ce' ) لتشغيل النماذج الخاصة بك ، يجب عليك تعيين model المعلمة في "load_model ()" مع ملف تكوين JSON.
import rocketqa
# init cross encoder
cross_encoder = rocketqa . load_model ( model = "./examples/ce_models/config.json" , use_cuda = True , device_id = 0 , batch_size = 16 )
# compute relevance of query and para
relevance = cross_encoder . matching ( query = query_list , para = para_list )التكوين هو ملف JSON مثل هذا
{
"model_type": "cross_encoder",
"max_seq_len": 384,
"model_conf_path": "zh_config.json",
"model_vocab_path": "zh_vocab.txt",
"model_checkpoint_path": ${YOUR_MODEL},
"for_cn": true,
"share_parameter": 0
}
examples المجلد توفر المزيد من التفاصيل.
إذا وجدت نماذج Rocketqa V1 مفيدة ، فلا تتردد في الاستشهاد بنشرنا Rocketqa: نهج تدريبي محسّن لاسترجاع المرور الكثيف للإجابة على أسئلة المجال المفتوح
@inproceedings{rocketqa_v1,
title="RocketQA: An Optimized Training Approach to Dense Passage Retrieval for Open-Domain Question Answering",
author="Yingqi Qu, Yuchen Ding, Jing Liu, Kai Liu, Ruiyang Ren, Wayne Xin Zhao, Daxiang Dong, Hua Wu and Haifeng Wang",
year="2021",
booktitle = "In Proceedings of NAACL"
}
إذا وجدت نماذج زوج مفيدة ، فلا تتردد في الاستشهاد بزوجنا للنشر: الاستفادة
@inproceedings{rocketqa_pair,
title="PAIR: Leveraging Passage-Centric Similarity Relation for Improving Dense Passage Retrieval",
author="Ruiyang Ren, Shangwen Lv, Yingqi Qu, Jing Liu, Wayne Xin Zhao, Qiaoqiao She, Hua Wu, Haifeng Wang and Ji-Rong Wen",
year="2021",
booktitle = "In Proceedings of ACL Findings"
}
إذا وجدت نماذج Rocketqa V2 مفيدة ، فلا تتردد في الاستشهاد بنشرنا RocketQav2: طريقة تدريب مشتركة لاسترجاع المرور الكثيف وإعادة الترتيب للمرور
@inproceedings{rocketqa_v2,
title="RocketQAv2: A Joint Training Method for Dense Passage Retrieval and Passage Re-ranking",
author="Ruiyang Ren, Yingqi Qu, Jing Liu, Wayne Xin Zhao, Qiaoqiao She, Hua Wu, Haifeng Wang and Ji-Rong Wen",
year="2021",
booktitle = "In Proceedings of EMNLP"
}
إذا وجدت مجموعة بيانات استرجاع Dureader مفيدة ، فلا تتردد في الاستشهاد بنشرنا dureader_retrival: معيار صيني واسع النطاق لاسترجاع مرور من محرك البحث على الويب
@inproceedings{DuReader_retrieval,
title="DuReader_retrieval: A Large-scale Chinese Benchmark for Passage Retrieval from Web Search Engine",
author="Yifu Qiu, Hongyu Li, Yingqi Qu, Ying Chen, Qiaoqiao She, Jing Liu, Hua Wu and Haifeng Wang",
booktitle = "In Proceedings of EMNLP"
year="2022"
}
إذا وجدت استطلاعنا مفيدًا لعملك ، فيرجى الاستشهاد بالورقة الكثيفة التي استرجاعها النص
@article{DRSurvey,
title={Dense Text Retrieval based on Pretrained Language Models: A Survey},
author={Wayne Xin Zhao, Jing Liu, Ruiyang Ren, Ji-Rong Wen},
year={2022},
journal={arXiv preprint arXiv:2211.14876}
}
يتم توفير هذا المستودع بموجب ترخيص Apache-2.0.
للحصول على المساعدة أو المشكلات التي تستخدم Rocketqa ، يرجى تقديم مشكلة github.
للاتصالات الأخرى أو التعاون ، يرجى الاتصال بـ Jing Liu ([email protected]) أو مسح رمز الاستجابة السريعة التالية.
