paint-brush
Ներդրումներ RAG-ի համար՝ ամբողջական ակնարկկողմից@aibites
306 ընթերցումներ
306 ընթերցումներ

Ներդրումներ RAG-ի համար՝ ամբողջական ակնարկ

կողմից Shrinivasan Sankar9m2024/11/30
Read on Terminal Reader

Չափազանց երկար; Կարդալ

Ներդրումը կարևոր և հիմնարար քայլ է առբերման ավելացված սերնդի (RAG) խողովակաշար կառուցելու համար: BERT-ը և SBERT-ը ներկառուցման ժամանակակից մոդելներ են: Sentence transformers-ը python գրադարանն է, որն իրականացնում է երկու մոդելները: Այս հոդվածը խորանում է ինչպես տեսության, այնպես էլ գործնականում
featured image - Ներդրումներ RAG-ի համար՝ ամբողջական ակնարկ
Shrinivasan Sankar HackerNoon profile picture

Այս հոդվածը սկսվում է տրանսֆորմատորներից և դիտում է դրա թերությունները որպես ներդրման մոդել: Այնուհետև այն տալիս է BERT-ի ակնարկ և խորը սուզվում է նախադասության BERT-ի մեջ (SBERT), որը LLM-ների և RAG խողովակաշարերի համար նախադասությունների ներկառուցման ամենաարդիականն է:

Տեսողական բացատրություն

Եթե դուք ինձ նման տեսողական անձնավորություն եք և ցանկանում եք դիտել տեսողական բացատրություն, խնդրում ենք դիտել այս տեսանյութը.

Տրանսֆորմատորներ

Տրանսֆորմատորները ներդրման կարիք չունեն: Թեև դրանք ի սկզբանե նախագծված էին լեզվի թարգմանության առաջադրանքների համար, դրանք այսօր գրեթե բոլոր LLM-ների ետևում կանգնած են:


Բարձր մակարդակում դրանք կազմված են երկու բլոկից՝ կոդավորիչից և ապակոդավորիչից: Կոդավորիչի բլոկը ընդունում է մուտքը և թողարկում մատրիցային ներկայացում: Ապակոդավորիչի բլոկը ընդունում է վերջին կոդավորիչի ելքը և արտադրում ելքը: Կոդավորիչ և ապակոդավորիչ բլոկները կարող են կազմված լինել մի քանի շերտերից, թեև սկզբնական տրանսֆորմատորն ունի 6 շերտ յուրաքանչյուր բլոկում:


Բոլոր շերտերը կազմված են բազմագլուխ ինքնաուշադրությամբ։ Այնուամենայնիվ, կոդավորողի և ապակոդավորողի միջև միակ տարբերությունն այն է, որ կոդավորիչի ելքը սնվում է ապակոդավորիչի յուրաքանչյուր շերտին: Ուշադրության շերտերի առումով ապակոդավորիչի ուշադրության շերտերը դիմակավորված են: Այսպիսով, ցանկացած դիրքի արդյունքի վրա ազդում է նախորդ դիրքերի արդյունքը:


Կոդավորիչը և ապակոդավորիչի բլոկը հետագայում կազմված են շերտի նորմայից և առաջընթաց նեյրոնային ցանցի շերտերից:


Ի տարբերություն նախկին մոդելների, ինչպիսիք են RNN-ները կամ LSTM-ները, որոնք ինքնուրույն մշակում էին նշանները, տրանսֆորմատորների հզորությունը կայանում է նրանում, որ նրանք կարող են գրավել յուրաքանչյուր նշանի համատեքստը ամբողջ հաջորդականության նկատմամբ: Այսպիսով, այն գրավում է շատ համատեքստ՝ համեմատած ցանկացած նախկին ճարտարապետության հետ, որը նախատեսված էր լեզվի մշակման համար:

Ինչն է սխալ տրանսֆորմատորների հետ:

