🚀 LLM2Vec
LLM2Vecは、デコーダーのみの大規模言語モデル(LLM)をテキストエンコーダーに変換するシンプルな手法です。双方向注意機構の有効化、マスクされた次のトークン予測、教師なし対照学習の3つの手順で構成されています。このモデルは、微調整することで最先端の性能を達成することができます。
🚀 クイックスタート
LLM2Vecは、デコーダーのみの大規模言語モデル(LLM)をテキストエンコーダーに変換する手法です。このREADMEでは、LLM2Vecのインストール方法と使用例を紹介します。
✨ 主な機能
- デコーダーのみのLLMをテキストエンコーダーに変換することができます。
- 双方向注意機構、マスクされた次のトークン予測、教師なし対照学習の3つの手順で構成されています。
- 微調整することで最先端の性能を達成することができます。
📦 インストール
pip install llm2vec
💻 使用例
基本的な使用法
from llm2vec import LLM2Vec
import torch
from transformers import AutoTokenizer, AutoModel, AutoConfig
from peft import PeftModel
tokenizer = AutoTokenizer.from_pretrained(
"McGill-NLP/LLM2Vec-Meta-Llama-31-8B-Instruct-mntp"
)
config = AutoConfig.from_pretrained(
"McGill-NLP/LLM2Vec-Meta-Llama-31-8B-Instruct-mntp", trust_remote_code=True
)
model = AutoModel.from_pretrained(
"McGill-NLP/LLM2Vec-Meta-Llama-31-8B-Instruct-mntp",
trust_remote_code=True,
config=config,
torch_dtype=torch.bfloat16,
device_map="cuda" if torch.cuda.is_available() else "cpu",
)
model = PeftModel.from_pretrained(
model,
"McGill-NLP/LLM2Vec-Meta-Llama-31-8B-Instruct-mntp",
)
model = model.merge_and_unload()
model = PeftModel.from_pretrained(
model, "McGill-NLP/LLM2Vec-Meta-Llama-31-8B-Instruct-mntp-unsup-simcse"
)
l2v = LLM2Vec(model, tokenizer, pooling_mode="mean", max_length=512)
instruction = (
"Given a web search query, retrieve relevant passages that answer the query:"
)
queries = [
[instruction, "how much protein should a female eat"],
[instruction, "summit define"],
]
q_reps = l2v.encode(queries)
documents = [
"As a general guideline, the CDC's average requirement of protein for women ages 19 to 70 is 46 grams per day. But, as you can see from this chart, you'll need to increase that if you're expecting or training for a marathon. Check out the chart below to see how much protein you should be eating each day.",
"Definition of summit for English Language Learners. : 1 the highest point of a mountain : the top of a mountain. : 2 the highest level. : 3 a meeting or series of meetings between the leaders of two or more governments.",
]
d_reps = l2v.encode(documents)
q_reps_norm = torch.nn.functional.normalize(q_reps, p=2, dim=1)
d_reps_norm = torch.nn.functional.normalize(d_reps, p=2, dim=1)
cos_sim = torch.mm(q_reps_norm, d_reps_norm.transpose(0, 1))
print(cos_sim)
"""
tensor([[0.6007, 0.3518],
[0.4131, 0.4855]])
"""
📄 ライセンス
このプロジェクトはMITライセンスの下で公開されています。