Жасанды Интеллект Абай Құнанбайұлының Стилінде Жазуға Үйренеді


Жасанды Интеллект – жиырма бірінші ғасырдың нео-Индустриялық Революциясы. Пилотсыз көліктер, адам көңілін сезетін роботтар, рак ауруларын анықтайтын программалар, он жылдай бұрын түске де кірмейтін арман, бүгін бүкіл әлемге әйгілі технология. Жасанды Интеллект саласының арқасында адамзат жаңа дәуірге қадам басып жатыр. Бірақ ғалымдардың зерттеулері қандай табысты болса да, алда әлі талай жумыс бар.

Жасанды Интеллекттің бүгінгі шешіліп жатқан мәселелерінің бірі – Табиғи Тіл Өңдеу (Natural Language Processing): компьютердің адам тілін түсініп үйренуі. Біз жас кезімізден ана тілді сөйлеп қолдануға үйренеміз, сондықтан тіл түсінуде еш қиындық көрмейміз. Компьютерлерге болса, тіл түсіну өте қиын. Неге десеңіз, адамзаттың жаратқан ғажайып тіл моделі алгоритімдік есептеу тұрғысынан өте күрделі.

Бұл жобада, мен Жасанды Нейрондық Желіні (Artificial Neural Network/Искусственная нейронная сеть) құрастырып,  Жасанды Интеллектке Абай атамыздың өлеңдері мен қара сөздерін үйретемін. Бұл жұмыстың мақсаты Жасанды Интеллекттің Қазақ тіл моделін үйренуі. Тіл моделімен қоса, ол Абай Құнанбайұлының жазу стилін сіңіреді. Бұл – Абайдың кішкене бөлшегі қайтадан өмірге келуі десеңіз де болады.

Жасанды Интеллект туралы мына видо арқылы көбірек үйрене аласыздар:

 

Енді мен жобаның натижелерін көрсетемін. Одан кейін моделдің қысқаша математикалық және техникалық аспекттерін түсіндіремін, дизайн мен архитектураны да сол бөлімде таба аласыздар.

Абай Құнанбайұлының Жасанды Интеллект Моделі

Біздің Жасанды Нейрондық Желі Абайша Қазақ тіл моделін графикалық процессор (GPU) жабдықталған серверде екі сағат шамасында үйренді. Бұл Нейрондық Желі модел тіл структурасын, логикасын, граматтикасын үйренуге тырысты. Болашақта моделге қосымша мәлімет беріп, үлкенірек сервер жалдап, негізгі адами логикаға үйретіп, әңгіміе-дүкен құратын робот жаратуға болады.

Моделдің үйрену жетістіктерін көру үшін, одан ойға кез келген сөйлемдерді жазуға сұрадым. Сол сөйлемдер төменде көрсетілген.

Дүние дос тәркі жан деп ғой, елді азғырғанға, я мал көріп, ішпек-жемек, балаң өз ортақ дүр екен.

Желсіз түнде жұбанар дәулет жоқ. Үнемі қуанар, еңбек фиғыл.

Сөз тыныш бақ – боларды жеткіземін, егессе жүректі ала зор.

Шындығы керек, бұл жасанды интеллект Қазақша тілді менен жақсы білгендей көрінеді. Мен бүгін көбінесе Ағылшын тілін қолдансам да, жиырма екі жыл өмірімнің он сегіз жылын Қазақша сөйлеп шықтым. Бұл Нейрондық Желі тілді екі сағтта ғана үйрене алды.

Үйреніп жұрттың не таппақ деп елге, жалғыз алар. Ер баққан адам болады

Біздің кішкентай жасанды интеллектіміз “Ер баққан адам болады” дейді. Сіз қалай ойласыз? 😀

Үнемі осы, қулық үшін шаршап болып һәм ақырын, мархамат деп, сәулесі бар дейді? Қызық бір шыға алмай, бір сәулелі тағала әуелі болмаса қой береді екен.

Граматикалық пунтктуацияға көңіл аударыңыз. Жылдар бұрын бұндай дәрежеде тіл структурасын кем дегенде 150-200 гиггабайт Жедел Жадтау Құрылғысы (RAM) бар супер копютерлер ғана уйрене алатын, оның озінде талай қателесетін.

Антұрған мал де жүрекке жүріп, таза билетпедік. Бұл махаббат…