Տրանսֆորմատորներն ամենահաջող ճարտարապետներն են, որոնք այսօր մղում են արհեստական ինտելեկտի հեղափոխությունը: Այսպիսով, ինձ կարող են ցույց տալ դուռը, եթե ես մատնանշեմ դրա սահմանափակումները: Այնուամենայնիվ, փաստորեն, հաշվողական ծախսերը նվազեցնելու համար դրա ուշադրության շերտերը նախատեսված են միայն անցյալ նշաններին հետևելու համար: Սա լավ է առաջադրանքների մեծ մասի համար: Բայց կարող է բավարար չլինել այնպիսի առաջադրանքի համար, ինչպիսին է հարց պատասխանը: Վերցնենք ստորև բերված օրինակը.


Ջոնը եկել էր Միլոյի հետ երեկույթին: Միլոն շատ զվարճացել է երեկույթին: Նա գեղեցիկ, սպիտակ մորթով կատու է։


Ենթադրենք, հարց ենք տալիս. «Մայլոն խմե՞լ է Ջոնի հետ խնջույքին»: Պարզապես հիմնվելով վերը նշված օրինակի առաջին 2 նախադասությունների վրա, շատ հավանական է, որ LLM-ը կպատասխանի.


Այնուամենայնիվ, առաջադիմական ենթատեքստով վարժեցված մոդելը տեղյակ կլինի 3-րդ նախադասության մասին, որն է՝ «Նա գեղեցիկ, ընկերասեր կատու է»: Եվ այսպես, կպատասխաներ. «Միլոն կատու է, և քիչ հավանական է, որ խմած լինի խնջույքի ժամանակ»։


Չնայած սա հիպոթետիկ օրինակ է, դուք հասկանում եք գաղափարը: Հարցուպատասխանի առաջադրանքում կարևոր է դառնում և՛ առաջ, և՛ հետընթաց համատեքստում սովորելը: Հենց այստեղ է հայտնվում BERT մոդելը:

ԲԵՐՏ

BERT-ն նշանակում է երկկողմանի կոդավորիչի ներկայացումներ տրանսֆորմատորներից: Ինչպես անունն է հուշում, այն հիմնված է տրանսֆորմատորների վրա և ներառում է ինչպես առաջ, այնպես էլ հետընթաց համատեքստ: Թեև այն ի սկզբանե հրապարակվել է այնպիսի առաջադրանքների համար, ինչպիսիք են հարցերի պատասխանը և ամփոփումը, այն ունի ներուժ ստեղծելու հզոր ներկառուցումներ՝ իր երկկողմանի բնույթի պատճառով:

BERT մոդել

BERT-ը ոչ այլ ինչ է, քան տրանսֆորմատորային կոդավորիչներ, որոնք իրար հաջորդաբար կուտակված են: Միակ տարբերությունն այն է, որ BERT-ն օգտագործում է երկկողմանի ինքնավստահություն , մինչդեռ վանիլային տրանսֆորմատորն օգտագործում է սահմանափակ ինքնորոշում, որտեղ յուրաքանչյուր նշան կարող է հետևել միայն իր ձախ կողմում գտնվող համատեքստին:


Նշում. հաջորդականություն ընդդեմ նախադասության. Պարզապես նշում տերմինաբանության վերաբերյալ՝ BERT մոդելի հետ շփոթությունից խուսափելու համար: Նախադասությունը մի շարք բառեր է, որոնք բաժանված են ըստ կետի: Հերթականությունը կարող է լինել մի շարք նախադասություններ միասին դրված:


ԲԵՐՏԸ հասկանալու համար վերցնենք հարցի պատասխանի օրինակը։ Քանի որ հարցուպատասխանը ներառում է առնվազն երկու նախադասություն, BERT-ը նախատեսված է ընդունելու զույգ նախադասություններ <հարց-պատասխան> ձևաչափով: Սա հանգեցնում է տարանջատող նշանների, ինչպիսիք են [CLS]-ը, որոնք սկզբում փոխանցվում են հաջորդականության սկիզբը ցույց տալու համար: Այնուհետև [SEP] նշանն օգտագործվում է հարցն ու պատասխանը բաժանելու համար:


