🚀 multi-qa_v1-distilbert-cls_dot
SentenceTransformers 是一套模型和框架,可根據給定數據進行訓練並生成句子嵌入向量。生成的句子嵌入向量可用於聚類、語義搜索等任務。本模型使用預訓練的 distilbert-base-uncased 模型,並通過孿生網絡設置和對比學習目標進行訓練。使用 StackExchange 中的問答對作為訓練數據,使模型在問題/答案嵌入相似度方面表現更穩健。此模型使用 cls 輸出而非平均池化作為句子嵌入,並使用點積來計算相似度以實現學習目標。
✨ 主要特性
- SentenceTransformers 框架:藉助 SentenceTransformers 框架,能夠進行句子嵌入的訓練和生成。
- 預訓練模型:基於 distilbert-base-uncased 預訓練模型進行訓練。
- 對比學習:採用孿生網絡設置和對比學習目標,使用問答對數據提升模型性能。
- 特定輸出方式:使用 cls 輸出作為句子嵌入,通過點積計算相似度。
📚 詳細文檔
模型描述
SentenceTransformers 是一套能從給定數據中訓練和生成句子嵌入的模型與框架。生成的句子嵌入可用於聚類、語義搜索等任務。我們使用預訓練的 distilbert-base-uncased 模型,通過孿生網絡設置和對比學習目標進行訓練。以 StackExchange 的問答對作為訓練數據,讓模型在問題/答案嵌入相似度上更具魯棒性。此模型使用 cls 輸出而非平均池化作為句子嵌入,用點積計算相似度以達成學習目標。
我們在 Hugging Face 組織的 使用 JAX/Flax 進行 NLP 和 CV 的社區周 期間開發了該模型。此模型是項目 使用 10 億訓練對訓練史上最佳句子嵌入模型 的一部分。我們藉助高效的硬件基礎設施(7 個 TPU v3 - 8)以及 Google 的 Flax、JAX 和雲團隊成員在高效深度學習框架方面的幫助來運行該項目。
預期用途
我們的模型旨在用作搜索引擎的句子編碼器。給定輸入句子,它會輸出一個捕獲句子語義信息的向量。該句子向量可用於語義搜索、聚類或句子相似度任務。
使用方法
以下是使用 SentenceTransformers 庫獲取給定文本特徵的示例代碼:
from sentence_transformers import SentenceTransformer
model = SentenceTransformer('flax-sentence-embeddings/multi-qa_v1-distilbert-cls_dot')
text = "Replace me by any question / answer you'd like."
text_embbedding = model.encode(text)
訓練過程
預訓練
我們使用預訓練的 distilbert-base-uncased 模型。有關預訓練過程的更多詳細信息,請參考該模型的卡片。
微調
我們使用對比目標對模型進行微調。具體而言,我們計算批次中每個可能的句子對的餘弦相似度,然後通過與真實對進行比較來應用交叉熵損失。
超參數
我們在 TPU v3 - 8 上訓練模型。訓練 80k 步,批次大小為 1024(每個 TPU 核心 128)。使用 500 的學習率預熱。序列長度限制為 128 個標記。使用 AdamW 優化器,學習率為 2e - 5。完整的訓練腳本可在當前倉庫中獲取。
訓練數據
我們使用多個 Stackexchange 問答數據集的拼接來微調模型,同時也使用了 MSMARCO、NQ 等問答數據集。
數據集 |
論文 |
訓練元組數 |
Stack Exchange QA - Title & Answer |
- |
4,750,619 |
Stack Exchange |
- |
364,001 |
TriviaqQA |
- |
73,346 |
SQuAD2.0 |
論文 |
87,599 |
Quora Question Pairs |
- |
103,663 |
Eli5 |
論文 |
325,475 |
PAQ |
論文 |
64,371,441 |
WikiAnswers |
論文 |
77,427,422 |
MS MARCO |
論文 |
9,144,553 |
GOOAQ: Open Question Answering with Diverse Answer Types |
論文 |
3,012,496 |
Yahoo Answers Question/Answer |
論文 |
681,164 |
SearchQA |
- |
582,261 |
Natural Questions (NQ) |
論文 |
100,231 |