Байқаған шығарсыз, тіл білімі қандай әсерлі болса да, бұл сөйлемдер мағынаға бай емес. Себебі, бұл модель ақылын қолдануға толық үйренген жоқ. Бірақ, алдында айтқанымыздай, бұл моделді жалғастырып, түсінігі бар, сөйлей алатын роботты жобалауға болады.

Ғылым болса деген егін салды, серт күн тауып. Еңбек қылып жұбаныш.

Сіз Нейрондық Желіден улкенірек текст/параграф жазуға сұрасаңыз болады. Төменде мысалы берілген:

Бір тілемесең болмайды. “Қайтемін ана!” деп, кімнен қолым, шүбәсіз кісінің бірқатар ісі. Үнемі осы, ќулыќ үшін шаршап болып һәм ақырын, мархамат деп, сәулесі бар дейді? қызық бір шыға алмай, бір сәулелі тағала әуелі болмаса қой береді екен. қалайша алмады, артын жақсылыққа қыздардың жетпейді. бір жаманшылықтан көмек байсыңдар. мұндай дүниедегі толық малы күтесің, сол махаббат – да болғандығы, ол болар мал, ауыздан мың алдыңғы иман ала бұларға оларға әуелден салса да ғылым. заманға өз ем тату болған болса, көзден әуелі шафғат, қыс сөзің білдірмей, сен – берейін деп ғой, малға әке соған ақыл кең. адамзаттың кім болма қайсысы қулар алмай, «білгенім» деп?

Әуелден қарап, зар келсеңіз, ғадаләт ән ақылға қарап көңлі жұбаныш. Әрбір болыс өз жүректің болады? жылы бүгінгі әуелі ойлаған табынып дегенде тұр патша еш адам — не таныр бахас болса, манар қулық сорлы да әрбірінің басқа, сәулең мал қылады, оның басқаша ұрлығын еңбек баласына оны болсаң, ар жағадан тым қылып үлкен па болатұғын соған ғадаләт ас, сөз өкпесін түзерлігі-ақ, біреуі — күн кісіге жүргенде қылуға түгел қылып. жүректен қалар, рақым жіберген нұр ашып, өзін қадірлемейді болады және сән іс, жатқа салдым жанға сүйтсе да, дәулет ғақыл? Көп кәрі ғадаләт, қоймады қайтып жылап аты бұл деп бұған жолындағы кетеді оның егіннің көрсең, тұра, дегенмен бірге антұрғанның сол қандай қылығын-ай! ол ойла? жаны іші шығады, көпке де жақсы ме да деген оңбайды. кейде дерттің қайтып тіл, үш кезде, құр ойдан тазалыққа болса, бойын тіпті алып, сәулең қан десең, тіл та гөр, сенің боп жақсылықтың бір дегені келді ой қой деп барады. таза сөз сөзді ауру үшін еді келеді. сен ұйқы мен алар үшін шәриксиз, мейлің түс не зор мал уыс. ет жігіт қыл аңдып күлуші — мал жоқ қой, біреуі – неге ал.? Күн бұзақының қайсысынан тозар қыл. жақсылық жарайды. сен тілеген некен-саяқ және жүрек алдым ма қандай болса, дәулет болып ешнәрсе ала, көңілім — орнын керек. егер жылға толған жақсы құл табар. жай болып қара. қайраттанып, кез қыл, тіленбей да балаң малын үйреткен дегені алды қалмасын деп, басын тамырын раст өз күндік болады я ма, жүз қайыр бардан деймін. дем өзіндей елден соған салынсаң, өтірікті оның алмай жалға жоқ, оған түсіп у деп болмайды. егер —бұл ол жақсы жасымда — тоқтамады деп, өздері үйге көрді алмай екен

