15-bo‘lim
Embedding - ma'no vektorlari
Jumlani bitta vektorga aylantirish, mean pooling, kosinus o'xshashlik va embeddinglar nimani o'lchaydi - nimani emas.
Ushbu bo‘lim mundarijasi
Fine-tuning kichik ma'lumotda ishlamadi. Boshqa yo'l bor: modelni o'qitmasdan, faqat uning ma'no vektorlaridan foydalanish.
Maxsus model #
AutoModel har token uchun vektor beradi (11-bo'lim). Bizga esa
butun jumla uchun bitta vektor kerak.
Buning uchun maxsus o'qitilgan modellar bor:
from transformers import AutoTokenizer, AutoModel
import torch.nn.functional as F
NOM = "sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2"
tok = AutoTokenizer.from_pretrained(NOM)
mdl = AutoModel.from_pretrained(NOM)
mdl.eval()
model: paraphrase-multilingual-MiniLM-L12-v2
parametrlar: 117,653,760
Nomidagi paraphrase muhim: bu model bir xil ma'noli jumlalar
vektorlarini yaqinlashtirish uchun sozlangan.
Mean pooling #
def ortacha_pool(chiqish, niqob):
h = chiqish.last_hidden_state
m = niqob.unsqueeze(-1).expand(h.size()).float()
return (h * m).sum(1) / m.sum(1).clamp(min=1e-9)
@torch.no_grad()
def vektor(matnlar):
e = tok(matnlar, padding=True, truncation=True, max_length=128, return_tensors="pt")
v = ortacha_pool(mdl(**e), e["attention_mask"])
return F.normalize(v, p=2, dim=1)
shakl: (1, 384) | uzunlik: 1.0
Bu PyTorch darsligining 17-bo'limidagi niqobli o'rtachaning o'zi -
[PAD] tokenlar hisobga olinmaydi.
F.normalize vektor uzunligini 1 ga keltiradi. Shunda skalyar
ko'paytma to'g'ridan-to'g'ri kosinus o'xshashlik bo'lib qoladi
(3-bo'lim).
Uzunligi 1 bo'lgan ikki vektor uchun a @ b natijasi -1 dan 1
gacha bo'ladi:
1.0- bir xil yo'nalish0.0- bog'liq emas-1.0- qarama-qarshi
Shuning uchun taqqoslash oddiy ko'paytmaga aylanadi - va minglab hujjatni bitta matritsa amali bilan solishtirish mumkin (16-bo'lim).
Ishlaydigan holat #
juftlar = [
("Men kitob o'qiyapman", "Kitobni o'qimoqdaman"),
("Telefon buzildi", "Telefonim ishlamayapti"),
("Men kitob o'qiyapman", "Bugun havo issiq"),
]
Men kitob o'qiyapman | Kitobni o'qimoqdaman -> 0.842
Telefon buzildi | Telefonim ishlamayapti -> 0.822
Men kitob o'qiyapman | Bugun havo issiq -> 0.269
Bu aynan kutilgan natija. Bir xil ma'noli jumlalar 0.82-0.84, bog'liq bo'lmaganlari 0.27.
Diqqat qiling: «Telefon buzildi» va «Telefonim ishlamayapti» jumlalarida birorta ham umumiy so'z yo'q (shakli boshqa). Kalit so'zli qidiruv ularni bog'lay olmasdi.
Endi muammoli holat #
Telefon buzildi | Telefon zo'r ishlayapti -> 0.825
Bu ikki jumla qarama-qarshi ma'noda. Lekin o'xshashlik 0.825 - yuqoridagi to'g'ri juftlikdan ham yuqori.
Bu darslikdagi eng muhim nozik nuqtalardan biri.
Model «telefon» va «ishlash» haqidagi ikkala jumlani bir xil mavzuga tegishli deb ko'radi. Ijobiy yoki salbiy ekani uni qiziqtirmaydi.
Shuning uchun:
- Semantik qidiruv uchun a'lo - «telefon buzilgani haqida» so'rovga ikkala jumla ham mavzuan mos.
- Kayfiyat tahlili uchun yaroqsiz - u qutbni ajratmaydi.
14-bo'lim oxirida «embedding yondashuvini sinang» deb aytgan edik. Mana sinov natijasi: u qidiruv masalasini yechadi, kayfiyat masalasini emas. Kayfiyat uchun haqiqiy yorliqlangan ma'lumot kerak - boshqa yo'li yo'q.
Alohida so'zlar bilan ehtiyot bo'ling #
shifokor vrach kasalxona dastur kompyuter olma banan
shifokor 1.00 0.56 0.72 0.65 0.50 0.55 0.24
vrach 0.56 1.00 0.77 0.80 0.64 0.71 0.37
kasalxona 0.72 0.77 1.00 0.84 0.67 0.74 0.40
dastur 0.65 0.80 0.84 1.00 0.78 0.78 0.41
Bu jadval yomon. «Kasalxona» va «dastur» o'rtasida 0.84 - «shifokor» va «vrach» o'rtasidagi 0.56 dan ancha yuqori. Mantiqan teskari.
Sabab: model jumlalar uchun sozlangan, yolg'iz so'zlar uchun emas. Qolaversa, o'zbekcha so'zlar bo'laklarga sochiladi (2-bo'lim) va kontekstsiz bo'lak modelga kam narsa aytadi.
Yolg'iz so'zlarni taqqoslash kerak bo'lsa, ularni jumlaga joylang: «shifokor kasalni ko'rdi» va «vrach bemorni tekshirdi».
Kontekst bilan model ancha ishonchli ishlaydi.
Tillararo #
Telefon buzildi | The phone is broken -> 0.781
Men kitob o'qiyapman | I am reading a book -> 0.284
Men kitob o'qiyapman | The phone is broken -> 0.125
Ko'p tilli model tarjimalarni bog'lay oladi - birinchi juftlikda 0.781. Lekin ikkinchisida atigi 0.284, garchi ular ham aniq tarjima bo'lsa ham.
Ya'ni qobiliyat bor, lekin ishonchsiz. Muhim loyihada bunga tayanmang - o'z misollaringizda o'lchab ko'ring.
Tezlik #
256 ta jumla: 360 ms
Protsessorda sekundiga ~700 ta jumla. Ming-o'n minglab hujjatni indekslash uchun yetarli.
| Xususiyat | Qiymat |
|---|---|
| Vektor o'lchami | 384 |
| Parametrlar | 117.6 mln |
| Tezlik (CPU) | ~700 jumla/soniya |
| O'qitish kerakmi | Yo'q |
- Embedding modelini yuklab, bitta jumla vektorini oling.
F.normalizedan keyin vektor uzunligini tekshiring.- Bir xil ma'noli ikki jumla o'xshashligini hisoblang.
- Bog'liq bo'lmagan ikki jumla uchun takrorlang.
- Qarama-qarshi ma'noli ikki jumlani sinab, natijani izohlang.
- Nega embedding qutbni ajratmasligini tushuntiring.
- Yolg'iz so'zlar matritsasini qurib, g'alati juftliklarni toping.
- O'sha so'zlarni jumlaga joylab, natija yaxshilanishini tekshiring.
- O'zbekcha jumla va uning inglizcha tarjimasini taqqoslang.
- 256 ta jumla uchun vektor hisoblash vaqtini o'lchang.
Xulosa #
- Embedding - butun jumlani ifodalovchi bitta vektor.
sentence-transformersmodellari aynan shu uchun sozlangan.- Mean pooling token vektorlarini niqob bilan o'rtachalaydi.
F.normalizedan keyin skalyar ko'paytma kosinus o'xshashlik bo'ladi.- Bir xil ma'noli jumlalar 0.82-0.84, bog'liq bo'lmaganlari 0.27 berdi.
- Umumiy so'zsiz jumlalarni ham bog'lay oladi - kalit so'zli qidiruvdan ustunligi shu.
- Lekin qarama-qarshi jumlalar ham yuqori ball oldi: 0.825.
- Demak embedding mavzuni o'lchaydi, fikrning qutbini emas.
- Shuning uchun u qidiruvga a'lo, kayfiyat tahliliga yaroqsiz.
- Yolg'iz o'zbekcha so'zlarda natija ishonchsiz - jumla darajasida ishlating.
Keyingi bo'limda shu vektorlardan ishlaydigan semantik qidiruv tizimi quramiz.
O‘qish tarixini saqlamoqchimisiz?
Tizimga kirsangiz, tugatgan bo‘limlaringiz saqlanadi va qoldirgan joyingizdan davom etasiz.
Xatolik topdingizmi?
Imlo xatosi, ishlamaydigan kod yoki noto‘g‘ri ma‘lumotni ko‘rsangiz - bizga xabar bering. Har bir xabar administrator tomonidan ko‘rib chiqiladi.