Այս հոդվածը սկսվում է տրանսֆորմատորներից և դիտում է դրա թերությունները որպես ներդրման մոդել: Այնուհետև այն տալիս է BERT-ի ակնարկ և խորը սուզվում է նախադասության BERT-ի մեջ (SBERT), որը LLM-ների և RAG խողովակաշարերի համար նախադասությունների ներկառուցման ամենաարդիականն է:
Եթե դուք ինձ նման տեսողական անձնավորություն եք և ցանկանում եք դիտել տեսողական բացատրություն, խնդրում ենք դիտել այս տեսանյութը.
Տրանսֆորմատորները ներդրման կարիք չունեն: Թեև դրանք ի սկզբանե նախագծված էին լեզվի թարգմանության առաջադրանքների համար, դրանք այսօր գրեթե բոլոր LLM-ների ետևում կանգնած են:
Բարձր մակարդակում դրանք կազմված են երկու բլոկից՝ կոդավորիչից և ապակոդավորիչից: Կոդավորիչի բլոկը ընդունում է մուտքը և թողարկում մատրիցային ներկայացում: Ապակոդավորիչի բլոկը ընդունում է վերջին կոդավորիչի ելքը և արտադրում ելքը: Կոդավորիչ և ապակոդավորիչ բլոկները կարող են կազմված լինել մի քանի շերտերից, թեև սկզբնական տրանսֆորմատորն ունի 6 շերտ յուրաքանչյուր բլոկում:
Բոլոր շերտերը կազմված են բազմագլուխ ինքնաուշադրությամբ։ Այնուամենայնիվ, կոդավորողի և ապակոդավորողի միջև միակ տարբերությունն այն է, որ կոդավորիչի ելքը սնվում է ապակոդավորիչի յուրաքանչյուր շերտին: Ուշադրության շերտերի առումով ապակոդավորիչի ուշադրության շերտերը դիմակավորված են: Այսպիսով, ցանկացած դիրքի արդյունքի վրա ազդում է նախորդ դիրքերի արդյունքը:
Կոդավորիչը և ապակոդավորիչի բլոկը հետագայում կազմված են շերտի նորմայից և առաջընթաց նեյրոնային ցանցի շերտերից:
Ի տարբերություն նախկին մոդելների, ինչպիսիք են RNN-ները կամ LSTM-ները, որոնք ինքնուրույն մշակում էին նշանները, տրանսֆորմատորների հզորությունը կայանում է նրանում, որ նրանք կարող են գրավել յուրաքանչյուր նշանի համատեքստը ամբողջ հաջորդականության նկատմամբ: Այսպիսով, այն գրավում է շատ համատեքստ՝ համեմատած ցանկացած նախկին ճարտարապետության հետ, որը նախատեսված էր լեզվի մշակման համար:
Տրանսֆորմատորներն ամենահաջող ճարտարապետներն են, որոնք այսօր մղում են արհեստական ինտելեկտի հեղափոխությունը: Այսպիսով, ինձ կարող են ցույց տալ դուռը, եթե ես մատնանշեմ դրա սահմանափակումները: Այնուամենայնիվ, փաստորեն, հաշվողական ծախսերը նվազեցնելու համար դրա ուշադրության շերտերը նախատեսված են միայն անցյալ նշաններին հետևելու համար: Սա լավ է առաջադրանքների մեծ մասի համար: Բայց կարող է բավարար չլինել այնպիսի առաջադրանքի համար, ինչպիսին է հարց պատասխանը: Վերցնենք ստորև բերված օրինակը.
Ջոնը եկել էր Միլոյի հետ երեկույթին: Միլոն շատ զվարճացել է երեկույթին: Նա գեղեցիկ, սպիտակ մորթով կատու է։
Ենթադրենք, հարց ենք տալիս. «Մայլոն խմե՞լ է Ջոնի հետ խնջույքին»: Պարզապես հիմնվելով վերը նշված օրինակի առաջին 2 նախադասությունների վրա, շատ հավանական է, որ LLM-ը կպատասխանի.
Այնուամենայնիվ, առաջադիմական ենթատեքստով վարժեցված մոդելը տեղյակ կլինի 3-րդ նախադասության մասին, որն է՝ «Նա գեղեցիկ, ընկերասեր կատու է»: Եվ այսպես, կպատասխաներ. «Միլոն կատու է, և քիչ հավանական է, որ խմած լինի խնջույքի ժամանակ»։
Չնայած սա հիպոթետիկ օրինակ է, դուք հասկանում եք գաղափարը: Հարցուպատասխանի առաջադրանքում կարևոր է դառնում և՛ առաջ, և՛ հետընթաց համատեքստում սովորելը: Հենց այստեղ է հայտնվում BERT մոդելը:
BERT-ն նշանակում է երկկողմանի կոդավորիչի ներկայացումներ տրանսֆորմատորներից: Ինչպես անունն է հուշում, այն հիմնված է տրանսֆորմատորների վրա և ներառում է ինչպես առաջ, այնպես էլ հետընթաց համատեքստ: Թեև այն ի սկզբանե հրապարակվել է այնպիսի առաջադրանքների համար, ինչպիսիք են հարցերի պատասխանը և ամփոփումը, այն ունի ներուժ ստեղծելու հզոր ներկառուցումներ՝ իր երկկողմանի բնույթի պատճառով:
BERT-ը ոչ այլ ինչ է, քան տրանսֆորմատորային կոդավորիչներ, որոնք իրար հաջորդաբար կուտակված են: Միակ տարբերությունն այն է, որ BERT-ն օգտագործում է երկկողմանի ինքնավստահություն , մինչդեռ վանիլային տրանսֆորմատորն օգտագործում է սահմանափակ ինքնորոշում, որտեղ յուրաքանչյուր նշան կարող է հետևել միայն իր ձախ կողմում գտնվող համատեքստին:
Նշում. հաջորդականություն ընդդեմ նախադասության. Պարզապես նշում տերմինաբանության վերաբերյալ՝ BERT մոդելի հետ շփոթությունից խուսափելու համար: Նախադասությունը մի շարք բառեր է, որոնք բաժանված են ըստ կետի: Հերթականությունը կարող է լինել մի շարք նախադասություններ միասին դրված:
ԲԵՐՏԸ հասկանալու համար վերցնենք հարցի պատասխանի օրինակը։ Քանի որ հարցուպատասխանը ներառում է առնվազն երկու նախադասություն, BERT-ը նախատեսված է ընդունելու զույգ նախադասություններ <հարց-պատասխան> ձևաչափով: Սա հանգեցնում է տարանջատող նշանների, ինչպիսիք են [CLS]-ը, որոնք սկզբում փոխանցվում են հաջորդականության սկիզբը ցույց տալու համար: Այնուհետև [SEP] նշանն օգտագործվում է հարցն ու պատասխանը բաժանելու համար:
Այսպիսով, պարզ մուտքագրումն այժմ դառնում է [CLS]<հարց>[SEP]<պատասխան>[SEP], ինչպես ցույց է տրված ստորև նկարում:
Երկու A և B նախադասությունները փոխանցվում են WordPiece ներդրման մոդելի միջոցով [CLS] և [SEP] նշանները ներառելուց հետո: Քանի որ մենք ունենք երկու նախադասություն, մոդելին անհրաժեշտ են լրացուցիչ ներկառուցումներ՝ դրանք տարբերելու համար: Սա գալիս է հատվածի և դիրքի ներկառուցման տեսքով:
Ստորև կանաչ գույնով ցուցադրված հատվածի ներկառուցումը ցույց է տալիս, թե արդյոք մուտքային նշանները պատկանում են A կամ B նախադասությանը: Այնուհետև գալիս է դիրքի ներկառուցումը, որը ցույց է տալիս յուրաքանչյուր նշանի դիրքը հաջորդականության մեջ:
Նկար վերցված BERT թղթից, որը ցույց է տալիս մոդելի մուտքային ներկայացումը:
Բոլոր երեք ներկառուցվածքներն ամփոփված են միասին և սնվում են BERT մոդելին, որը երկկողմանի է, ինչպես ցույց է տրված նախորդ նկարում: Այն գրավում է ոչ միայն առաջի համատեքստը, այլև հետընթաց համատեքստը՝ նախքան մեզ յուրաքանչյուր նշանի արդյունքները տալը:
Գոյություն ունեն երկու եղանակ, որոնցով BERT մոդելը նախապես վերապատրաստվում է՝ օգտագործելով երկու չվերահսկվող առաջադրանքներ.
Դիմակավորված լեզվի մոդել (MLM): Այստեղ մենք քողարկում ենք հաջորդականության նշանների որոշ տոկոսը և թույլ ենք տալիս մոդելին կանխատեսել դիմակավորված նշանները: Այն նաև հայտնի է որպես փակման խնդիր: Գործնականում նշանների 15%-ը դիմակավորված է այս առաջադրանքի համար:
Հաջորդ նախադասության կանխատեսում (NSP): Այստեղ մենք ստիպում ենք մոդելին կանխատեսել հաջորդ նախադասությունը հաջորդականությամբ: Ամեն անգամ, երբ նախադասությունը իրական հաջորդն է, մենք օգտագործում ենք IsNext
պիտակը, իսկ երբ այն չկա, մենք օգտագործում ենք NotNext
պիտակը:
Ինչպես երևում է թղթից վերը նշված նկարից, առաջին ելքային նշանն օգտագործվում է NSP առաջադրանքի համար, իսկ մեջտեղում գտնվող նշանները, որոնք դիմակավորված են, օգտագործվում են MLM առաջադրանքի համար:
Քանի որ մենք մարզվում ենք խորհրդանիշի մակարդակով, յուրաքանչյուր մուտքային նշան արտադրում է ելքային նշան: Ինչպես դասակարգման ցանկացած առաջադրանքի դեպքում, մոդելի վերապատրաստման համար օգտագործվում է խաչաձև էնտրոպիայի կորուստ:
Թեև BERT-ը կարող է լավ պատկերացնել ինչպես առաջ, այնպես էլ հետընթաց համատեքստը, այն չի կարող լավագույնս հարմար լինել հազարավոր նախադասությունների միջև նմանություններ գտնելու համար: Դիտարկենք 10000 նախադասություններից բաղկացած մեծ հավաքածուի մեջ ամենանման նախադասությունների զույգը գտնելու խնդիրը: Այլ կերպ ասած, մենք կցանկանայինք «առբերել» այն նախադասությունը, որն առավել նման է A նախադասությանը 10000 նախադասությունից:
Դա անելու համար մենք պետք է զուգակցենք 10000-ից 2 նախադասությունների բոլոր հնարավոր համակցությունները: Դա կլինի n * (n — 1) / 2 = 4,999,500 զույգ: Անիծյալ, դա քառակուսի բարդություն է: BERT մոդելից 65 ժամ կպահանջվի ներկառուցումներ ստեղծելու և այս համեմատությունը լուծելու համար:
Պարզ ասած, BERT մոդելը լավագույնը չէ նմանության որոնման համար: Սակայն որոնումը և նմանության որոնումը ցանկացած RAG խողովակաշարի հիմքում են: Լուծումը գտնվում է SBERT-ի մոտ:
BERT-ի սահմանափակումը հիմնականում բխում է նրա խաչաձև կոդավորիչի ճարտարապետությունից , որտեղ մենք երկու նախադասություն ենք կերակրում միմյանց հաջորդականությամբ, որոնց միջև կա [SEP] նշան: Եթե միայն յուրաքանչյուր նախադասություն առանձին վերաբերվեր, մենք կարող էինք նախապես հաշվարկել ներկառուցվածները և ուղղակիորեն օգտագործել դրանք նույն ձևով հաշվարկելու համար, երբ և անհրաժեշտ է: Սա հենց ԲԵՐՏ կամ կարճ ասած ՍԲԵՐՏ նախադասության առաջարկն է։
SBERT-ը ներկայացնում է սիամական ցանցը BERT ճարտարապետությանը: Բառը նշանակում է երկվորյակ կամ սերտ կապված:
Սիամերենի իմաստը վերցված է dictionary.com-ից
Այսպիսով, SBERT-ում մենք ունենք նույն BERT ցանցը միացված որպես «երկվորյակներ»: Մոդելը ներդնում է առաջին նախադասությունը, որին հաջորդում է երկրորդը, դրանց հաջորդականությամբ զբաղվելու փոխարեն:
Նշում. սիամական ցանցերը պատկերացնելու համար 2 ցանցեր կողք կողքի նկարելը բավականին տարածված պրակտիկա է: Բայց գործնականում դա մեկ ցանց է, որն ընդունում է երկու տարբեր մուտքեր:
Ստորև բերված է դիագրամ, որը տալիս է SBERT ճարտարապետության ակնարկ:
Սիամական ցանցի ճարտարապետությունը կորստի համար դասակարգման նպատակով: Երկու ճյուղերից U և V ելքերը միացված են իրենց տարբերությամբ
.
Նախ, մենք կարող ենք նկատել, որ SBERT-ը ԲԵՐՏ-ից անմիջապես հետո ներկայացնում է միավորման շերտ: Սա նվազեցնում է BERT-ի ելքի չափը՝ հաշվարկը նվազեցնելու համար: BERT-ն ընդհանուր առմամբ թողարկում է 512 X 768 չափսերով: Միավորման շերտը նվազեցնում է սա մինչև 1 X 768: Լռելյայն միավորումը միջին է, թեև միջին և առավելագույն միավորումն աշխատում է:
Հաջորդը, եկեք նայենք վերապատրաստման մոտեցմանը, որտեղ SBERT-ը տարբերվում է BERT-ից:
SBERT-ն առաջարկում է մոդելին մարզելու երեք եղանակ. Եկեք նայենք նրանցից յուրաքանչյուրին:
Բնական լեզվի եզրակացություն (NLI) — Դասակարգման նպատակ
SBERT-ը դրա համար ճշգրտված է Stanford Natural Language Inference-ի (SNLI) և Multi-Genre NLI տվյալների հավաքածուների վրա: SNLI-ն բաղկացած է 570K նախադասության զույգերից, իսկ MNLI-ն ունի 430K: Զույգերն ունեն նախադրյալ (P) և վարկած (H), որը տանում է դեպի 3 պիտակներից մեկը.
Հաշվի առնելով երկու P և H նախադասությունները, SBERT մոդելը արտադրում է երկու ելք U և V: Դրանք այնուհետև միացվում են որպես (U, V և |U — V|):
Համակցված ելքը օգտագործվում է SBERT-ին դասակարգման նպատակի հետ վարժեցնելու համար: Այս միացված ելքը սնվում է Feed Forward նեյրոնային ցանցին՝ 3 դասի ելքերով (Eltailment, Neutral և Contradiction): Softmax cross-entry-ն օգտագործվում է վերապատրաստման համար, ինչպես մենք մարզվում ենք դասակարգման այլ առաջադրանքների համար:
Նախադասության նմանություն — Ռեգրեսիայի նպատակ
U և V-ը միացնելու փոխարեն մենք ուղղակիորեն հաշվարկում ենք երկու վեկտորների միջև կոսինուսի նմանությունը: Ինչպես ցանկացած ստանդարտ ռեգրեսիայի խնդրի, մենք օգտագործում ենք միջին քառակուսի սխալի կորուստ՝ ռեգրեսիա վարելու համար: Եզրակացության ընթացքում նույն ցանցը կարող է ուղղակիորեն օգտագործվել ցանկացած երկու նախադասություն համեմատելու համար: SBERT-ը գնահատում է, թե որքանով են նման երկու նախադասությունները:
Եռյակի նմանություն — Եռյակի նպատակ
Եռյակի նմանության նպատակն առաջին անգամ ներդրվել է դեմքերի ճանաչման մեջ և կամաց-կամաց հարմարվել է AI-ի այլ ոլորտներին, ինչպիսիք են տեքստը և ռոբոտաշինությունը:
Այստեղ 2-ի փոխարեն 3 մուտք է սնվում SBERT-ին՝ խարիսխ, դրական և բացասական: Դրա համար օգտագործվող տվյալների հավաքածուն պետք է համապատասխանաբար ընտրվի: Այն ստեղծելու համար մենք կարող ենք ընտրել ցանկացած տեքստային տվյալ և ընտրել երկու հաջորդական նախադասություն որպես դրական արդյունք: Այնուհետև ընտրեք պատահական նախադասություն մեկ այլ պարբերությունից՝ բացասական նմուշ:
Եռյակի կորուստն այնուհետև հաշվարկվում է՝ համեմատելով, թե որքան մոտ է դրականը խարիսխին և որքան մոտ է այն բացասականին:
BERT-ի և SBERT-ի այս ներածությամբ, եկեք արագ փորձենք հասկանալ, թե ինչպես կարող ենք այս մոդելների օգտագործմամբ ցանկացած տվյալ նախադասություն(ներ)ի ներկառուցում ստանալ:
Նույնիսկ իր հրապարակումից ի վեր, SBERT-ի պաշտոնական գրադարանը, որը sentence-transformer
է, ժողովրդականություն է ձեռք բերել և հասունացել: Այն բավական լավ է RAG-ի արտադրական օգտագործման դեպքերում օգտագործելու համար: Այսպիսով, եկեք այն օգտագործենք առանց տուփի:
Սկսելու համար եկեք սկսենք տեղադրել Python-ի թարմ նոր միջավայրում:
!pip install sentence-transformers
Կան SBERT մոդելի մի քանի տարբերակներ, որոնք մենք կարող ենք բեռնել գրադարանից: Եկեք բեռնենք մոդելը նկարազարդման համար:
from sentence_transformers import SentenceTransformer model = SentenceTransformer('bert-base-nli-mean-tokens')
Մենք կարող ենք պարզապես ստեղծել նախադասությունների ցանկ և ներկառուցումներ ստեղծելու համար կանչել մոդելի encode
գործառույթը: Դա այնքան պարզ է:
sentences = [ "The weather is lovely today.", "It's so sunny outside!", "He drove to the stadium.", ] embeddings = model.encode(sentences) print(embeddings.shape)
Եվ մենք կարող ենք գտնել ներկառուցումների միջև նմանության միավորները՝ օգտագործելով ստորև 1 տողը.
similarities = model.similarity(embeddings, embeddings) print(similarities)
Նկատի ունեցեք, որ նույն նախադասության միջև նմանությունը 1 է, ինչպես և սպասվում էր.
tensor([[1.0000, 0.6660, 0.1046], [0.6660, 1.0000, 0.1411], [0.1046, 0.1411, 1.0000]])
Ներդրումը կարևոր և հիմնարար քայլ է RAG խողովակաշարը լավագույնս աշխատելու համար: Հուսով եմ, որ դա օգտակար էր և բացեց ձեր աչքերը, թե ինչ է կատարվում գլխարկի տակ, երբ մենք օգտագործում ենք նախադասության տրանսֆորմատորները տուփից դուրս:
Հետևե՛ք RAG-ի և նրա ներքին աշխատանքի վերաբերյալ առաջիկա հոդվածներին՝ զուգորդված նաև գործնական ձեռնարկներով: