
ในช่วงไม่กี่ปีที่ผ่านมาผู้ค้นพบที่หนาแน่นจากแบบจำลองภาษาที่ผ่านการฝึกอบรมมาก่อนได้ประสบความสำเร็จอย่างมาก เพื่ออำนวยความสะดวกให้กับนักพัฒนาซอฟต์แวร์มากขึ้นโดยใช้เทคโนโลยีที่ทันสมัยที่เก็บข้อมูลนี้มีชุดเครื่องมือที่ใช้งานง่ายสำหรับการทำงานและปรับแต่งการดึงข้อมูลทึบที่ล้ำสมัย ได้แก่ 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 ทันทีในเบราว์เซอร์ของคุณ!
Jina เป็นกรอบการค้นหาระบบประสาทแบบคลาวด์เพื่อสร้าง 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โปรดดูตัวอย่าง Jina เพื่อทราบข้อมูลเพิ่มเติม
นอกจากนี้เรายังให้ตัวอย่างง่ายๆที่สร้างขึ้นบน 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-based Dual encoder สำหรับการดึงคำตอบและเข้ารหัสข้ามที่ใช้ Ernie สำหรับคำตอบการจัดอันดับใหม่ สำหรับการเรียกใช้โมเดลของเราคุณสามารถใช้ฟังก์ชั่นต่อไปนี้
rocketqa.available_models()ส่งคืนชื่อของรุ่น RocketQa ที่มีอยู่ หากต้องการทราบข้อมูลเพิ่มเติมเกี่ยวกับรุ่นที่มีอยู่โปรดดูความคิดเห็นของรหัส
rocketqa.load_model(model, use_cuda=False, device_id=0, batch_size=1)ส่งคืนโมเดลที่ระบุโดยพารามิเตอร์อินพุต มันสามารถเริ่มต้นทั้งตัวเข้ารหัสคู่และตัวเข้ารหัสข้าม โดยการตั้งค่าพารามิเตอร์อินพุตคุณสามารถโหลดโมเดล RocketQa ที่ส่งคืนโดย "arile_models ()" หรือจุดตรวจสอบของคุณเอง
Dual-encoder ส่งคืนโดย "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 คุณสามารถฝึกอบรมรุ่นเข้ารหัสคู่ของคุณเองหรือ Finetune รุ่นของเรา การตั้งค่าอื่น ๆ เช่น save_steps และ learning_rate ยังสามารถตั้งค่าใน args ได้ โปรดดูตัวอย่าง/ตัวอย่างสำหรับรายละเอียด
Cross-encoder ส่งคืนโดย "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 คุณสามารถฝึกอบรมโมเดล Cross Encoder ของคุณเองหรือ Finetune รุ่นของเรา การตั้งค่าอื่น ๆ เช่น save_steps และ learning_rate ยังสามารถตั้งค่าใน args ได้ โปรดดูตัวอย่าง/ตัวอย่างสำหรับรายละเอียด
จากตัวอย่างด้านล่างคุณสามารถเรียกคืนการแสดงเวกเตอร์ของเอกสารของคุณและเชื่อมต่อ RocketQa กับงานของคุณเอง
ในการเรียกใช้โมเดล RocketQa คุณควรตั้งค่า model พารามิเตอร์ใน 'load_model ()' ด้วยชื่อรุ่น rocketqa ที่ส่งคืนโดย 'arile_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 )config เป็นไฟล์ 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 มีประโยชน์อย่าลังเลที่จะอ้างถึงสิ่งพิมพ์ของเรา
@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]) หรือสแกนรหัส QR ต่อไปนี้