Այսպիսով, պարզ մուտքագրումն այժմ դառնում է [CLS]<հարց>[SEP]<պատասխան>[SEP], ինչպես ցույց է տրված ստորև նկարում:

Երկու A և B նախադասությունները փոխանցվում են WordPiece ներդրման մոդելի միջոցով [CLS] և [SEP] նշանները ներառելուց հետո: Քանի որ մենք ունենք երկու նախադասություն, մոդելին անհրաժեշտ են լրացուցիչ ներկառուցումներ՝ դրանք տարբերելու համար: Սա գալիս է հատվածի և դիրքի ներկառուցման տեսքով:


Ստորև կանաչ գույնով ցուցադրված հատվածի ներկառուցումը ցույց է տալիս, թե արդյոք մուտքային նշանները պատկանում են A կամ B նախադասությանը: Այնուհետև գալիս է դիրքի ներկառուցումը, որը ցույց է տալիս յուրաքանչյուր նշանի դիրքը հաջորդականության մեջ:

Նկար վերցված BERT թղթից, որը ցույց է տալիս մոդելի մուտքային ներկայացումը:


Բոլոր երեք ներկառուցվածքներն ամփոփված են միասին և սնվում են BERT մոդելին, որը երկկողմանի է, ինչպես ցույց է տրված նախորդ նկարում: Այն գրավում է ոչ միայն առաջի համատեքստը, այլև հետընթաց համատեքստը՝ նախքան մեզ յուրաքանչյուր նշանի արդյունքները տալը:

Նախապատրաստում BERT

Գոյություն ունեն երկու եղանակ, որոնցով BERT մոդելը նախապես վերապատրաստվում է՝ օգտագործելով երկու չվերահսկվող առաջադրանքներ.

  • Դիմակավորված լեզվի մոդել (MLM): Այստեղ մենք քողարկում ենք հաջորդականության նշանների որոշ տոկոսը և թույլ ենք տալիս մոդելին կանխատեսել դիմակավորված նշանները: Այն նաև հայտնի է որպես փակման խնդիր: Գործնականում նշանների 15%-ը դիմակավորված է այս առաջադրանքի համար:

  • Հաջորդ նախադասության կանխատեսում (NSP): Այստեղ մենք ստիպում ենք մոդելին կանխատեսել հաջորդ նախադասությունը հաջորդականությամբ: Ամեն անգամ, երբ նախադասությունը իրական հաջորդն է, մենք օգտագործում ենք IsNext պիտակը, իսկ երբ այն չկա, մենք օգտագործում ենք NotNext պիտակը:

    BERT մոդելի նախնական ուսուցում NSP և MLM նշաններով ելքի վրա:


Ինչպես երևում է թղթից վերը նշված նկարից, առաջին ելքային նշանն օգտագործվում է NSP առաջադրանքի համար, իսկ մեջտեղում գտնվող նշանները, որոնք դիմակավորված են, օգտագործվում են MLM առաջադրանքի համար:


Քանի որ մենք մարզվում ենք խորհրդանիշի մակարդակով, յուրաքանչյուր մուտքային նշան արտադրում է ելքային նշան: Ինչպես դասակարգման ցանկացած առաջադրանքի դեպքում, մոդելի վերապատրաստման համար օգտագործվում է խաչաձև էնտրոպիայի կորուստ:

Ինչն է սխալ BERT-ի հետ:

Թեև 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 Architecture

Ստորև բերված է դիագրամ, որը տալիս է 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 պիտակներից մեկը.


  • Eltailment - նախադրյալը հուշում է վարկածը
  • Չեզոք - նախադրյալը և վարկածը կարող են ճշմարիտ լինել, բայց պարտադիր չէ, որ կապված լինեն
  • Հակասություն - նախադրյալն ու վարկածը հակասում են միմյանց


Հաշվի առնելով երկու 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

Նույնիսկ իր հրապարակումից ի վեր, 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-ի և նրա ներքին աշխատանքի վերաբերյալ առաջիկա հոդվածներին՝ զուգորդված նաև գործնական ձեռնարկներով: