BGE-m3-ko Embedding Inversion (Korean vec2text)
dragonkue/BGE-m3-ko ์๋ฒ ๋ฉ ๋ฒกํฐ๋ก๋ถํฐ ํ๊ตญ์ด ์๋ฌธ์ ๋ณต์ํ๋ vec2text ๋ชจ๋ธ์
๋๋ค.
๋ฌธ์ฅ ์๋ฒ ๋ฉ์ด ์๋ฌธ ์ ๋ณด๋ฅผ ์ผ๋ง๋ ๋
ธ์ถํ๋์ง(ํ๋ผ์ด๋ฒ์ ์ํ)๋ฅผ ๋ณด์ฌ์ค๋๋ค.
- inversion ๋ชจ๋ธ: ์๋ฒ ๋ฉ โ ์ฒซ ์ถ์ธก (
terriapurplewave/bge-m3-ko-inversion) - corrector ๋ชจ๋ธ: ์ฌ์๋ฒ ๋ฉํ๋ฉฐ ๋ฐ๋ณต ๊ต์ (
terriapurplewave/bge-m3-ko-corrector)
์ฑ๋ฅ (ํ๊ตญ์ด ์ํค validation, โค64ํ ํฐ)
| ์ถ๋ก | exact match | ๋น๊ณ |
|---|---|---|
| inversion ๋จ๋ (0-step) | ~20% | ์๋ฏธ๋ ๋ง์ผ๋ ์ด์/์ดํ ๋ค๋ฆ |
| corrector 20-step + beam 4 | ~80% | ์ค์ฌ์ฉ ์ค์ |
- ์๋ฒ ๋ฉ ์ฝ์ฌ์ธ ์ ์ฌ๋(๋ณต์๋ณธ ์ฌ์๋ฒ ๋ฉ vs ์๋ณธ): ์งง์ ๋ฌธ์ฅ ~1.0
- ๊ธธ์ด ์์กด: cos_sim์ด ๊ธธ์ด์ ๋ฐ๋น๋ก (18ํ ํฐ 1.00 โ 61ํ ํฐ 0.83)
- 64ํ ํฐ ์ด๊ณผ๋ ์ ๋จ๋์ด ์ด๊ณผ๋ถ์ ๋ณต์ ๋ถ๊ฐ
์ฌ์ฉ๋ฒ (โ ๏ธ ์ค์: from_pretrained ์๋)
์ด ๋ชจ๋ธ์ ํ์ค from_pretrained์์ forward๊ฐ ๊นจ์ง๋ ์ด์๊ฐ ์์ด,
InversionConfig๋ก ๋ผ๋๋ฅผ ๋ง๋ ๋ค state_dict๋ฅผ ์ ์ฌํด์ผ ํฉ๋๋ค.
import os
os.environ["TORCH_FORCE_NO_WEIGHTS_ONLY_LOAD"] = "1"
import torch, vec2text
from vec2text.models import InversionModel, CorrectorEncoderModel
from vec2text.models.config import InversionConfig
from huggingface_hub import snapshot_download
inv_dir = snapshot_download("terriapurplewave/bge-m3-ko-inversion")
corr_dir = snapshot_download("terriapurplewave/bge-m3-ko-corrector")
inv = InversionModel(InversionConfig.from_pretrained(inv_dir))
inv.load_state_dict(torch.load(inv_dir + "/pytorch_model.bin", weights_only=False), strict=False)
inv = inv.cuda().eval()
corr = CorrectorEncoderModel(InversionConfig.from_pretrained(corr_dir))
corr.load_state_dict(torch.load(corr_dir + "/pytorch_model.bin", weights_only=False), strict=False)
corr = corr.cuda().eval()
corrector = vec2text.load_corrector(inv, corr)
texts = ["๊ตญ๋ฐฉ๋ถ๋ ๋ถํ์ ๋๋ฐ์ ๊ฐ๋ ฅํ ๋์ํ๊ฒ ๋ค๊ณ ๋ฐํ๋ค."]
inp = inv.embedder_tokenizer(texts, return_tensors="pt", padding="max_length",
truncation=True, max_length=64).cuda()
emb = inv.call_embedding_model(input_ids=inp.input_ids, attention_mask=inp.attention_mask)
print(vec2text.invert_embeddings(embeddings=emb, corrector=corrector,
num_steps=20, sequence_beam_width=4))
๋๋ด๋ inference.py๊ฐ ์ ๊ณผ์ ์ ๊ทธ๋๋ก ๋ด๊ณ ์์ต๋๋ค.
ํ์ต
| ํญ๋ชฉ | ๊ฐ |
|---|---|
| ์๋ฒ ๋(๊ณ ์ ) | dragonkue/BGE-m3-ko (1024d, CLS+์ ๊ทํ) |
| ๋์ฝ๋ ๋ฐฑ๋ณธ | google/mt5-base |
| ๋ฐ์ดํฐ | ํ๊ตญ์ด ์ํค ๋ฌธ์ฅ ์ฝ 600๋ง (โค64ํ ํฐ) |
| max_seq_length | 64 |
| inversion | 3 epoch |
| corrector | ~16 epoch (์๋ ด) |
ํ๊ณ
- 64ํ ํฐ ์ด๋ด ๋ฌธ์ฅ์ ์ต์ ํ. ์ด๊ณผ๋ถ์ ์ ๋จ๋์ด ๋ณต์ ๋ถ๊ฐ.
- ๋ฏธ์ธ ์ดํ/๋์ด์ฐ๊ธฐ(์ด์ โ์ค๋, %ํฌ์ธํธโ%, ์กฐ์ฌ)๋ ์๋ฒ ๋ฉ์ด ์ ๋ณด๋ฅผ ์์ด ๋ณต์ ์ ๋จ โ exact์ ์ํ ์์ธ.
- ํ์ต ๋ฐ์ดํฐ๊ฐ ์ํค ์ค์ฌ์ด๋ผ ๋ฐฑ๊ณผ์ฒด์ ์ ๋ฆฌ.
์ธ์ฉ / ๊ธฐ๋ฐ ์ฐ๊ตฌ
- Morris et al., Text Embeddings Reveal (Almost) As Much As Text (2023) โ vec2text
- Downloads last month
- 13
Inference Providers NEW
This model isn't deployed by any Inference Provider. ๐ Ask for provider support