Rankgen T5 Xl All
R
Rankgen T5 Xl All
由kalpeshk2011開發
RankGen是一套編碼器模型,能夠將預訓練語言模型的前綴和生成內容映射到共享向量空間,用於提升生成質量和檢索性能。
下載量 4,535
發布時間 : 7/20/2022
模型概述
RankGen通過對比學習訓練,可將語言模型生成內容與輸入前綴映射到同一向量空間,支持文本重排序、束搜索優化和密集檢索任務。
模型特點
共享向量空間映射
將語言模型前綴與生成內容映射到同一向量空間,實現語義對齊
多任務適配
同時支持生成內容重排序、束搜索優化和密集檢索三種應用場景
顯著質量提升
使MAUVE分數從0.77提升至0.85,人工評估偏好率達75%
模型能力
文本生成質量優化
生成內容重排序
束搜索解碼增強
密集向量檢索
使用案例
文本生成增強
故事續寫優化
對語言模型生成的多個故事結局進行重排序,選擇最連貫的版本
人工評估顯示優化後的生成質量提升25%
信息檢索
文學段落檢索
作為密集檢索器在文學作品庫中查找相關段落
在RELIC文學檢索任務上達到SOTA性能
🚀 RankGen
RankGen是一套編碼器模型(參數範圍為1億 - 12億),它可以將任何預訓練英文語言模型的前綴和生成內容映射到一個共享向量空間。RankGen可用於對語言模型生成的多個完整樣本進行重新排序,還能作為評分函數融入束搜索,顯著提升生成質量(MAUVE指標從0.77提升到0.85,根據英文作家人工標註結果,偏好度達75%)。此外,RankGen還能像密集檢索器一樣使用,在文學檢索任務中達到了當前最優性能。
🚀 快速開始
✨ 主要特性
- 將任何預訓練英文語言模型的前綴和生成內容映射到共享向量空間。
- 可對語言模型生成的多個完整樣本進行重新排序。
- 能作為評分函數融入束搜索,提升生成質量。
- 可作為密集檢索器使用,在文學檢索任務中表現出色。
📦 安裝指南
要求(pip
會自動安裝這些依賴)
Python 3.7+,torch
(建議使用CUDA),transformers
安裝步驟
python3.7 -m virtualenv rankgen-venv
source rankgen-venv/bin/activate
pip install rankgen
從這裡獲取數據,並將文件夾放在根目錄下。或者,使用 gdown
命令,如下所示:
gdown --folder https://drive.google.com/drive/folders/1DRG2ess7fK3apfB-6KoHb_azMuHbsIv4
運行測試腳本,確保RankGen檢查點已正確加載:
python -m rankgen.test_rankgen_encoder --model_path kalpeshk2011/rankgen-t5-base-all
### 預期輸出
0.0009239262409127233
0.0011521980725477804
💻 使用示例
基礎用法
我們建議使用 RankGenEncoder
來加載RankGen,它是一個圍繞HuggingFace API的小包裝器,可自動正確預處理數據和進行分詞。你可以下載我們的倉庫並安裝API,或者從下面複製實現代碼。
from rankgen import RankGenEncoder, RankGenGenerator
rankgen_encoder = RankGenEncoder("kalpeshk2011/rankgen-t5-xl-all")
# 編碼向量
prefix_vectors = rankgen_encoder.encode(["This is a prefix sentence."], vectors_type="prefix")
suffix_vectors = rankgen_encoder.encode(["This is a suffix sentence."], vectors_type="suffix")
# 生成文本
# 使用與HuggingFace兼容的語言模型
generator = RankGenGenerator(rankgen_encoder=rankgen_encoder, language_model="gpt2-medium")
inputs = ["Whatever might be the nature of the tragedy it would be over with long before this, and those moving black spots away yonder to the west, that he had discerned from the bluff, were undoubtedly the departing raiders. There was nothing left for Keith to do except determine the fate of the unfortunates, and give their bodies decent burial. That any had escaped, or yet lived, was altogether unlikely, unless, perchance, women had been in the party, in which case they would have been borne away prisoners."]
# 基線核採樣
print(generator.generate_single(inputs, top_p=0.9)[0][0])
# 過度生成並重新排序
print(generator.overgenerate_rerank(inputs, top_p=0.9, num_samples=10)[0][0])
# 束搜索
print(generator.beam_search(inputs, top_p=0.9, num_samples=10, beam_size=2)[0][0])
高級用法
也可以使用HuggingFace API來加載模型:
from transformers import T5Tokenizer, AutoModel
tokenizer = T5Tokenizer.from_pretrained(f"google/t5-v1_1-xl")
model = AutoModel.from_pretrained("kalpeshk2011/rankgen-t5-xl-all", trust_remote_code=True)
RankGenEncoder實現代碼
import tqdm
from transformers import T5Tokenizer, T5EncoderModel, AutoModel
class RankGenEncoder():
def __init__(self, model_path, max_batch_size=32, model_size=None, cache_dir=None):
assert model_path in ["kalpeshk2011/rankgen-t5-xl-all", "kalpeshk2011/rankgen-t5-xl-pg19", "kalpeshk2011/rankgen-t5-base-all", "kalpeshk2011/rankgen-t5-large-all"]
self.max_batch_size = max_batch_size
self.device = 'cuda' if torch.cuda.is_available() else 'cpu'
if model_size is None:
if "t5-large" in model_path or "t5_large" in model_path:
self.model_size = "large"
elif "t5-xl" in model_path or "t5_xl" in model_path:
self.model_size = "xl"
else:
self.model_size = "base"
else:
self.model_size = model_size
self.tokenizer = T5Tokenizer.from_pretrained(f"google/t5-v1_1-{self.model_size}", cache_dir=cache_dir)
self.model = AutoModel.from_pretrained(model_path, trust_remote_code=True)
self.model.to(self.device)
self.model.eval()
def encode(self, inputs, vectors_type="prefix", verbose=False, return_input_ids=False):
tokenizer = self.tokenizer
max_batch_size = self.max_batch_size
if isinstance(inputs, str):
inputs = [inputs]
if vectors_type == 'prefix':
inputs = ['pre ' + input for input in inputs]
max_length = 512
else:
inputs = ['suffi ' + input for input in inputs]
max_length = 128
all_embeddings = []
all_input_ids = []
for i in tqdm.tqdm(range(0, len(inputs), max_batch_size), total=(len(inputs) // max_batch_size) + 1, disable=not verbose, desc=f"Encoding {vectors_type} inputs:"):
tokenized_inputs = tokenizer(inputs[i:i + max_batch_size], return_tensors="pt", padding=True)
for k, v in tokenized_inputs.items():
tokenized_inputs[k] = v[:, :max_length]
tokenized_inputs = tokenized_inputs.to(self.device)
with torch.inference_mode():
batch_embeddings = self.model(**tokenized_inputs)
all_embeddings.append(batch_embeddings)
if return_input_ids:
all_input_ids.extend(tokenized_inputs.input_ids.cpu().tolist())
return {
"embeddings": torch.cat(all_embeddings, dim=0),
"input_ids": all_input_ids
}
📄 許可證
本項目採用Apache-2.0許可證。
主要倉庫
https://github.com/martiansideofthemoon/rankgen
相關信息表格
屬性 | 詳情 |
---|---|
標籤 | t5、對比學習、排序、解碼、度量學習、pytorch、文本生成、檢索 |
數據集 | Wikipedia、PG19、C4、relic、ChapterBreak、HellaSwag、ROCStories |
評估指標 | MAUVE、人工評估 |
許可證 | Apache-2.0 |
Phi 2 GGUF
其他
Phi-2是微軟開發的一個小型但強大的語言模型,具有27億參數,專注於高效推理和高質量文本生成。
大型語言模型 支持多種語言
P
TheBloke
41.5M
205
Roberta Large
MIT
基於掩碼語言建模目標預訓練的大型英語語言模型,採用改進的BERT訓練方法
大型語言模型 英語
R
FacebookAI
19.4M
212
Distilbert Base Uncased
Apache-2.0
DistilBERT是BERT基礎模型的蒸餾版本,在保持相近性能的同時更輕量高效,適用於序列分類、標記分類等自然語言處理任務。
大型語言模型 英語
D
distilbert
11.1M
669
Llama 3.1 8B Instruct GGUF
Meta Llama 3.1 8B Instruct 是一個多語言大語言模型,針對多語言對話用例進行了優化,在常見的行業基準測試中表現優異。
大型語言模型 英語
L
modularai
9.7M
4
Xlm Roberta Base
MIT
XLM-RoBERTa是基於100種語言的2.5TB過濾CommonCrawl數據預訓練的多語言模型,採用掩碼語言建模目標進行訓練。
大型語言模型 支持多種語言
X
FacebookAI
9.6M
664
Roberta Base
MIT
基於Transformer架構的英語預訓練模型,通過掩碼語言建模目標在海量文本上訓練,支持文本特徵提取和下游任務微調
大型語言模型 英語
R
FacebookAI
9.3M
488
Opt 125m
其他
OPT是由Meta AI發佈的開放預訓練Transformer語言模型套件,參數量從1.25億到1750億,旨在對標GPT-3系列性能,同時促進大規模語言模型的開放研究。
大型語言模型 英語
O
facebook
6.3M
198
1
基於transformers庫的預訓練模型,適用於多種NLP任務
大型語言模型
Transformers

1
unslothai
6.2M
1
Llama 3.1 8B Instruct
Llama 3.1是Meta推出的多語言大語言模型系列,包含8B、70B和405B參數規模,支持8種語言和代碼生成,優化了多語言對話場景。
大型語言模型
Transformers 支持多種語言

L
meta-llama
5.7M
3,898
T5 Base
Apache-2.0
T5基礎版是由Google開發的文本到文本轉換Transformer模型,參數規模2.2億,支持多語言NLP任務。
大型語言模型 支持多種語言
T
google-t5
5.4M
702
精選推薦AI模型
Llama 3 Typhoon V1.5x 8b Instruct
專為泰語設計的80億參數指令模型,性能媲美GPT-3.5-turbo,優化了應用場景、檢索增強生成、受限生成和推理任務
大型語言模型
Transformers 支持多種語言

L
scb10x
3,269
16
Cadet Tiny
Openrail
Cadet-Tiny是一個基於SODA數據集訓練的超小型對話模型,專為邊緣設備推理設計,體積僅為Cosmo-3B模型的2%左右。
對話系統
Transformers 英語

C
ToddGoldfarb
2,691
6
Roberta Base Chinese Extractive Qa
基於RoBERTa架構的中文抽取式問答模型,適用於從給定文本中提取答案的任務。
問答系統 中文
R
uer
2,694
98