🚀 基於DPR的問題編碼器模型
本項目是一個基於 DPRQuestionEncoder 架構的問題編碼器模型。它利用Transformer的池化器輸出作為問題表示。更多詳細信息請參考 博客文章。
🚀 快速開始
本模型可用於對問題進行編碼,以獲取問題的向量表示。以下是使用示例:
from transformers import DPRContextEncoder, DPRContextEncoderTokenizer
model = DPRQuestionEncoder.from_pretrained("vblagoje/dpr-question_encoder-single-lfqa-wiki").to(device)
tokenizer = AutoTokenizer.from_pretrained("vblagoje/dpr-question_encoder-single-lfqa-wiki")
input_ids = tokenizer("Why do airplanes leave contrails in the sky?", return_tensors="pt")["input_ids"]
embeddings = model(input_ids).pooler_output
✨ 主要特性
📦 安裝指南
暫未提供具體安裝步驟,你可以參考 transformers
庫的官方文檔進行安裝。
💻 使用示例
基礎用法
from transformers import DPRContextEncoder, DPRContextEncoderTokenizer
model = DPRQuestionEncoder.from_pretrained("vblagoje/dpr-question_encoder-single-lfqa-wiki").to(device)
tokenizer = AutoTokenizer.from_pretrained("vblagoje/dpr-question_encoder-single-lfqa-wiki")
input_ids = tokenizer("Why do airplanes leave contrails in the sky?", return_tensors="pt")["input_ids"]
embeddings = model(input_ids).pooler_output
🔧 技術細節
訓練過程
我們使用FAIR的 dpr-scale
分兩個階段訓練了 vblagoje/dpr-question_encoder-single-lfqa-wiki
模型。
- 第一階段:使用基於PAQ的預訓練檢查點,並在LFQA數據集的問答對上微調檢索器。由於
dpr-scale
需要DPR格式的訓練集輸入,包含正樣本、負樣本和難負樣本,我們創建了一個訓練文件,其中答案作為正樣本,與問題無關的答案作為負樣本,難負樣本則從餘弦相似度在0.55到0.65之間的問題答案中選擇。
- 第二階段:使用第一階段創建的Wikipedia/Faiss索引中的正樣本、負樣本和難負樣本,而不是LFQA數據集的答案,創建一個新的DPR訓練集。具體來說,對於每個數據集問題,我們查詢第一階段的Wikipedia Faiss索引,然後使用SBert交叉編碼器對問題/答案(段落)對進行評分,
topk=50
。交叉編碼器選擇得分最高的正段落,而得分最低的七個答案作為難負樣本。負樣本再次選擇為與給定數據集問題無關的答案。在創建了一個基於Wikipedia的正、負和難負段落的DPR格式訓練文件後,我們使用 dpr-scale
訓練基於DPR的問題/段落編碼器。
性能表現
基於LFQA DPR的檢索器(vblagoje/dpr-question_encoder-single-lfqa-wiki
和 vblagoje/dpr-ctx_encoder-single-lfqa-wiki
)在性能上略遜於 “最先進” 的Krishna等人在 “Hurdles to Progress in Long-form Question Answering” 中基於REALM的檢索器。在KILT基準測試中,R精度為11.2,Recall@5為19.5。
📄 許可證
本項目採用MIT許可證。
👨💻 作者信息