Ғылым болса деген егін салды, серт күн тауып. Еңбек қылып жұбаныш. өсек күшті. сонда көкіректі есті кешіреді деп. өзіне ізгілікке пен би болсын ғой, хақ шаң шығып, яки сөзінен елден жүріп екен, бес тай-талас. ұйқы! кірсе, құдай достық оған, не ќұл не ит бір малға шығарып, тіл сақ қарық қылып басты хас өзге баласын үшін қылмаған қара көрген, не қысылған ісі ол алдым? софылық білді соған және үш кісі болсам жүр кім, кім де оларға инандырамын, салған денесі олар ма шыдап күнің, елдің енді. салпылдап жүрек енді қанат боздайды оңбаған демейді еді. халлақына адамның байлық, сөзі өзіне болып, бірақ — уайым болды пе? тірі сынайын. көрінгенге ќызыќпен уайым-қайғы қарап керек, бұған хайуандарды қылған шыға баурына, я хакімдер болмаса, әрнеге кедей, көзіңнің арзан, буыны заһир түгел деп? мақсаты не тамағын, ақыл айтып қылуға алмай екен. бойды дәлел басқа, біреудің тағы істі кісіден деп берген келсе меншікті шыны болып іс та, Қазақтың тіпті бір ойланар, мінсе болып да, сырнай-керней керек да. яки ойлама зоры, алса болар қара, мақтаншақ жоқ менен және болыс қабақ өтер.

 

Мәліметтер (Data)

Интеллекте қарай бірінші қадам – мәлімет. Біздің мәлімет Абай Құнанбаев (1845-1904)  веб сайтынан алынған:

Өлеңдер, аудармалар, қара сөздердің барлығын Python-мен HTML-ды талдау арқылы сол веб сайттан жүктейміз.

Математикалық Бөлім

Бұл бөлім калкулус, математикалық оптимизация, және компьютер бағдарламалау білімдерін талап етеді.

Стандартты Жасанды Нейрондық Желілер білімді “backpropagation” (“Арқалау” деп атайық) алгорітм арқылы алады. Білімді қолдану үшін олар “forward prop” (біз оны Қазақша “Алға басу” деп атайық) алгоритімін пайдаланады.

Алға Басу алгоритімді мына рекурсивті формуламен сипаттауға болады:

    \[h_L = \sigma(f(h_{L-1},\theta_L))\]

h_0 = X деп берілген, немесе мәлімет “data”

Бұл жерде:

  • L – Желінің (жоғарғы) қабаты. Кез келген қабат l мен нүктеледі.
  • \theta – Желінің градиент түсіру арқылы үйренген параметері
  • f(h_{L-1},\theta_L) Сызықтық теңдеу функциясы (b деген үзіліс ұпайы “intercept term”):

        \[f(h_{L-1},\theta_L) = \theta_L^T h_{L-1} + b\]

  • \sigma(...) деген сызықсыз сигмойд функциясы. Жасанды Нейрондық Желілер – теория көз қарасынан Әмбебап Функция Жуықтаушылар. Кез келген функцияны жуықтау үшін, желілер,  тығылып жатқан тығыз паттерн манифолдты табады. Бұл үшін біз сызықсыз сигмойдпен топологияны өзгертеміз.
    Көрнекі мысал:

Christopher Olah – ның сайтынан алынған

Жасанды Интеллект зерттеулерінде, түрлі сигмойд функциялары қолданылады. Бірақ бұл жұмысқа байланыстысы – Гиперболалық Жанама функциясы.

    \[\sigma(z) = tanh(z)\]

Арқалау алгоритімін біз былай оптмизация ретінде бейнеле аламыз:

    \[f^* = \underset{f}{\mathrm{argmin}} \mathbb{E}_{x,y \sim p_x}||y-f(x)||^2\]

Бұл жерде:

  • x – мәлімет және y мәліметтің таңбасы. Мысалға біздің мәлімет адамның суреті болса, сол малеметтің таңбасы суретте Иван y = \begin{bmatrix} 1 \\ 0 \\ \end{bmatrix} немесе Аружан y = \begin{bmatrix} 0 \\ 1 \\ \end{bmatrix} бар екенін белгілейді.
  • f(x) – Алға Басу
  • p_x – мәліметтің жалпыланған функциясы
  • \mathbb{E} – Ағылшынша Expected Value (Қазақша аудармасын тапсаңыз риза болар едим)
  • f^* – Нейрон Желілер жуықтауға үйренетін функция
  • \underset{f}{\mathrm{argmin}} – Оптимизация. Арқалау алгоритімі бұны градиент түсіру арқылы шығарады

Жоғарыда көрсетілген нейро желі Алға Бас Перцептрон деп аталады. Перерцептон желіліері бүгінгі заман Жасанды Интеллектінің ата бабасы. Перцептрон желіліері ойлап шығарылған кезден бері, ғалымдар салаға талай инновация еңгізді.

Сонғы жылдардың ең қуатты нейро желі архитектуралары:

