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

Model tree for terriapurplewave/bge-m3-ko-corrector

Base model

BAAI/bge-m3
Finetuned
(7)
this model