Може ли да се използва „езиков модел“, за да се предвиди какво ще напише потребителят след това?

Да изследваме!

Изявление на проблема: Целта е да се помогне на потребителите да напишат някаква статия/есе, катоим се предоставят смислени подкани, които се генерират автоматично, като се вземе предвид техният преди това написан текст (служещ за контекст ), както е показано по-долу.

Функцията mart compose' на GMail, която автоматично довършва изречението на потребителя в пощата, функционира по подобен начин, но освен съществуващото писмено съдържание, тя взема предвид и допълнителна контекстуална информация, като например тема, дата и месец от годината на писане на имейл и т.н. Фрагментът по-долу е от блога на Google (https://ai.googleblog.com/2018/05/smart-compose-using-neural- networks-to.html), публикувани през 2018 г. :

Типични модели за генериране на език, като модели на n-gram, невронна торбичка с думи (BoW) и RNN език (RNN-LM), се научават да предсказват следващата дума, обусловена от последователността от префиксни думи. В имейл обаче думите, въведени от потребителя в текущата сесия за съставяне на имейл, са само един „сигнал“, който моделът може да използва, за да предвиди следващата дума. За да включим повече контекст за това, което потребителят иска да каже, нашият модел също зависи от темата на имейла и предишния текст на имейла (ако потребителят отговаря на входящ имейл).

И така, как се постига това?

От техническа гледна точка, подобно на повечето задачи за предсказване на последователност, целта по време на обучението на модела е да се увеличи максимално „логаритмичната вероятност“ за създаване на правилната целева последователност, дадена на входа за всички проби от данни в обучението корпус.

Тук нека направим кратко отклонение, за да разберем как подобни проблеми с последователност-последователност са били подхождани исторически:

  • Базиран на LSTM основен подход за енкодер-декодер: През 2014 г. беше публикувана статия, озаглавена „Обучение от последователност към последователност с невронни мрежи em>което твърди, че дълбоките невронни мрежи (DNN)не са подходящи за картографиране на последователности към последователности, необходими за задачи като „превод от английски на френски“. Основната предпоставка беше, че DNN изисква размерността на входовете и изходите да бъде известна и фиксирана. Вместо това беше предложен нов подход за наличие на модел на енкодер-декодер, използващ LSTM. Подходът беше да се използват 2 LSTM: един LSTM за четене на входната последователност, една стъпка по време и получаване на векторно представяне с големи фиксирани размери, и друг LSTM (по същество RNN, обусловен от входната последователност), за да извлечете изходната последователност от този вектор, както е показано по-долу:

Цялата система енкодер-декодер, която се състои от енкодер и декодер за езикова двойка, беше съвместно обучена, за да увеличи максимално вероятността за правилен превод, даден на изходното изречение.

  • Модел на енкодер-декодер с механизъм за внимание:При горния подход беше наблюдаван потенциален проблем с необходимостта от кодиране/компресиране на цялата необходима информация на изходното изречение в единичен вектор с фиксирана дължина, което затруднява невронните мрежи да се справят с дълги изречения, особено тези, които са по-дълги от изреченията в учебния корпус. През 2015 г. беше публикуван друг документ — НЕВРОЧЕН МАШИНЕН ПРЕВОД ЧРЕЗ СЪВМЕСТНО УЧЕНЕ НА ПОДРАВНЯВАНЕ И ПРЕВОД, който се опитва да реши този проблем, като се научи да подравнява и превежда съвместно. С други думи, моделът се подравнява отново всеки път, когато преведеният изход е произведен. Вместо да кодира цялата информация за изречението на източника в единичен вектор с фиксирано измерение, той кодира входното изречение в поредица от вектори и избира подмножество от тези вектори адаптивно, докато декодира превода. За да уточним повече, всеки път, когато предложеният модел генерира дума в превод, той (меко) търси набор от позиции в изходното изречение, където е концентрирана най-подходящата информация. След това моделът прогнозира целева дума въз основа на контекстния вектор, свързан с тези изходни позиции и всички предварително генерирани целеви думи.

Интуитивно, механизмът за вниманиевзема контекстния вектор и енкодерът извежда за всяка отделна времева стъпка и изчисляватегло на вниманието за всяка от времевите стъпки на енкодера. Това тегло ни казва колко значение да придадем на всеки изход от енкодераи се умножава с изхода от енкодера за всяка времева стъпка и се подава към декодера при всяка времева стъпка. По този начин декодерът знае на коя входна дума да обърне максимално внимание, докато определя изхода на декодера на всяка времева стъпка. Следното изображение обяснява мрежата за внимание.

  • Трансформаторни модели, базирани единствено на механизма за внимание:Съвсем наскоро, през 2017 г., беше предложено доста радикално подобрение на горната архитектура в документа, озаглавен „Вниманието е всичко, от което се нуждаете»”. Моделът на трансформатора, въведен в тази статия, използва само механизма за внимание, който се освобождава от предишни повторения и навивки, присъстващи изцяло в частта енкодер-декодер. Както е показано по-долу, моделът използва подредени самовнимание и точкови, напълно свързани слоеве за предаване напред както за енкодера, така и за декодера (без повтарящи се или сложни слоеве!):

