ເມື່ອເວົ້າເຖິງການປຸງແຕ່ງພາສາທໍາມະຊາດ (NLP) ແລະການດຶງຂໍ້ມູນ, ຄວາມສາມາດໃນການດຶງຂໍ້ມູນທີ່ກ່ຽວຂ້ອງຢ່າງມີປະສິດທິພາບແລະຖືກຕ້ອງແມ່ນສໍາຄັນທີ່ສຸດ. ໃນຂະນະທີ່ຂະແໜງການສືບຕໍ່ພັດທະນາ, ໄດ້ຮັບການພັດທະນາເຕັກນິກ ແລະ ວິທີການໃໝ່ ເພື່ອຍົກສູງປະສິດທິຜົນຂອງລະບົບການເກັບກູ້, ໂດຍສະເພາະແມ່ນໃນສະພາບການ. ການຟື້ນຕົວການຜະລິດທີ່ເພີ່ມຂຶ້ນ (RAG). ຫນຶ່ງໃນເຕັກນິກດັ່ງກ່າວ, ເອີ້ນວ່າການດຶງຂໍ້ມູນສອງຂັ້ນຕອນກັບ rerankers, ໄດ້ອອກມາເປັນການແກ້ໄຂທີ່ມີປະສິດທິພາບເພື່ອແກ້ໄຂຂໍ້ຈໍາກັດຂອງວິທີການດຶງຂໍ້ມູນແບບດັ້ງເດີມ.
ໃນບົດຄວາມນີ້, ພວກເຮົາປຶກສາຫາລືກ່ຽວກັບ intricacies ຂອງການດຶງຂໍ້ມູນສອງຂັ້ນຕອນແລະ rerankers, ຂຸດຄົ້ນຫຼັກການພື້ນຖານຂອງເຂົາເຈົ້າ, ຍຸດທະສາດການປະຕິບັດ, ແລະຜົນປະໂຫຍດທີ່ເຂົາເຈົ້າສະເຫນີໃນການປັບປຸງຄວາມຖືກຕ້ອງແລະປະສິດທິພາບຂອງລະບົບ RAG. ພວກເຮົາຍັງຈະໃຫ້ຕົວຢ່າງພາກປະຕິບັດ ແລະຕົວຢ່າງຂອງລະຫັດເພື່ອສະແດງແນວຄວາມຄິດ ແລະອຳນວຍຄວາມສະດວກໃຫ້ມີຄວາມເຂົ້າໃຈເລິກເຊິ່ງກ່ຽວກັບເທັກນິກທີ່ທັນສະໄໝນີ້.
ຄວາມເຂົ້າໃຈ Retrieval Augmented Generation (RAG)
ກ່ອນທີ່ຈະເຂົ້າໄປໃນຈຸດສະເພາະຂອງການດຶງຂໍ້ມູນສອງຂັ້ນຕອນແລະ rerankers, ໃຫ້ພວກເຮົາທົບທວນຄືນແນວຄວາມຄິດຂອງ Retrieval Augmented Generation (RAG). RAG ແມ່ນເຕັກນິກທີ່ຂະຫຍາຍຄວາມຮູ້ແລະຄວາມສາມາດຂອງຕົວແບບພາສາຂະຫນາດໃຫຍ່ (LLMs) ໂດຍການໃຫ້ພວກເຂົາເຂົ້າເຖິງແຫຼ່ງຂໍ້ມູນພາຍນອກ, ເຊັ່ນ: ຖານຂໍ້ມູນຫຼືການເກັບກໍາເອກະສານ. ອ້າງອີງເພີ່ມເຕີມຈາກບົດຄວາມ "ດຳເນີນການຢ່າງເລິກເຊິ່ງເຂົ້າໄປໃນການດຶງດູດການຜະລິດທີ່ເພີ່ມຂຶ້ນໃນ LLM".
ຂະບວນການ RAG ປົກກະຕິປະກອບມີຂັ້ນຕອນຕໍ່ໄປນີ້:
- ການສອບຖາມ: ຜູ້ໃຊ້ຕັ້ງຄໍາຖາມຫຼືໃຫ້ຄໍາແນະນໍາກັບລະບົບ.
- ການດຶງຂໍ້ມູນຄືນ: ລະບົບສອບຖາມຖານຂໍ້ມູນ vector ຫຼືການເກັບກໍາເອກະສານເພື່ອຊອກຫາຂໍ້ມູນທີ່ກ່ຽວຂ້ອງກັບການສອບຖາມຂອງຜູ້ໃຊ້.
- ເພີ່ມຂຶ້ນ: ຂໍ້ມູນທີ່ໄດ້ຮັບແມ່ນລວມກັບຄໍາຖາມຫຼືຄໍາແນະນໍາຕົ້ນສະບັບຂອງຜູ້ໃຊ້.
- ການຜະລິດ: ຮູບແບບພາສາປະມວນຜົນການປ້ອນຂໍ້ມູນທີ່ເພີ່ມຂຶ້ນ ແລະສ້າງການຕອບສະໜອງ, ນຳໃຊ້ຂໍ້ມູນພາຍນອກເພື່ອເພີ່ມຄວາມຖືກຕ້ອງ ແລະ ສົມບູນຂອງຜົນຜະລິດຂອງມັນ.
ໃນຂະນະທີ່ RAG ໄດ້ພິສູດວ່າເປັນເຕັກນິກທີ່ມີປະສິດທິພາບ, ມັນບໍ່ແມ່ນຄວາມທ້າທາຍຂອງມັນ. ຫນຶ່ງໃນບັນຫາທີ່ສໍາຄັນແມ່ນຢູ່ໃນຂັ້ນຕອນຂອງການດຶງຂໍ້ມູນ, ບ່ອນທີ່ວິທີການດຶງຂໍ້ມູນແບບດັ້ງເດີມອາດຈະບໍ່ກໍານົດເອກະສານທີ່ກ່ຽວຂ້ອງທີ່ສຸດ, ນໍາໄປສູ່ການຕອບສະຫນອງທີ່ເຫມາະສົມຫຼືບໍ່ຖືກຕ້ອງຈາກຮູບແບບພາສາ.
ຄວາມຕ້ອງການສໍາລັບການດຶງຂໍ້ມູນສອງຂັ້ນຕອນແລະ Rerankers
ວິທີການດຶງຂໍ້ມູນແບບດັ້ງເດີມ, ເຊັ່ນວ່າອີງໃສ່ການຈັບຄູ່ຄໍາຫລັກຫຼືແບບຈໍາລອງພື້ນທີ່ vector, ມັກຈະຕໍ່ສູ້ເພື່ອເກັບກໍາການພົວພັນ semantic nuanced ລະຫວ່າງການສອບຖາມແລະເອກະສານ. ຂໍ້ຈໍາກັດນີ້ສາມາດສົ່ງຜົນໃຫ້ມີການດຶງເອົາເອກະສານທີ່ມີຄວາມກ່ຽວຂ້ອງພຽງແຕ່ superficially ຫຼືຂາດຂໍ້ມູນທີ່ສໍາຄັນທີ່ສາມາດປັບປຸງຄຸນນະພາບຂອງການຕອບສະຫນອງທີ່ສ້າງຂຶ້ນຢ່າງຫຼວງຫຼາຍ.
ເພື່ອແກ້ໄຂສິ່ງທ້າທາຍນີ້, ນັກຄົ້ນຄວ້າແລະນັກປະຕິບັດໄດ້ຫັນໄປສູ່ການດຶງຂໍ້ມູນສອງຂັ້ນຕອນດ້ວຍ rerankers. ວິທີການນີ້ປະກອບດ້ວຍຂະບວນການສອງຂັ້ນຕອນ:
- ການດຶງຂໍ້ມູນເບື້ອງຕົ້ນ: ໃນຂັ້ນຕອນທໍາອິດ, ຊຸດເອກະສານທີ່ມີທ່າແຮງທີ່ຂ້ອນຂ້າງໃຫຍ່ແມ່ນຖືກດຶງມາໂດຍໃຊ້ວິທີການດຶງຂໍ້ມູນໄວແລະມີປະສິດທິພາບ, ເຊັ່ນ: ຮູບແບບພື້ນທີ່ vector ຫຼືການຄົ້ນຫາທີ່ອີງໃສ່ຄໍາຫລັກ.
- ການຈັດອັນດັບໃໝ່: ໃນຂັ້ນຕອນທີສອງ, ຮູບແບບການຈັດລໍາດັບທີ່ຊັບຊ້ອນກວ່າແມ່ນຈ້າງງານເພື່ອຈັດລໍາດັບເອກະສານທີ່ດຶງມາໃນເບື້ອງຕົ້ນໂດຍອີງໃສ່ຄວາມກ່ຽວຂ້ອງຂອງພວກເຂົາກັບການສອບຖາມ, ນໍາເອົາເອກະສານທີ່ກ່ຽວຂ້ອງທີ່ສຸດໄປສູ່ບັນຊີລາຍການ.
ຮູບແບບການຈັດລໍາດັບ, ມັກຈະເປັນເຄືອຂ່າຍ neural ຫຼືສະຖາປັດຕະຍະກໍາທີ່ອີງໃສ່ການຫັນເປັນ, ໄດ້ຖືກຝຶກອົບຮົມໂດຍສະເພາະເພື່ອປະເມີນຄວາມກ່ຽວຂ້ອງຂອງເອກະສານກັບການສອບຖາມທີ່ໃຫ້. ໂດຍການໃຊ້ຄວາມສາມາດໃນການເຂົ້າໃຈພາສາທໍາມະຊາດແບບພິເສດ, ຜູ້ຈັດລໍາດັບສາມາດເກັບກໍາຄວາມແຕກຕ່າງກັນທາງ semantic ແລະການພົວພັນສະພາບການລະຫວ່າງການສອບຖາມແລະເອກະສານ, ເຮັດໃຫ້ການຈັດອັນດັບທີ່ຖືກຕ້ອງແລະມີຄວາມກ່ຽວຂ້ອງຫຼາຍຂຶ້ນ.
ຜົນປະໂຫຍດຂອງການດຶງຂໍ້ມູນສອງຂັ້ນຕອນແລະ Rerankers
ການຮັບຮອງເອົາການດຶງຂໍ້ມູນສອງຂັ້ນຕອນກັບ rerankers ສະເຫນີຜົນປະໂຫຍດທີ່ສໍາຄັນຫຼາຍໃນສະພາບການຂອງລະບົບ RAG:
- ປັບປຸງຄວາມຖືກຕ້ອງ: ໂດຍການຈັດລໍາດັບເອກະສານທີ່ດຶງມາໃນເບື້ອງຕົ້ນແລະສົ່ງເສີມສິ່ງທີ່ກ່ຽວຂ້ອງທີ່ສຸດເຖິງດ້ານເທິງ, ລະບົບສາມາດສະຫນອງຂໍ້ມູນທີ່ຖືກຕ້ອງແລະຊັດເຈນຫຼາຍຂຶ້ນກັບຮູບແບບພາສາ, ນໍາໄປສູ່ການຕອບສະຫນອງທີ່ຜະລິດທີ່ມີຄຸນນະພາບສູງກວ່າ.
- ຫຼຸດຜ່ອນບັນຫານອກໂດເມນ: ການຝັງຕົວແບບທີ່ໃຊ້ສໍາລັບການດຶງຂໍ້ມູນແບບດັ້ງເດີມມັກຈະຖືກຝຶກອົບຮົມກ່ຽວກັບ corpora ຂໍ້ຄວາມທີ່ມີຈຸດປະສົງທົ່ວໄປ, ເຊິ່ງອາດຈະບໍ່ສາມາດບັນທຶກພາສາສະເພາະຂອງໂດເມນໄດ້ຢ່າງພຽງພໍ. ໃນທາງກົງກັນຂ້າມ, ການຈັດລໍາດັບແບບຈໍາລອງ, ສາມາດໄດ້ຮັບການຝຶກອົບຮົມກ່ຽວກັບຂໍ້ມູນສະເພາະຂອງໂດເມນ, ຫຼຸດຜ່ອນບັນຫາ "ນອກໂດເມນ" ແລະປັບປຸງຄວາມກ່ຽວຂ້ອງຂອງເອກະສານທີ່ດຶງມາພາຍໃນໂດເມນພິເສດ.
- Scalability: ວິທີການສອງຂັ້ນຕອນຊ່ວຍໃຫ້ການຂະຫຍາຍປະສິດທິພາບໂດຍການໃຊ້ວິທີການດຶງຂໍ້ມູນໄວ ແລະນໍ້າໜັກເບົາໃນຂັ້ນຕອນເບື້ອງຕົ້ນ, ໃນຂະນະທີ່ສະຫງວນຂະບວນການຈັດລໍາດັບແບບຄອມພິວເຕີທີ່ເຂັ້ມຂຸ້ນກວ່າສໍາລັບເອກະສານຍ່ອຍນ້ອຍກວ່າ.
- ຄວາມຍືດຫຍຸ່ນ: ການຈັດລໍາດັບແບບຈໍາລອງໃຫມ່ສາມາດແລກປ່ຽນຫຼືປັບປຸງເປັນເອກະລາດຂອງວິທີການດຶງຂໍ້ມູນເບື້ອງຕົ້ນ, ສະຫນອງຄວາມຍືດຫຍຸ່ນແລະການປັບຕົວກັບຄວາມຕ້ອງການຂອງລະບົບທີ່ພັດທະນາ.
ColBERT: ປະຕິກິລິຍາຊ້າທີ່ມີປະສິດທິພາບແລະມີປະສິດທິພາບ
ຫນຶ່ງໃນຕົວແບບທີ່ໂດດເດັ່ນໃນຂອບເຂດຂອງການຈັດອັນດັບໃຫມ່ແມ່ນ ColBERT (ການໂຕ້ຕອບຊ້າທີ່ມີເນື້ອໃນຫຼາຍກວ່າ BERT). ColBERT ແມ່ນຮູບແບບການຈັດລໍາດັບເອກະສານທີ່ນໍາໃຊ້ຄວາມສາມາດເຂົ້າໃຈພາສາເລິກຂອງ BERT ໃນຂະນະທີ່ແນະນໍາກົນໄກການໂຕ້ຕອບແບບໃຫມ່ທີ່ເອີ້ນວ່າ "ການໂຕ້ຕອບຊ້າ."
ColBERT: ການຊອກຫາທາງຜ່ານທີ່ມີປະສິດທິພາບແລະມີປະສິດທິພາບໂດຍຜ່ານການໂຕ້ຕອບຊ້າທີ່ມີເນື້ອໃນຫຼາຍກວ່າ BERT
ກົນໄກການປະຕິສໍາພັນຊ້າໃນ ColBERT ອະນຸຍາດໃຫ້ມີການດຶງຂໍ້ມູນທີ່ມີປະສິດທິພາບແລະຊັດເຈນໂດຍການດໍາເນີນການສອບຖາມແລະເອກະສານແຍກຕ່າງຫາກຈົນກ່ວາຂັ້ນຕອນສຸດທ້າຍຂອງຂະບວນການດຶງຂໍ້ມູນ. ໂດຍສະເພາະ, ColBERT ໄດ້ເຂົ້າລະຫັດແບບສອບຖາມແລະເອກະສານຢ່າງເປັນອິດສະຫຼະໂດຍໃຊ້ BERT, ແລະຫຼັງຈາກນັ້ນນຳໃຊ້ຂັ້ນຕອນການໂຕ້ຕອບທີ່ມີນ້ຳໜັກເບົາແຕ່ມີພະລັງທີ່ສ້າງແບບຈຳລອງຄວາມຄ້າຍຄືກັນອັນລະອຽດຂອງພວກມັນ. ໂດຍການຊັກຊ້າແຕ່ຮັກສາປະຕິສໍາພັນອັນລະອຽດນີ້, ColBERT ສາມາດພັດທະນາການສະແດງອອກຂອງແບບຈໍາລອງພາສາທີ່ເລິກເຊິ່ງໄປພ້ອມໆກັນໃນການເພີ່ມຄວາມສາມາດໃນການສະແດງເອກະສານກ່ອນຄອມພິວເຕີແບບອອບໄລນ໌, ເປັນການເລັ່ງການປະມວນຜົນແບບສອບຖາມ.
ສະຖາປັດຕະຍະກຳການຕິດຕໍ່ພົວພັນຊ້າຂອງ ColBERT ສະເໜີຜົນປະໂຫຍດຫຼາຍຢ່າງ, ລວມທັງການປັບປຸງປະສິດທິພາບການຄຳນວນ, ການຂະຫຍາຍຂະໜາດຂອງການເກັບກໍາເອກະສານ, ແລະການນຳໃຊ້ຕົວຈິງສຳລັບສະຖານະການຕົວຈິງ. ນອກຈາກນັ້ນ, ColBERT ໄດ້ຖືກປັບປຸງຕື່ມອີກດ້ວຍເຕັກນິກຕ່າງໆເຊັ່ນ: ການຊີ້ນໍາທີ່ປະຕິເສດແລະການບີບອັດທີ່ເຫຼືອ (ໃນ ColBERTv2), ເຊິ່ງປັບປຸງຂະບວນການຝຶກອົບຮົມແລະຫຼຸດຜ່ອນພື້ນທີ່ຂອງຕົວແບບໃນຂະນະທີ່ຮັກສາປະສິດທິພາບການດຶງຂໍ້ມູນສູງ.
ຂໍ້ມູນຫຍໍ້ຂອງລະຫັດນີ້ສະແດງໃຫ້ເຫັນວິທີການກໍານົດແລະນໍາໃຊ້ຕົວແບບ jina-colbert-v1-en ສໍາລັບການດັດສະນີການເກັບກໍາເອກະສານ, ນໍາໃຊ້ຄວາມສາມາດຂອງຕົນໃນການຈັດການສະພາບການຍາວຢ່າງມີປະສິດທິພາບ.
ການປະຕິບັດການດຶງຂໍ້ມູນສອງຂັ້ນຕອນກັບ Rerankers
ຕອນນີ້ພວກເຮົາມີຄວາມເຂົ້າໃຈກ່ຽວກັບຫຼັກການທີ່ຢູ່ເບື້ອງຫລັງການດຶງຂໍ້ມູນສອງຂັ້ນຕອນແລະ rerankers, ໃຫ້ພວກເຮົາຄົ້ນຫາການປະຕິບັດຕົວຈິງຂອງພວກເຂົາໃນສະພາບການຂອງລະບົບ RAG. ພວກເຮົາຈະນໍາໃຊ້ຫ້ອງສະຫມຸດແລະກອບທີ່ນິຍົມເພື່ອສະແດງໃຫ້ເຫັນການລວມເອົາເຕັກນິກເຫຼົ່ານີ້.
ການສ້າງຕັ້ງສະພາບແວດລ້ອມ
ກ່ອນທີ່ພວກເຮົາຈະເຂົ້າໄປໃນລະຫັດ, ໃຫ້ພວກເຮົາຕັ້ງຄ່າສະພາບແວດລ້ອມການພັດທະນາຂອງພວກເຮົາ. ພວກເຮົາຈະໃຊ້ Python ແລະຫ້ອງສະໝຸດ NLP ທີ່ນິຍົມຫຼາຍອັນ, ລວມທັງ Hugging Face Transformers, Sentence Transformers ແລະ LanceDB.
# Install required libraries
!pip install datasets huggingface_hub sentence_transformers lancedb
ການກະກຽມຂໍ້ມູນ
ສໍາລັບຈຸດປະສົງການສາທິດ, ພວກເຮົາຈະໃຊ້ຊຸດຂໍ້ມູນ “ai-arxiv-chunked” ຈາກ Hugging Face Datasets, ເຊິ່ງມີເອກະສານ ArXiv ຫຼາຍກວ່າ 400 ເອກະສານກ່ຽວກັບການຮຽນຮູ້ຂອງເຄື່ອງຈັກ, ການປະມວນຜົນພາສາທໍາມະຊາດ ແລະຮູບແບບພາສາຂະຫນາດໃຫຍ່.
from datasets import load_dataset
dataset = load_dataset("jamescalam/ai-arxiv-chunked", split="train")
<pre>
ຕໍ່ໄປ, ພວກເຮົາຈະປະມວນຜົນຂໍ້ມູນກ່ອນ ແລະແຍກມັນອອກເປັນຕ່ອນນ້ອຍໆເພື່ອສະດວກໃນການດຶງຂໍ້ມູນ ແລະປະມວນຜົນຢ່າງມີປະສິດທິພາບ.
from transformers import AutoTokenizer
tokenizer = AutoTokenizer.from_pretrained("bert-base-uncased")
def chunk_text(text, chunk_size=512, overlap=64):
tokens = tokenizer.encode(text, return_tensors="pt", truncation=True)
chunks = tokens.split(chunk_size - overlap)
texts = [tokenizer.decode(chunk) for chunk in chunks]
return texts
chunked_data = []
for doc in dataset:
text = doc["chunk"]
chunked_texts = chunk_text(text)
chunked_data.extend(chunked_texts)
ສໍາລັບຂັ້ນຕອນການດຶງຂໍ້ມູນເບື້ອງຕົ້ນ, ພວກເຮົາຈະໃຊ້ຕົວແບບ Sentence Transformer ເພື່ອເຂົ້າລະຫັດເອກະສານແລະການສອບຖາມຂອງພວກເຮົາເຂົ້າໃນການສະແດງ vector ທີ່ຫນາແຫນ້ນ, ແລະຫຼັງຈາກນັ້ນດໍາເນີນການຄົ້ນຫາໃກ້ຄຽງທີ່ໃກ້ຄຽງທີ່ສຸດໂດຍໃຊ້ຖານຂໍ້ມູນ vector ເຊັ່ນ LanceDB.
from sentence_transformers import SentenceTransformer
from lancedb import lancedb
# Load Sentence Transformer model
model = SentenceTransformer('all-MiniLM-L6-v2')
# Create LanceDB vector store
db = lancedb.lancedb('/path/to/store')
db.create_collection('docs', vector_dimension=model.get_sentence_embedding_dimension())
# Index documents
for text in chunked_data:
vector = model.encode(text).tolist()
db.insert_document('docs', vector, text)
from sentence_transformers import SentenceTransformer
from lancedb import lancedb
# Load Sentence Transformer model
model = SentenceTransformer('all-MiniLM-L6-v2')
# Create LanceDB vector store
db = lancedb.lancedb('/path/to/store')
db.create_collection('docs', vector_dimension=model.get_sentence_embedding_dimension())
# Index documents
for text in chunked_data:
vector = model.encode(text).tolist()
db.insert_document('docs', vector, text)
ດ້ວຍເອກະສານຂອງພວກເຮົາຖືກດັດສະນີ, ພວກເຮົາສາມາດປະຕິບັດການດຶງຂໍ້ມູນເບື້ອງຕົ້ນໂດຍການຊອກຫາປະເທດເພື່ອນບ້ານທີ່ໃກ້ທີ່ສຸດກັບ vector ຄໍາຖາມທີ່ລະບຸ.
from transformers import AutoTokenizer
tokenizer = AutoTokenizer.from_pretrained("bert-base-uncased")
def chunk_text(text, chunk_size=512, overlap=64):
tokens = tokenizer.encode(text, return_tensors="pt", truncation=True)
chunks = tokens.split(chunk_size - overlap)
texts = [tokenizer.decode(chunk) for chunk in chunks]
return texts
chunked_data = []
for doc in dataset:
text = doc["chunk"]
chunked_texts = chunk_text(text)
chunked_data.extend(chunked_texts)
ການຈັດອັນດັບໃໝ່
ຫຼັງຈາກການດຶງຂໍ້ມູນໃນເບື້ອງຕົ້ນ, ພວກເຮົາຈະໃຊ້ຮູບແບບການຈັດລໍາດັບໃຫມ່ເພື່ອຈັດລໍາດັບເອກະສານທີ່ດຶງມາຄືນໃຫມ່ໂດຍອີງໃສ່ຄວາມກ່ຽວຂ້ອງກັບການສອບຖາມ. ໃນຕົວຢ່າງນີ້, ພວກເຮົາຈະນໍາໃຊ້ ColBERT reranker, ຮູບແບບການຫັນປ່ຽນໄວແລະຖືກຕ້ອງທີ່ຖືກອອກແບບໂດຍສະເພາະສໍາລັບການຈັດອັນດັບເອກະສານ.
from lancedb.rerankers import ColbertReranker
reranker = ColbertReranker()
# Rerank initial documents
reranked_docs = reranker.rerank(query, initial_docs)
ໄດ້ reranked_docs
ບັນຊີລາຍຊື່ໃນປັດຈຸບັນປະກອບດ້ວຍເອກະສານທີ່ຈັດລໍາດັບໃຫມ່ໂດຍອີງໃສ່ຄວາມກ່ຽວຂ້ອງກັບການສອບຖາມ, ຕາມການກໍານົດໂດຍ ColBERT reranker.
ການຂະຫຍາຍແລະການຜະລິດ
ດ້ວຍເອກະສານທີ່ຖືກຈັດອັນດັບແລະທີ່ກ່ຽວຂ້ອງຢູ່ໃນມື, ພວກເຮົາສາມາດສືບຕໍ່ໄປສູ່ຂັ້ນຕອນການຂະຫຍາຍແລະການຜະລິດຂອງທໍ່ RAG. ພວກເຮົາຈະໃຊ້ຮູບແບບພາສາຈາກຫ້ອງສະໝຸດ Hugging Face Transformers ເພື່ອສ້າງຄຳຕອບສຸດທ້າຍ.
from transformers import AutoTokenizer, AutoModelForSeq2SeqLM
tokenizer = AutoTokenizer.from_pretrained("t5-base")
model = AutoModelForSeq2SeqLM.from_pretrained("t5-base")
# Augment query with reranked documents
augmented_query = query + " " + " ".join(reranked_docs[:3])
# Generate response from language model
input_ids = tokenizer.encode(augmented_query, return_tensors="pt")
output_ids = model.generate(input_ids, max_length=500)
response = tokenizer.decode(output_ids[0], skip_special_tokens=True)
print(response)