Бұл жобада қолданған архитектура жан ұясы Рекурренті Нейро Желі (РНЖ) (Recurrent Neural Network) деп аталады. Бүгнгі күнге РНЖ-ларды ең қуатты нейро архитектуралар жинағы деп санауға болады. РНЖ лар нейро жады проблемысын шешу үшін жобаланған. РНЖ, Перцептронға лайық қабатты архитектурада негізделген. Бірақ, РНЖ x мәліметтен басқа, x_1,..,x_t,... ны ойнда сақтайды. Бул жерде 1...t... мәліметтің реттеуі (t – рет немесе уақыт бола алады).

Мына мәлеметті мысалға алайық:

Есікті біреу соғып жатқанын естіп, Меруерт, оқып жатқан кітапін жапты да қолтығына басты. ?????? асша, соғып тұраған кісі жылдар бұрын жоғалған жақын досы екен. ????? таң қалғанынан ????? жерге құлатты.

Егер сіз адам болсыңыз (Робот мырзалар бұл блогты оқымауыңызды сұраймын 🤣) , интеллектіңіздің арқасында ????? -ның орнына қай сөздерді орналастыруын білесіз:

Есікті біреу соғып жатқанын естіп, Меруерт, оқып жатқан кітапін жапты да қолтығына басты. Есікті асша, соғып тұраған кісі жылдар бұрын жоғалған жақын досы екен. Меруерт таң қалғанынан кітапін жерге құлатты.

Бүгінгі уақытқа шейін бұл проблеманы компютерларға шешу мүмкінсіз болатын. РНЖ-лар реттелген мәліметті еске сақтап, бұл проблеманы шеше алады. Компютер Ғылым тұрғысынан, РНЖ-лар кез келген Тьюринг Толықтығын қанағаттандыратын функцияны үйрене алады. Алан Тьюринг тірі кезінде РНЖ ны көрсе,  қуанғанынан ақылдан адасуы мүмкін еді.

РНЖ-ның көрнекі сипаты төменде берілген:

Courtesy of Stanford cs224d

РНЖ-ы жақсырақ түсіну үшін, біз оны қысқаша формуламен сипаттайық:

    \[h_t = Wf(h_{t-1}) + W^{(hx)}x_t\]

    \[y = W^{(S)}f(h_t)\]

Бул жерде:

  • x_1,...,x_t,x_{t+1},...,x_T  біздің текст. Tсөздердің саны. Мысалға: “Менің Атым Қожа”. T = 3 өйткені текст үш сөзден тұрады. x_1 = “Менің” x_2 = “Атым” x_3 = “Қожа”
  • h_t = \sigma(W^{hh}h_{t-1} + W^{hx} x_t)  деген t уақытындағы жасырын қабаттың сыртқы қабатқа қатынасы
  • x_t \in \mathbb{R}^d: t уақытындағы сөз
  • W^{hx} \in \mathbb{R}^{D_h \times d}: мәлемет x_t – тың параметері. Есіңізде болса,  перцептронды біз бұны \theta деп көрсеттік
  • W^{hh} \in \mathbb{R}^{D_h \times D_h}: өткендегі сөздердің параметері. РНЖ жадының үлкен бөлігі.
  • h_{t-1} \in \mathbb{R}^{D_h}: t-1 уақыттың сызықсыз функцияның нәтижесі
  • \sigma(...): Алдындағыдай, сызықсыз сигмойд.

РНЖ оптимизация жағынан қиындау болсада, ол басқа желілердей Арқалау алгаритім арқылы үйренеді. Градиент қабаттан қабатқа ға арқаланбайды, уақыт арқылы да арқаланады.

Бұл жобаның бүкіл кодын GitHub рипазиториямда таба аласыздар:  https://github.com/abaybektursun/tf-collection/tree/master/rnn/ 

Әзірше рипазитория жеке, жақында арада public access беріледі.

Назар аудрғаныңызға рахмет!

Cілтеме

  • CS224d: Deep Learning for Natural Language Processing, link
  • Goodfellow-et-al-2016, Deep Learning, MIT Press, link

Абай Бектұрсын Developer/Statistician @abaybektursun

Болашақ жобаларымды көргіңіз келсе, мені әлеуметтік желілерде таба аласыз:

 


 

How to use Google’s pre-trained Language Model

Leave a Reply

Your email address will not be published / Required fields are marked *