模型概述
模型特點
模型能力
使用案例
🚀 lodestone-base-4096-v1
這是來自 Hum 的一款全新 sentence-transformers 模型,它能將長句子和段落映射到 768 維的密集向量空間,可用於聚類或語義搜索等任務,有助於提升人類知識的可訪問性和互聯性。
🚀 快速開始
若你已安裝 sentence-transformers,使用此模型會相對簡單。 在發佈時,sentence-transformers 不支持該模型使用的 flash-attention 所需的遠程代碼。為方便使用,提供了一個允許遠程代碼執行的 sentence-transformers 倉庫分支。可使用以下命令進行安裝:
pip install git+https://github.com/Hum-Works/sentence-transformers.git
pip install einops
然後,你可以按照以下方式使用該模型:
from sentence_transformers import SentenceTransformer
model = SentenceTransformer('Hum-Works/lodestone-base-4096-v1', trust_remote_code=True, revision='v1.0.0')
sentences = ["This is an example sentence", "Each sentence is converted"]
embeddings = model.encode(sentences)
print(embeddings)
注意:如果已安裝,模型將使用 openAI/Triton 實現的 FlashAttention。這比後備的 torch 實現性能更高。某些平臺和 GPU 可能不受 Triton 支持,最新的兼容性信息可在 Triton 的 GitHub 頁面 上找到。
✨ 主要特性
- 長序列處理:該模型能夠處理長達 4096 個詞塊的輸入序列,這得益於對 ALiBi 位置注意力外推的利用,可實現初始訓練長度 2 倍的序列長度。
- 性能出色:結合了成熟的微調實踐和變壓器架構元素的新進展,在標準文本嵌入評估基準上能取得可比的性能指標。
- 尺寸適中:模型尺寸較小,可在 GPU 或 CPU 上運行。
📦 安裝指南
pip install git+https://github.com/Hum-Works/sentence-transformers.git
pip install einops
💻 使用示例
基礎用法
from sentence_transformers import SentenceTransformer
model = SentenceTransformer('Hum-Works/lodestone-base-4096-v1', trust_remote_code=True, revision='v1.0.0')
sentences = ["This is an example sentence", "Each sentence is converted"]
embeddings = model.encode(sentences)
print(embeddings)
📚 詳細文檔
摘要
為了推進 Hum 提高人類知識可訪問性和互聯性的總體使命,該模型作為一個項目的一部分而開發。此項目旨在通過利用變壓器模型設計中的最新架構進展,如融入 FlashAttention、線性偏置注意力(ALiBi)和門控線性單元(GLU),來增加句子嵌入模型的最大輸入序列長度。這些修改和增強由 MosaicML 團隊實現,他們設計並構建了預訓練的 mosaic-bert-base-seqlen-2048
模型,更多關於其開發和測試規範的詳細信息可在模型卡片上找到。
雖然此項目中遵循的微調過程與最初創建許多流行句子變壓器模型(如 all-mpnet-base-v2、all-distilroberta-v1 和 all-MiniLM-L6-v2)的 Flax-sentence-embeddings 團隊的過程大致相似,但我們的方法包括用於數據加載、批量採樣和模型檢查點的新穎技術,旨在提高內存分配和數據存儲方面的訓練效率。
通過將這些成熟且經過驗證的微調實踐與變壓器架構元素的新進展相結合,我們的 lodestone-base-4096-v1
模型能夠在標準文本嵌入評估基準上取得可比的性能指標,同時支持更長、更強大的 4096 輸入序列長度,並且保持較小、更易於管理的尺寸,能夠在 GPU 或 CPU 上運行。
背景
該項目旨在使用自監督對比學習目標,在非常大的句子級數據集上訓練句子嵌入模型。我們使用了預訓練的 mosaic-bert-base-seqlen-2048
模型,並在近 15 億個句子對的數據集上對其進行了微調。我們採用對比學習目標:給定一對句子中的一個句子,模型應預測在一組隨機採樣的其他句子中,哪個實際上是與它在數據集中配對的句子。
預期用途
我們的模型旨在用作長句子和段落編碼器。給定輸入文本,它輸出包含語義信息的向量。句子向量可用於信息檢索、聚類或句子相似度任務。
訓練過程
預訓練
我們使用預訓練的 mosaic-bert-base-seqlen-2048
。有關預訓練過程的更多詳細信息,請參考模型卡片。
微調
我們使用對比目標對模型進行微調。形式上,我們計算批次中每個可能的句子對的點積。然後通過與真實對進行比較來應用交叉熵損失。
超參數
我們在配備 1 個 NVIDIA A10G Tensor Core GPU 的 ml.g5.4xlarge EC2 實例上訓練模型。我們使用 16 的批量大小,在 140 萬步內訓練模型。我們使用 500 的學習率預熱。訓練期間的序列長度限制為 2048 個標記。我們使用 AdamW 優化器,學習率為 2e-5,權重衰減為 0.01(即 SentenceTransformer.fit() 的默認參數值)。完整的訓練腳本可在當前倉庫中的 Training.py
文件中找到。
模型架構
通過融入 FlashAttention、線性偏置注意力(ALiBi) 和門控線性單元(GLU),該模型能夠處理 4096 的輸入序列,是大多數可比句子嵌入模型支持長度的 8 倍。 模型使用最大 2048 的序列長度進行訓練,但最終模型的最大序列長度為 4096。這是通過利用 ALiBi 的位置注意力外推實現的,該方法已被證明可以允許達到初始訓練長度 2 倍的序列長度。
完整模型架構
SentenceTransformer(
(0): Transformer({'max_seq_length': 4096, 'do_lower_case': False}) with Transformer model: BertModel
(1): Pooling({'word_embedding_dimension': 768, 'pooling_mode_cls_token': False, 'pooling_mode_mean_tokens': True, 'pooling_mode_max_tokens': False, 'pooling_mode_mean_sqrt_len_tokens': False, 'pooling_mode_weightedmean_tokens': False, 'pooling_mode_lasttoken': False})
(2): Normalize()
)
訓練數據
我們使用多個數據集的組合來微調模型。句子對的總數接近 15 億個句子。我們根據每個數據集對整個數據集的相對貢獻,按加權概率對其進行採樣。
數據集的細分如下,整個數據集可通過位於此倉庫中的 Dataloading.ipynb
公開訪問和上傳。
數據集 | 論文 | 訓練元組數量 |
---|---|---|
Reddit comments (2015 - 2018) | paper | 726,484,430 |
S2ORC Citation pairs (Abstracts) | paper | 252,102,397 |
Reddit posts (Title, Body) pairs | - | 127,445,911 |
Amazon reviews (2018) (Title, Review) pairs | - | 87,877,725 |
WikiAnswers Duplicate question pairs | paper | 77,427,422 |
PAQ (Question, Answer) pairs | paper | 64,371,441 |
S2ORC Citation pairs (Titles) | paper | 52,603,982 |
S2ORC (Title, Abstract) | paper | 41,769,185 |
Stack Exchange (Title, Body) pairs | - | 25,368,423 |
MS MARCO triplets | paper | 9,144,553 |
Stack Exchange (Title, Most Upvoted Answer) pairs | - | 4,784,250 |
Stack Exchange (Title+Body, Most Upvoted Answer) pairs | - | 4,551,660 |
GOOAQ: Open Question Answering with Diverse Answer Types | paper | 3,012,496 |
Amazon QA | - | 2,507,114 |
Code Search | - | 1,375,067 |
Yahoo Answers (Title, Answer) | paper | 1,198,260 |
[AG News]((Title, Description) pairs of news articles from the AG News dataset) | - | 1,157,745 |
COCO Image captions | paper | 828,395 |
SPECTER citation triplets | paper | 684,100 |
Yahoo Answers (Question, Answer) | paper | 681,164 |
Yahoo Answers (Title, Question) | paper | 659,896 |
CC News (Title, article) pairs | - | 614,664 |
NPR (Title, Body) pairs | - | 594,384 |
SearchQA | paper | 582,261 |
MS Marco (Query, Answer Passage) pairs | paper | 532,751 |
Stack Exchange (Title, Body) pairs | - | 364,000 |
Eli5 | paper | 325,475 |
Flickr 30k | paper | 317,695 |
CNN & DailyMail (highlight sentences, article) pairs | - | 311,971 |
Stack Exchange Duplicate questions (titles) | - | 304,524 |
AllNLI (SNLI and MultiNLI | paper SNLI, paper MultiNLI | 277,230 |
Stack Exchange Duplicate questions (bodies) | - | 250,518 |
Stack Exchange Duplicate questions (titles+bodies) | - | 250,459 |
XSUM (Summary, News Article) pairs | - | 226,711 |
Stack Exchange (Title+Body, Most Upvoted Answer, Most Downvoted Answer) triplets | - | 216,454 |
Sentence Compression | paper | 180,000 |
FEVER training data | - | 139,051 |
Wikihow | paper | 128,542 |
SearchQA (Question, Top-Snippet) | paper | 117,384 |
Altlex | paper | 112,696 |
Quora Question Duplicates | - | 103,663 |
Quora Question Triplets | - | 103,663 |
Simple Wikipedia | paper | 102,225 |
Natural Questions (NQ) | paper | 100,231 |
SQuAD2.0 | paper | 87,599 |
TriviaQA | - | 73,346 |
Total | 1,492,453,113 |
復現
可以通過遵循此倉庫中的 Replication.txt
文件中概述的步驟來複現此模型的整個微調過程。本文檔解釋瞭如何修改 sentence-transformers 庫、配置預訓練的 mosaic-bert-base-seqlen-2048
模型、加載所有訓練數據並執行訓練腳本。
侷限性
由於技術限制(例如有限的 GPU 內存容量),此模型使用較小的批量大小 16 進行訓練,這使得訓練過程中的每一步所獲得的信息不如在更高性能系統上充分。這種不理想的超參數值通常會使模型更有可能陷入局部最小值,並且參數配置需要更長時間才能收斂到最優值。為了抵消這種潛在風險,我們比許多同類模型訓練了更多的步數,以確保有更大的機會實現良好的性能,但如果進行進一步的微調,這仍是一個可以改進的領域。
還值得注意的是,雖然此模型能夠處理長達 4096 個詞塊的更長輸入序列,但所使用的訓練數據集由句子和段落對以及三元組組成,這些數據不一定能達到最大序列長度。由於數據並非專門針對這種較大的輸入大小進行定製,可能需要進一步的微調來確保對這種長度的較長文本進行高度準確的嵌入。
最後,正如在 https://huggingface.co/datasets/sentence-transformers/reddit-title-body 上所述,關於 Reddit 帖子數據的額外提醒和警告是,人們應該“注意,此數據集未對偏見、仇恨言論、垃圾郵件、種族歧視等進行過濾。它如實描繪了在 Reddit 上發佈的內容。”因此,雖然我們認為由於其在近 15 億個句子對的整個數據集中的記錄相對較少,並且此模型是為生成語義嵌入而不是生成文本輸出而訓練的,這不會在模型性能中引發任何病態行為,但始終重要的是要意識到偏見的潛在影響。
🔧 技術細節
模型架構改進
通過融入 FlashAttention、Attention with Linear Biases (ALiBi) 和 Gated Linear Units (GLU) 等先進技術,該模型能夠處理長達 4096 的輸入序列,是大多數可比句子嵌入模型支持長度的 8 倍。其中,ALiBi 的位置注意力外推技術使得模型在訓練時使用最大 2048 的序列長度,最終卻能支持 4096 的最大序列長度。
訓練優化
在訓練過程中,採用了自監督對比學習目標,並結合了新穎的數據加載、批量採樣和模型檢查點技術,提高了內存分配和數據存儲方面的訓練效率。
📄 許可證
本模型採用 Apache-2.0 許可證。