Един важен аспект на трансформаторните модели е частта „Позиционно кодиране“ — тъй като моделът не съдържа повтаряне и навиване, за да може моделът да използва реда на последователността, известна информация за относителната или абсолютна позиция на токените в последователността се инжектира под формата напозиционни кодировки.

Друга важна характеристика е, че в трансформаторните мрежи всички входове могат да се подават едновременно в сравнение с предишни модели, при които входът трябваше да се захранва последователно. Това позволява по-голямо паралелизиране на обучението и следователно по-бързо учене.

Сега, след като имаме някаква представа за моделите на Transformer, нека да разгледаме конкретен клас модели, наречени GPT (Generative Pre-Training) модели, които напълно премахват модула „Encoder“ и разчитат само на „Decoder“ ' модул. Идеята е да се комбинират входни и изходни последователности в едно „изречение“ и след това да се обучават като стандартен езиков модел за предсказване на следващата дума, като се имат предвид предишните!

Тоест, ние преобразуваме пример за трансдукция на последователност (m1, …, mn) → (y 1, …, yη) в изречението(w 1, …, wn+η+1 ) = (m1 , …, mn, δ, y1 , …, yη ), където δ е специален разделителен токен и обучава модел да предсказва следващата дума, дадена на предишните:

Тъй като моделът е принуден да предвиди следващия токен във входа, m, както и y, сигналите за грешка се разпространяват както от входните, така и от изходните времеви стъпки по време на обучението.

Таблицата по-долу илюстрира разликата в архитектурите на различните модели трансформатори:

GPT2 и впоследствие езиковият модел GPT3 бяха пуснати от Open AI съответно през 2019 г. и 2020 г. чрез обучение на частен корпус от 500 милиарда токени!

  • GPT3 е МАСИВЕН. Той кодира наученото от обучението в 175 милиарда числа (наречени параметри). Тези числа се използват за изчисляване кой токен да се генерира при всяко изпълнение.
  • GPT3 всъщност генерира изход един токен наведнъж (нека приемем, че токенът е дума засега).
  • Тези числа са част от стотици матрици в модела. Прогнозата е предимно много матрично умножение.
  • GPT3 е широк 2048 токена. Това е неговият „прозорец на контекста“. Това означава, че има 2048 писти, по които се обработват токени.
  • Важните изчисления на GPT3 се извършват в неговия стек от 96 трансформаторни декодиращи слоя.
  • Всеки от тези слоеве има свой собствен параметър 1.8B, за да направи своите изчисления. Това е мястото, където се случва „магията“. (96 * 1.8B ==› 173B).

Таблицата по-долу изброява различните варианти на GPT, налични за използване:

OpenAI обаче избра да задържи публичния достъп до своите обучени модели, като ги направи достъпни чрез API само за няколко избрани компании и лица.

Eleuther AI след това пусна'GPT Neo'моделаза да направи подобен на GPT езиков модел достъпен за всички.

По-долу можете да получите перспектива за това къде „GPT Neo“ стои редом до своите големи братя 😊!

Уникалната архитектура на GPT моделите ни позволява да ги прецизираме ефективно с минимални промени в архитектурата на предварително обучения модел.

Нека демонстрираме с пример:

Първоначална фина настройка с модел на параметри GPT Neo 125M

Стъпка 1: Инсталирайте библиотеки

За да изградим и обучим GPT2, трябва да инсталираме трансформаторната библиотека Huggingface.

Инсталирайте трансформаторната библиотека Huggingface:

Стъпка 2: Импортирайте библиотеки и предварителна обработка на набора от данни

Преди да изградим модела, първо трябва да финализираме и обработим предварително набора от данни.

Нека поработим върху набор от данни, образуван чрез изчерпване на интернет, съдържащ 400–500 думи от академични есета:

Тъй като наборът от данни съдържа определени специални знаци със звездичка „*“, те трябва да бъдат заменени от заместител на „‹name›“.

Стъпка 3: Прегръщащо лице предоставя предварително обучен GPT-Neo модел и съответния му токенизатор.

Стъпка 4: Извод за необработен модел

Нека да видим как се държи моделът без никакви фини настройки:

Никак не е зле! Но със сигурност можем да се подобрим, за да бъдем по-специфични за набора от данни на Essay.

Стъпка 5: Фина настройка на набора от данни за есе

Стъпка 6: Извод от фино настроения модел

В това отношение има подобрения, които могат да бъдат направени, като фина настройка на по-голям GPT Neo 2.7B модел, получаване на по-голям набор от данни и т.н., но обучението на по-голям модел изисква специална библиотека като Deepspeedза да бъдат инсталирани и конфигурирани. Повече за това по-късно!

Надяваме се, че сте намерили тази статия за проницателна.