{"id":365259,"date":"2024-05-21T02:34:21","date_gmt":"2024-05-21T02:34:21","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=365259"},"modified":"-0001-11-30T00:00:00","modified_gmt":"2024-05-21T02:34:21","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=365259","title":{"rendered":"<span>\u0421 \u043d\u043e\u0432\u044b\u043c \u0433\u043e\u0434\u043e\u043c: GPT \u0432 500 \u0441\u0442\u0440\u043e\u043a\u0430\u0445 \u043d\u0430 SQL<\/span>"},"content":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p>\u0412 \u043c\u0438\u043d\u0443\u0432\u0448\u0435\u043c \u0433\u043e\u0434\u0443 \u0432\u0441\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0438 \u0433\u043e\u0432\u043e\u0440\u0438\u043b\u0438 \u043e\u0431 \u0418\u0418 \u0438 \u043e \u0442\u043e\u043c, \u043a\u0430\u043a \u043e\u043d \u043c\u043e\u0436\u0435\u0442 \u0432\u0441\u0451 \u0437\u0430 \u0432\u0430\u0441 \u0441\u0434\u0435\u043b\u0430\u0442\u044c.<\/p>\n<p>\u041c\u043d\u0435 \u043d\u0440\u0430\u0432\u0438\u0442\u0441\u044f, \u043a\u043e\u0433\u0434\u0430 \u043a\u0442\u043e-\u0442\u043e \u0438\u043b\u0438 \u0447\u0442\u043e-\u0442\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0437\u0430 \u043c\u0435\u043d\u044f. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0440\u0435\u0448\u0438\u043b: \u043f\u043e\u043f\u0440\u043e\u0448\u0443-\u043a\u0430 ChatGPT \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0437\u0430 \u043c\u0435\u043d\u044f \u043d\u043e\u0432\u043e\u0433\u043e\u0434\u043d\u0438\u0439 \u043f\u043e\u0441\u0442:<\/p>\n<p>&#171;\u042d\u0439, ChatGPT. \u0410 \u0442\u044b \u043c\u043e\u0436\u0435\u0448\u044c \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0431\u043e\u043b\u044c\u0448\u0443\u044e \u044f\u0437\u044b\u043a\u043e\u0432\u0443\u044e \u043c\u043e\u0434\u0435\u043b\u044c \u043d\u0430 SQL?&#187;<br \/> &#171;\u041d\u0435\u0442, SQL \u043d\u0435 \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u0442 \u0434\u043b\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u044f\u0437\u044b\u043a\u043e\u0432\u044b\u0445 \u043c\u043e\u0434\u0435\u043b\u0435\u0439. \u042f\u0437\u044b\u043a SQL \u043f\u0440\u0435\u0434\u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d \u0434\u043b\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u043a \u0434\u0430\u043d\u043d\u044b\u043c, \u0445\u0440\u0430\u043d\u044f\u0449\u0438\u043c\u0441\u044f \u0432 \u0420\u0421\u0423\u0411\u0414 \u0438 \u0434\u043b\u044f \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u044d\u0442\u0438\u043c\u0438 \u0437\u0430\u043f\u0440\u043e\u0441\u0430\u043c\u0438. \u0414\u043b\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u044f\u0437\u044b\u043a\u043e\u0432\u043e\u0439 \u043c\u043e\u0434\u0435\u043b\u0438 \u0442\u0440\u0435\u0431\u0443\u044e\u0442\u0441\u044f \u0441\u043b\u043e\u0436\u043d\u044b\u0435 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u044b, \u043e\u0431\u0448\u0438\u0440\u043d\u044b\u0435 \u0434\u0430\u0442\u0430\u0441\u0435\u0442\u044b, \u0430 \u0437\u0430\u0447\u0430\u0441\u0442\u0443\u044e \u2013 \u0438 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u0438 \u0434\u043b\u044f \u0433\u043b\u0443\u0431\u043e\u043a\u043e\u0433\u043e \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f. SQL \u0432\u0441\u0435\u043c\u0438 \u044d\u0442\u0438\u043c\u0438 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044f\u043c\u0438 \u043d\u0435 \u043e\u0431\u043b\u0430\u0434\u0430\u0435\u0442.&#187;<\/p>\n<p>\u0427\u0442\u043e \u0436, \u043b\u0438\u0448\u043d\u0438\u0439 \u0440\u0430\u0437 \u0443\u0431\u0435\u0436\u0434\u0430\u0435\u0448\u044c\u0441\u044f, \u0447\u0442\u043e, \u0435\u0441\u043b\u0438 \u0445\u043e\u0447\u0435\u0448\u044c \u0447\u0442\u043e-\u0442\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0445\u043e\u0440\u043e\u0448\u043e \u2013 \u0441\u0434\u0435\u043b\u0430\u0439 \u044d\u0442\u043e \u0441\u0430\u043c. <\/p>\n<p>\u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0436\u0435 \u0432\u043e\u043e\u0434\u0443\u0448\u0435\u0432\u0438\u043c\u0441\u044f \u044d\u0442\u0438\u043c \u043e\u043f\u0442\u0438\u043c\u0438\u0441\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u043c \u043f\u043b\u0430\u043d\u043e\u043c \u0438 \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u043c \u0431\u043e\u043b\u044c\u0448\u0443\u044e \u044f\u0437\u044b\u043a\u043e\u0432\u0443\u044e \u043c\u043e\u0434\u0435\u043b\u044c \u043d\u0430 \u044f\u0437\u044b\u043a\u0435 SQL.<\/p>\n<h2>\u0422\u0435\u043e\u0440\u0438\u044f <\/h2>\n<p>\u0413\u043e\u0442\u043e\u0432\u044f \u044d\u0442\u043e\u0442 \u043f\u043e\u0441\u0442, \u044f \u0432\u0434\u043e\u0445\u043d\u043e\u0432\u043b\u044f\u043b\u0441\u044f \u0447\u0443\u0434\u0435\u0441\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0451\u0439 <a href=\"https:\/\/jaykmody.com\/blog\/gpt-from-scratch\/\" rel=\"noopener noreferrer nofollow\">GPT in 60 Lines of NumPy<\/a>, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043d\u0430\u043f\u0438\u0441\u0430\u043b \u0414\u0436\u0435\u0439 \u041c\u043e\u0434\u0438. \u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u043e\u0431\u044a\u044f\u0441\u043d\u0435\u043d\u043e \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0435\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u043c\u043e\u0434\u0435\u043b\u0438 GPT, \u043f\u0440\u0438\u0447\u0451\u043c, \u044d\u0442\u043e \u0441\u0434\u0435\u043b\u0430\u043d\u043e \u0433\u043e\u0440\u0430\u0437\u0434\u043e \u043b\u0443\u0447\u0448\u0435, \u0447\u0435\u043c \u043c\u043e\u0433\u043b\u043e \u0431\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c\u0441\u044f \u0443 \u043c\u0435\u043d\u044f. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0434\u043b\u044f \u043f\u043e\u0440\u044f\u0434\u043a\u0430 \u0432\u043a\u0440\u0430\u0442\u0446\u0435 \u043d\u0430\u043f\u043e\u043c\u043d\u044e \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442.<\/p>\n<p><strong>\u0427\u0442\u043e \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u043e\u0431\u043e\u0439 \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u0438\u0432\u043d\u0430\u044f \u0431\u043e\u043b\u044c\u0448\u0430\u044f \u044f\u0437\u044b\u043a\u043e\u0432\u0430\u044f \u043c\u043e\u0434\u0435\u043b\u044c \u0441 \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0442\u043e\u0447\u043a\u0438 \u0437\u0440\u0435\u043d\u0438\u044f?<\/strong><\/p>\n<p>\u0413\u0435\u043d\u0435\u0440\u0430\u0442\u0438\u0432\u043d\u0430\u044f LLM \u2013 \u044d\u0442\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u044f. \u041e\u043d\u0430 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u043d\u0430 \u0432\u0432\u043e\u0434 \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u0443\u044e \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432 (\u0432 \u0442\u0435\u0440\u043c\u0438\u043d\u043e\u043b\u043e\u0433\u0438\u0438 \u0418\u0418 \u043e\u043d\u0430 \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u00ab\u043f\u0440\u043e\u043c\u043f\u0442\u00bb) \u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043c\u0430\u0441\u0441\u0438\u0432 \u0441\u0442\u0440\u043e\u043a \u0438 \u0447\u0438\u0441\u0435\u043b. \u0412\u043e\u0442 \u043a\u0430\u043a\u043e\u0432\u0430 \u0441\u0438\u0433\u043d\u0430\u0442\u0443\u0440\u0430 \u044d\u0442\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438:<\/p>\n<pre><code>llm(prompt: str) -> list[tuple[str, float]]<\/code><\/pre>\n<p>\u042d\u0442\u043e \u0434\u0435\u0442\u0435\u0440\u043c\u0438\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f. \u0423 \u043d\u0435\u0451 \u043f\u043e\u0434 \u043a\u0430\u043f\u043e\u0442\u043e\u043c \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u0441\u0435\u0440\u044c\u0451\u0437\u043d\u0430\u044f \u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u043a\u0430, \u043d\u043e \u0432\u0441\u044f \u044d\u0442\u0430 \u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u043a\u0430 \u0436\u0451\u0441\u0442\u043a\u043e \u0432\u0448\u0438\u0442\u0430 \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0443. \u0415\u0441\u043b\u0438 \u0432\u044b \u0431\u0443\u0434\u0435\u0442\u0435 \u043c\u043d\u043e\u0433\u043e\u043a\u0440\u0430\u0442\u043d\u043e \u0441\u043e\u043e\u0431\u0449\u0430\u0442\u044c \u044d\u0442\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043e\u0434\u0438\u043d \u0438 \u0442\u043e\u0442 \u0436\u0435 \u0432\u0432\u043e\u0434, \u0442\u043e \u0432\u0441\u044f\u043a\u0438\u0439 \u0440\u0430\u0437 \u0431\u0443\u0434\u0435\u0442\u0435 \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u044c \u043e\u0442 \u043d\u0435\u0451 \u043e\u0434\u0438\u043d \u0438 \u0442\u043e\u0442 \u0436\u0435 \u0432\u044b\u0432\u043e\u0434. <\/p>\n<p>\u0422\u0435\u043c, \u043a\u043e\u043c\u0443 \u0434\u043e\u0432\u043e\u0434\u0438\u043b\u043e\u0441\u044c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f ChatGPT \u0438 \u043f\u043e\u0434\u043e\u0431\u043d\u044b\u043c\u0438 \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u0430\u043c\u0438, \u044d\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c\u0441\u044f \u0443\u0434\u0438\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u043c, \u0432\u0435\u0434\u044c \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u043c\u043e\u0436\u0435\u0442 \u0434\u0430\u0432\u0430\u0442\u044c \u0440\u0430\u0437\u043d\u044b\u0435 \u043e\u0442\u0432\u0435\u0442\u044b \u043d\u0430 \u043e\u0434\u0438\u043d \u0438 \u0442\u043e\u0442 \u0436\u0435 \u0432\u043e\u043f\u0440\u043e\u0441. \u0414\u0430, \u0432\u0441\u0451 \u0432\u0435\u0440\u043d\u043e. \u0427\u0443\u0442\u044c \u043d\u0438\u0436\u0435 \u043e\u0431\u044a\u044f\u0441\u043d\u044e, \u043a\u0430\u043a \u044d\u0442\u043e \u0443\u0441\u0442\u0440\u043e\u0435\u043d\u043e.<\/p>\n<p><strong>\u0427\u0442\u043e \u0437\u0430 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u044d\u0442\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u044f?<\/strong><\/p>\n<p>\u041d\u0435\u0447\u0442\u043e \u043f\u043e\u0434\u043e\u0431\u043d\u043e\u0435:<\/p>\n<pre><code class=\"python\">llm(\"I wish you a happy New\")   0       (' Year', 0.967553) 1       (' Years', 0.018199688) 2       (' year', 0.003573329) 3       (' York', 0.003114716) 4       (' New', 0.0009022804) \u2026 50252   (' carbohyd', 2.3950911e-15) 50253   (' volunte', 2.2590102e-15) 50254   ('pmwiki', 1.369229e-15) 50255   (' proport', 1.1198108e-15) 50256   (' cumbers', 7.568147e-17)<\/code><\/pre>\n<p>\u041e\u043d\u0430 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043c\u0430\u0441\u0441\u0438\u0432 \u043a\u043e\u0440\u0442\u0435\u0436\u0435\u0439. \u041a\u0430\u0436\u0434\u044b\u0439 \u043a\u043e\u0440\u0442\u0435\u0436 \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0438\u0437 \u0441\u043b\u043e\u0432\u0430 (\u0441\u043a\u043e\u0440\u0435\u0435, \u0441\u0442\u0440\u043e\u043a\u0438) \u0438 \u0447\u0438\u0441\u043b\u0430. \u0427\u0438\u0441\u043b\u043e \u2014 \u044d\u0442\u043e \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e\u0441\u0442\u044c, \u0441 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0434\u0430\u043d\u043d\u043e\u0435 \u0441\u043b\u043e\u0432\u043e \u043c\u043e\u0436\u0435\u0442 \u043e\u043a\u0430\u0437\u0430\u0442\u044c\u0441\u044f \u043f\u0440\u043e\u043c\u043f\u0442\u0435 \u043d\u0430 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u043f\u043e\u0437\u0438\u0446\u0438\u0438. \u041c\u043e\u0434\u0435\u043b\u044c \u00ab\u0434\u0443\u043c\u0430\u0435\u0442\u00bb, \u0447\u0442\u043e \u0437\u0430 \u0444\u0440\u0430\u0437\u043e\u0439 \u00abI wish you a happy New\u2026\u00bb (\u00ab\u041f\u043e\u0437\u0434\u0440\u0430\u0432\u043b\u044f\u044e \u0442\u0435\u0431\u044f \u0441 \u041d\u043e\u0432\u044b\u043c\u2026\u00bb) \u0441 \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e\u0441\u0442\u044c\u044e 96,7% \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u0441\u0442\u0440\u043e\u043a\u0430 \u00abYear\u00bb (\u2026\u0433\u043e\u0434\u043e\u043c) \u2013 \u0438 \u0442\u0430\u043a \u0434\u0430\u043b\u0435\u0435.\u00a0 <\/p>\n<p>\u0421\u043b\u043e\u0432\u043e \u00ab\u0434\u0443\u043c\u0430\u0435\u0442\u00bb \u0432\u044b\u0448\u0435 \u043f\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043e \u0432 \u043a\u0430\u0432\u044b\u0447\u043a\u0430\u0445, \u0442\u0430\u043a \u043a\u0430\u043a, \u0435\u0441\u0442\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u043c\u043e\u0434\u0435\u043b\u044c \u043d\u0438 \u043e \u0447\u0451\u043c \u043d\u0435 \u0434\u0443\u043c\u0430\u0435\u0442. \u041e\u043d\u0430 \u043c\u0435\u0445\u0430\u043d\u0438\u0447\u0435\u0441\u043a\u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043c\u0430\u0441\u0441\u0438\u0432\u044b \u0441\u043b\u043e\u0432 \u0438 \u0447\u0438\u0441\u0435\u043b \u0432 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0438 \u0441 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0436\u0451\u0441\u0442\u043a\u043e \u043f\u0440\u043e\u043f\u0438\u0441\u0430\u043d\u043d\u043e\u0439 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0435\u0439 \u043b\u043e\u0433\u0438\u043a\u043e\u0439.<\/p>\n<p><strong>\u0415\u0441\u043b\u0438 \u044d\u0442\u0430 \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0442\u0430\u043a\u0430\u044f \u0442\u043e\u043f\u043e\u0440\u043d\u0430\u044f \u0438 \u0434\u0435\u0442\u0435\u0440\u043c\u0438\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u0430\u044f, \u043a\u0430\u043a \u0436\u0435 \u0435\u0439 \u0443\u0434\u0430\u0451\u0442\u0441\u044f \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0440\u0430\u0437\u043d\u044b\u0435 \u0442\u0435\u043a\u0441\u0442\u044b?<\/strong><\/p>\n<p>\u0411\u043e\u043b\u044c\u0448\u0438\u0435 \u044f\u0437\u044b\u043a\u043e\u0432\u044b\u0435 \u043c\u043e\u0434\u0435\u043b\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u0432 \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u044b\u0445 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f\u0445 (\u0447\u0430\u0442\u0431\u043e\u0442\u044b, \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440\u044b \u043a\u043e\u043d\u0442\u0435\u043d\u0442\u0430, \u043a\u043e\u0434\u0438\u043d\u0433-\u0430\u0441\u0441\u0438\u0441\u0442\u0435\u043d\u0442\u044b, \u0442.\u0434.). \u042d\u0442\u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0440\u0430\u0437 \u0437\u0430 \u0440\u0430\u0437\u043e\u043c \u0432\u044b\u0437\u044b\u0432\u0430\u044e\u0442 \u043c\u043e\u0434\u0435\u043b\u044c \u0438 \u0432\u044b\u0431\u0438\u0440\u0430\u044e\u0442 \u043f\u043e\u0434\u0441\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u0435 \u0435\u044e \u0441\u043b\u043e\u0432\u043e (\u0441 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0441\u0442\u0435\u043f\u0435\u043d\u044c\u044e \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u043e\u0441\u0442\u0438). \u041f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0435 \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d\u043d\u043e\u0435 \u0441\u043b\u043e\u0432\u043e \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043a \u043f\u0440\u043e\u043c\u043f\u0442\u0443, \u0438 \u043c\u043e\u0434\u0435\u043b\u044c \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0441\u043d\u043e\u0432\u0430. \u042d\u0442\u043e\u0442 \u0446\u0438\u043a\u043b \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0435\u0442\u0441\u044f \u0434\u043e \u0442\u0435\u0445 \u043f\u043e\u0440, \u043f\u043e\u043a\u0430 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043e \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0441\u043b\u043e\u0432.<\/p>\n<p>\u041d\u0430\u043a\u043e\u043f\u043b\u0435\u043d\u043d\u0430\u044f \u0442\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0441\u043b\u043e\u0432 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043a\u0430\u043a \u0442\u0435\u043a\u0441\u0442 \u043d\u0430 \u0435\u0441\u0442\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u043c \u044f\u0437\u044b\u043a\u0435, \u0441 \u043f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u043e\u0439 \u0433\u0440\u0430\u043c\u043c\u0430\u0442\u0438\u043a\u043e\u0439, \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441\u043e\u043c \u0438 \u0434\u0430\u0436\u0435 \u043c\u043d\u0438\u043c\u044b\u043c\u0438 \u043f\u0440\u0438\u0437\u043d\u0430\u043a\u0430\u043c\u0438 \u0438\u043d\u0442\u0435\u043b\u043b\u0435\u043a\u0442\u0430 \u0438 \u043b\u043e\u0433\u0438\u043a\u0438. \u0412 \u0434\u0430\u043d\u043d\u043e\u043c \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u0438 \u044f\u0437\u044b\u043a\u043e\u0432\u044b\u0435 \u043c\u043e\u0434\u0435\u043b\u0438 \u043f\u043e\u0434\u043e\u0431\u043d\u044b <a href=\"https:\/\/en.wikipedia.org\/wiki\/Discrete-time_Markov_chain\" rel=\"noopener noreferrer nofollow\">\u043c\u0430\u0440\u043a\u043e\u0432\u0441\u043a\u0438\u043c \u0446\u0435\u043f\u044f\u043c<\/a>, \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0438\u043c \u043f\u043e \u0442\u0430\u043a\u043e\u043c\u0443 \u0436\u0435 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0443.<\/p>\n<p>\u041d\u0430 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0435\u043c \u0443\u0440\u043e\u0432\u043d\u0435 \u0431\u043e\u043b\u044c\u0448\u0430\u044f \u044f\u0437\u044b\u043a\u043e\u0432\u0430\u044f \u043c\u043e\u0434\u0435\u043b\u044c \u0443\u0441\u0442\u0440\u043e\u0435\u043d\u0430 \u0442\u0430\u043a, \u0447\u0442\u043e \u043a\u0430\u0436\u0434\u043e\u0435 \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435 \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0435\u043c\u043e\u0435 \u0441\u043b\u043e\u0432\u043e \u0435\u0441\u0442\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u043b\u043e \u043f\u0440\u043e\u043c\u043f\u0442, \u0441 \u0443\u0447\u0451\u0442\u043e\u043c \u0438\u043c\u0435\u044e\u0449\u0435\u0439\u0441\u044f \u0433\u0440\u0430\u043c\u043c\u0430\u0442\u0438\u043a\u0438, \u0441\u0435\u043c\u0430\u043d\u0442\u0438\u043a\u0438 \u0438 \u0442\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u0438. \u041e\u0441\u043d\u0430\u0441\u0442\u0438\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u0442\u0430\u043a\u043e\u0439 \u043b\u043e\u0433\u0438\u043a\u043e\u0439 \u0441\u0442\u0430\u043b\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0431\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u0446\u0435\u043b\u043e\u0439 \u0441\u0435\u0440\u0438\u0438 \u043d\u0430\u0443\u0447\u043d\u044b\u0445 \u043f\u0440\u043e\u0440\u044b\u0432\u043e\u0432 (\u0438 \u043a\u0430\u0442\u043e\u0440\u0436\u043d\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442\u043e\u0432). \u0423\u0434\u0430\u043b\u043e\u0441\u044c \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0446\u0435\u043b\u043e\u0435 \u0441\u0435\u043c\u0435\u0439\u0441\u0442\u0432\u043e \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u043e\u0432 \u043f\u043e\u0434 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435\u043c GPT \u0438\u043b\u0438 \u00ab\u0433\u0435\u043d\u0435\u0440\u0430\u0442\u0438\u0432\u043d\u044b\u0435 \u043f\u0440\u0435\u0434\u043e\u0431\u0443\u0447\u0435\u043d\u043d\u044b\u0435 \u0442\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0435\u0440\u044b\u00bb.<\/p>\n<h2>\u0427\u0442\u043e \u0442\u0430\u043a\u043e\u0435 &#171;\u0433\u0435\u043d\u0435\u0440\u0430\u0442\u0438\u0432\u043d\u044b\u0439 \u043f\u0440\u0435\u0434\u043e\u0431\u0443\u0447\u0435\u043d\u043d\u044b\u0439 \u0442\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0435\u0440&#187;<\/h2>\n<p>\u00ab\u0413\u0435\u043d\u0435\u0440\u0430\u0442\u0438\u0432\u043d\u044b\u0439\u00bb \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442, \u0447\u0442\u043e \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442 \u0442\u0435\u043a\u0441\u0442 (\u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0432\u043d\u043e \u0434\u043e\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u044f \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0435\u043d\u0438\u044f \u043a \u043f\u0440\u043e\u043c\u043f\u0442\u0443 \u043a\u0430\u043a \u0431\u044b\u043b\u043e \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u043e \u0432\u044b\u0448\u0435).<\/p>\n<p>\u00ab\u0422\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0435\u0440\u00bb \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442, \u0447\u0442\u043e \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0439 \u0442\u0438\u043f \u043d\u0435\u0439\u0440\u043e\u043d\u043d\u043e\u0439 \u0441\u0435\u0442\u0438. \u0421\u0435\u0442\u044c-\u0442\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0435\u0440 \u0431\u044b\u043b\u0430 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u0430 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0435\u0439 Google \u0438 \u043e\u043f\u0438\u0441\u0430\u043d\u0430 \u0432\u00a0<a href=\"https:\/\/arxiv.org\/pdf\/1706.03762.pdf\" rel=\"noopener noreferrer nofollow\">\u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435<\/a>.<\/p>\n<p>\u0422\u0435\u0440\u043c\u0438\u043d \u00ab\u043f\u0440\u0435\u0434\u043e\u0431\u0443\u0447\u0435\u043d\u043d\u044b\u0439\u00bb \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0433\u043e \u0438\u0441\u0442\u043e\u0440\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u044d\u043a\u0441\u043a\u0443\u0440\u0441\u0430. \u0418\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e \u0441\u0447\u0438\u0442\u0430\u043b\u043e\u0441\u044c, \u0447\u0442\u043e \u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0441\u0442\u044c \u043c\u043e\u0434\u0435\u043b\u0438 \u0434\u043e\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0442\u044c \u0442\u0435\u043a\u0441\u0442 \u2013 \u044d\u0442\u043e \u0432\u0441\u0435\u0433\u043e \u043b\u0438\u0448\u044c \u043f\u0440\u0435\u0434\u043f\u043e\u0441\u044b\u043b\u043a\u0430 \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0431\u043e\u043b\u0435\u0435 \u0433\u043b\u0443\u0431\u043e\u043a\u0438\u0445 \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0432\u044b\u0432\u043e\u0434\u043e\u0432 \u0432 \u0440\u0430\u043c\u043a\u0430\u0445 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0437\u0430\u0434\u0430\u0447 (\u043d\u0443\u0436\u043d\u043e \u0443\u043b\u0430\u0432\u043b\u0438\u0432\u0430\u0442\u044c \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u0441\u0432\u044f\u0437\u044c \u043c\u0435\u0436\u0434\u0443 \u0444\u0440\u0430\u0437\u0430\u043c\u0438), \u043a\u043b\u0430\u0441\u0441\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0443\u0433\u0430\u0434\u0430\u0442\u044c, \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0437\u0432\u0451\u0437\u0434 \u0443 \u043e\u0442\u0435\u043b\u044f, \u043f\u0440\u043e\u0430\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0432 \u043e\u0442\u0437\u044b\u0432\u044b \u043f\u043e\u0441\u0442\u043e\u044f\u043b\u044c\u0446\u0435\u0432), \u043c\u0430\u0448\u0438\u043d\u043d\u043e\u0433\u043e \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0430 \u0438 \u0442.\u0434. \u0421\u0447\u0438\u0442\u0430\u043b\u043e\u0441\u044c, \u0447\u0442\u043e \u0434\u0432\u0435 \u044d\u0442\u0438 \u0447\u0430\u0441\u0442\u0438 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043e\u0431\u0443\u0447\u0430\u0442\u044c \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e, \u0438 \u044f\u0437\u044b\u043a\u043e\u0432\u0430\u044f \u0447\u0430\u0441\u0442\u044c \u043f\u043e\u0437\u0438\u0446\u0438\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043b\u0430\u0441\u044c \u043a\u0430\u043a <em>\u043f\u0440\u0435\u0434<\/em>\u043e\u0431\u0443\u0447\u0435\u043d\u0438\u0435, \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0430 \u043a \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c\u0443 \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044e \u0440\u0435\u0448\u0430\u0442\u044c \u0440\u0435\u0430\u043b\u044c\u043d\u0443\u044e \u0437\u0430\u0434\u0430\u0447\u0443.<\/p>\n<p>\u041a\u0430\u043a \u0441\u0444\u043e\u0440\u043c\u0443\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u043e \u0432 \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u043f\u043e GPT:<\/p>\n<p>\u041f\u0440\u043e\u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043e, \u0447\u0442\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0434\u043e\u0431\u0438\u0442\u044c\u0441\u044f \u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u0443\u0441\u043f\u0435\u0445\u043e\u0432 \u043f\u0440\u0438 \u0440\u0435\u0448\u0435\u043d\u0438\u0438 \u0442\u0430\u043a\u0438\u0445 \u0437\u0430\u0434\u0430\u0447 \u043f\u0443\u0442\u0451\u043c \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u0438\u0432\u043d\u043e\u0433\u043e \u043f\u0440\u0435\u0434\u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f \u044f\u0437\u044b\u043a\u043e\u0432\u043e\u0439 \u043c\u043e\u0434\u0435\u043b\u0438 \u043d\u0430 \u0440\u0430\u0437\u043d\u043e\u0440\u043e\u0434\u043d\u043e\u043c \u043a\u043e\u0440\u043f\u0443\u0441\u0435 \u043d\u0435\u0440\u0430\u0437\u043c\u0435\u0447\u0435\u043d\u043d\u043e\u0433\u043e \u0442\u0435\u043a\u0441\u0442\u0430 \u0441 \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u0442\u043e\u043d\u043a\u043e\u0439 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u043e\u0439 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u0434\u043b\u044f \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u0441\u043b\u043e\u0451\u0432 \u0441\u0435\u0442\u0438 (discriminative fine-tuning) \u0432 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0435 \u043a\u0430\u0436\u0434\u043e\u0439 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0438.<\/p>\n<p>\u0422\u0430\u043a\u0438\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u043b\u0438\u0441\u044c \u0434\u043e \u0442\u0435\u0445 \u043f\u043e\u0440, \u043f\u043e\u043a\u0430 \u043d\u0435 \u0441\u0442\u0430\u043b\u043e \u043f\u043e\u043d\u044f\u0442\u043d\u043e, \u0447\u0442\u043e \u0434\u043b\u044f \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u043c\u043e\u0434\u0435\u043b\u0438 \u0432\u0442\u043e\u0440\u043e\u0439 \u0448\u0430\u0433 \u0437\u0430\u0447\u0430\u0441\u0442\u0443\u044e \u0438\u0437\u043b\u0438\u0448\u0435\u043d. \u041c\u043e\u0434\u0435\u043b\u044c-\u0442\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0435\u0440, \u043e\u0431\u0443\u0447\u0435\u043d\u043d\u0430\u044f \u0438\u0441\u043a\u043b\u044e\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u0442\u0435\u043a\u0441\u0442\u043e\u0432, \u043e\u043a\u0430\u0437\u0430\u043b\u0430\u0441\u044c \u0432 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0438 \u0431\u0435\u0437 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f \u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u044c \u0447\u0435\u043b\u043e\u0432\u0435\u0447\u0435\u0441\u043a\u0438\u043c \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f\u043c, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0438\u043c\u0441\u044f \u0432 \u044d\u0442\u0438\u0445 \u0442\u0435\u043a\u0441\u0442\u0430\u0445. \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u043d\u0435 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043b\u043e\u0441\u044c \u043d\u0438\u043a\u0430\u043a\u043e\u0439 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u0442\u043e\u043d\u043a\u043e\u0439 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438. <\/p>\n<p>\u0418\u0442\u0430\u043a, \u0441 \u044d\u0442\u0438\u043c\u0438 \u0432\u043e\u043f\u0440\u043e\u0441\u0430\u043c\u0438 \u043c\u044b \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u043b\u0438\u0441\u044c. \u0422\u0435\u043f\u0435\u0440\u044c \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0441\u043e\u0441\u0440\u0435\u0434\u043e\u0442\u043e\u0447\u0438\u043c\u0441\u044f \u043d\u0430 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438.<\/p>\n<p><strong>\u0413\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044f<\/strong><\/p>\n<p>\u0412\u043e\u0442 \u0447\u0442\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442, \u0435\u0441\u043b\u0438 \u043c\u044b \u043f\u044b\u0442\u0430\u0435\u043c\u0441\u044f \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0442\u0435\u043a\u0441\u0442 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u043f\u0440\u043e\u043c\u043f\u0442\u0430 \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 GPT2:<\/p>\n<pre><code class=\"python\">def generate(prompt: str) -> str:   # \u041f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u0443\u0435\u0442 \u0441\u0442\u0440\u043e\u043a\u0443 \u0432 \u0441\u043f\u0438\u0441\u043e\u043a \u0442\u043e\u043a\u0435\u043d\u043e\u0432.   tokens = tokenize(prompt) # tokenize(prompt: str) -> list[int]     while True:       # \u0412\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c.     # \u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e\u0441\u0442\u043d\u044b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0434\u043b\u044f \u0442\u043e\u043a\u0435\u043d\u043e\u0432: \u0441\u043f\u0438\u0441\u043e\u043a \u0438\u0437 50257 \u0447\u0438\u0441\u0435\u043b \u0441 \u043f\u043b\u0430\u0432\u0430\u044e\u0449\u0435\u0439 \u0442\u043e\u0447\u043a\u043e\u0439, \u0432 \u0441\u0443\u043c\u043c\u0435 \u0434\u0430\u044e\u0449\u0438\u0445 1.     candidates = gpt2(tokens) # gpt2(tokens: list[int]) -> list[float]       # \u0412\u044b\u0431\u0438\u0440\u0430\u0435\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u0442\u043e\u043a\u0435\u043d \u0438\u0437 \u0441\u043f\u0438\u0441\u043a\u0430 \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u0445      next_token = select_next_token(candidates)     # select_next_token(candidates: list[float]) -> int       # \u041f\u0440\u0438\u043a\u0440\u0435\u043f\u043b\u044f\u0435\u0442 \u0435\u0433\u043e \u043a \u0441\u043f\u0438\u0441\u043a\u0443 \u0442\u043e\u043a\u0435\u043d\u043e\u0432     tokens.append(next_token)       # \u0420\u0435\u0448\u0430\u0435\u043c, \u0445\u043e\u0442\u0438\u043c \u043b\u0438 \u043c\u044b \u043f\u0440\u0435\u043a\u0440\u0430\u0442\u0438\u0442\u044c \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044e.     # \u0417\u0434\u0435\u0441\u044c \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0441\u0447\u0451\u0442\u0447\u0438\u043a \u0442\u043e\u043a\u0435\u043d\u043e\u0432, \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u0430, \u0441\u0442\u043e\u043f-\u0441\u043b\u043e\u0432\u043e \u0438\u043b\u0438 \u0447\u0442\u043e-\u0442\u043e \u0435\u0449\u0451.     if should_stop_generating():       break     # \u041f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u0443\u0435\u0442 \u0441\u043f\u0438\u0441\u043e\u043a \u0442\u043e\u043a\u0435\u043d\u043e\u0432 \u0432 \u0441\u0442\u0440\u043e\u043a\u0443   completion = detokenize(tokens) # detokenize(tokens: list[int]) -> str   return completion<\/code><\/pre>\n<p>\u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u043c \u0432\u0441\u0435 \u044d\u0442\u0438 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u043e\u0434\u0438\u043d \u0437\u0430 \u0434\u0440\u0443\u0433\u0438\u043c \u043d\u0430 \u044f\u0437\u044b\u043a\u0435 SQL.<\/p>\n<h2>\u0422\u043e\u043a\u0435\u043d\u0438\u0437\u0430\u0442\u043e\u0440 <\/h2>\n<p>\u041f\u0440\u0435\u0436\u0434\u0435, \u0447\u0435\u043c \u0442\u0435\u043a\u0441\u0442 \u043c\u043e\u0436\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u0441\u043a\u043e\u0440\u043c\u0438\u0442\u044c \u043d\u0435\u0439\u0440\u043e\u043d\u043a\u0435, \u0435\u0433\u043e \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u0442\u044c \u0432 \u0441\u043f\u0438\u0441\u043e\u043a \u0447\u0438\u0441\u0435\u043b. \u041a\u043e\u043d\u0435\u0447\u043d\u043e, \u043d\u0430\u0441 \u044d\u0442\u043e \u043d\u0435 \u0443\u0434\u0438\u0432\u043b\u044f\u0435\u0442: \u0438\u043c\u0435\u043d\u043d\u043e \u0442\u0430\u043a\u0438\u0435 \u0437\u0430\u0434\u0430\u0447\u0438 \u0440\u0435\u0448\u0430\u044e\u0442\u0441\u044f \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u044b\u0445 \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u043e\u043a \u0432\u0440\u043e\u0434\u0435 Unicode. \u041d\u043e \u043e\u0431\u044b\u0447\u043d\u044b\u0439 Unicode \u043d\u0435 \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u0445\u043e\u0440\u043e\u0448\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0441 \u043d\u0435\u0439\u0440\u043e\u043d\u043d\u044b\u043c\u0438 \u0441\u0435\u0442\u044f\u043c\u0438.<\/p>\n<p>\u0412 \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0438, \u043d\u0435\u0439\u0440\u043e\u043d\u043d\u044b\u0435 \u0441\u0435\u0442\u0438 \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u044b \u043d\u0430 \u043e\u0431\u0448\u0438\u0440\u043d\u043e\u043c \u043f\u0435\u0440\u0435\u043c\u043d\u043e\u0436\u0435\u043d\u0438\u0438 \u043c\u0430\u0442\u0440\u0438\u0446, \u0438 \u0432\u0441\u044f \u043f\u0440\u043e\u0433\u043d\u043e\u0441\u0442\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u0441\u0438\u043b\u0430 \u043d\u0435\u0439\u0440\u043e\u043d\u043d\u044b\u0445 \u0441\u0435\u0442\u0435\u0439 \u0437\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0430 \u0432 \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442\u0430\u0445 \u044d\u0442\u0438\u0445 \u043c\u0430\u0442\u0440\u0438\u0446. \u041d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0438\u0437 \u0442\u0430\u043a\u0438\u0445 \u043c\u0430\u0442\u0440\u0438\u0446 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442 \u043f\u043e \u0441\u0442\u0440\u043e\u043a\u0435 \u043d\u0430 \u043a\u0430\u0436\u0434\u043e\u0435 \u0438\u0437 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u0432 \u00ab\u0430\u043b\u0444\u0430\u0432\u0438\u0442\u0435\u00bb, \u0432 \u0434\u0440\u0443\u0433\u0438\u0445 \u043f\u0440\u0435\u0434\u0443\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u043e \u043f\u043e \u0441\u0442\u0440\u043e\u043a\u0435 \u043d\u0430 \u00ab\u0441\u0438\u043c\u0432\u043e\u043b\u00bb.<\/p>\n<p>\u0412 \u044d\u0442\u043e\u043c \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0435 \u0441\u043c\u044b\u0441\u043b \u0442\u0435\u0440\u043c\u0438\u043d\u043e\u0432 \u00ab\u0430\u043b\u0444\u0430\u0432\u0438\u0442\u00bb \u0438 \u00ab\u0441\u0438\u043c\u0432\u043e\u043b\u00bb \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043f\u043e\u044f\u0441\u043d\u0438\u0442\u044c. \u0412 Unicode \u0434\u043b\u0438\u043d\u0430 \u00ab\u0430\u043b\u0444\u0430\u0432\u0438\u0442\u0430\u00bb \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 149186 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432 (\u0438\u043c\u0435\u043d\u043d\u043e \u0441\u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0445 \u0442\u043e\u0447\u0435\u043a Unicode \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u043d\u0430 \u043c\u043e\u043c\u0435\u043d\u0442 \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0438 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438), \u0430 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u00ab\u0441\u0438\u043c\u0432\u043e\u043b\u0430\u00bb \u043c\u043e\u0436\u0435\u0442 \u0432\u044b\u0441\u0442\u0443\u043f\u0430\u0442\u044c, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440: \ufdfd (\u0434\u0430, \u044d\u0442\u043e \u043e\u0434\u0438\u043d\u043e\u0447\u043d\u0430\u044f \u0442\u043e\u0447\u043a\u0430 Unicode, \u043d\u043e\u043c\u0435\u0440 65021, \u043e\u043d\u0430 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442\u00a0<a href=\"https:\/\/en.wikipedia.org\/wiki\/Basmala\" rel=\"noopener noreferrer nofollow\">\u0446\u0435\u043b\u043e\u0439 \u0444\u0440\u0430\u0437\u0435 \u043d\u0430 \u0430\u0440\u0430\u0431\u0441\u043a\u043e\u043c \u044f\u0437\u044b\u043a\u0435<\/a>, \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u0432\u0430\u0436\u043d\u043e\u0439 \u0434\u043b\u044f \u043c\u0443\u0441\u0443\u043b\u044c\u043c\u0430\u043d). \u041e\u0442\u043c\u0435\u0447\u0443, \u0447\u0442\u043e \u044d\u0442\u0443 \u0444\u0440\u0430\u0437\u0443 \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0431\u044b \u0437\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0438 \u043e\u0431\u044b\u0447\u043d\u043e\u0439 \u0430\u0440\u0430\u0431\u0441\u043a\u043e\u0439 \u0432\u044f\u0437\u044c\u044e. \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u043e\u0434\u043d\u043e\u043c\u0443 \u0442\u0435\u043a\u0441\u0442\u0443 \u043c\u043e\u0436\u0435\u0442 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432 \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u043a\u0438.<\/p>\n<p>\u00a0<\/p>\n<p>\u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0440\u0430\u0437\u0431\u0435\u0440\u0451\u043c \u044d\u0442\u0443 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044e \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u0441\u043b\u043e\u0432\u0430 &#171;PostgreSQL&#187;. \u0415\u0441\u043b\u0438 \u0431\u044b \u043c\u044b \u043f\u043e\u043f\u044b\u0442\u0430\u043b\u0438\u0441\u044c \u0437\u0430\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0435\u0451 (\u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u0442\u044c \u0432 \u043c\u0430\u0441\u0441\u0438\u0432 \u0447\u0438\u0441\u0435\u043b) \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 Unicode, \u0442\u043e \u0443 \u043d\u0430\u0441 \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c \u0431\u044b 10 \u0447\u0438\u0441\u0435\u043b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0433\u043b\u0438 \u0431\u044b \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u044c\u0441\u044f \u0432 \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u0435 \u043e\u0442 1 \u0434\u043e 149186. \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u0432 \u043d\u0430\u0448\u0435\u0439 \u043d\u0435\u0439\u0440\u043e\u043d\u043d\u043e\u0439 \u0441\u0435\u0442\u0438 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043b\u043e\u0441\u044c \u0431\u044b \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u043c\u0430\u0442\u0440\u0438\u0446\u0443 \u0438\u0437 149186 \u0441\u0442\u0440\u043e\u043a \u0438 \u0441\u043e\u0432\u0435\u0440\u0448\u0438\u0442\u044c \u0440\u044f\u0434 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0439 \u043d\u0430\u0434 10 \u0441\u0442\u0440\u043e\u043a\u0430\u043c\u0438 \u0438\u0437 \u044d\u0442\u043e\u0439 \u043c\u0430\u0442\u0440\u0438\u0446\u044b. \u041d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0438\u0437 \u044d\u0442\u0438\u0445 \u0441\u0442\u0440\u043e\u043a (\u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u0431\u0443\u043a\u0432\u0430\u043c \u043b\u0430\u0442\u0438\u043d\u0438\u0446\u044b) \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0438\u0441\u044c \u0431\u044b \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u0447\u0430\u0441\u0442\u043e, \u0438 \u0432 \u043d\u0438\u0445 \u0431\u044b\u043b\u043e \u0431\u044b \u0437\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u043e \u043c\u043d\u043e\u0433\u043e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438. \u0414\u0440\u0443\u0433\u0438\u0435 \u0441\u0438\u043c\u0432\u043e\u043b\u044b, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0441\u043c\u0430\u0439\u043b\u0438\u043a \u043a\u0430\u043a\u0430\u0448\u043a\u0438 \u0438 \u0442\u0430\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0435 \u0441\u0438\u043c\u0432\u043e\u043b\u044b \u0438\u0437 \u043c\u0451\u0440\u0442\u0432\u044b\u0445 \u044f\u0437\u044b\u043a\u043e\u0432 \u0435\u0434\u0432\u0430 \u043b\u0438 \u0432\u043e\u043e\u0431\u0449\u0435 \u0445\u043e\u0442\u044c \u0440\u0430\u0437 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0438\u0441\u044c, \u043d\u043e \u0438 \u043d\u0430 \u0438\u0445 \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043c\u0435\u0441\u0442\u043e.<\/p>\n<p>\u0415\u0441\u0442\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u043c\u044b \u0445\u043e\u0442\u0438\u043c, \u0447\u0442\u043e\u0431\u044b \u043e\u0431\u0430 \u044d\u0442\u0438 \u0447\u0438\u0441\u043b\u0430, \u0438 \u0434\u043b\u0438\u043d\u0430 \u00ab\u0430\u043b\u0444\u0430\u0432\u0438\u0442\u0430\u00bb, \u0438 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u00ab\u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432\u00bb \u043e\u0441\u0442\u0430\u0432\u0430\u043b\u0438\u0441\u044c \u043a\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u043c\u0435\u043d\u044c\u0448\u0435. \u0412 \u0438\u0434\u0435\u0430\u043b\u0435 \u00ab\u0441\u0438\u043c\u0432\u043e\u043b\u044b\u00bb \u043d\u0430\u0448\u0435\u0433\u043e \u0430\u043b\u0444\u0430\u0432\u0438\u0442\u0430 \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u0442\u044c \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u044b \u0440\u0430\u0432\u043d\u043e\u043c\u0435\u0440\u043d\u043e, \u0430 \u0435\u0449\u0451 \u043c\u044b \u043f\u043e-\u043f\u0440\u0435\u0436\u043d\u0435\u043c\u0443 \u0445\u043e\u0442\u0438\u043c, \u0447\u0442\u043e\u0431\u044b \u043d\u0430\u0448\u0430 \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u043a\u0430 \u043d\u0435 \u0443\u0441\u0442\u0443\u043f\u0430\u043b\u0430 \u043f\u043e \u043c\u043e\u0449\u043d\u043e\u0441\u0442\u0438 Unicode.<\/p>\n<p>\u0418\u043d\u0442\u0443\u0438\u0442\u0438\u0432\u043d\u043e \u043f\u043e\u043d\u044f\u0442\u043d\u043e, \u0447\u0442\u043e \u044d\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c, \u043f\u0440\u0438\u0441\u0432\u043e\u0438\u0432 \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u0435 \u043d\u043e\u043c\u0435\u0440\u0430 \u0442\u0435\u043c \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044f\u043c \u0441\u043b\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0447\u0430\u0441\u0442\u043e \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u044e\u0442\u0441\u044f \u0432 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u043c\u044b\u0445 \u043d\u0430\u043c\u0438 \u0442\u0435\u043a\u0441\u0442\u0430\u0445. \u0412 Unicode \u0432\u044b\u0448\u0435\u0443\u043f\u043e\u043c\u044f\u043d\u0443\u0442\u0430\u044f \u0440\u0435\u043b\u0438\u0433\u0438\u043e\u0437\u043d\u0430\u044f \u0430\u0440\u0430\u0431\u0441\u043a\u0430\u044f \u0444\u0440\u0430\u0437\u0430 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0437\u0430\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0430 \u043b\u0438\u0431\u043e \u043a\u0430\u043a \u043e\u0434\u0438\u043d \u043a\u043e\u0434\u043e\u0432\u044b\u0439 \u0441\u0438\u043c\u0432\u043e\u043b, \u043b\u0438\u0431\u043e \u0431\u0443\u043a\u0432\u0430 \u0437\u0430 \u0431\u0443\u043a\u0432\u043e\u0439. \u041f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u043c\u044b \u0432\u044b\u043a\u0430\u0442\u044b\u0432\u0430\u0435\u043c \u043d\u0430\u0448\u0443 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u0443\u044e \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u043a\u0443, \u0442\u043e\u0447\u043d\u043e \u0442\u0430\u043a \u0436\u0435 \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043f\u043e\u0441\u0442\u0443\u043f\u0430\u0442\u044c \u0441 \u0442\u0435\u043c\u0438 \u0441\u043b\u043e\u0432\u0430\u043c\u0438 \u0438 \u0444\u0440\u0430\u0437\u0430\u043c\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u0430\u0436\u043d\u044b \u0432 \u0440\u0430\u043c\u043a\u0430\u0445 \u043d\u0430\u0448\u0435\u0439 \u043c\u043e\u0434\u0435\u043b\u0438 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043e\u043d\u0438 \u0447\u0430\u0441\u0442\u043e \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u044e\u0442\u0441\u044f \u0432 \u0442\u0435\u043a\u0441\u0442\u0430\u0445).<\/p>\n<p>\u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0431\u044b \u0432\u044b\u0434\u0435\u043b\u0438\u0442\u044c \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0435 \u0447\u0438\u0441\u043b\u0430 \u0434\u043b\u044f \u0441\u0442\u0440\u043e\u043a &#171;Post&#187;, &#171;greSQL&#187; \u0438 &#171;ing&#187;. \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u043e\u0431\u0430 \u0441\u043b\u043e\u0432\u0430 &#171;PostgreSQL&#187; \u0438 &#171;Posting&#187; \u0432 \u043d\u0430\u0448\u0435\u043c \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0438 \u0431\u0443\u0434\u0443\u0442 \u0438\u043c\u0435\u0442\u044c \u0434\u043b\u0438\u043d\u0443 \u043f\u043e 2. \u041a\u043e\u043d\u0435\u0447\u043d\u043e \u0436\u0435, \u043c\u044b \u0441\u0442\u0440\u0435\u043c\u0438\u043c\u0441\u044f \u0437\u0430\u043a\u0440\u0435\u043f\u043b\u044f\u0442\u044c \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0435 \u043a\u043e\u0434\u043e\u0432\u044b\u0435 \u0441\u0438\u043c\u0432\u043e\u043b\u044b \u0434\u043b\u044f \u0431\u043e\u043b\u0435\u0435 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0445 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0435\u0439 \u0438 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0445 \u0431\u0430\u0439\u0442. \u0414\u0430\u0436\u0435 \u043d\u0430\u0442\u044b\u043a\u0430\u044f\u0441\u044c \u043d\u0430 \u0442\u0430\u0440\u0430\u0431\u0430\u0440\u0449\u0438\u043d\u0443 \u0438\u043b\u0438 \u043d\u0430 \u0438\u043d\u043e\u044f\u0437\u044b\u0447\u043d\u044b\u0439 \u0442\u0435\u043a\u0441\u0442, \u0442\u0430\u043a\u0443\u044e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u0432\u0441\u0451 \u0440\u0430\u0432\u043d\u043e \u0443\u0434\u0430\u0441\u0442\u0441\u044f \u0437\u0430\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u0442\u044c, \u0445\u043e\u0442\u044f, \u043d\u0430 \u044d\u0442\u043e \u0438 \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0431\u043e\u043b\u044c\u0448\u0435 \u0432\u0440\u0435\u043c\u0435\u043d\u0438.<\/p>\n<p>\u0412 GPT2 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 \u043f\u043e\u0434 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435\u043c\u00a0<a href=\"https:\/\/en.wikipedia.org\/wiki\/Byte_pair_encoding\" rel=\"noopener noreferrer nofollow\">\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0434\u0438\u0430\u0434\u0430\u043c\u0438<\/a>\u00a0(Byte Pair Encoding), \u043f\u0440\u0435\u0434\u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u043d\u044b\u0439 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u0434\u043b\u044f \u044d\u0442\u043e\u0439 \u0446\u0435\u043b\u0438. \u0422\u043e\u043a\u0435\u043d\u0438\u0437\u0430\u0442\u043e\u0440 GPT2 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0441\u043b\u043e\u0432\u0430\u0440\u044c \u0438\u0437 50257 \u043a\u043e\u0434\u043e\u0432\u044b\u0445 \u0442\u043e\u0447\u0435\u043a (\u0432 \u0442\u0435\u0440\u043c\u0438\u043d\u043e\u043b\u043e\u0433\u0438\u0438 \u0418\u0418 \u2014 \u00ab\u0442\u043e\u043a\u0435\u043d\u043e\u0432\u00bb), \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0442 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u043c \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044f\u043c \u0431\u0430\u0439\u0442 \u0432 UTF-8 (\u043f\u043b\u044e\u0441 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u0442\u043e\u043a\u0435\u043d, \u043e\u0437\u043d\u0430\u0447\u0430\u044e\u0449\u0438\u0439 \u00ab\u043a\u043e\u043d\u0435\u0446 \u0442\u0435\u043a\u0441\u0442\u0430\u00bb).<\/p>\n<p>\u042d\u0442\u043e\u0442 \u0441\u043b\u043e\u0432\u0430\u0440\u044c \u043c\u044b \u0441\u043e\u0431\u0440\u0430\u043b\u0438 \u043f\u0443\u0442\u0451\u043c \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0430\u043d\u0430\u043b\u0438\u0437\u0430, \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u043d\u043e\u0433\u043e \u0442\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:<\/p>\n<ol>\n<li>\n<p>\u041d\u0430\u0447\u0438\u043d\u0430\u0435\u043c \u0441 \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u043a\u0438 \u0438\u0437 256 \u0442\u043e\u043a\u0435\u043d\u043e\u0432: \u043f\u043e \u0442\u043e\u043a\u0435\u043d\u0443 \u0437\u0430 \u0431\u0430\u0439\u0442.<\/p>\n<\/li>\n<li>\n<p>\u0411\u0435\u0440\u0451\u043c \u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u043a\u043e\u0440\u043f\u0443\u0441 \u0442\u0435\u043a\u0441\u0442\u043e\u0432 (\u043f\u0440\u0435\u0434\u043f\u043e\u0447\u0442\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0438\u043c\u0435\u043d\u043d\u043e \u0442\u043e\u0442, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0431\u0443\u0434\u0435\u0442 \u043e\u0431\u0443\u0447\u0430\u0442\u044c\u0441\u044f \u043c\u043e\u0434\u0435\u043b\u044c).<\/p>\n<\/li>\n<li>\n<p>\u041a\u043e\u0434\u0438\u0440\u0443\u0435\u043c \u0435\u0433\u043e.<\/p>\n<\/li>\n<li>\n<p>\u0412\u044b\u0447\u0438\u0441\u043b\u044f\u0435\u043c, \u043a\u0430\u043a\u0430\u044f \u043f\u0430\u0440\u0430 \u0442\u043e\u043a\u0435\u043d\u043e\u0432 \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u0435\u0442\u0441\u044f \u0447\u0430\u0449\u0435 \u0432\u0441\u0435\u0433\u043e. \u041f\u0443\u0441\u0442\u044c \u044d\u0442\u043e \u0431\u0443\u0434\u0435\u0442 0x20 0x74 (\u043f\u0440\u043e\u0431\u0435\u043b, \u0437\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u0441\u0442\u0440\u043e\u0447\u043d\u0430\u044f &#171;t&#187;).<\/p>\n<\/li>\n<li>\n<p>\u041f\u0440\u0438\u0441\u0432\u0430\u0438\u0432\u0430\u0435\u043c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 (257) \u044d\u0442\u043e\u0439 \u043f\u0430\u0440\u0435 \u0431\u0430\u0439\u0442.<\/p>\n<\/li>\n<li>\n<p>\u041f\u043e\u0432\u0442\u043e\u0440\u044f\u0435\u043c \u0448\u0430\u0433\u0438 3-5, \u0442\u0435\u043f\u0435\u0440\u044c \u043e\u0431\u0440\u0430\u0449\u0430\u044f \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043d\u0430 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0431\u0430\u0439\u0442. \u0415\u0441\u043b\u0438 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0431\u0430\u0439\u0442 \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u043b\u043e\u0436\u043d\u044b\u043c \u0442\u043e\u043a\u0435\u043d\u043e\u043c, \u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0441\u043b\u043e\u0436\u043d\u044b\u0439 \u0442\u043e\u043a\u0435\u043d. \u041f\u0440\u0438 \u044f\u0432\u043d\u044b\u0445 \u043d\u0435\u043e\u0434\u043d\u043e\u0437\u043d\u0430\u0447\u043d\u043e\u0441\u0442\u044f\u0445 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, &#171;abc&#187; \u043c\u043e\u0436\u0435\u0442 \u0432 \u043e\u0434\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0431\u044b\u0442\u044c \u0437\u0430\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u043e \u043a\u0430\u043a &#171;a&#187; + &#171;bc&#187; \u0438\u043b\u0438 \u043a\u0430\u043a &#171;ab&#187; + &#171;c&#187;), \u0442\u043e \u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435\u0441\u044c \u0442\u043e\u0439, \u043d\u043e\u043c\u0435\u0440 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043c\u0435\u043d\u044c\u0448\u0435 (\u044d\u0442\u043e \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442, \u0447\u0442\u043e \u043e\u043d\u0430 \u0431\u044b\u043b\u0430 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0430 \u0440\u0430\u043d\u044c\u0448\u0435 \u0438, \u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e, \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u0435\u0442\u0441\u044f \u0447\u0430\u0449\u0435). \u042d\u0442\u043e \u043d\u0443\u0436\u043d\u043e \u0434\u0435\u043b\u0430\u0442\u044c \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0432\u043d\u043e, \u043f\u043e\u043a\u0430 \u0432\u0441\u0435 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0436\u043d\u043e \u0441\u043b\u043e\u0436\u0438\u0442\u044c \u0432 \u043e\u0434\u0438\u043d \u0442\u043e\u043a\u0435\u043d, \u0431\u0443\u0434\u0443\u0442 \u0441\u043b\u043e\u0436\u0435\u043d\u044b \u0432 \u043e\u0434\u0438\u043d \u0442\u043e\u043a\u0435\u043d.<\/p>\n<\/li>\n<li>\n<p>\u0412\u044b\u043f\u043e\u043b\u043d\u0438\u043c \u0442\u0430\u043a\u043e\u0435 \u00ab\u0441\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u043d\u0438\u0435\u00bb 50000 \u0440\u0430\u0437 \u043f\u043e\u0434\u0440\u044f\u0434.<\/p>\n<\/li>\n<\/ol>\n<p>\u0427\u0438\u0441\u043b\u043e 50000 \u0432\u044b\u0431\u0440\u0430\u043d\u043e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430\u043c\u0438 \u0431\u043e\u043b\u0435\u0435 \u0438\u043b\u0438 \u043c\u0435\u043d\u0435\u0435 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u043e. \u0412 \u0434\u0440\u0443\u0433\u0438\u0445 \u043c\u043e\u0434\u0435\u043b\u044f\u0445 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0442\u043e\u043a\u0435\u043d\u043e\u0432 \u0442\u0430\u043a\u0436\u0435 \u0434\u0435\u0440\u0436\u0438\u0442\u0441\u044f \u0432 \u043f\u043e\u0434\u043e\u0431\u043d\u043e\u043c \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u0435 (\u043e\u0442 30k \u0434\u043e 100k).<\/p>\n<p>\u041d\u0430 \u043a\u0430\u0436\u0434\u043e\u0439 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0438 \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 \u0432 \u0441\u043b\u043e\u0432\u0430\u0440\u044c \u0431\u0443\u0434\u0435\u0442 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c\u0441\u044f \u043d\u043e\u0432\u044b\u0439 \u0442\u043e\u043a\u0435\u043d, \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c\u044b\u0439 \u043a\u043e\u043d\u043a\u0430\u0442\u0435\u043d\u0430\u0446\u0438\u0435\u0439 \u0434\u0432\u0443\u0445 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0445. \u0412 \u043a\u043e\u043d\u0435\u0447\u043d\u043e\u043c \u0438\u0442\u043e\u0433\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u043c 50256 \u0442\u043e\u043a\u0435\u043d\u043e\u0432. \u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0442\u043e\u043a\u0435\u043d \u0441 \u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u043c \u043d\u043e\u043c\u0435\u0440\u043e\u043c, \u043e\u0437\u043d\u0430\u0447\u0430\u044e\u0449\u0438\u0439 \u00ab\u043a\u043e\u043d\u0435\u0446 \u0442\u0435\u043a\u0441\u0442\u0430\u00bb &#8212; \u0438 \u0432\u0441\u0451 \u0433\u043e\u0442\u043e\u0432\u043e. <\/p>\n<p>\u0412 \u0432\u0435\u0440\u0441\u0438\u0438 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 BTE \u0434\u043b\u044f GPT2 \u0435\u0441\u0442\u044c \u0435\u0449\u0451 \u043e\u0434\u0438\u043d \u0443\u0440\u043e\u0432\u0435\u043d\u044c \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u043a\u0438: \u0432 \u0441\u043b\u043e\u0432\u0430\u0440\u0435 \u0442\u043e\u043a\u0435\u043d\u043e\u0432 \u044d\u0442\u0438 \u0442\u043e\u043a\u0435\u043d\u044b \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u044e\u0442\u0441\u044f \u043d\u0430 \u0441\u0442\u0440\u043e\u043a\u0438, \u0430 \u043d\u0435 \u043d\u0430 \u043c\u0430\u0441\u0441\u0438\u0432\u044b \u0431\u0430\u0439\u0442. \u041e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0441 \u0431\u0430\u0439\u0442 \u043d\u0430 \u0441\u0442\u0440\u043e\u043a\u043e\u0432\u044b\u0435 \u0441\u0438\u043c\u0432\u043e\u043b\u044b \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442\u0441\u044f \u0432 <a href=\"https:\/\/github.com\/openai\/gpt-2\/blob\/a74da5d99abaaba920de8131d64da2862a8f213b\/src\/encoder.py#L9-L28\" rel=\"noopener noreferrer nofollow\">\u044d\u0442\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438<\/a>. \u0422\u043e\u0442 \u0441\u043b\u043e\u0432\u0430\u0440\u044c, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043e\u043d\u0430 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442, \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0435 <strong>encoder<\/strong>.<\/p>\n<p>\u0420\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c, \u043a\u0430\u043a \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0442\u043e\u043a\u0435\u043d\u0438\u0437\u0430\u0442\u043e\u0440 \u043d\u0430 SQL.<\/p>\n<p>\u0414\u0430\u043d\u043d\u044b\u0439 \u0442\u043e\u043a\u0435\u043d\u0438\u0437\u0430\u0442\u043e\u0440 \u2013 \u043d\u0435\u043e\u0442\u044a\u0435\u043c\u043b\u0435\u043c\u0430\u044f \u0447\u0430\u0441\u0442\u044c GPT2, \u0438 \u0441\u043b\u043e\u0432\u0430\u0440\u044c \u0442\u043e\u043a\u0435\u043d\u043e\u0432 \u043c\u043e\u0436\u043d\u043e \u0441\u043a\u0430\u0447\u0430\u0442\u044c \u0441 \u0441\u0430\u0439\u0442\u0430 OpenAI, \u0440\u0430\u0432\u043d\u043e \u043a\u0430\u043a \u0438 \u043e\u0441\u0442\u0430\u0432\u0448\u0443\u044e\u0441\u044f \u0447\u0430\u0441\u0442\u044c \u043c\u043e\u0434\u0435\u043b\u0438. \u041d\u0430\u043c \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u0441\u044f \u0438\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0435\u0451 \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0443\u00a0<strong>tokenizer<\/strong>. \u0412 \u0441\u0430\u043c\u043e\u043c \u043a\u043e\u043d\u0446\u0435 \u044d\u0442\u043e\u0433\u043e \u043f\u043e\u0441\u0442\u0430 \u0432\u044b \u043d\u0430\u0439\u0434\u0451\u0442\u0435 \u0441\u0441\u044b\u043b\u043a\u0443 \u043d\u0430 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439 \u0441 \u043a\u043e\u0434\u043e\u043c. \u042d\u0442\u043e\u0442 \u043a\u043e\u0434 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0438\u0440\u0443\u0435\u0442 \u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u0442\u0430\u0431\u043b\u0438\u0446 \u0431\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0445 \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u043c\u043e\u0434\u0435\u043b\u044c\u044e.<\/p>\n<p>\u0412 \u0440\u0430\u043c\u043a\u0430\u0445 \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0432\u043d\u043e\u0433\u043e \u043f\u043e\u0434\u0445\u043e\u0434\u0430 CTE \u0440\u0430\u0437\u0431\u0438\u0432\u0430\u0435\u043c \u0441\u043b\u043e\u0432\u043e \u043d\u0430 \u0442\u043e\u043a\u0435\u043d\u044b (\u043d\u0430\u0447\u0438\u043d\u0430\u044f \u0441 \u0435\u0434\u0438\u043d\u0438\u0447\u043d\u044b\u0445 \u0431\u0430\u0439\u0442) \u0438 \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u044f\u0435\u043c \u043d\u0430\u0438\u043b\u0443\u0447\u0448\u0438\u0435 \u0441\u043c\u0435\u0436\u043d\u044b\u0435 \u043f\u0430\u0440\u044b, \u043f\u043e\u043a\u0430 \u0431\u043e\u043b\u044c\u0448\u0435 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u0430 \u0434\u043b\u044f \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f \u043d\u0435 \u043e\u0441\u0442\u0430\u043d\u0435\u0442\u0441\u044f. \u0421\u0430\u043c\u043e \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043f\u043e \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0443 \u0432\u043b\u043e\u0436\u0435\u043d\u043d\u043e\u0433\u043e \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0432\u043d\u043e\u0433\u043e CTE.<\/p>\n<p>\u0414\u043b\u044f \u043f\u0440\u0438\u043c\u0435\u0440\u0430 \u044f \u0432\u044b\u0431\u0440\u0430\u043b \u0441\u043b\u043e\u0432\u043e \u00abMississippilessly\u00bb. \u041a\u0430\u0436\u0434\u0430\u044f \u0437\u0430\u043f\u0438\u0441\u044c \u0432 \u043d\u0430\u0431\u043e\u0440\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u0432 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u043d\u0430\u0438\u043b\u0443\u0447\u0448\u0435\u0439 \u043d\u0430\u0439\u0434\u0435\u043d\u043d\u043e\u0439 \u043a \u0434\u0430\u043d\u043d\u043e\u043c\u0443 \u043c\u043e\u043c\u0435\u043d\u0442\u0443 \u043f\u0430\u0440\u0435, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043c\u043e\u0436\u043d\u043e \u00ab\u0441\u043b\u043e\u0436\u0438\u0442\u044c\u00bb, \u0430\u00a0 \u0442\u0430\u043a\u0436\u0435 \u043f\u0440\u043e\u0433\u0440\u0435\u0441\u0441 \u0432 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u0437\u0430\u043f\u0440\u043e\u0441\u0430.<\/p>\n<pre><code class=\"sql\">WITH    RECURSIVE         bpe AS         (         SELECT  (n + 1)::BIGINT AS position, character, TRUE AS continue, 1 AS step,                 NULL::INT AS token, NULL::TEXT AS combined         FROM    CONVERT_TO('Mississippilessly', 'UTF-8') AS bytes         CROSS JOIN LATERAL                 GENERATE_SERIES(0, LENGTH(bytes) - 1) AS n         JOIN    encoder         ON      byte = GET_BYTE(bytes, n)         UNION ALL         (         WITH    RECURSIVE                 base AS                 (                 SELECT  *                 FROM    bpe                 WHERE   continue                 ),                 bn AS                 (                 SELECT  ROW_NUMBER() OVER (ORDER BY position) AS position,                         continue,                         character,                         character || LEAD(character) OVER (ORDER BY position) AS cluster                 FROM    base                 ),                 top_rank AS                 (                 SELECT  tokenizer.*                 FROM    bn                 CROSS JOIN LATERAL                         (                         SELECT  *                         FROM    tokenizer                         WHERE   tokenizer.cluster = bn.cluster                         LIMIT   1                         ) tokenizer                 ORDER BY                         token                 LIMIT   1                 ),                 breaks AS                 (                 SELECT  0::BIGINT AS position, 1 AS length                 UNION ALL                 SELECT  bn.position,                         CASE WHEN token IS NULL THEN 1 ELSE 2 END                 FROM    breaks                 JOIN    bn                 ON      bn.position = breaks.position + length                 LEFT JOIN                         top_rank                 USING   (cluster)                 )         SELECT  position, character, token IS NOT NULL,                 (SELECT step + 1 FROM base LIMIT 1), token, top_rank.cluster         FROM    breaks         LEFT JOIN                 top_rank         ON      1 = 1         CROSS JOIN LATERAL                 (                 SELECT  STRING_AGG(character, '' ORDER BY position) AS character                 FROM    bn                 WHERE   bn.position >= breaks.position                         AND bn.position &lt; breaks.position + length                 ) bn         WHERE   position > 0         )         ) SELECT  step, MAX(token) AS token, MAX(combined) AS combined, ARRAY_AGG(character ORDER BY position) FROM    bpe WHERE   continue GROUP BY         step ORDER BY         step<\/code><\/pre>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/9af\/ef7\/083\/9afef708330d99752ee4da59fe3fceaf.png\" width=\"1423\" height=\"473\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/9af\/ef7\/083\/9afef708330d99752ee4da59fe3fceaf.png\"\/><\/figure>\n<p>\u041d\u0430 \u043a\u0430\u0436\u0434\u043e\u043c \u0448\u0430\u0433\u0435 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c BPE \u043d\u0430\u0445\u043e\u0434\u0438\u0442 \u043f\u0430\u0440\u0443 \u0442\u043e\u043a\u0435\u043d\u043e\u0432, \u043d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0443\u044e \u0434\u043b\u044f \u0441\u043b\u0438\u044f\u043d\u0438\u044f, \u0438 \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u044f\u0435\u0442 \u0438\u0445 (\u0437\u0434\u0435\u0441\u044c \u0432 \u0432\u044b\u0432\u043e\u0434\u0435 \u0432\u044b \u0432\u0438\u0434\u0438\u0442\u0435 \u0442\u0430\u043a\u0443\u044e \u0441\u043b\u0438\u0442\u0443\u044e \u043f\u0430\u0440\u0443 \u0438 \u0435\u0435 \u0440\u0430\u043d\u0433). \u041f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 \u0442\u0430\u043a\u043e\u0439 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u044b \u0440\u0430\u0437\u043c\u0435\u0440 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0430 \u0442\u043e\u043a\u0435\u043d\u043e\u0432 \u043c\u043e\u0436\u043d\u043e \u0441\u043e\u043a\u0440\u0430\u0442\u0438\u0442\u044c \u0441 150k, \u043f\u0440\u0438\u0441\u0443\u0449\u0438\u0445 Unicode, \u0434\u043e 50k, \u0430 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0442\u043e\u043a\u0435\u043d\u043e\u0432 \u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u043c \u0441\u043b\u043e\u0432\u0435 \u0441 17 \u0434\u043e 5. \u0412 \u043e\u0431\u043e\u0438\u0445 \u0441\u043b\u0443\u0447\u0430\u044f\u0445 \u044d\u0442\u043e \u043e\u0442\u043b\u0438\u0447\u043d\u043e\u0435 \u0443\u043b\u0443\u0447\u0448\u0435\u043d\u0438\u0435.<\/p>\n<p>\u041a\u043e\u0433\u0434\u0430 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e\u043c \u0441\u043b\u043e\u0432, \u0442\u043e\u043a\u0435\u043d\u0438\u0437\u0430\u0442\u043e\u0440 \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u0440\u0430\u0437\u0431\u0438\u0432\u0430\u0435\u0442 \u0442\u0435\u043a\u0441\u0442 \u043d\u0430 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0435 \u0441\u043b\u043e\u0432\u0430 \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438\u00a0<a href=\"https:\/\/github.com\/openai\/gpt-2\/blob\/master\/src\/encoder.py#L53\" rel=\"noopener noreferrer nofollow\">\u044d\u0442\u043e\u0433\u043e \u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u043e\u0433\u043e \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f<\/a>\u00a0\u0438 \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u044f\u0435\u0442 \u0442\u043e\u043a\u0435\u043d\u044b \u0432 \u043a\u0430\u0436\u0434\u043e\u043c \u0441\u043b\u043e\u0432\u0435 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e. \u041a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e, \u043f\u0440\u0438 \u0440\u0430\u0431\u043e\u0442\u0435 \u0441 PostgreSQL \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432 Unicode \u043d\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u043d\u0430 \u0443\u0440\u043e\u0432\u043d\u0435 \u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u044b\u0445 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0439, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043c\u043d\u0435 \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043e\u0442\u043b\u0430\u0434\u0438\u0442\u044c \u0441\u0438\u0441\u0442\u0435\u043c\u0443 (\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u044f \u0443\u0433\u0440\u043e\u0431\u0438\u043b \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u0443\u044e \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0443 Unicode). \u0412\u043e\u0442 \u043a\u0430\u043a \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0432 SQL:<\/p>\n<pre><code class=\"sql\">WITH    input AS         (         SELECT  'PostgreSQL is great' AS prompt         ),         clusters AS         (         SELECT  part_position, bpe.*         FROM    input         CROSS JOIN LATERAL                 REGEXP_MATCHES(prompt, '''s|''t|''re|''ve|''m|''ll|''d| ?\\w+| ?\\d+| ?[^\\s\\w\\d]+|\\s+(?!\\S)|\\s+', 'g') WITH ORDINALITY AS rm (part, part_position)         CROSS JOIN LATERAL                 (                 WITH    RECURSIVE                         bpe AS                         (                         SELECT  (n + 1)::BIGINT AS position, character, TRUE AS continue                         FROM    CONVERT_TO(part[1], 'UTF-8') AS bytes                         CROSS JOIN LATERAL                                 GENERATE_SERIES(0, LENGTH(bytes) - 1) AS n                         JOIN    encoder                         ON      byte = GET_BYTE(bytes, n)                         UNION ALL                         (                         WITH    RECURSIVE                                 base AS                                 (                                 SELECT  *                                 FROM    bpe                                 WHERE   continue                                 ),                                 bn AS                                 (                                 SELECT  ROW_NUMBER() OVER (ORDER BY position) AS position,                                         continue,                                         character,                                         character || LEAD(character) OVER (ORDER BY position) AS cluster                                 FROM    base                                 ),                                 top_rank AS                                 (                                 SELECT  tokenizer.*                                 FROM    bn                                 CROSS JOIN LATERAL                                         (                                         SELECT  *                                         FROM    tokenizer                                         WHERE   tokenizer.cluster = bn.cluster                                         LIMIT   1                                         ) tokenizer                                 ORDER BY                                         token                                 LIMIT   1                                 ),                                 breaks AS                                 (                                 SELECT  0::BIGINT AS position, 1 AS length                                 UNION ALL                                 SELECT  bn.position,                                         CASE WHEN token IS NULL THEN 1 ELSE 2 END                                 FROM    breaks                                 JOIN    bn                                 ON      bn.position = breaks.position + length                                 LEFT JOIN                                         top_rank                                 USING   (cluster)                                 )                         SELECT  position, character, token IS NOT NULL                         FROM    breaks                         LEFT JOIN                                 top_rank                         ON      1 = 1                         CROSS JOIN LATERAL                                 (                                 SELECT  STRING_AGG(character, '' ORDER BY position) AS character                                 FROM    bn                                 WHERE   bn.position >= breaks.position                                         AND bn.position &lt; breaks.position + length                                 ) bn                         WHERE   position > 0                         )                         )                 SELECT  position, character AS cluster                 FROM    bpe                 WHERE   NOT continue                 ) bpe         ),         tokens AS         (         SELECT  token, cluster         FROM    clusters         JOIN    tokenizer         USING   (cluster)         ) SELECT  * FROM    tokens<\/code><\/pre>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/05c\/9a2\/cc7\/05c9a2cc7365cf2c4798ffb6c884c433.png\" width=\"1260\" height=\"178\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/05c\/9a2\/cc7\/05c9a2cc7365cf2c4798ffb6c884c433.png\"\/><\/figure>\n<p>\u0421\u0442\u0440\u0430\u043d\u043d\u044b\u0439 \u0441\u0438\u043c\u0432\u043e\u043b \u0120 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u043f\u0440\u043e\u0431\u0435\u043b\u0443.<\/p>\n<p>\u042d\u0442\u043e\u0442 \u0437\u0430\u043f\u0440\u043e\u0441 \u0442\u043e\u043a\u0435\u043d\u0438\u0437\u0438\u0440\u0443\u0435\u0442 \u043f\u0440\u043e\u043c\u043f\u0442 \u0438 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u0443\u0435\u0442 \u0435\u0433\u043e \u0432 \u043c\u0430\u0441\u0441\u0438\u0432 \u0447\u0438\u0441\u0435\u043b. \u0412\u043e\u0442 \u043f\u0440\u043e\u043c\u043f\u0442 \u0438 \u0433\u043e\u0442\u043e\u0432 \u043a \u0434\u043e\u043b\u0433\u043e\u043c\u0443 \u043f\u0443\u0442\u0438 \u0441\u043a\u0432\u043e\u0437\u044c \u0441\u043b\u043e\u0438 \u043c\u043e\u0434\u0435\u043b\u0438.<\/p>\n<h2>\u0412\u0435\u043a\u0442\u043e\u0440\u043d\u044b\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f<\/h2>\n<p>\u0422\u043e\u043a\u0435\u043d\u044b &#8212; \u044d\u0442\u043e \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0435\u0434\u0438\u043d\u0438\u0446 \u0435\u0441\u0442\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0433\u043e \u044f\u0437\u044b\u043a\u0430 (\u0432 \u0446\u0435\u043b\u043e\u043c, \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e 0,75 \u0441\u043b\u043e\u0432\u0430 \u043d\u0430 \u0442\u043e\u043a\u0435\u043d), \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043b\u044e\u0431\u0430\u044f \u043c\u043e\u0434\u0435\u043b\u044c, \u043f\u0440\u0435\u0442\u0435\u043d\u0434\u0443\u044e\u0449\u0430\u044f \u043d\u0430 \u0443\u0441\u043f\u0435\u0448\u043d\u043e\u0435 \u0430\u0432\u0442\u043e\u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u0435 \u0442\u0435\u043a\u0441\u0442\u043e\u0432, \u0434\u043e\u043b\u0436\u043d\u0430 \u043a\u0430\u043a\u0438\u043c-\u0442\u043e \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u044f \u043c\u0435\u0436\u0434\u0443 \u044d\u0442\u0438\u043c\u0438 \u0435\u0434\u0438\u043d\u0438\u0446\u0430\u043c\u0438. \u0414\u0430\u0436\u0435 \u0432 \u0438\u0437\u043e\u043b\u044f\u0446\u0438\u0438 \u0447\u0430\u0441\u0442\u0438 \u0440\u0435\u0447\u0438 \u043e\u0431\u043b\u0430\u0434\u0430\u044e\u0442 \u043d\u0430\u0431\u043e\u0440\u0430\u043c\u0438 \u043e\u0440\u0442\u043e\u0433\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u0445 \u0441\u0432\u043e\u0439\u0441\u0442\u0432.<\/p>\n<p>\u0412\u043e\u0437\u044c\u043c\u0451\u043c, \u043a \u043f\u0440\u0438\u043c\u0435\u0440\u0443, \u0441\u043b\u043e\u0432\u043e \u00absubpoena\u00bb (\u043f\u043e\u0432\u0435\u0441\u0442\u043a\u0430) \u2013 \u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f, \u0432 \u0442\u043e\u043a\u0435\u043d\u0438\u0437\u0430\u0442\u043e\u0440\u0435 GPT2 \u043d\u0430 \u043d\u0435\u0433\u043e \u043e\u0442\u0432\u0435\u0434\u0451\u043d \u0446\u0435\u043b\u044b\u0439 \u0442\u043e\u043a\u0435\u043d. \u0421 \u0442\u043e\u0447\u043a\u0438 \u0437\u0440\u0435\u043d\u0438\u044f \u0430\u043d\u0433\u043b\u0438\u0439\u0441\u043a\u043e\u0433\u043e \u044f\u0437\u044b\u043a\u0430 \u2013 \u044d\u0442\u043e \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0435? \u0414\u0430, \u0431\u0435\u0441\u0441\u043f\u043e\u0440\u043d\u043e. \u0410 \u0433\u043b\u0430\u0433\u043e\u043b? \u0414\u0430, \u0438 \u0433\u043b\u0430\u0433\u043e\u043b\u043e\u043c \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c. \u0410 \u043f\u0440\u0438\u043b\u0430\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u043c? \u0423\u0436\u0435 \u043d\u0435 \u043e\u0447\u0435\u043d\u044c, \u043d\u043e, \u0432 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0435, \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442 \u043f\u0440\u0438\u0434\u0443\u043c\u0430\u0442\u044c \u043c\u043e\u0436\u043d\u043e. \u042d\u0442\u043e \u043a\u0430\u043d\u0446\u0435\u043b\u044f\u0440\u0438\u0442? \u0427\u0451\u0440\u0442 \u0432\u043e\u0437\u044c\u043c\u0438, \u0435\u0449\u0451 \u043a\u0430\u043a\u043e\u0439. \u0418 \u0442\u0430\u043a \u0434\u0430\u043b\u0435\u0435.<\/p>\n<p>\u0412\u0441\u0435 \u044d\u0442\u0438 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u043e\u0440\u0442\u043e\u0433\u043e\u043d\u0430\u043b\u044c\u043d\u044b, \u0442\u043e \u0435\u0441\u0442\u044c, \u043d\u0435 \u0437\u0430\u0432\u0438\u0441\u044f\u0442 \u0434\u0440\u0443\u0433 \u043e\u0442 \u0434\u0440\u0443\u0433\u0430. \u0421\u043b\u043e\u0432\u043e \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043e\u0444\u0438\u0446\u0438\u043e\u0437\u043d\u044b\u043c \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u043c, \u043d\u043e \u043d\u0435 \u0433\u043b\u0430\u0433\u043e\u043b\u043e\u043c \u0438 \u043d\u0435 \u043f\u0440\u0438\u043b\u0430\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u043c. \u0412 \u0430\u043d\u0433\u043b\u0438\u0439\u0441\u043a\u043e\u043c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b \u043b\u044e\u0431\u044b\u0435 \u0441\u043e\u0447\u0435\u0442\u0430\u043d\u0438\u044f \u044d\u0442\u0438\u0445 \u043f\u0440\u0438\u0437\u043d\u0430\u043a\u043e\u0432.<\/p>\n<p>\u0421\u0443\u0449\u043d\u043e\u0441\u0442\u0438 \u0441 \u043e\u0440\u0442\u043e\u0433\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u043c\u0438 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430\u043c\u0438 \u043b\u0443\u0447\u0448\u0435 \u0432\u0441\u0435\u0433\u043e \u043a\u043e\u0434\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u0432 \u0432\u0438\u0434\u0435 \u0432\u0435\u043a\u0442\u043e\u0440\u043d\u044b\u0445 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0439. \u041f\u0443\u0441\u0442\u044c \u0443 \u043d\u0430\u0441 \u0431\u0443\u0434\u0435\u0442 \u043d\u0435 \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0435 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043d\u043e\u043c\u0435\u0440), \u0430 \u043c\u043d\u043e\u0433\u043e. \u041f\u0440\u0438 \u0436\u0435\u043b\u0430\u043d\u0438\u0438 \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043a\u0440\u0443\u0442\u0438\u0442\u044c \u0438\u043c\u0438 \u043a\u0430\u043a \u0437\u0430\u0445\u043e\u0442\u0438\u043c. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0444\u0440\u0430\u0437\u0430 \u00ab\u0412 \u0441\u0443\u0434\u0435\u0431\u043d\u043e\u043c \u0440\u0435\u0448\u0435\u043d\u0438\u0438, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043f\u0440\u043e\u0446\u0438\u0442\u0438\u0440\u043e\u0432\u0430\u043b \u0430\u0434\u0432\u043e\u043a\u0430\u0442, \u0444\u0438\u0433\u0443\u0440\u0438\u0440\u0443\u0435\u0442\u2026\u00bb \u0441 \u0432\u044b\u0441\u043e\u043a\u043e\u0439 \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e\u0441\u0442\u044c\u044e \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0435\u0442\u0441\u044f \u043a\u0430\u043a\u0438\u043c-\u0442\u043e \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u043c, \u043a\u043e\u0442\u043e\u0440\u043e\u0435, \u043d\u0435 \u043c\u0435\u043d\u0435\u0435 \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e, \u0441\u0442\u0438\u043b\u0438\u0441\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0441\u044f \u043a \u043a\u0430\u043d\u0446\u0435\u043b\u044f\u0440\u0438\u0442\u0443. \u041d\u0430\u0441 \u0441\u043e\u0432\u0435\u0440\u0448\u0435\u043d\u043d\u043e \u043d\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u0435\u0442, \u0435\u0441\u0442\u044c \u043b\u0438 \u0443 \u044d\u0442\u043e\u0433\u043e \u0441\u043b\u043e\u0432\u0430 \u043c\u0430\u0440\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u0430\u044f \u0441\u0435\u043c\u0430\u043d\u0442\u0438\u043a\u0430 \u00ab\u0433\u043b\u0430\u0433\u043e\u043b\u00bb, \u043b\u0438\u0431\u043e \u00ab\u043f\u0440\u0438\u043b\u0430\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0435\u00bb, \u043b\u0438\u0431\u043e \u00ab\u0446\u0432\u0435\u0442\u043e\u043a\u00bb.<\/p>\n<p>\u0412 \u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u043a\u0435 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0441\u0440\u0430\u0432\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0443\u0437\u043a\u0438\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u043d\u0430 \u0431\u043e\u043b\u0435\u0435 \u0448\u0438\u0440\u043e\u043a\u0438\u0435 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0430 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, ID \u0442\u043e\u043a\u0435\u043d\u043e\u0432 \u043d\u0430 \u0432\u0435\u043a\u0442\u043e\u0440\u044b) \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f <a href=\"https:\/\/en.wikipedia.org\/wiki\/Embedding\" rel=\"noopener noreferrer nofollow\">\u0432\u0435\u043a\u0442\u043e\u0440\u043d\u044b\u043c \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435\u043c<\/a>. \u0418\u043c\u0435\u043d\u043d\u043e \u044d\u0442\u0438\u043c \u043c\u044b \u0437\u0434\u0435\u0441\u044c \u0438 \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u043c\u0441\u044f.<\/p>\n<p>\u041a\u0430\u043a \u0440\u0435\u0448\u0438\u0442\u044c, \u043a\u0430\u043a\u0438\u0435 \u0438\u043c\u0435\u043d\u043d\u043e \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u043e\u043a\u0430\u0436\u0443\u0442\u0441\u044f \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u044b \u0432 \u044d\u0442\u0438\u0445 \u0432\u0435\u043a\u0442\u043e\u0440\u0430\u0445? \u0410 \u043c\u044b \u043d\u0435 \u0431\u0443\u0434\u0435\u043c. \u041c\u044b \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u0438\u043c \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0432\u0435\u043a\u0442\u043e\u0440\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0430 \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0442\u043e\u043a\u0435\u043d\u0430 \u0438 \u043f\u043e\u043d\u0430\u0434\u0435\u0435\u043c\u0441\u044f, \u0447\u0442\u043e \u043c\u043e\u0434\u0435\u043b\u044c \u043d\u0430 \u044d\u0442\u0430\u043f\u0435 \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f \u043f\u043e\u043b\u0443\u0447\u0438\u0442 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438, \u0447\u0442\u043e\u0431\u044b \u0437\u0430\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0432\u0441\u0435 \u044d\u0442\u0438 \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u044f \u043e\u0441\u043c\u044b\u0441\u043b\u0435\u043d\u043d\u044b\u043c \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u044b\u043c. \u0412 GPT2 \u043f\u043e\u0434 \u0432\u0435\u043a\u0442\u043e\u0440\u044b \u043e\u0442\u0432\u043e\u0434\u0438\u0442\u0441\u044f 768 \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u0439. \u0417\u0430\u0440\u0430\u043d\u0435\u0435 (\u0438, \u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435, \u0434\u0430\u0436\u0435 \u0432 \u0440\u0435\u0442\u0440\u043e\u0441\u043f\u0435\u043a\u0442\u0438\u0432\u0435) \u043d\u0435 \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e, \u043a\u0430\u043a\u043e\u0435 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e \u0441\u043b\u043e\u0432\u0430 \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u043e, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0432 \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u0438 247. \u041e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u043e, \u0447\u0442\u043e-\u0442\u043e \u0437\u0430\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u043e \u0442\u0430\u043c \u0431\u0443\u0434\u0435\u0442, \u043d\u043e \u0447\u0442\u043e \u0438\u043c\u0435\u043d\u043d\u043e \u2013 \u0441\u043a\u0430\u0437\u0430\u0442\u044c \u0441\u043b\u043e\u0436\u043d\u043e.<\/p>\n<p>\u041a\u0430\u043a\u0438\u0435 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0438\u0437 \u0442\u043e\u043a\u0435\u043d\u043e\u0432 \u043c\u044b \u0432\u043d\u0435\u0434\u0440\u0438\u043c \u0432 \u0432\u0435\u043a\u0442\u043e\u0440\u043d\u043e\u0435 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u043e? \u041b\u044e\u0431\u044b\u0435, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e\u043c\u043e\u0433\u0443\u0442 \u043d\u0430\u043c \u0441\u043f\u0440\u043e\u0433\u043d\u043e\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c, \u043a\u0430\u043a\u043e\u0432 \u0431\u0443\u0434\u0435\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u0442\u043e\u043a\u0435\u043d.<\/p>\n<p>ID \u0442\u043e\u043a\u0435\u043d\u0430? \u0415\u0441\u0442\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e. \u0420\u0430\u0437\u043d\u044b\u0435 \u0442\u043e\u043a\u0435\u043d\u044b \u043e\u0437\u043d\u0430\u0447\u0430\u044e\u0442 \u0440\u0430\u0437\u043d\u044b\u0435 \u0432\u0435\u0449\u0438. <\/p>\n<p>\u041f\u043e\u0437\u0438\u0446\u0438\u044f \u0442\u043e\u043a\u0435\u043d\u0430 \u0432 \u0442\u0435\u043a\u0441\u0442\u0435? \u0414\u0430, \u043f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430. \u00ab\u0421\u0438\u043d\u0435-\u0444\u0438\u043e\u043b\u0435\u0442\u043e\u0432\u044b\u0439\u00bb \u0438 \u00ab\u0444\u0438\u043e\u043b\u0435\u0442\u043e\u0432\u043e-\u0441\u0438\u043d\u0438\u0439\u00bb \u2014 \u043d\u0435 \u043e\u0434\u043d\u043e \u0438 \u0442\u043e \u0436\u0435.<\/p>\n<p>\u0412\u0437\u0430\u0438\u043c\u043d\u044b\u0435 \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u044f \u0442\u043e\u043a\u0435\u043d\u043e\u0432? \u0415\u0441\u0442\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e! \u042d\u0442\u043e, \u043f\u043e\u0436\u0430\u043b\u0443\u0439, \u043d\u0430\u0438\u0432\u0430\u0436\u043d\u0435\u0439\u0448\u0430\u044f \u0447\u0430\u0441\u0442\u044c \u0437\u0430\u0434\u0430\u0447\u0438, \u0438 \u0431\u043b\u043e\u043a \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u044f (Attention) \u0432 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0435 \u0442\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0435\u0440\u0430 \u043a\u0430\u043a \u0440\u0430\u0437 \u0432\u043f\u0435\u0440\u0432\u044b\u0435 \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u043b \u0440\u0435\u0448\u0438\u0442\u044c \u044d\u0442\u0443 \u0447\u0430\u0441\u0442\u044c \u0437\u0430\u0434\u0430\u0447\u0438 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e.<\/p>\n<p>\u0422\u043e\u043a\u0435\u043d\u044b \u0438 \u043f\u043e\u0437\u0438\u0446\u0438\u0438 \u043b\u0435\u0433\u043a\u043e \u043f\u043e\u0434\u0434\u0430\u044e\u0442\u0441\u044f \u0432\u0435\u043a\u0442\u043e\u0440\u043d\u043e\u043c\u0443 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044e. \u0414\u043e\u043f\u0443\u0441\u0442\u0438\u043c, \u0435\u0441\u0442\u044c \u0444\u0440\u0430\u0437\u0430 \u00abPostgreSQL is great\u00bb, \u043e \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0437\u0430\u0440\u0430\u043d\u0435\u0435 \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e, \u0447\u0442\u043e \u043e\u043d\u0430 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u0447\u0435\u0442\u044b\u0440\u0435 \u0442\u043e\u043a\u0435\u043d\u0430:\u00a0<strong>[6307, 47701, 318, 1049]<\/strong>.<\/p>\n<p>\u0421\u0440\u0435\u0434\u0438 \u043f\u0440\u043e\u0447\u0438\u0445 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 GPT2 \u0435\u0441\u0442\u044c \u0434\u0432\u0435 \u043c\u0430\u0442\u0440\u0438\u0446\u044b, \u043d\u0430\u0437\u044b\u0432\u0430\u044e\u0449\u0438\u0435\u0441\u044f WTE (\u0432\u0435\u043a\u0442\u043e\u0440\u043d\u043e\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043b\u0435\u043a\u0441\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0442\u043e\u043a\u0435\u043d\u043e\u0432) \u0438 WPE (\u0432\u0435\u043a\u0442\u043e\u0440\u043d\u043e\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043f\u043e\u0437\u0438\u0446\u0438\u0439 \u0441\u043b\u043e\u0432). \u041a\u0430\u043a \u043f\u043e\u043d\u044f\u0442\u043d\u043e \u0438\u0437 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044f, \u0432 \u043f\u0435\u0440\u0432\u043e\u043c \u0445\u0440\u0430\u043d\u044f\u0442\u0441\u044f \u0432\u0435\u043a\u0442\u043e\u0440\u043d\u044b\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0442\u043e\u043a\u0435\u043d\u043e\u0432, \u0430 \u0432\u043e \u0432\u0442\u043e\u0440\u043e\u043c \u2013 \u0432\u0435\u043a\u0442\u043e\u0440\u043d\u044b\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0438\u0445 \u043f\u043e\u0437\u0438\u0446\u0438\u0439. \u041a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u043e\u043a\u0430\u0436\u0443\u0442\u0441\u044f \u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u044b \u044d\u0442\u0438 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f, \u043d\u0430\u0431\u0438\u0440\u0430\u044e\u0442\u0441\u044f \u0432 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f \u043c\u043e\u0434\u0435\u043b\u0438, \u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 GPT2. \u041d\u0430\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e, \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0430\u0445 \u0431\u0430\u0437 \u0434\u0430\u043d\u043d\u044b\u0445\u00a0<strong>wte<\/strong>\u00a0\u0438\u00a0<strong>wpe<\/strong> \u0435\u0441\u0442\u044c \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u044b. \u0420\u0430\u0437\u043c\u0435\u0440<\/p>\n<p>WTE \u0440\u0430\u0432\u0435\u043d 50257\u00d7768, \u0430 \u0440\u0430\u0437\u043c\u0435\u0440 WPE \u0440\u0430\u0432\u0435\u043d 1024\u00d7768. \u0412\u0442\u043e\u0440\u043e\u0435 \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442, \u0447\u0442\u043e \u0432 GPT2 \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u0440\u043e\u043c\u043f\u0442, \u0441\u043e\u0441\u0442\u043e\u044f\u0449\u0438\u0439 \u043d\u0435 \u0431\u043e\u043b\u0435\u0435 \u0447\u0435\u043c \u0438\u0437 1024 \u0442\u043e\u043a\u0435\u043d\u043e\u0432. \u0415\u0441\u043b\u0438 \u0437\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0432 \u043f\u0440\u043e\u043c\u043f\u0442 \u0431\u043e\u043b\u044c\u0448\u0435 \u0442\u043e\u043a\u0435\u043d\u043e\u0432, \u043c\u044b \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0435 \u0441\u043c\u043e\u0436\u0435\u043c \u0432\u044b\u0442\u044f\u043d\u0443\u0442\u044c \u0434\u043b\u044f \u0442\u043e\u043a\u0435\u043d\u043e\u0432 \u0441\u0432\u0435\u0440\u0445 1024 \u0438\u0445 \u043f\u043e\u0437\u0438\u0446\u0438\u043e\u043d\u043d\u044b\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f. \u042d\u0442\u043e \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u043d\u044b\u0439 \u0430\u0441\u043f\u0435\u043a\u0442 (\u0432 \u0442\u0435\u0440\u043c\u0438\u043d\u043e\u043b\u043e\u0433\u0438\u0438 \u0418\u0418 \u2013 \u00ab\u0433\u0438\u043f\u0435\u0440\u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u00bb) \u043c\u043e\u0434\u0435\u043b\u0438, \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c\u044b\u0439 \u043d\u0430 \u044d\u0442\u0430\u043f\u0435 \u0435\u0451 \u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f, \u0438 \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u0435\u043c \u0435\u0433\u043e \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e. \u041a\u043e\u0433\u0434\u0430 \u0433\u043e\u0432\u043e\u0440\u044f\u0442 \u043e \u00ab\u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u043d\u043e\u043c \u043e\u043a\u043d\u0435\u00bb \u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u044f\u0437\u044b\u043a\u043e\u0432\u043e\u0439 \u043c\u043e\u0434\u0435\u043b\u0438, \u0438\u043c\u0435\u044e\u0442 \u0432 \u0432\u0438\u0434\u0443 \u0438\u043c\u0435\u043d\u043d\u043e \u044d\u0442\u043e \u0447\u0438\u0441\u043b\u043e.<\/p>\n<p>\u0422\u043e\u043a\u0435\u043d 6307 \u0441\u0442\u043e\u0438\u0442 \u0443 \u043d\u0430\u0441 \u043d\u0430 \u043c\u0435\u0441\u0442\u0435 0, \u0442\u043e\u043a\u0435\u043d 47701 \u043d\u0430 \u043c\u0435\u0441\u0442\u0435 1, \u0442\u043e\u043a\u0435\u043d 318 \u043d\u0430 \u043c\u0435\u0441\u0442\u0435 2, \u0430 \u0442\u043e\u043a\u0435\u043d 1049 \u043d\u0430 \u043c\u0435\u0441\u0442\u0435 3. \u0414\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0438\u0437 \u044d\u0442\u0438\u0445 \u0442\u043e\u043a\u0435\u043d\u043e\u0432 \u0438 \u0438\u0445 \u043f\u043e\u0437\u0438\u0446\u0438\u0439 \u0443 \u043d\u0430\u0441 \u043f\u043e \u0434\u0432\u0430 \u0432\u0435\u043a\u0442\u043e\u0440\u0430: \u043e\u0434\u0438\u043d \u0438\u0437 WTE \u0438 \u043e\u0434\u0438\u043d \u0438\u0437 WPE. \u0418\u0445 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f <a href=\"https:\/\/github.com\/jaymody\/picoGPT\/blob\/29e78cc52b58ed2c1c483ffea2eb46ff6bdec785\/gpt2.py#L75\" rel=\"noopener noreferrer nofollow\">\u0441\u043b\u043e\u0436\u0438\u0442\u044c<\/a>. \u0412 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u0441\u044f \u0447\u0435\u0442\u044b\u0440\u0435 \u0432\u0435\u043a\u0442\u043e\u0440\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e\u0441\u043b\u0443\u0436\u0430\u0442 \u0432\u0432\u043e\u0434\u043e\u043c \u0434\u043b\u044f \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u0447\u0430\u0441\u0442\u0438 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430: \u0442\u0430\u043a \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043d\u0435\u0439\u0440\u043e\u043d\u043d\u0430\u044f \u0441\u0435\u0442\u044c \u043f\u0440\u044f\u043c\u043e\u0433\u043e \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0435\u043d\u0438\u044f, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0434\u0435\u0439\u0441\u0442\u0432\u0443\u0435\u0442 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u044f.<\/p>\n<p>\u0414\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 SQL \u043c\u044b \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u0441\u044f\u00a0<a href=\"https:\/\/github.com\/pgvector\/pgvector\" rel=\"noopener noreferrer nofollow\">pgvector<\/a>, \u044d\u0442\u043e \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435 PostgreSQL.<\/p>\n<p><em>\u041d\u0435\u0431\u043e\u043b\u044c\u0448\u0430\u044f \u043e\u0433\u043e\u0432\u043e\u0440\u043a\u0430: \u043a\u043e\u0434 \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043f\u043e\u0441\u0442\u0430 \u044f \u043f\u0438\u0448\u0443 \u043d\u0430 \u043e\u0431\u044b\u0447\u043d\u043e\u043c SQL, \u0438\u043d\u043e\u0433\u0434\u0430 \u0432\u0441\u0442\u0430\u0432\u043b\u044f\u044e \u0447\u0438\u0441\u0442\u044b\u0435 SQL-\u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0432\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432. \u0412 \u0440\u0430\u043c\u043a\u0430\u0445 \u044d\u0442\u043e\u0433\u043e \u043f\u043e\u0441\u0442\u0430 \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0438\u0442\u044c \u0442\u0430\u043a\u043e\u0435 \u043d\u0435 \u0441\u043e\u0441\u0442\u0430\u0432\u0438\u0442 \u0442\u0440\u0443\u0434\u0430, \u0440\u0430\u0432\u043d\u043e \u043a\u0430\u043a \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u0432\u0435\u043a\u0442\u043e\u0440\u043d\u044b\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u043d\u0430\u0434 \u043c\u0430\u0441\u0441\u0438\u0432\u0430\u043c\u0438. \u042d\u0442\u043e \u0434\u0435\u043b\u0430\u0435\u0442\u0441\u044f \u0437\u0430 \u0441\u0447\u0451\u0442 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0433\u043e \u0441\u043d\u0438\u0436\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 (\u0438 \u0443\u0436\u0435 \u0431\u044b\u043b\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043e \u0432 \u0432\u0435\u0440\u0441\u0438\u0438 1 \u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u043b\u043e, \u043f\u0443\u0441\u0442\u044c \u0438 \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u043e). \u0421 \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0435\u043d\u0438\u0435\u043c \u0418\u0418 \u0438 \u0440\u043e\u0441\u0442\u043e\u043c \u0432\u043b\u0438\u044f\u043d\u0438\u044f \u0432\u0435\u043a\u0442\u043e\u0440\u043d\u044b\u0445 \u0431\u0430\u0437 \u0434\u0430\u043d\u043d\u044b\u0445 pgvector \u0438\u043b\u0438 \u044d\u043a\u0432\u0438\u0432\u0430\u043b\u0435\u043d\u0442\u043d\u044b\u0439 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u043e \u0443\u043a\u043e\u0440\u0435\u043d\u0438\u0442\u0441\u044f \u0432 \u044f\u0434\u0440\u0435 PostgreSQL \u0432 \u0442\u0435\u0447\u0435\u043d\u0438\u0435 \u0434\u0432\u0443\u0445-\u0442\u0440\u0451\u0445 \u0440\u0435\u043b\u0438\u0437\u043e\u0432. \u042f \u043f\u0440\u043e\u0441\u0442\u043e \u0440\u0435\u0448\u0438\u043b \u043e\u0441\u0435\u0434\u043b\u0430\u0442\u044c \u0432\u043e\u043b\u043d\u0443, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u0440\u0438\u043d\u0435\u0441\u0451\u0442 \u043c\u0435\u043d\u044f \u0432 \u0431\u0443\u0434\u0443\u0449\u0435\u0435. <\/em><\/p>\n<p>\u0412\u043e\u0442 \u043a\u0430\u043a \u044d\u0442\u043e \u0434\u0435\u043b\u0430\u0435\u0442\u0441\u044f \u0432 SQL:<\/p>\n<pre><code class=\"sql\">WITH    embeddings AS         (         SELECT  place, values         FROM    UNNEST(ARRAY[6307, 47701, 318, 1049]) WITH ORDINALITY AS tokens (token, ordinality)         CROSS JOIN LATERAL                 (                 SELECT  ordinality - 1 AS place                 ) o         CROSS JOIN LATERAL                 (                 SELECT  wte.values + wpe.values AS values                 FROM    wte                 CROSS JOIN                         wpe                 WHERE   wte.token = tokens.token                         AND wpe.place = o.place                 ) embedding         ) SELECT  place, (values::REAL[])[0:5] FROM    embeddings<\/code><\/pre>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/2eb\/33d\/41d\/2eb33d41dc02c972da3f448c339b4366.png\" width=\"1222\" height=\"178\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/2eb\/33d\/41d\/2eb33d41dc02c972da3f448c339b4366.png\"\/><\/figure>\n<p>(\u0427\u0442\u043e\u0431\u044b \u0432\u044b\u0432\u043e\u0434 \u0431\u044b\u043b \u043a\u043e\u0440\u043e\u0447\u0435, \u0432 \u044d\u0442\u043e\u043c \u0437\u0430\u043f\u0440\u043e\u0441\u0435 \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u044b \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0435\u0440\u0432\u044b\u0435 5 \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u0439 \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0432\u0435\u043a\u0442\u043e\u0440\u0430).<\/p>\n<h2>\u0412\u043d\u0438\u043c\u0430\u043d\u0438\u0435<\/h2>\n<p>\u0422\u0430 \u0447\u0430\u0441\u0442\u044c \u0442\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0435\u0440\u043d\u043e\u0439 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u044b, \u0431\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043e\u043d\u0430 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0444\u0435\u0435\u0440\u0438\u0442, \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u00ab\u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0435\u0433\u043e \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u044f\u00bb (self-attention). \u041e\u043d \u0431\u044b\u043b \u0432\u043f\u0435\u0440\u0432\u044b\u0435 \u043e\u043f\u0438\u0441\u0430\u043d \u0432 2017 \u0433\u043e\u0434\u0443 \u0432 \u0441\u0442\u0430\u0442\u044c\u0435 <a href=\"https:\/\/arxiv.org\/abs\/1706.03762\" rel=\"noopener noreferrer nofollow\">\u00abAttention is all you need\u00bb<\/a>\u00a0\u043f\u043e\u0434 \u0430\u0432\u0442\u043e\u0440\u0441\u0442\u0432\u043e\u043c \u0412\u0430\u0441\u043c\u0430\u043d\u0438 \u0438 \u0434\u0440. \u041f\u043e\u0436\u0430\u043b\u0443\u0439, \u044d\u0442\u043e <em>\u043d\u0430\u0438<\/em>\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u0435\u0439\u0448\u0430\u044f \u0441\u0442\u0430\u0442\u044c\u044f \u043e\u0431 \u0438\u0441\u043a\u0443\u0441\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u043c \u0438\u043d\u0442\u0435\u043b\u043b\u0435\u043a\u0442\u0435, \u0438 \u0441 \u0442\u0435\u0445 \u043f\u043e\u0440 \u0435\u0451 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u043f\u0440\u0435\u0432\u0440\u0430\u0442\u0438\u043b\u043e\u0441\u044c \u0432 <a href=\"https:\/\/en.wikipedia.org\/wiki\/Snowclone\" rel=\"noopener noreferrer nofollow\">\u0431\u043e\u043b\u0432\u0430\u043d\u043a\u0443<\/a>\u00a0(\u043a\u043b\u0438\u0448\u0435 \u0434\u043b\u044f \u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u0438\u044f \u0434\u0440\u0443\u0433\u0438\u0445 \u0441\u0442\u0430\u0442\u0435\u0439).<\/p>\n<p>\u0418\u0442\u0430\u043a, \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e, \u043a \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0435\u043c\u0443 \u043c\u043e\u043c\u0435\u043d\u0442\u0443 \u0443 \u043d\u0430\u0441 \u0443\u0436\u0435 \u0435\u0441\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0432\u0435\u043a\u0442\u043e\u0440\u043e\u0432, \u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0437\u0430\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u044b \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u044b\u0435 \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0438 \u0441\u0435\u043c\u0430\u043d\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u0441\u043b\u043e\u0432, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0438\u0445\u0441\u044f \u0432 \u043d\u0430\u0448\u0435\u043c \u043f\u0440\u043e\u043c\u043f\u0442\u0435. \u041d\u0430\u043c \u043a\u0430\u043a\u0438\u043c-\u0442\u043e \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u043d\u0443\u0436\u043d\u043e \u0434\u043e\u043d\u0435\u0441\u0442\u0438 \u044d\u0442\u0438 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u0434\u043e \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0433\u043e \u0432\u0435\u043a\u0442\u043e\u0440\u0430. \u0421\u0435\u0439\u0447\u0430\u0441 \u0431\u0443\u0434\u0435\u0442 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u0441\u043f\u043e\u0439\u043b\u0435\u0440: \u0438\u043c\u0435\u043d\u043d\u043e \u0432 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u043c \u0432\u0435\u043a\u0442\u043e\u0440\u0435 \u0431\u0443\u0434\u0435\u0442 \u0445\u0440\u0430\u043d\u0438\u0442\u044c\u0441\u044f \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0442\u043e\u0433\u043e \u0441\u043b\u043e\u0432\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u0442\u0441\u044f \u0444\u0440\u0430\u0437\u0430.<\/p>\n<p>\u0412\u043e \u0444\u0440\u0430\u0437\u0435 \u0432\u0438\u0434\u0430 a \u00abI looked at the violet and saw that it was not the usual \u2026\u00bb (\u044f \u0432\u0437\u0433\u043b\u044f\u043d\u0443\u043b \u043d\u0430 \u043b\u0438\u043b\u043e\u0432\u043e\u0435 \u043f\u044f\u0442\u043d\u043e \u0438 \u0437\u0430\u043c\u0435\u0442\u0438\u043b, \u0447\u0442\u043e \u044d\u0442\u043e \u043d\u0435 \u043e\u0431\u044b\u0447\u043d\u044b\u0439\u2026), \u043d\u0430 \u043c\u0435\u0441\u0442\u0435 \u043c\u043d\u043e\u0433\u043e\u0442\u043e\u0447\u0438\u044f \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u0447\u0442\u043e-\u0442\u043e, \u0443\u0432\u0438\u0434\u0435\u043d\u043d\u043e\u0435 \u0432\u0430\u043c\u0438 (\u043e\u0431 \u044d\u0442\u043e\u043c \u0441\u0432\u0438\u0434\u0435\u0442\u0435\u043b\u044c\u0441\u0442\u0432\u0443\u0435\u0442 \u0441\u043b\u043e\u0432\u043e \u00absaw\u00bb), \u043e\u0431\u043b\u0430\u0434\u0430\u044e\u0449\u0435\u0435 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e\u043c \u00ab\u043b\u0438\u043b\u043e\u0432\u043e\u0441\u0442\u0438\u00bb \u0438 \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u00ab\u043d\u0435\u043e\u0431\u044b\u0447\u043d\u043e\u0435\u00bb (\u0441\u043e\u0447\u0435\u0442\u0430\u0435\u043c \u0442\u043e\u043a\u0435\u043d\u044b \u00ab\u043d\u0435\u00bb \u0438 \u00ab\u043e\u0431\u044b\u0447\u043d\u044b\u0439\u00bb, \u0442\u0435\u043c \u0441\u0430\u043c\u044b\u043c \u043c\u0435\u043d\u044f\u044f \u0437\u043d\u0430\u043a \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u044f \u00ab\u043e\u0431\u044b\u0447\u043d\u043e\u0441\u0442\u044c\u00bb \u043d\u0430 \u043f\u0440\u043e\u0442\u0438\u0432\u043e\u043f\u043e\u043b\u043e\u0436\u043d\u044b\u0439). \u041c\u043e\u0436\u043d\u043e \u043f\u0440\u0438\u0432\u0435\u0441\u0442\u0438 \u0442\u0430\u043a\u0443\u044e \u0440\u0435\u0430\u043b\u0438\u0441\u0442\u0438\u0447\u043d\u0443\u044e \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u044e: \u0447\u0435\u043b\u043e\u0432\u0435\u043a \u0447\u0438\u0442\u0430\u0435\u0442 \u043a\u043d\u0438\u0433\u0443 \u043d\u0430 \u0438\u043d\u043e\u0441\u0442\u0440\u0430\u043d\u043d\u043e\u043c \u044f\u0437\u044b\u043a\u0435, \u043e \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0438\u043c\u0435\u0435\u0442 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435, \u043d\u043e \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u043e \u0438\u043c \u043d\u0435 \u0432\u043b\u0430\u0434\u0435\u0435\u0442. \u0412 \u0442\u0430\u043a\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0447\u0435\u043b\u043e\u0432\u0435\u043a\u0443 \u043f\u0440\u0438\u0434\u0451\u0442\u0441\u044f \u0430\u043a\u043a\u0443\u0440\u0430\u0442\u043d\u043e \u0441\u043f\u043b\u0435\u0442\u0430\u0442\u044c \u043a\u0430\u0436\u0434\u043e\u0435 \u0441\u043b\u043e\u0432\u043e \u0441\u043e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c, \u0438, \u0435\u0441\u043b\u0438 \u043e\u043d \u043d\u0435 <em>\u043e\u0431\u0440\u0430\u0442\u0438\u0442 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u044f<\/em> \u043d\u0430 \u043a\u043b\u044e\u0447\u0435\u0432\u0443\u044e \u0447\u0430\u0441\u0442\u044c \u0444\u0440\u0430\u0437\u044b, \u0442\u043e \u0432\u0441\u044e \u0444\u0440\u0430\u0437\u0443 \u043f\u043e\u0439\u043c\u0451\u0442 \u043d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e.<\/p>\n<p>\u0427\u0442\u043e\u0431\u044b \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0442\u044c \u0442\u0430\u043a\u043e\u0439 \u043f\u0435\u0440\u0435\u043d\u043e\u0441 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043e\u0442 \u043e\u0434\u043d\u043e\u0433\u043e \u0442\u043e\u043a\u0435\u043d\u0430 \u043a \u0434\u0440\u0443\u0433\u043e\u043c\u0443, \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0440\u0430\u0437\u0440\u0435\u0448\u0438\u0442\u044c \u0432\u0435\u043a\u0442\u043e\u0440\u0430\u043c \u0432\u0441\u0435\u0445 \u0442\u043e\u043a\u0435\u043d\u043e\u0432 \u0432\u043b\u0438\u044f\u0442\u044c \u0434\u0440\u0443\u0433 \u043d\u0430 \u0434\u0440\u0443\u0433\u0430. \u0422\u0430\u043a, \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u044f\u0441\u044c \u043a \u0430\u043d\u0433\u043b\u0438\u0439\u0441\u043a\u043e\u043c\u0443: \u0435\u0441\u043b\u0438 \u043c\u044b \u0445\u043e\u0442\u0438\u043c \u043d\u0430\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0441\u043b\u043e\u0432\u043e \u00abit\u00bb \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0439 \u0441\u0435\u043c\u0430\u043d\u0442\u0438\u043a\u043e\u0439, \u0442\u043e \u043a\u0430\u043a\u0430\u044f \u0447\u0430\u0441\u0442\u044c \u0441\u0435\u043c\u0430\u043d\u0442\u0438\u043a\u0438 \u0434\u043e\u043b\u0436\u043d\u0430 \u043f\u043e\u0441\u0442\u0443\u043f\u0438\u0442\u044c \u043e\u0442 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0445 \u0432\u0435\u043a\u0442\u043e\u0440\u043e\u0432 \u0432 \u043f\u0440\u043e\u043c\u043f\u0442\u0435, \u0430 \u043a\u0430\u043a\u0430\u044f \u2013 \u043e\u0441\u0442\u0430\u0442\u044c\u0441\u044f \u043e\u0442 \u0441\u0430\u043c\u043e\u0433\u043e \u0441\u043b\u043e\u0432\u0430 \u00abit\u00bb? <\/p>\n<p>\u0412 \u0434\u0430\u043d\u043d\u043e\u0439 \u043c\u043e\u0434\u0435\u043b\u0438 \u044d\u0442\u0430 \u0437\u0430\u0434\u0430\u0447\u0430 \u0440\u0435\u0448\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 12 \u043d\u0430\u0431\u043e\u0440\u043e\u0432 \u043c\u0430\u0442\u0440\u0438\u0446, \u0438\u043c\u0435\u043d\u0443\u0435\u043c\u044b\u0445 Q (\u0437\u0430\u043f\u0440\u043e\u0441), K (\u043a\u043b\u044e\u0447) \u0438 V (\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435). \u0412 \u043a\u0430\u0436\u0434\u043e\u0439 \u0438\u0437 \u043d\u0438\u0445 \u043f\u043e 64 \u0441\u0442\u043e\u043b\u0431\u0446\u0430. \u0418\u0445 \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0438\u0437 \u0432\u0435\u043a\u0442\u043e\u0440\u043d\u044b\u0445 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0439 \u0447\u0435\u0440\u0435\u0437 768\u00d72304-\u043c\u0435\u0440\u043d\u043e\u0435 \u043b\u0438\u043d\u0435\u0439\u043d\u043e\u0435 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u00a0<strong>c_attn<\/strong>, \u0432\u0435\u0441\u0430 \u0438 \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u044f \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0445\u0440\u0430\u043d\u044f\u0442\u0441\u044f \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0430\u0445\u00a0<strong>c_attn_w<\/strong>\u00a0\u0438\u00a0<strong>c_attn_b<\/strong>.<\/p>\n<p>\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u043c\u00a0<strong>c_attn<\/strong>\u00a0\u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043c\u0430\u0442\u0440\u0438\u0446\u0430 \u0441\u043e\u00a0<strong>n_token<\/strong>\u00a0\u0441\u0442\u0440\u043e\u043a \u0438 2304 \u0441\u0442\u043e\u043b\u0431\u0446\u0430\u043c\u0438 (3\u00d712\u00d764). \u041e\u043d\u0430 \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0438\u0437 12 Q-\u043c\u0430\u0442\u0440\u0438\u0446, 12 K-\u043c\u0430\u0442\u0440\u0438\u0446 \u0438 12 V-\u043c\u0430\u0442\u0440\u0438\u0446, \u0443\u043f\u043e\u0440\u044f\u0434\u043e\u0447\u0435\u043d\u043d\u044b\u0445 \u0433\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u044c\u043d\u043e \u0438\u043c\u0435\u043d\u043d\u043e \u0432 \u0442\u0430\u043a\u043e\u043c \u043f\u043e\u0440\u044f\u0434\u043a\u0435.<\/p>\n<p>\u041a\u0430\u0436\u0434\u044b\u0439 \u043d\u0430\u0431\u043e\u0440, \u0441\u043e\u0441\u0442\u043e\u044f\u0449\u0438\u0439 \u0438\u0437 Q, K \u0438 V, \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u00ab\u0433\u043e\u043b\u043e\u0432\u043e\u0439\u00bb. \u0421 \u0438\u0445 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u0448\u0430\u0433 \u043f\u043e\u0434 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435\u043c \u00ab\u043c\u043d\u043e\u0433\u043e\u0433\u043e\u043b\u043e\u0432\u043e\u0435 \u0443\u0441\u043b\u043e\u0432\u043d\u043e\u0435 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0435\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435\u00bb, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0435\u0442\u0441\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u044f.<\/p>\n<p>\u041e\u043d\u0430 \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u043e \u044d\u0442\u043e\u0439 \u0444\u043e\u0440\u043c\u0443\u043b\u0435:<\/p>\n<figure class=\"\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/b7a\/3f0\/ee8\/b7a3f0ee8816d3c95951491a32765034.png\" width=\"193\" height=\"41\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/b7a\/3f0\/ee8\/b7a3f0ee8816d3c95951491a32765034.png\"\/><\/figure>\n<p>\u0433\u0434\u0435 softmax \u2013 \u044d\u0442\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u043d\u043e\u0440\u043c\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0432\u0435\u0441\u043e\u0432. \u041e\u043d\u0430 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442\u0441\u044f \u0442\u0430\u043a:<\/p>\n<figure class=\"\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/f63\/cb8\/d1f\/f63cb8d1f794504cc4a9512b4ba3ef4b.png\" width=\"158\" height=\"51\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/f63\/cb8\/d1f\/f63cb8d1f794504cc4a9512b4ba3ef4b.png\"\/><\/figure>\n<p>M\u00a0\u00a0 &#8212; \u044d\u0442\u043e \u043c\u0430\u0442\u0440\u0438\u0446\u0430-\u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u0430, \u0438\u043c\u0435\u043d\u0443\u0435\u043c\u0430\u044f \u00ab\u0443\u0441\u043b\u043e\u0432\u043d\u043e\u0439 \u043c\u0430\u0441\u043a\u043e\u0439\u00bb. \u041e\u043d\u0430 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442\u0441\u044f \u0442\u0430\u043a:<\/p>\n<figure class=\"\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/666\/3f6\/f6c\/6663f6f6cf9689a78b9b50a827fe4b53.png\" width=\"263\" height=\"133\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/666\/3f6\/f6c\/6663f6f6cf9689a78b9b50a827fe4b53.png\"\/><\/figure>\n<p>\u0424\u0443\u043d\u043a\u0446\u0438\u044f Softmax \u043e\u0431\u043d\u0443\u043b\u044f\u0435\u0442 \u0432\u0441\u0435 \u043e\u0442\u0440\u0438\u0446\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0431\u0435\u0441\u043a\u043e\u043d\u0435\u0447\u043d\u043e\u0441\u0442\u0438.<\/p>\n<p><strong>\u041f\u043e\u0447\u0435\u043c\u0443 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043c\u0430\u0441\u043a\u0438?<\/strong><\/p>\n<p>\u0412 \u043f\u0440\u043e\u043c\u043f\u0442\u0435 \u0438\u0437 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0433\u043e \u043f\u0440\u0438\u043c\u0435\u0440\u0430 \u0431\u044b\u043b\u043e 4 \u0442\u043e\u043a\u0435\u043d\u0430, \u0438 \u043c\u043e\u0434\u0435\u043b\u044c \u043f\u0435\u0440\u0432\u044b\u043c \u0434\u0435\u043b\u043e\u043c \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u043b\u0430 4\u00a0 \u0432\u0435\u043a\u0442\u043e\u0440\u043d\u044b\u0445 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0434\u043b\u044f 4 \u044d\u0442\u0438\u0445 \u0442\u043e\u043a\u0435\u043d\u043e\u0432. \u041f\u043e \u043c\u0435\u0440\u0435 \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u0439 \u0440\u0430\u0431\u043e\u0442\u044b \u043c\u043e\u0434\u0435\u043b\u0438 \u043d\u0430\u0434 \u044d\u0442\u0438\u043c\u0438 \u0432\u0435\u043a\u0442\u043e\u0440\u0430\u043c\u0438 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u043e \u043c\u043d\u043e\u0433\u043e \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0439, \u043d\u043e \u0432 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u043c \u043e\u043d\u0438 \u043f\u043e\u0439\u0434\u0443\u0442 \u043d\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e \u0438 \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u043e. \u0418\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0432 \u043e\u0434\u043d\u043e\u043c \u0432\u0435\u043a\u0442\u043e\u0440\u0435 \u043d\u0435 \u0437\u0430\u0442\u0440\u043e\u043d\u0443\u0442 \u0434\u0440\u0443\u0433\u0438\u0435 \u0432\u0435\u043a\u0442\u043e\u0440\u044b, \u043a\u0430\u043a \u0435\u0441\u043b\u0438 \u0431\u044b \u0438\u043d\u044b\u0445 \u0432\u0435\u043a\u0442\u043e\u0440\u043e\u0432 \u043d\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043e\u0432\u0430\u043b\u043e. \u0412\u0435\u043a\u0442\u043e\u0440\u044b \u0432\u043b\u0438\u044f\u044e\u0442 \u0434\u0440\u0443\u0433 \u043d\u0430 \u0434\u0440\u0443\u0433\u0430 \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u043f\u0440\u0435\u0434\u0435\u043b\u0430\u0445 \u0431\u043b\u043e\u043a\u0430 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0435\u0433\u043e \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u044f.<\/p>\n<p>\u041a\u0430\u043a \u0442\u043e\u043b\u044c\u043a\u043e \u043c\u043e\u0434\u0435\u043b\u044c \u0441\u043f\u0440\u0430\u0432\u0438\u0442\u0441\u044f \u0441 \u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u043a\u043e\u0439, \u043f\u0440\u0435\u0442\u0435\u043d\u0434\u0435\u043d\u0442\u044b \u043d\u0430 \u0440\u043e\u043b\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0433\u043e \u0442\u043e\u043a\u0435\u043d\u0430 \u0431\u0443\u0434\u0443\u0442 \u0432\u044b\u0431\u0438\u0440\u0430\u0442\u044c\u0441\u044f \u0438\u0441\u043a\u043b\u044e\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0438\u0441\u0445\u043e\u0434\u044f \u0438\u0437 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0433\u043e \u0432\u0435\u043a\u0442\u043e\u0440\u043d\u043e\u0433\u043e \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f. \u0412\u0441\u044f \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u0434\u043e\u043b\u0436\u043d\u0430 \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c\u0441\u044f \u0438\u043c\u0435\u043d\u043d\u043e \u043a \u044d\u0442\u043e\u043c\u0443 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u043c\u0443 \u0432\u0435\u043a\u0442\u043e\u0440\u0443, \u0430 \u043d\u0435 \u043f\u0440\u043e\u0447\u044c \u043e\u0442 \u043d\u0435\u0433\u043e. \u0412\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0433\u043e \u0432\u0435\u043a\u0442\u043e\u0440\u0430 \u043d\u0435 \u0434\u043e\u043b\u0436\u043d\u044b \u0432\u043b\u0438\u044f\u0442\u044c \u043d\u0430 \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0445 \u0432\u0435\u043a\u0442\u043e\u0440\u043e\u0432, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0432\u0448\u0438\u0445\u0441\u044f \u0432 \u0445\u043e\u0434\u0435 \u043f\u0440\u044f\u043c\u043e\u0433\u043e \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u043f\u043e \u0434\u0430\u043d\u043d\u043e\u0439 \u043c\u043e\u0434\u0435\u043b\u0438.<\/p>\n<p>\u0418\u043c\u0435\u043d\u043d\u043e \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043c\u044b \u00ab\u043c\u0430\u0441\u043a\u0438\u0440\u0443\u0435\u043c\u00bb \u043f\u043e\u0437\u0434\u043d\u0435\u0439\u0448\u0438\u0435 \u0432\u0435\u043a\u0442\u043e\u0440\u044b, \u0447\u0442\u043e\u0431\u044b \u043e\u043d\u0438 \u043d\u0435 \u0432\u043b\u0438\u044f\u043b\u0438 \u043d\u0430 \u0431\u043e\u043b\u0435\u0435 \u0440\u0430\u043d\u043d\u0438\u0435 \u0447\u0435\u0440\u0435\u0437 \u044d\u0442\u043e\u0442 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0439 \u043a\u0430\u043d\u0430\u043b. \u0412 \u044d\u0442\u043e\u043c \u0438 \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0443\u0441\u043b\u043e\u0432\u043d\u043e\u0441\u0442\u044c \u00ab\u043c\u043d\u043e\u0433\u043e\u0433\u043e\u043b\u043e\u0432\u043e\u0433\u043e \u0443\u0441\u043b\u043e\u0432\u043d\u043e\u0433\u043e \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0435\u0433\u043e \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u044f\u00bb. <\/p>\n<p><strong>\u041f\u043e\u0447\u0435\u043c\u0443 \u043c\u0430\u0442\u0440\u0438\u0446\u044b \u043d\u0430\u0437\u044b\u0432\u0430\u044e\u0442\u0441\u044f &#171;\u0437\u0430\u043f\u0440\u043e\u0441&#187;, &#171;\u043a\u043b\u044e\u0447&#187; \u0438 &#171;\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435&#187;?<\/strong><\/p>\n<p>\u0427\u0435\u0441\u0442\u043d\u043e \u0433\u043e\u0432\u043e\u0440\u044f, \u0434\u0430\u0436\u0435 \u043d\u0435 \u0443\u0432\u0435\u0440\u0435\u043d, \u0447\u0442\u043e \u044d\u0442\u043e \u0445\u043e\u0440\u043e\u0448\u0430\u044f \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u044f. \u041d\u043e, \u0442\u0435\u043c \u043d\u0435 \u043c\u0435\u043d\u0435\u0435, \u043f\u043e\u043f\u044b\u0442\u0430\u044e\u0441\u044c \u043e\u0431\u044a\u044f\u0441\u043d\u0438\u0442\u044c, \u043a\u0430\u043a\u043e\u0432\u0430 \u043b\u043e\u0433\u0438\u043a\u0430 \u0442\u0430\u043a\u0438\u0445 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0439.<\/p>\n<p>\u041a\u0430\u043a \u043f\u0440\u0430\u0432\u0438\u043b\u043e, \u0432 \u043c\u0430\u0448\u0438\u043d\u043d\u043e\u043c \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u0438 \u043f\u0440\u0438 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f\u0445 \u043d\u0435 \u0434\u043e\u043b\u0436\u043d\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0446\u0438\u043a\u043b\u044b \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u0434\u043b\u0438\u043d\u044b \u0438\u043b\u0438 \u0432\u0435\u0442\u0432\u043b\u0435\u043d\u0438\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0439. \u0412\u0441\u0435 \u0437\u0430\u0434\u0430\u0447\u0438 \u0434\u043e\u043b\u0436\u043d\u044b \u0440\u0435\u0448\u0430\u0442\u044c\u0441\u044f \u043a\u043e\u043c\u043f\u043e\u043d\u043e\u0432\u043a\u043e\u0439 \u043f\u0440\u043e\u0441\u0442\u044b\u0445 \u0430\u043d\u0430\u043b\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 (\u0441\u043b\u043e\u0436\u0435\u043d\u0438\u0435, \u0443\u043c\u043d\u043e\u0436\u0435\u043d\u0438\u0435, \u0432\u043e\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0432 \u0441\u0442\u0435\u043f\u0435\u043d\u044c, \u043b\u043e\u0433\u0430\u0440\u0438\u0444\u043c\u044b \u0438 \u0442\u0440\u0438\u0433\u043e\u043d\u043e\u043c\u0435\u0442\u0440\u0438\u044f). \u0422\u0430\u043a \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043e\u0431\u0440\u0430\u0442\u043d\u043e\u0435 \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u0434\u043b\u044f \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e\u0439 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0442\u0440\u0435\u0431\u0443\u044e\u0442\u0441\u044f \u0442\u0430\u043a\u0438\u0435 \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0438, \u043a\u0430\u043a <a href=\"https:\/\/en.wikipedia.org\/wiki\/Automatic_differentiation\" rel=\"noopener noreferrer nofollow\">\u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0434\u0438\u0444\u0444\u0435\u0440\u0435\u043d\u0446\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435<\/a>.<\/p>\n<p>\u041c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u043c\u043e\u0434\u0435\u043b\u044c \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0430 \u043a\u043b\u044e\u0447\u0435\u0439 \u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u0437\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0430 \u0432 \u0442\u0430\u043a\u043e\u043c \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0438: <\/p>\n<figure class=\"\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/de4\/db9\/304\/de4db9304ce9fe7850fa07f4aa82a4db.png\" width=\"107\" height=\"50\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/de4\/db9\/304\/de4db9304ce9fe7850fa07f4aa82a4db.png\"\/><\/figure>\n<p>\u041d\u043e \u044d\u0442\u043e \u043d\u0435 \u0433\u043b\u0430\u0434\u043a\u0430\u044f \u0434\u0438\u0444\u0444\u0435\u0440\u0435\u043d\u0446\u0438\u0440\u0443\u0435\u043c\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f, \u0438 \u0441 \u043e\u0431\u0440\u0430\u0442\u043d\u044b\u043c \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0435\u043d\u0438\u0435\u043c \u043e\u043d\u0430 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043d\u0435 \u0431\u0443\u0434\u0435\u0442. \u0427\u0442\u043e\u0431\u044b \u0444\u043e\u0440\u043c\u0443\u043b\u0430 \u0440\u0430\u0431\u043e\u0442\u0430\u043b\u0430, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0433\u043b\u0430\u0434\u043a\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u044e, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0431\u044b\u043b\u0430 \u0431\u044b <em>\u0431\u043b\u0438\u0437\u043a\u0430<\/em>\u00a0\u043a\u00a0v, \u043a\u043e\u0433\u0434\u0430\u00a0k\u00a0\u0431\u043b\u0438\u0437\u043a\u0430 \u043a\u00a0q, \u0438\u00a0<em>\u0431\u043b\u0438\u0437\u043a\u0430<\/em>\u00a0\u043a\u00a00\u00a0\u0432 \u0438\u043d\u044b\u0445 \u0441\u043b\u0443\u0447\u0430\u044f\u0445.<\/p>\n<p>\u0414\u043b\u044f \u044d\u0442\u043e\u0439 \u0446\u0435\u043b\u0438 \u043e\u0442\u043b\u0438\u0447\u043d\u043e \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u0442 \u0413\u0430\u0443\u0441\u0441\u043e\u0432\u043e \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 (\u00ab\u043a\u043e\u043b\u043e\u043a\u043e\u043b\u043e\u043e\u0431\u0440\u0430\u0437\u043d\u0430\u044f \u043a\u0440\u0438\u0432\u0430\u044f\u00bb) &#171;bell curve&#187;), \u043e\u0442\u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u0430\u044f \u043a\u00a0v \u0441 \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u0435\u043c\u00a0k\u00a0\u0438 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0438\u043c \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u043c \u043e\u0442\u043a\u043b\u043e\u043d\u0435\u043d\u0438\u0435\u043c:<\/p>\n<figure class=\"\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/cb7\/ce7\/2da\/cb7ce72dab8bcafebcd14cf861b908a2.png\" width=\"169\" height=\"50\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/cb7\/ce7\/2da\/cb7ce72dab8bcafebcd14cf861b908a2.png\"\/><\/figure>\n<p>\u0433\u0434\u0435\u00a0\u03c3\u00a0&#8212; \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u044b\u0439 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440, \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u044e\u0449\u0438\u0439, \u043d\u0430\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u00ab\u043e\u0441\u0442\u0440\u0430\u00bb \u043a\u043e\u043b\u043e\u043a\u043e\u043b\u043e\u043e\u0431\u0440\u0430\u0437\u043d\u0430\u044f \u043a\u0440\u0438\u0432\u0430\u044f.   <\/p>\n<p>\u0415\u0441\u043b\u0438 \u0432\u0437\u044f\u0442\u044c \u0432 \u0432\u0435\u043a\u0442\u043e\u0440\u043d\u043e\u043c \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0435 \u0441 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0431\u043e\u043b\u044c\u0448\u0438\u043c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e\u043c \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u0439 \u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0432\u0435\u043a\u0442\u043e\u0440\u00a0<strong>K<\/strong>\u00a0\u0438 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0432\u0435\u043a\u0442\u043e\u0440\u043e\u0432\u00a0<strong>Q<\/strong>, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u043c \u0438 \u0440\u0430\u0432\u043d\u043e\u043c\u0435\u0440\u043d\u044b\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u043e\u0442\u043a\u043b\u043e\u043d\u044f\u044e\u0442\u0441\u044f \u043e\u0442\u00a0K\u00a0\u0432 \u043a\u0430\u0436\u0434\u043e\u043c \u0438\u0437 \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u0439, \u0442\u043e \u0438\u0445 \u0441\u043a\u0430\u043b\u044f\u0440\u043d\u044b\u0435 \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u0441\u043b\u043e\u0436\u0430\u0442\u0441\u044f \u0438\u043c\u0435\u043d\u043d\u043e \u0432 \u043a\u043e\u043b\u043e\u043a\u043e\u043b\u043e\u043e\u0431\u0440\u0430\u0437\u043d\u0443\u044e \u043a\u0440\u0438\u0432\u0443\u044e. \u0421\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u0432 \u0432\u0435\u043a\u0442\u043e\u0440\u043d\u043e\u043c \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0435 \u00ab\u0434\u0438\u0444\u0444\u0435\u0440\u0435\u043d\u0446\u0438\u0440\u0443\u0435\u043c\u043e\u0435 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435 \u043a\u043b\u044e\u0447\u0435\u0439 \u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439\u00bb \u043c\u043e\u0436\u043d\u043e \u0441\u043c\u043e\u0434\u0435\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f\u00a0   <\/p>\n<figure class=\"\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/673\/f86\/7f6\/673f867f6aacaf8ba018b96d5399f9e2.png\" width=\"66\" height=\"17\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/673\/f86\/7f6\/673f867f6aacaf8ba018b96d5399f9e2.png\"\/><\/figure>\n<p>\u0442\u043e\u0433\u043e \u0441\u0430\u043c\u043e\u0433\u043e, \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u043c\u044b \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0438\u0441\u044c \u0432 \u043d\u0430\u0448\u0435\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u044f.  <\/p>\n<p>\u041e\u043f\u044f\u0442\u044c \u0436\u0435, \u044d\u0442\u0430 \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u044f \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043d\u0430\u0442\u044f\u043d\u0443\u0442\u0430. \u041b\u0443\u0447\u0448\u0435 \u043d\u0435 \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u0437\u0430\u0446\u0438\u043a\u043b\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u043d\u0430 \u043a\u043e\u043d\u0446\u0435\u043f\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0439 \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0449\u0435\u0439 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u044f, \u0442\u043e \u0435\u0441\u0442\u044c, \u043d\u0430 \u043f\u043e\u0442\u043e\u043a\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439, \u0445\u0435\u0448-\u0442\u0430\u0431\u043b\u0438\u0446\u0430\u0445 \u0438 \u043f\u0440. \u041c\u043e\u0436\u0435\u0442\u0435 \u0441\u0447\u0438\u0442\u0430\u0442\u044c, \u0447\u0442\u043e \u043e\u043d\u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u0432\u0434\u043e\u0445\u043d\u043e\u0432\u0438\u043b\u0438 \u043c\u0435\u043d\u044f \u043d\u0430 \u043e\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0439 \u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0444\u043e\u043a\u0443\u0441, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u044f \u0434\u043e\u0433\u0430\u0434\u0430\u043b\u0441\u044f \u043f\u0440\u043e\u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u2013 \u0438 \u043d\u0430 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0435 \u043e\u043d \u043e\u043a\u0430\u0437\u0430\u043b\u0441\u044f \u0432\u0435\u0441\u044c\u043c\u0430 \u0445\u043e\u0440\u043e\u0448.<\/p>\n<p>\u041f\u0440\u043e\u0438\u043b\u043b\u044e\u0441\u0442\u0440\u0438\u0440\u0443\u044e \u044d\u0442\u043e\u0442 \u0448\u0430\u0433:<\/p>\n<pre><code class=\"sql\">WITH    embeddings AS         (         SELECT  place, values         FROM    UNNEST(ARRAY[6307, 47701, 318, 1049]) WITH ORDINALITY AS tokens (token, ordinality)         CROSS JOIN LATERAL                 (                 SELECT  ordinality - 1 AS place                 ) o         CROSS JOIN LATERAL                 (                 SELECT  wte.values + wpe.values AS values                 FROM    wte                 CROSS JOIN                         wpe                 WHERE   wte.token = tokens.token                         AND wpe.place = o.place                 ) embedding         ),         c_attn_w AS         (         SELECT  *         FROM    c_attn_w         WHERE   block = 0         ),         c_attn_b AS         (         SELECT  *         FROM    c_attn_b         WHERE   block = 0         ),         ln_1_g AS         (         SELECT  *         FROM    ln_1_g         WHERE   block = 0         ),         ln_1_b AS         (         SELECT  *         FROM    ln_1_b         WHERE   block = 0         ),         mha_norm AS         (         SELECT  place, mm.values + c_attn_b.values AS values         FROM    (                 SELECT  place, ARRAY_AGG(INNER_PRODUCT(c_attn_w.values, layer_norm.values) ORDER BY y)::VECTOR(2304) AS values                 FROM    (                         SELECT  place, agg.values * ln_1_g.values + ln_1_b.values AS values                         FROM    (                                 SELECT  place, norm.values                                 FROM    embeddings                                 CROSS JOIN LATERAL                                         (                                         SELECT  AVG(value) AS mean,                                                 VAR_POP(value) AS variance                                         FROM    UNNEST(values::REAL[]) value                                         ) agg                                 CROSS JOIN LATERAL                                         (                                         SELECT  ARRAY_AGG((value - mean) \/ SQRT(variance + 1E-5) ORDER BY ordinality)::VECTOR(768) AS values                                         FROM    UNNEST(values::REAL[]) WITH ORDINALITY AS n(value, ordinality)                                         ) norm                                 ) agg                         CROSS JOIN                                 ln_1_b                         CROSS JOIN                                 ln_1_g                         ) layer_norm                 CROSS JOIN                         c_attn_w                 GROUP BY                         place                 ) mm         CROSS JOIN                 c_attn_b         ),         head AS         (         SELECT  place,                 (values::REAL[])[1:64]::VECTOR(64) AS q,                 (values::REAL[])[1 + 768:64 + 768]::VECTOR(64) AS k,                 (values::REAL[])[1 + 1536:64 + 1536]::VECTOR(64) AS v         FROM    mha_norm         ),         sm_input AS         (         SELECT  h1.place AS x, h2.place AS y, INNER_PRODUCT(h1.q, h2.k) \/ 8 + CASE WHEN h2.place > h1.place THEN -1E10 ELSE 0 END AS value         FROM    head h1         CROSS JOIN                 head h2         ),         sm_diff AS         (         SELECT  x, y, value - MAX(value) OVER (PARTITION BY x) AS diff         FROM    sm_input         ),         sm_exp AS         (         SELECT  x, y, CASE WHEN diff &lt; -745.13 THEN 0 ELSE EXP(diff) END AS e         FROM    sm_diff         ),         softmax AS         (         SELECT  x, y AS place, e \/ SUM(e) OVER (PARTITION BY x) AS value         FROM    sm_exp         ),         attention AS         (         SELECT  place, (ARRAY_AGG(value ORDER BY ordinality))[:3] AS values         FROM    (                 SELECT  x AS place, SUM(ARRAY_FILL(softmax.value, ARRAY[64])::VECTOR(64) * head.v) AS values                 FROM    softmax                 JOIN    head                 USING   (place)                 GROUP BY                         x                 ) q         CROSS JOIN LATERAL                 UNNEST(values::REAL[]) WITH ORDINALITY v (value, ordinality)         GROUP BY                 place         ) SELECT  place,         (SELECT STRING_AGG(TO_CHAR(n, 'S0.000'), ' ') || ' \u2026' FROM UNNEST((q::REAL[])[:3]) AS n) AS q,         (SELECT STRING_AGG(TO_CHAR(n, 'S0.000'), ' ') || ' \u2026' FROM UNNEST((k::REAL[])[:3]) AS n) AS k,         (SELECT STRING_AGG(TO_CHAR(n, 'S0.000'), ' ') || ' \u2026' FROM UNNEST((v::REAL[])[:3]) AS n) AS v,         matrix,         (SELECT STRING_AGG(TO_CHAR(n, 'S0.000'), ' ') || ' \u2026' FROM UNNEST((values::REAL[])[:3]) AS n) AS attention FROM    head JOIN    attention USING   (place) JOIN    (         SELECT  x AS place, STRING_AGG(CASE WHEN value > 0 THEN TO_CHAR(value, '0.00') ELSE '    0' END, ' ' ORDER BY place) AS matrix         FROM    softmax         GROUP BY                 x         ) softmax_grouped USING   (place)<\/code><\/pre>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/6f9\/68e\/c80\/6f968ec80257c3b21a63e633a5c9d13f.png\" width=\"1440\" height=\"147\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/6f9\/68e\/c80\/6f968ec80257c3b21a63e633a5c9d13f.png\"\/><\/figure>\n<p>\u0412\u043e\u0442 \u0447\u0442\u043e \u043c\u044b \u0441\u0434\u0435\u043b\u0430\u043b\u0438:<\/p>\n<ol>\n<li>\n<p>\u041f\u0440\u0435\u0436\u0434\u0435, \u0447\u0435\u043c \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u044f, \u043c\u044b \u043d\u043e\u0440\u043c\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043b\u0438 \u0432\u0435\u043a\u0442\u043e\u0440\u044b \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 \u043b\u0438\u043d\u0435\u0439\u043d\u043e\u0433\u043e \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f R\u2019 = R\u0413<sub>1<\/sub> + B<sub>1<\/sub>. \u041c\u0430\u0442\u0440\u0438\u0446\u0430\u00a0\u0413<sub>1<\/sub> \u0438 \u0432\u0435\u043a\u0442\u043e\u0440 B<sub>1<\/sub>\u043d\u0430\u0437\u044b\u0432\u0430\u044e\u0442\u0441\u044f, \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u00ab\u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435\u00bb \u0438 \u00ab\u0441\u0434\u0432\u0438\u0433\u00bb. \u042d\u0442\u043e \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b, \u0438\u0437\u0443\u0447\u0435\u043d\u043d\u044b\u0435 \u043c\u043e\u0434\u0435\u043b\u044c\u044e, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0445\u0440\u0430\u043d\u044f\u0442\u0441\u044f \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0430\u0445\u00a0<strong>ln_1_g<\/strong>\u00a0\u0438\u00a0<strong>ln_1_b<\/strong><\/p>\n<\/li>\n<li>\n<p>\u041c\u044b \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u043c \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0435\u0440\u0432\u0443\u044e \u0433\u043e\u043b\u043e\u0432\u0443 \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u0441\u043b\u043e\u044f, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u043e\u0433\u043e \u0432 \u044d\u0442\u043e\u043c \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0435. \u041f\u043e\u0441\u043b\u0435 \u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u0443\u043c\u043d\u043e\u0436\u0438\u043c \u0432\u0435\u043a\u0442\u043e\u0440\u044b \u043d\u0430 \u0438\u0437\u0443\u0447\u0435\u043d\u043d\u044b\u0435 \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442\u044b \u0438\u0437 <strong>c_attn_w<\/strong>\u00a0\u0438\u00a0<strong>c_attn_b<\/strong>\u00a0(\u00ab\u0432\u0435\u0441\u00bb \u0438 \u00ab\u0441\u043c\u0435\u0449\u0435\u043d\u0438\u0435\u00bb), \u043f\u043e\u0440\u0435\u0436\u0435\u043c \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0435 \u0432 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 2304-\u043c\u0435\u0440\u043d\u044b\u0435 \u0432\u0435\u043a\u0442\u043e\u0440\u044b. \u0412\u043e\u0437\u044c\u043c\u0451\u043c 64-\u043c\u0435\u0440\u043d\u044b\u0435 \u0432\u0435\u043a\u0442\u043e\u0440\u044b, \u043d\u0430\u0447\u0438\u043d\u0430\u044e\u0449\u0438\u0435\u0441\u044f \u0432 \u043f\u043e\u0437\u0438\u0446\u0438\u044f\u0445 0, 768 \u0438 1536. \u041e\u043d\u0438 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0442 \u0432\u0435\u043a\u0442\u043e\u0440\u0430\u043c Q, K \u0438 V \u043f\u0435\u0440\u0432\u043e\u0439 \u0433\u043e\u043b\u043e\u0432\u044b.<\/p>\n<\/li>\n<li>\n<p><strong>EXP<\/strong>\u00a0\u0432 PostgreSQL \u043f\u043b\u043e\u0445\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0441 \u043e\u0447\u0435\u043d\u044c \u043c\u0430\u043b\u044b\u043c\u0438 \u0447\u0438\u0441\u043b\u0430\u043c\u0438, \u0438 \u0438\u043c\u0435\u043d\u043d\u043e \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043c\u044b \u043f\u0440\u0438\u0431\u0435\u0433\u0430\u0435\u043c \u043a \u043d\u0443\u043b\u044e, \u0435\u0441\u043b\u0438\u00a0<strong>EXP<\/strong>\u00a0\u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442 \u043c\u0435\u043d\u0435\u0435 -745,13.<\/p>\n<\/li>\n<li>\n<p>\u0414\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0432\u0435\u043a\u0442\u043e\u0440\u0430 \u043c\u044b \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u043c \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0435\u0440\u0432\u044b\u0435 \u0442\u0440\u0438 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430. \u041c\u0430\u0440\u0438\u0446\u0443 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u044f \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u043c \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e.<\/p>\n<\/li>\n<\/ol>\n<p>\u0418\u0442\u0430\u043a, \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u0432\u0435\u043a\u0442\u043e\u0440\u0430 \u043a\u043e\u043f\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0432 \u0432\u044b\u0432\u043e\u0434 \u043a\u0430\u043a \u0435\u0441\u0442\u044c (\u0442\u0430\u043a \u043c\u044b \u043f\u043e\u0441\u0442\u0443\u043f\u0430\u0435\u043c \u0441 \u043f\u0435\u0440\u0432\u044b\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u043c \u043d\u0430 \u043a\u0430\u0436\u0434\u043e\u043c \u0441\u043b\u043e\u0435 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430). \u042d\u0442\u043e \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442, \u0447\u0442\u043e, \u043a\u043e\u0433\u0434\u0430 \u043c\u043e\u0434\u0435\u043b\u044c \u0443\u0436\u0435 \u043e\u0431\u0443\u0447\u0435\u043d\u0430, \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0438\u0440\u0443\u044e\u0449\u0435\u0435 \u0432\u0435\u043a\u0442\u043e\u0440\u043d\u043e\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u0442\u043e\u043a\u0435\u043d\u0430 \u0431\u0443\u0434\u0435\u0442 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0442\u044c\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u043c \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u0442\u043e\u043a\u0435\u043d\u0430. \u0412 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0435, \u043d\u0430 \u044d\u0442\u0430\u043f\u0435 \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0432\u043d\u043e\u0433\u043e \u0432\u044b\u0432\u043e\u0434\u0430, \u043f\u043e\u043a\u0430 \u0442\u043e\u043a\u0435\u043d\u044b \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0432 \u043f\u0440\u043e\u043c\u043f\u0442, \u043f\u043e \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044e \u0441 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0435\u0439 \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u0441\u044f \u043b\u0438\u0448\u044c \u0441\u0430\u043c\u043e\u0435 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0435 \u0432\u0435\u043a\u0442\u043e\u0440\u043d\u043e\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0432 \u0432\u044b\u0432\u043e\u0434\u0435. \u0418\u043c\u0435\u043d\u043d\u043e \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u0443\u0441\u043b\u043e\u0432\u043d\u0430\u044f \u043c\u0430\u0441\u043a\u0430.<\/p>\n<p>\u0417\u0430\u0433\u043b\u044f\u043d\u0435\u043c \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0432\u043f\u0435\u0440\u0451\u0434: \u0431\u043b\u043e\u043a \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u044f \u2013 \u044d\u0442\u043e <em>\u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0435<\/em> \u043c\u0435\u0441\u0442\u043e \u0432\u043e \u0432\u0441\u0451\u043c \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0435, \u0433\u0434\u0435 \u0442\u043e\u043a\u0435\u043d\u044b \u043c\u043e\u0433\u0443\u0442 \u0432\u043b\u0438\u044f\u0442\u044c \u0434\u0440\u0443\u0433 \u043d\u0430 \u0434\u0440\u0443\u0433\u0430 \u043d\u0430 \u044d\u0442\u0430\u043f\u0435 \u043f\u0440\u044f\u043c\u043e\u0433\u043e \u043f\u0440\u043e\u0445\u043e\u0434\u0430. \u041f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u043d\u0430 \u0434\u0430\u043d\u043d\u043e\u043c \u044d\u0442\u0430\u043f\u0435 \u043c\u044b \u043d\u0435 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u043c \u043f\u043e\u0437\u0434\u043d\u0435\u0439\u0448\u0438\u043c \u0442\u043e\u043a\u0435\u043d\u0430\u043c \u0432\u043b\u0438\u044f\u0442\u044c \u043d\u0430 \u0431\u043e\u043b\u0435\u0435 \u0440\u0430\u043d\u043d\u0435\u0435 (\u0438 \u043e\u0442\u043a\u043b\u044e\u0447\u0438\u043b\u0438 \u0442\u0430\u043a\u0443\u044e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c), \u0432\u0441\u0435 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f, \u043f\u0440\u043e\u0434\u0435\u043b\u0430\u043d\u043d\u044b\u0435 \u043d\u0430\u0434 \u0431\u043e\u043b\u0435\u0435 \u0440\u0430\u043d\u043d\u0438\u043c\u0438 \u0442\u043e\u043a\u0435\u043d\u0430\u043c\u0438, \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043d\u0430 \u0440\u0430\u0437\u043d\u044b\u0445 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u044f\u0445 \u043f\u0440\u044f\u043c\u043e\u0433\u043e \u043f\u0440\u043e\u0445\u043e\u0434\u0430 \u043f\u043e \u043c\u043e\u0434\u0435\u043b\u0438.<\/p>\n<p>\u041d\u0430\u043f\u043e\u043c\u043d\u044e, \u043c\u043e\u0434\u0435\u043b\u044c \u043f\u0440\u0438 \u0440\u0430\u0431\u043e\u0442\u0435 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442 \u0442\u043e\u043a\u0435\u043d\u044b \u0432 \u043f\u0440\u043e\u043c\u043f\u0442. \u0415\u0441\u043b\u0438 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 (\u0442\u043e\u043a\u0435\u043d\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439) \u043f\u0440\u043e\u043c\u043f\u0442 \u2013 \u044d\u0442\u043e \u00abPost greSQL \u0120is \u0120great\u00bb, \u0430 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0431\u0443\u0434\u0435\u0442 \u00abPost greSQL \u0120is \u0120great \u0120for\u00bb, \u0442\u043e \u0432\u0441\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0439, \u043f\u0440\u043e\u0434\u0435\u043b\u0430\u043d\u043d\u044b\u0445 \u043d\u0430\u0434 \u043f\u0435\u0440\u0432\u044b\u043c\u0438 \u0447\u0435\u0442\u044b\u0440\u044c\u043c\u044f \u0442\u043e\u043a\u0435\u043d\u0430\u043c\u0438, \u043c\u043e\u0436\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0438 \u0432 \u043d\u043e\u0432\u043e\u043c \u043f\u0440\u043e\u043c\u043f\u0442\u0435. \u041e\u043d\u0438 \u043d\u0438\u043a\u043e\u0433\u0434\u0430 \u043d\u0435 \u0438\u0437\u043c\u0435\u043d\u044f\u0442\u0441\u044f, \u043d\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e \u043e\u0442 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u0435\u0449\u0451 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u0438\u043a\u0440\u0435\u043f\u043b\u0435\u043d\u043e \u043a \u044d\u0442\u043e\u043c\u0443 \u043f\u0440\u043e\u043c\u043f\u0442\u0443.<\/p>\n<p>\u0412 \u0441\u0442\u0430\u0442\u044c\u0435 \u0414\u0436\u0435\u044f \u041c\u0443\u0434\u0438, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u044f \u043f\u0440\u0438\u0432\u0451\u043b \u0434\u043b\u044f \u043f\u0440\u0438\u043c\u0435\u0440\u0430, \u044d\u0442\u043e\u0442 \u0430\u0441\u043f\u0435\u043a\u0442 \u043d\u0435 \u0437\u0430\u0434\u0435\u0439\u0441\u0442\u0432\u0443\u0435\u0442\u0441\u044f (\u0440\u0430\u0432\u043d\u043e \u043a\u0430\u043a \u0438 \u0432 \u043c\u043e\u0435\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u2013 \u0434\u043b\u044f \u043f\u0440\u043e\u0441\u0442\u043e\u0442\u044b), \u043d\u043e \u0432 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u043e\u0439 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 GPT2 \u043e\u043d <a href=\"https:\/\/github.com\/openai\/gpt-2\/blob\/a74da5d99abaaba920de8131d64da2862a8f213b\/src\/model.py#L161\" rel=\"noopener noreferrer nofollow\">\u0437\u0430\u0434\u0435\u0439\u0441\u0442\u0432\u043e\u0432\u0430\u043d<\/a>.<\/p>\n<p>\u0417\u0430\u043a\u043e\u043d\u0447\u0438\u0432 \u0440\u0430\u0431\u043e\u0442\u0443 \u0441\u043e \u0432\u0441\u0435\u043c\u0438 \u0433\u043e\u043b\u043e\u0432\u0430\u043c\u0438, \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c 12 \u043c\u0430\u0442\u0440\u0438\u0446. \u041a\u0430\u0436\u0434\u0430\u044f \u0438\u0437 \u043d\u0438\u0445 \u0431\u0443\u0434\u0435\u0442 \u043f\u043e 64 \u0441\u0442\u043e\u043b\u0431\u0446\u0430 \u0432 \u0448\u0438\u0440\u0438\u043d\u0443 \u0438 \u043f\u043e <strong>n_tokens<\/strong>\u00a0\u0441\u0442\u0440\u043e\u043a \u0432 \u0432\u044b\u0441\u043e\u0442\u0443. \u0427\u0442\u043e\u0431\u044b \u0432\u043d\u043e\u0432\u044c \u043e\u0442\u043e\u0431\u0440\u0430\u0437\u0438\u0442\u044c \u0435\u0451 \u043d\u0430 \u0440\u0430\u0437\u043c\u0435\u0440\u043d\u043e\u0441\u0442\u044c \u0432\u0435\u043a\u0442\u043e\u0440\u043d\u044b\u0445 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0439 (768), \u043d\u0430\u043c \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0443\u0436\u043d\u043e \u0441\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u044d\u0442\u0438 \u043c\u0430\u0442\u0440\u0438\u0446\u044b \u0433\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u044c\u043d\u043e.<\/p>\n<p>\u041f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u044d\u0442\u0430\u043f \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043c\u043d\u043e\u0433\u043e\u0433\u043e\u043b\u043e\u0432\u043e\u0433\u043e \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u044f \u0441\u0432\u044f\u0437\u0430\u043d \u0441 \u043f\u0440\u043e\u0435\u0446\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u043f\u0443\u0442\u0451\u043c \u043b\u0438\u043d\u0435\u0439\u043d\u043e\u0433\u043e \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0432 \u0442\u043e\u043c \u0436\u0435 \u0441\u0430\u043c\u043e\u043c \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u0438. \u0421\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u0432\u0435\u0441\u0430 \u0438 \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u044f \u0445\u0440\u0430\u043d\u044f\u0442\u0441\u044f \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0430\u0445 <strong>c_proj_w<\/strong>\u00a0\u0438\u00a0<strong>c_proj_b<\/strong>.<\/p>\n<p>\u041d\u0438\u0436\u0435 \u043f\u0440\u0438\u0432\u0435\u0434\u0451\u043d \u043f\u043e\u043b\u043d\u044b\u0439 \u043a\u043e\u0434, \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u044e\u0449\u0438\u0439 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e \u043c\u043d\u043e\u0433\u043e\u0433\u043e\u043b\u043e\u0432\u043e\u0433\u043e \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u044f \u0432 \u043f\u0435\u0440\u0432\u043e\u043c \u0441\u043b\u043e\u0435:<\/p>\n<pre><code class=\"sql\">WITH    embeddings AS         (         SELECT  place, values         FROM    UNNEST(ARRAY[6307, 47701, 318, 1049]) WITH ORDINALITY AS tokens (token, ordinality)         CROSS JOIN LATERAL                 (                 SELECT  ordinality - 1 AS place                 ) o         CROSS JOIN LATERAL                 (                 SELECT  wte.values + wpe.values AS values                 FROM    wte                 CROSS JOIN                         wpe                 WHERE   wte.token = tokens.token                         AND wpe.place = o.place                 ) embedding         ),         c_proj_w AS         (         SELECT  *         FROM    c_proj_w         WHERE   block = 0         ),         c_proj_b AS         (         SELECT  *         FROM    c_proj_b         WHERE   block = 0         ),         mlp_c_fc_w AS         (         SELECT  *         FROM    mlp_c_fc_w         WHERE   block = 0         ),         mlp_c_fc_b AS         (         SELECT  *         FROM    mlp_c_fc_b         WHERE   block = 0         ),         mlp_c_proj_w AS         (         SELECT  *         FROM    mlp_c_proj_w         WHERE   block = 0         ),         mlp_c_proj_b AS         (         SELECT  *         FROM    mlp_c_proj_b         WHERE   block = 0         ),         c_attn_w AS         (         SELECT  *         FROM    c_attn_w         WHERE   block = 0         ),         c_attn_b AS         (         SELECT  *         FROM    c_attn_b         WHERE   block = 0         ),         ln_1_g AS         (         SELECT  *         FROM    ln_1_g         WHERE   block = 0         ),         ln_1_b AS         (         SELECT  *         FROM    ln_1_b         WHERE   block = 0         ),         mha_norm AS         (         SELECT  place, mm.values + c_attn_b.values AS values         FROM    (                 SELECT  place, ARRAY_AGG(INNER_PRODUCT(c_attn_w.values, layer_norm.values) ORDER BY y)::VECTOR(2304) AS values                 FROM    (                         SELECT  place, agg.values * ln_1_g.values + ln_1_b.values AS values                         FROM    (                                 SELECT  place, norm.values                                 FROM    embeddings                                 CROSS JOIN LATERAL                                         (                                         SELECT  AVG(value) AS mean,                                                 VAR_POP(value) AS variance                                         FROM    UNNEST(values::REAL[]) value                                         ) agg                                 CROSS JOIN LATERAL                                         (                                         SELECT  ARRAY_AGG((value - mean) \/ SQRT(variance + 1E-5) ORDER BY ordinality)::VECTOR(768) AS values                                         FROM    UNNEST(values::REAL[]) WITH ORDINALITY AS n(value, ordinality)                                         ) norm                                 ) agg                         CROSS JOIN                                 ln_1_b                         CROSS JOIN                                 ln_1_g                         ) layer_norm                 CROSS JOIN                         c_attn_w                 GROUP BY                         place                 ) mm         CROSS JOIN                 c_attn_b         ),         heads AS         (         SELECT  place, head,                 (values::REAL[])[(head * 64 + 1):(head * 64 + 64)]::VECTOR(64) AS q,                 (values::REAL[])[(head * 64 + 1 + 768):(head * 64 + 64 + 768)]::VECTOR(64) AS k,                 (values::REAL[])[(head * 64 + 1 + 1536):(head * 64 + 64 + 1536)]::VECTOR(64) AS v         FROM    mha_norm         CROSS JOIN                 GENERATE_SERIES(0, 11) head         ),         sm_input AS         (         SELECT  head, h1.place AS x, h2.place AS y, INNER_PRODUCT(h1.q, h2.k) \/ 8 + CASE WHEN h2.place > h1.place THEN -1E10 ELSE 0 END AS value         FROM    heads h1         JOIN    heads h2         USING   (head)         ),         sm_diff AS         (         SELECT  head, x, y, value - MAX(value) OVER (PARTITION BY head, x) AS diff         FROM    sm_input         ),         sm_exp AS         (         SELECT  head, x, y, CASE WHEN diff &lt; -745.13 THEN 0 ELSE EXP(diff) END AS e         FROM    sm_diff         ),         softmax AS         (         SELECT  head, x, y AS place, e \/ SUM(e) OVER (PARTITION BY head, x) AS value         FROM    sm_exp         ),         attention AS         (         SELECT  place, ARRAY_AGG(value ORDER BY head * 64 + ordinality)::VECTOR(768) AS values         FROM    (                 SELECT  head, x AS place, SUM(ARRAY_FILL(softmax.value, ARRAY[64])::VECTOR(64) * heads.v) AS values                 FROM    softmax                 JOIN    heads                 USING   (head, place)                 GROUP BY                         head, x                 ) q         CROSS JOIN LATERAL                 UNNEST(values::REAL[]) WITH ORDINALITY v (value, ordinality)         GROUP BY                 place         ),         mha AS         (         SELECT  place, w.values + c_proj_b.values AS values         FROM    (                 SELECT  attention.place, ARRAY_AGG(INNER_PRODUCT(attention.values, c_proj_w.values) ORDER BY c_proj_w.place)::VECTOR(768) AS values                 FROM    attention                 CROSS JOIN                         c_proj_w                 GROUP BY                         attention.place                 ) w         CROSS JOIN                 c_proj_b         ) SELECT  place,         (SELECT STRING_AGG(TO_CHAR(n, 'S0.000'), ' ') || ' \u2026' FROM UNNEST((values::REAL[])[:10]) AS n) AS q FROM    mha<\/code><\/pre>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/d5d\/673\/3a7\/d5d6733a783e738538d2d95ec2114fca.png\" width=\"1053\" height=\"148\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/d5d\/673\/3a7\/d5d6733a783e738538d2d95ec2114fca.png\"\/><\/figure>\n<p>\u041f\u0440\u0435\u0436\u0434\u0435 \u0447\u0435\u043c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u043c\u043d\u043e\u0433\u043e\u0433\u043e\u043b\u043e\u0432\u043e\u0433\u043e \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u044f \u0431\u0443\u0434\u0443\u0442 \u043f\u0435\u0440\u0435\u0434\u0430\u043d\u044b \u043d\u0430 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u0448\u0430\u0433, \u043a \u043d\u0438\u043c \u043d\u0443\u0436\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u044b\u0435 \u0432\u0445\u043e\u0434\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435. \u042d\u0442\u043e\u0442 \u0444\u043e\u043a\u0443\u0441 \u0431\u044b\u043b \u043e\u043f\u0438\u0441\u0430\u043d \u0435\u0449\u0451 \u0432 \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u043f\u043e \u0442\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0435\u0440\u0430\u043c. \u041f\u0440\u0435\u0434\u043f\u043e\u043b\u0430\u0433\u0430\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u043e\u043d \u0434\u043e\u043b\u0436\u0435\u043d \u043f\u043e\u043c\u043e\u0447\u044c \u0441 \u0437\u0430\u0442\u0443\u0445\u0430\u044e\u0449\u0438\u043c\u0438 \u0438 \u0432\u0437\u0440\u044b\u0432\u043d\u044b\u043c\u0438 \u0433\u0440\u0430\u0434\u0438\u0435\u043d\u0442\u0430\u043c\u0438.<\/p>\n<p>\u042d\u0442\u043e \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0451\u043d\u043d\u0430\u044f \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u043f\u0440\u0438 \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u0438: \u0438\u043d\u043e\u0433\u0434\u0430 \u0433\u0440\u0430\u0434\u0438\u0435\u043d\u0442\u044b \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u043e\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u043c\u0430\u043b\u044b \u0438\u043b\u0438 \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u0432\u0435\u043b\u0438\u043a\u0438. \u0415\u0441\u043b\u0438 \u043c\u0435\u043d\u044f\u0442\u044c \u0438\u0445 \u043f\u0440\u0438 \u043e\u0447\u0435\u0440\u0435\u0434\u043d\u043e\u0439 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0438 \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f, \u044d\u0442\u043e \u0442\u0430\u043a\u0436\u0435 \u043e\u0447\u0435\u043d\u044c \u0441\u043b\u0430\u0431\u043e \u0432\u043b\u0438\u044f\u0435\u0442 \u043d\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u043f\u043e\u0442\u0435\u0440\u044c (\u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043c\u043e\u0434\u0435\u043b\u044c \u0441\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043e\u0447\u0435\u043d\u044c \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u043e). \u0411\u044b\u0432\u0430\u0435\u0442 \u0438 \u043e\u0431\u0440\u0430\u0442\u043d\u044b\u0439 \u044d\u0444\u0444\u0435\u043a\u0442: \u0434\u0430\u0436\u0435 \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u043e\u0442\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u0435\u0442 \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u043f\u043e\u0442\u0435\u0440\u044c \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u0434\u0430\u043b\u0435\u043a\u043e \u043e\u0442 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043c\u0438\u043d\u0438\u043c\u0443\u043c\u0430, \u0442\u0435\u043c \u0441\u0430\u043c\u044b\u043c \u043e\u0431\u0435\u0441\u0446\u0435\u043d\u0438\u0432\u0430\u044f \u0432\u0441\u044e \u0440\u0430\u0431\u043e\u0442\u0443 \u043f\u043e \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044e. <\/p>\n<p><strong>\u041f\u0440\u044f\u043c\u043e\u0435 \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0435\u043d\u0438\u0435<\/strong><\/p>\n<p>\u0418\u043c\u0435\u043d\u043d\u043e \u0432 \u044d\u0442\u043e\u043c \u0438 \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0440\u0430\u0431\u043e\u0442\u0430 \u0433\u043b\u0443\u0431\u043e\u043a\u0438\u0445 \u043d\u0435\u0439\u0440\u043e\u043d\u043d\u044b\u0445 \u0441\u0435\u0442\u0435\u0439. \u0411\u043e\u043b\u044c\u0448\u0430\u044f \u0447\u0430\u0441\u0442\u044c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u043c\u043e\u0434\u0435\u043b\u0438 \u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0438\u043c\u0435\u043d\u043d\u043e \u043d\u0430 \u044d\u0442\u043e\u043c \u044d\u0442\u0430\u043f\u0435.<\/p>\n<p>\u0417\u0434\u0435\u0441\u044c \u043c\u044b \u0438\u043c\u0435\u0435\u043c \u0434\u0435\u043b\u043e \u0441\u00a0<a href=\"https:\/\/en.wikipedia.org\/wiki\/Feedforward_neural_network#Multilayer_perceptron\" rel=\"noopener noreferrer nofollow\">\u043c\u043d\u043e\u0433\u043e\u0441\u043b\u043e\u0439\u043d\u044b\u043c \u043f\u0435\u0440\u0446\u0435\u043f\u0442\u0440\u043e\u043d\u043e\u043c<\/a>, \u0443 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0442\u0440\u0438 \u0441\u043b\u043e\u044f (768, 3072, 768), \u0430 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0430\u043a\u0442\u0438\u0432\u0430\u0446\u0438\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u043b\u0438\u043d\u0435\u0439\u043d\u0443\u044e \u0435\u0434\u0438\u043d\u0438\u0446\u0443 \u0433\u0430\u0443\u0441\u0441\u043e\u0432\u0441\u043a\u043e\u0439\u00a0\u043e\u0448\u0438\u0431\u043a\u0438 (GELU):<\/p>\n<figure class=\"\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/158\/2eb\/408\/1582eb4081148863170cf26deff796b0.png\" width=\"367\" height=\"153\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/158\/2eb\/408\/1582eb4081148863170cf26deff796b0.png\"\/><\/figure>\n<p><a href=\"https:\/\/arxiv.org\/abs\/1606.08415\" rel=\"noopener noreferrer nofollow\">\u041a\u0430\u043a \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0430<\/a>, \u044d\u0442\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0434\u0430\u0451\u0442 \u043e\u0447\u0435\u043d\u044c \u0445\u043e\u0440\u043e\u0448\u0438\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u043f\u0440\u0438 \u0440\u0430\u0431\u043e\u0442\u0435 \u0441 \u0433\u043b\u0443\u0431\u043e\u043a\u0438\u043c\u0438 \u043d\u0435\u0439\u0440\u043e\u043d\u043d\u044b\u043c\u0438 \u0441\u0435\u0442\u044f\u043c\u0438. \u0415\u0451 \u043c\u043e\u0436\u043d\u043e \u0430\u043d\u0430\u043b\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0430\u043f\u043f\u0440\u043e\u043a\u0441\u0438\u043c\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432\u043e\u0442 \u0442\u0430\u043a:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/4e7\/d69\/168\/4e7d6916854cc78e19fab9621165d0de.png\" width=\"733\" height=\"52\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/4e7\/d69\/168\/4e7d6916854cc78e19fab9621165d0de.png\"\/><\/figure>\n<p>\u0418\u0437\u0443\u0447\u0435\u043d\u043d\u044b\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u043b\u0438\u043d\u0435\u0439\u043d\u043e\u0433\u043e \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0434\u043b\u044f \u0441\u0432\u044f\u0437\u0435\u0439 \u0432 \u0441\u043b\u043e\u0435 \u043d\u0430\u0437\u044b\u0432\u0430\u044e\u0442\u0441\u044f <strong>c_fc<\/strong>\u00a0(768 \u2192 3072) \u0438\u00a0<strong>c_proj<\/strong>\u00a0(3072 \u2192 768). \u0417\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0441 \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u0441\u043b\u043e\u044f \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u043d\u043e\u0440\u043c\u0430\u043b\u0438\u0437\u0443\u044e\u0442\u0441\u044f \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442\u043e\u0432, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0438\u0445\u0441\u044f \u0432 \u0438\u0437\u0443\u0447\u0435\u043d\u043d\u043e\u043c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0435\u00a0<strong>ln_2<\/strong>. \u041f\u043e \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u0438 \u044d\u0442\u0430\u043f\u0430 \u043f\u0440\u044f\u043c\u043e\u0433\u043e \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0435\u0433\u043e \u0432\u0432\u043e\u0434 \u0432\u043d\u043e\u0432\u044c \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043a \u0432\u044b\u0432\u043e\u0434\u0443. \u042d\u0442\u043e\u0442 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u0442\u0430\u043a\u0436\u0435 \u0432\u0445\u043e\u0434\u0438\u0442 \u0432 \u0441\u0430\u043c\u044b\u0439 \u043f\u0435\u0440\u0432\u044b\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u0434\u0438\u0437\u0430\u0439\u043d\u0430 \u0442\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0435\u0440\u043e\u0432. \u0412\u0435\u0441\u044c \u044d\u0442\u0430\u043f \u043f\u0440\u044f\u043c\u043e\u0433\u043e \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0442\u0430\u043a:<\/p>\n<p>\u0410 \u0432\u043e\u0442 \u043a\u0430\u043a \u044d\u0442\u043e \u0434\u0435\u043b\u0430\u0435\u0442\u0441\u044f \u043d\u0430 SQL:<\/p>\n<pre><code class=\"sql\">WITH    embeddings AS         (         SELECT  place, values         FROM    UNNEST(ARRAY[6307, 47701, 318, 1049]) WITH ORDINALITY AS tokens (token, ordinality)         CROSS JOIN LATERAL                 (                 SELECT  ordinality - 1 AS place                 ) o         CROSS JOIN LATERAL                 (                 SELECT  wte.values + wpe.values AS values                 FROM    wte                 CROSS JOIN                         wpe                 WHERE   wte.token = tokens.token                         AND wpe.place = o.place                 ) embedding         ),         c_proj_w AS         (         SELECT  *         FROM    c_proj_w         WHERE   block = 0         ),         c_proj_b AS         (         SELECT  *         FROM    c_proj_b         WHERE   block = 0         ),         mlp_c_fc_w AS         (         SELECT  *         FROM    mlp_c_fc_w         WHERE   block = 0         ),         mlp_c_fc_b AS         (         SELECT  *         FROM    mlp_c_fc_b         WHERE   block = 0         ),         mlp_c_proj_w AS         (         SELECT  *         FROM    mlp_c_proj_w         WHERE   block = 0         ),         mlp_c_proj_b AS         (         SELECT  *         FROM    mlp_c_proj_b         WHERE   block = 0         ),         c_attn_w AS         (         SELECT  *         FROM    c_attn_w         WHERE   block = 0         ),         c_attn_b AS         (         SELECT  *         FROM    c_attn_b         WHERE   block = 0         ),         ln_1_g AS         (         SELECT  *         FROM    ln_1_g         WHERE   block = 0         ),         ln_1_b AS         (         SELECT  *         FROM    ln_1_b         WHERE   block = 0         ),         ln_2_b AS         (         SELECT  *         FROM    ln_2_b         WHERE   block = 0         ),         ln_2_g AS         (         SELECT  *         FROM    ln_2_g         WHERE   block = 0         ),         mha_norm AS         (         SELECT  place, mm.values + c_attn_b.values AS values         FROM    (                 SELECT  place, ARRAY_AGG(INNER_PRODUCT(c_attn_w.values, layer_norm.values) ORDER BY y)::VECTOR(2304) AS values                 FROM    (                         SELECT  place, agg.values * ln_1_g.values + ln_1_b.values AS values                         FROM    (                                 SELECT  place, norm.values                                 FROM    embeddings                                 CROSS JOIN LATERAL                                         (                                         SELECT  AVG(value) AS mean,                                                 VAR_POP(value) AS variance                                         FROM    UNNEST(values::REAL[]) value                                         ) agg                                 CROSS JOIN LATERAL                                         (                                         SELECT  ARRAY_AGG((value - mean) \/ SQRT(variance + 1E-5) ORDER BY ordinality)::VECTOR(768) AS values                                         FROM    UNNEST(values::REAL[]) WITH ORDINALITY AS n(value, ordinality)                                         ) norm                                 ) agg                         CROSS JOIN                                 ln_1_b                         CROSS JOIN                                 ln_1_g                         ) layer_norm                 CROSS JOIN                         c_attn_w                 GROUP BY                         place                 ) mm         CROSS JOIN                 c_attn_b         ),         heads AS         (         SELECT  place, head,                 (values::REAL[])[(head * 64 + 1):(head * 64 + 64)]::VECTOR(64) AS q,                 (values::REAL[])[(head * 64 + 1 + 768):(head * 64 + 64 + 768)]::VECTOR(64) AS k,                 (values::REAL[])[(head * 64 + 1 + 1536):(head * 64 + 64 + 1536)]::VECTOR(64) AS v         FROM    mha_norm         CROSS JOIN                 GENERATE_SERIES(0, 11) head         ),         sm_input AS         (         SELECT  head, h1.place AS x, h2.place AS y, INNER_PRODUCT(h1.q, h2.k) \/ 8 + CASE WHEN h2.place > h1.place THEN -1E10 ELSE 0 END AS value         FROM    heads h1         JOIN    heads h2         USING   (head)         ),         sm_diff AS         (         SELECT  head, x, y, value - MAX(value) OVER (PARTITION BY head, x) AS diff         FROM    sm_input         ),         sm_exp AS         (         SELECT  head, x, y, CASE WHEN diff &lt; -745.13 THEN 0 ELSE EXP(diff) END AS e         FROM    sm_diff         ),         softmax AS         (         SELECT  head, x, y AS place, e \/ SUM(e) OVER (PARTITION BY head, x) AS value         FROM    sm_exp         ),         attention AS         (         SELECT  place, ARRAY_AGG(value ORDER BY head * 64 + ordinality)::VECTOR(768) AS values         FROM    (                 SELECT  head, x AS place, SUM(ARRAY_FILL(softmax.value, ARRAY[64])::VECTOR(64) * heads.v) AS values                 FROM    softmax                 JOIN    heads                 USING   (head, place)                 GROUP BY                         head, x                 ) q         CROSS JOIN LATERAL                 UNNEST(values::REAL[]) WITH ORDINALITY v (value, ordinality)         GROUP BY                 place         ),         mha AS         (         SELECT  place, w.values + c_proj_b.values + embeddings.values AS values         FROM    (                 SELECT  attention.place, ARRAY_AGG(INNER_PRODUCT(attention.values, c_proj_w.values) ORDER BY c_proj_w.place)::VECTOR(768) AS values                 FROM    attention                 CROSS JOIN                         c_proj_w                 GROUP BY                         attention.place                 ) w         CROSS JOIN                 c_proj_b         JOIN    embeddings         USING   (place)         ),         ffn_norm AS         (         SELECT  place, agg.values * ln_2_g.values + ln_2_b.values AS values         FROM    (                 SELECT  place, norm.values                 FROM    mha                 CROSS JOIN LATERAL                         (                         SELECT  AVG(value) AS mean,                                 VAR_POP(value) AS variance                         FROM    UNNEST(values::REAL[]) value                         ) agg                 CROSS JOIN LATERAL                         (                         SELECT  ARRAY_AGG((value - mean) \/ SQRT(variance + 1E-5) ORDER BY ordinality)::VECTOR(768) AS values                         FROM    UNNEST(values::REAL[]) WITH ORDINALITY AS n(value, ordinality)                         ) norm                 ) agg         CROSS JOIN                 ln_2_b         CROSS JOIN                 ln_2_g         ),         ffn_a AS         (         SELECT  gelu.place, gelu.values         FROM    (                 SELECT  place, w.values + mlp_c_fc_b.values AS values                 FROM    (                         SELECT  ffn_norm.place, ARRAY_AGG(INNER_PRODUCT(ffn_norm.values, mlp_c_fc_w.values) ORDER BY mlp_c_fc_w.place)::VECTOR(3072) AS values                         FROM    ffn_norm                         CROSS JOIN                                 mlp_c_fc_w                         GROUP BY                                 ffn_norm.place                         ) w                 CROSS JOIN                         mlp_c_fc_b                 ) v         CROSS JOIN LATERAL                 (                 SELECT  place, ARRAY_AGG(0.5 * value * (1 + TANH(0.797884560802 * (value + 0.044715 * value*value*value))) ORDER BY ordinality)::VECTOR(3072) AS values                 FROM    UNNEST(values::REAL[]) WITH ORDINALITY n (value, ordinality)                 GROUP BY                         place                 ) gelu         ),         ffn AS         (         SELECT  place, w.values + mlp_c_proj_b.values + mha.values AS values         FROM    (                 SELECT  ffn_a.place, ARRAY_AGG(INNER_PRODUCT(ffn_a.values, mlp_c_proj_w.values) ORDER BY mlp_c_proj_w.place)::VECTOR(768) AS values                 FROM    ffn_a                 CROSS JOIN                         mlp_c_proj_w                 GROUP BY                         ffn_a.place                 ) w         CROSS JOIN                 mlp_c_proj_b         JOIN    mha         USING   (place)         ) SELECT  place,         (SELECT STRING_AGG(TO_CHAR(n, 'S0.000'), ' ') || ' \u2026' FROM UNNEST((values::REAL[])[:10]) AS n) AS q FROM    ffn<\/code><\/pre>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/908\/0f5\/4c6\/9080f54c68ca45f66b84cda8eba312be.png\" width=\"1261\" height=\"178\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/908\/0f5\/4c6\/9080f54c68ca45f66b84cda8eba312be.png\"\/><\/figure>\n<p>\u0418\u043c\u0435\u043d\u043d\u043e \u044d\u0442\u043e\u0442 \u0432\u044b\u0432\u043e\u0434 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0438\u0437 \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u0431\u043b\u043e\u043a\u0430 GPT2.   <\/p>\n<h2>\u0411\u043b\u043e\u043a\u0438 <\/h2>\n<p>\u041e\u043f\u0435\u0440\u0430\u0446\u0438\u0438, \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u043d\u044b\u0435 \u043d\u0430 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0445 \u044d\u0442\u0430\u043f\u0430\u0445, \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u044e\u0442\u0441\u044f \u0432 \u043a\u0430\u0436\u0434\u043e\u043c \u0438\u0437 \u0441\u043b\u043e\u0451\u0432 (\u0438\u043c\u0435\u043d\u0443\u0435\u043c\u044b\u0445 \u00ab\u0431\u043b\u043e\u043a\u0430\u043c\u0438\u00bb). \u0411\u043b\u043e\u043a\u0438 \u0432\u044b\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u0432 \u0432\u0438\u0434\u0435 \u043a\u043e\u043d\u0432\u0435\u0439\u0435\u0440\u0430, \u0442\u0430\u043a, \u0447\u0442\u043e \u0432\u044b\u0432\u043e\u0434 \u0438\u0437 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0433\u043e \u0431\u043b\u043e\u043a\u0430 \u0441\u0440\u0430\u0437\u0443 \u043f\u043e\u0434\u0430\u0451\u0442\u0441\u044f \u043d\u0430 \u0432\u0432\u043e\u0434 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c\u0443. \u0423 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0438\u0437 \u0431\u043b\u043e\u043a\u043e\u0432 \u2013 \u0441\u0432\u043e\u0439 \u043d\u0430\u0431\u043e\u0440 \u0438\u0437\u0443\u0447\u0435\u043d\u043d\u044b\u0445 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432.<\/p>\n<p>\u0412 SQL \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0441\u043e\u0435\u0434\u0438\u043d\u0438\u0442\u044c \u0431\u043b\u043e\u043a\u0438 \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0432\u043d\u043e\u0433\u043e CTE.<\/p>\n<p>\u041a\u0430\u043a \u0442\u043e\u043b\u044c\u043a\u043e \u0444\u0438\u043d\u0430\u043b\u044c\u043d\u044b\u0439 \u0431\u043b\u043e\u043a \u0432\u044b\u0434\u0430\u0441\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f, \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043d\u043e\u0440\u043c\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 \u0438\u0437\u0443\u0447\u0435\u043d\u043d\u043e\u0433\u043e \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430 <strong>ln_f<\/strong>.<\/p>\n<p>\u0412\u043e\u0442 \u043a\u0430\u043a \u0432 \u0438\u0442\u043e\u0433\u0435 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u043c\u043e\u0434\u0435\u043b\u044c:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/769\/9ab\/a46\/7699aba465e680cfde43e9ff6ec6a2b2.png\" width=\"602\" height=\"222\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/769\/9ab\/a46\/7699aba465e680cfde43e9ff6ec6a2b2.png\"\/><\/figure>\n<p>\u0410 \u0432\u043e\u0442 \u043a\u0430\u043a \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043d\u0430 SQL:<\/p>\n<pre><code class=\"sql\">WITH    RECURSIVE         initial AS         (         SELECT  ARRAY[6307, 47701, 318, 1049] AS input         ),         hparams AS         (         SELECT  12 AS n_block         ),         embeddings AS         (         SELECT  place, values         FROM    initial         CROSS JOIN                 hparams         CROSS JOIN LATERAL                 UNNEST(input) WITH ORDINALITY AS tokens (token, ordinality)         CROSS JOIN LATERAL                 (                 SELECT  ordinality - 1 AS place                 ) o         CROSS JOIN LATERAL                 (                 SELECT  wte.values + wpe.values AS values                 FROM    wte                 CROSS JOIN                         wpe                 WHERE   wte.token = tokens.token                         AND wpe.place = o.place                 ) embedding         ),         transform AS         (         SELECT  0 AS block, place, values         FROM    embeddings         UNION ALL         (         WITH    previous AS                 (                 SELECT  *                 FROM    transform                 )         SELECT  block + 1 AS block, transformed_layer.*         FROM    hparams         CROSS JOIN LATERAL                 (                 SELECT  block                 FROM    previous                 WHERE   block &lt; 12                 LIMIT   1                 ) q         CROSS JOIN LATERAL                 (                 WITH    ln_2_b AS                         (                         SELECT  *                         FROM    ln_2_b                         WHERE   block = q.block                         ),                         ln_2_g AS                         (                         SELECT  *                         FROM    ln_2_g                         WHERE   block = q.block                         ),                         c_proj_w AS                         (                         SELECT  *                         FROM    c_proj_w                         WHERE   block = q.block                         ),                         c_proj_b AS                         (                         SELECT  *                         FROM    c_proj_b                         WHERE   block = q.block                         ),                         mlp_c_fc_w AS                         (                         SELECT  *                         FROM    mlp_c_fc_w                         WHERE   block = q.block                         ),                         mlp_c_fc_b AS                         (                         SELECT  *                         FROM    mlp_c_fc_b                         WHERE   block = q.block                         ),                         mlp_c_proj_w AS                         (                         SELECT  *                         FROM    mlp_c_proj_w                         WHERE   block = q.block                         ),                         mlp_c_proj_b AS                         (                         SELECT  *                         FROM    mlp_c_proj_b                         WHERE   block = q.block                         ),                         c_attn_w AS                         (                         SELECT  *                         FROM    c_attn_w                         WHERE   block = q.block                         ),                         c_attn_b AS                         (                         SELECT  *                         FROM    c_attn_b                         WHERE   block = q.block                         ),                         ln_1_g AS                         (                         SELECT  *                         FROM    ln_1_g                         WHERE   block = q.block                         ),                         ln_1_b AS                         (                         SELECT  *                         FROM    ln_1_b                         WHERE   block = q.block                         ),                         mha_norm AS                         (                         SELECT  place, mm.values + c_attn_b.values AS values                         FROM    (                                 SELECT  place, ARRAY_AGG(INNER_PRODUCT(c_attn_w.values, layer_norm.values) ORDER BY y)::VECTOR(2304) AS values                                 FROM    (                                         SELECT  place, agg.values * ln_1_g.values + ln_1_b.values AS values                                         FROM    (                                                 SELECT  place, norm.values                                                 FROM    previous                                                 CROSS JOIN LATERAL                                                         (                                                         SELECT  AVG(value) AS mean,                                                                 VAR_POP(value) AS variance                                                         FROM    UNNEST(values::REAL[]) value                                                         ) agg                                                 CROSS JOIN LATERAL                                                         (                                                         SELECT  ARRAY_AGG((value - mean) \/ SQRT(variance + 1E-5) ORDER BY ordinality)::VECTOR(768) AS values                                                         FROM    UNNEST(values::REAL[]) WITH ORDINALITY AS n(value, ordinality)                                                         ) norm                                                 ) agg                                         CROSS JOIN                                                 ln_1_b                                         CROSS JOIN                                                 ln_1_g                                         ) layer_norm                                 CROSS JOIN                                         c_attn_w                                 GROUP BY                                         place                                 ) mm                         CROSS JOIN                                 c_attn_b                         ),                         heads AS                         (                         SELECT  place, head,                                 (values::REAL[])[(head * 64 + 1):(head * 64 + 64)]::VECTOR(64) AS q,                                 (values::REAL[])[(head * 64 + 1 + 768):(head * 64 + 64 + 768)]::VECTOR(64) AS k,                                 (values::REAL[])[(head * 64 + 1 + 1536):(head * 64 + 64 + 1536)]::VECTOR(64) AS v                         FROM    mha_norm                         CROSS JOIN                                 GENERATE_SERIES(0, 11) head                         ),                         sm_input AS                         (                         SELECT  head, h1.place AS x, h2.place AS y, INNER_PRODUCT(h1.q, h2.k) \/ 8 + CASE WHEN h2.place > h1.place THEN -1E10 ELSE 0 END AS value                         FROM    heads h1                         JOIN    heads h2                         USING   (head)                         ),                         sm_diff AS                         (                         SELECT  head, x, y, value - MAX(value) OVER (PARTITION BY head, x) AS diff                         FROM    sm_input                         ),                         sm_exp AS                         (                         SELECT  head, x, y, CASE WHEN diff &lt; -745.13 THEN 0 ELSE EXP(diff) END AS e                         FROM    sm_diff                         ),                         softmax AS                         (                         SELECT  head, x, y AS place, e \/ SUM(e) OVER (PARTITION BY head, x) AS value                         FROM    sm_exp                         ),                         attention AS                         (                         SELECT  place, ARRAY_AGG(value ORDER BY head * 64 + ordinality)::VECTOR(768) AS values                         FROM    (                                 SELECT  head, x AS place, SUM(ARRAY_FILL(softmax.value, ARRAY[64])::VECTOR(64) * heads.v) AS values                                 FROM    softmax                                 JOIN    heads                                 USING   (head, place)                                 GROUP BY                                         head, x                                 ) q                         CROSS JOIN LATERAL                                 UNNEST(values::REAL[]) WITH ORDINALITY v (value, ordinality)                         GROUP BY                                 place                         ),                         mha AS                         (                         SELECT  place, w.values + c_proj_b.values + previous.values AS values                         FROM    (                                 SELECT  attention.place, ARRAY_AGG(INNER_PRODUCT(attention.values, c_proj_w.values) ORDER BY c_proj_w.place)::VECTOR(768) AS values                                 FROM    attention                                 CROSS JOIN                                         c_proj_w                                 GROUP BY                                         attention.place                                 ) w                         CROSS JOIN                                 c_proj_b                         JOIN    previous                         USING   (place)                         ),                         ffn_norm AS                         (                         SELECT  place, agg.values * ln_2_g.values + ln_2_b.values AS values                         FROM    (                                 SELECT  place, norm.values                                 FROM    mha                                 CROSS JOIN LATERAL                                         (                                         SELECT  AVG(value) AS mean,                                                 VAR_POP(value) AS variance                                         FROM    UNNEST(values::REAL[]) value                                         ) agg                                 CROSS JOIN LATERAL                                         (                                         SELECT  ARRAY_AGG((value - mean) \/ SQRT(variance + 1E-5) ORDER BY ordinality)::VECTOR(768) AS values                                         FROM    UNNEST(values::REAL[]) WITH ORDINALITY AS n(value, ordinality)                                         ) norm                                 ) agg                         CROSS JOIN                                 ln_2_b                         CROSS JOIN                                 ln_2_g                         ),                         ffn_a AS                         (                         SELECT  gelu.place, gelu.values                         FROM    (                                 SELECT  place, w.values + mlp_c_fc_b.values AS values                                 FROM    (                                         SELECT  ffn_norm.place, ARRAY_AGG(INNER_PRODUCT(ffn_norm.values, mlp_c_fc_w.values) ORDER BY mlp_c_fc_w.place)::VECTOR(3072) AS values                                         FROM    ffn_norm                                         CROSS JOIN                                                 mlp_c_fc_w                                         GROUP BY                                                 ffn_norm.place                                         ) w                                 CROSS JOIN                                         mlp_c_fc_b                                 ) v                         CROSS JOIN LATERAL                                 (                                 SELECT  place, ARRAY_AGG(0.5 * value * (1 + TANH(0.797884560802 * (value + 0.044715 * value*value*value))) ORDER BY ordinality)::VECTOR(3072) AS values                                 FROM    UNNEST(values::REAL[]) WITH ORDINALITY n (value, ordinality)                                 GROUP BY                                         place                                 ) gelu                         ),                         ffn AS                         (                         SELECT  place, w.values + mlp_c_proj_b.values + mha.values AS values                         FROM    (                                 SELECT  ffn_a.place, ARRAY_AGG(INNER_PRODUCT(ffn_a.values, mlp_c_proj_w.values) ORDER BY mlp_c_proj_w.place)::VECTOR(768) AS values                                 FROM    ffn_a                                 CROSS JOIN                                         mlp_c_proj_w                                 GROUP BY                                         ffn_a.place                                 ) w                         CROSS JOIN                                 mlp_c_proj_b                         JOIN    mha                         USING   (place)                         )                 SELECT  *                 FROM    ffn                 ) transformed_layer         )         ),         block_output AS         (         SELECT  *         FROM    hparams         JOIN    transform         ON      transform.block = n_block         ),         ln_f AS         (         SELECT  place, norm.values * ln_f_g.values + ln_f_b.values AS values         FROM    block_output         CROSS JOIN LATERAL                 (                 SELECT  AVG(value) AS mean,                         VAR_POP(value) AS variance                 FROM    UNNEST(values::REAL[]) AS n(value)                 ) agg         CROSS JOIN LATERAL                 (                 SELECT  ARRAY_AGG((value - mean) \/ SQRT(variance + 1E-5) ORDER BY ordinality)::VECTOR(768) AS values                 FROM    UNNEST(values::REAL[]) WITH ORDINALITY AS n (value, ordinality)                 ) norm         CROSS JOIN                 ln_f_b         CROSS JOIN                 ln_f_g         ) SELECT  place,         (SELECT STRING_AGG(TO_CHAR(n, 'S0.000'), ' ') || ' \u2026' FROM UNNEST((values::REAL[])[:10]) AS n) AS q FROM    ln_f<\/code><\/pre>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/378\/876\/fdf\/378876fdfdedf326e8861f0f96c15bc7.png\" width=\"1261\" height=\"176\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/378\/876\/fdf\/378876fdfdedf326e8861f0f96c15bc7.png\"\/><\/figure>\n<p>\u042d\u0442\u043e \u0432\u044b\u0432\u043e\u0434 \u043c\u043e\u0434\u0435\u043b\u0438.<\/p>\n<p>\u0427\u0435\u0442\u0432\u0451\u0440\u0442\u044b\u0439 \u0432\u0435\u043a\u0442\u043e\u0440 \u2013 \u044d\u0442\u043e \u0438 \u0435\u0441\u0442\u044c \u0444\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0433\u043e \u0442\u043e\u043a\u0435\u043d\u0430, \u043f\u0440\u0435\u0434\u0441\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u0433\u043e \u043c\u043e\u0434\u0435\u043b\u044c\u044e. \u041d\u0430\u043c \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0443\u0436\u043d\u043e \u043e\u0442\u043e\u0431\u0440\u0430\u0437\u0438\u0442\u044c \u0435\u0433\u043e \u043e\u0431\u0440\u0430\u0442\u043d\u043e \u043d\u0430 \u0442\u043e\u043a\u0435\u043d\u044b.<\/p>\n<h2>\u0422\u043e\u043a\u0435\u043d\u044b <\/h2>\n<p>\u0423 \u043d\u0430\u0441 \u0443\u0436\u0435 \u0435\u0441\u0442\u044c \u0432\u0435\u043a\u0442\u043e\u0440\u043d\u043e\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435 (768-\u043c\u0435\u0440\u043d\u043e\u0435), \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c, \u0441\u043e\u0433\u043b\u0430\u0441\u043d\u043e \u043c\u043e\u0434\u0435\u043b\u0438, \u0437\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u044b \u0441\u0435\u043c\u0430\u043d\u0442\u0438\u043a\u0430 \u0438 \u0433\u0440\u0430\u043c\u043c\u0430\u0442\u0438\u043a\u0430 \u043d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u043c\u043f\u0442\u0430. \u0422\u0435\u043f\u0435\u0440\u044c \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u043e\u0442\u043e\u0431\u0440\u0430\u0437\u0438\u0442\u044c \u0435\u0433\u043e \u043e\u0431\u0440\u0430\u0442\u043d\u043e \u043d\u0430 \u0442\u043e\u043a\u0435\u043d.<\/p>\n<p>\u041e\u0434\u043d\u0430 \u0438\u0437 \u043f\u0435\u0440\u0432\u044b\u0445 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439, \u0441\u043e\u0432\u0435\u0440\u0448\u0430\u0435\u043c\u044b\u0445 \u043c\u043e\u0434\u0435\u043b\u044c\u044e \u2013 \u044d\u0442\u043e \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0442\u043e\u043a\u0435\u043d\u043e\u0432 \u043d\u0430 \u0438\u0445 \u0432\u0435\u043a\u0442\u043e\u0440\u043d\u044b\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f. \u042d\u0442\u0430 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044f \u0434\u0435\u043b\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 \u043c\u0430\u0442\u0440\u0438\u0446\u044b <strong>wpe<\/strong> \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u043c 50257\u00d7768. \u0422\u043e\u0439 \u0436\u0435 \u0441\u0430\u043c\u043e\u0439 \u043c\u0430\u0442\u0440\u0438\u0446\u0435\u0439 \u043d\u0430\u043c \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f, \u0447\u0442\u043e\u0431\u044b \u043e\u0442\u043e\u0431\u0440\u0430\u0437\u0438\u0442\u044c \u0432\u0435\u043a\u0442\u043e\u0440\u043d\u043e\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043e\u0431\u0440\u0430\u0442\u043d\u043e \u043d\u0430 \u0442\u043e\u043a\u0435\u043d.<\/p>\n<p>\u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0441\u0442\u0440\u043e\u0433\u043e \u043e\u0431\u0440\u0430\u0442\u043d\u043e\u0435 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e: (\u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e) \u0432\u0435\u043a\u0442\u043e\u0440\u043d\u043e\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u0442\u044c \u043d\u0438 \u0441 \u043e\u0434\u043d\u043e\u0439 \u0438\u0437 \u0441\u0442\u0440\u043e\u043a \u0432 \u043c\u0430\u0442\u0440\u0438\u0446\u0435. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0430\u043c \u043f\u0440\u0438\u0434\u0451\u0442\u0441\u044f \u043d\u0430\u0439\u0442\u0438 \u0442\u043e\u043a\u0435\u043d, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u00ab\u0431\u043b\u0438\u0436\u0435 \u0432\u0441\u0435\u0433\u043e\u00bb \u043a \u0432\u0435\u043a\u0442\u043e\u0440\u043d\u043e\u043c\u0443 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044e.<\/p>\n<p>\u041f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 (\u043a\u0430\u043a \u043c\u044b \u043d\u0430\u0434\u0435\u0435\u043c\u0441\u044f), \u0432 \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u044f\u0445 \u0432\u0435\u043a\u0442\u043e\u0440\u043d\u044b\u0445 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0439 \u0437\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u044b \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441\u0435\u043c\u0430\u043d\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0438 \u0433\u0440\u0430\u043c\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0430\u0441\u043f\u0435\u043a\u0442\u044b \u0442\u043e\u043a\u0435\u043d\u0430, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0441\u043e\u043f\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0438\u0445 \u043a\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u0442\u043e\u0447\u043d\u0435\u0435. \u041e\u0434\u0438\u043d \u0438\u0437 \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u0432 \u043a\u043e\u043d\u0441\u043e\u043b\u0438\u0434\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u00ab\u0441\u0442\u0435\u043f\u0435\u043d\u044c \u0431\u043b\u0438\u0437\u043e\u0441\u0442\u0438\u00bb \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0438\u0437 \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u0439 \u2013 \u0432\u044b\u0447\u0438\u0441\u043b\u0438\u0442\u044c \u0441\u043a\u0430\u043b\u044f\u0440\u043d\u043e\u0435 \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0434\u0432\u0443\u0445 \u0432\u0435\u043a\u0442\u043e\u0440\u043d\u044b\u0445 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0439. \u0427\u0435\u043c \u0432\u044b\u0448\u0435 \u0431\u0443\u0434\u0435\u0442 \u044d\u0442\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435, \u0442\u0435\u043c \u0431\u043b\u0438\u0436\u0435 \u0442\u043e\u043a\u0435\u043d \u043a \u043f\u0440\u043e\u0433\u043d\u043e\u0437\u0443.<\/p>\n<p>\u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0443\u043c\u043d\u043e\u0436\u0438\u043c \u0432\u0435\u043a\u0442\u043e\u0440\u043d\u043e\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043d\u0430 \u043c\u0430\u0442\u0440\u0438\u0446\u0443 <strong>wte<\/strong>. \u0412 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u043c\u0430\u0442\u0440\u0438\u0446\u0443 \u0438\u0437 \u043e\u0434\u043d\u043e\u0433\u043e \u0441\u0442\u043e\u043b\u0431\u0446\u0430 \u0438 50257 \u0441\u0442\u0440\u043e\u043a. \u041a\u0430\u0436\u0434\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0432 \u044d\u0442\u043e\u043c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u0435\u043c \u0441\u043f\u0440\u043e\u0433\u043d\u043e\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u0432\u0435\u043a\u0442\u043e\u0440\u0430 \u0438 \u0432\u0435\u043a\u0442\u043e\u0440\u043d\u043e\u0433\u043e \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0442\u043e\u043a\u0435\u043d\u0430. \u0427\u0435\u043c \u0432\u044b\u0448\u0435 \u044d\u0442\u043e \u0447\u0438\u0441\u043b\u043e, \u0442\u0435\u043c \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u0435\u0435, \u0447\u0442\u043e \u0442\u043e\u043a\u0435\u043d \u0441\u0442\u0430\u043d\u0435\u0442 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0435\u043d\u0438\u0435\u043c \u043f\u0440\u043e\u043c\u043f\u0442\u0430. <\/p>\n<p>\u00a0<\/p>\n<p>\u0427\u0442\u043e\u0431\u044b \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u0442\u043e\u043a\u0435\u043d, \u043d\u0443\u0436\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0441\u0445\u043e\u0434\u0441\u0442\u0432\u0430 \u0432 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e\u0441\u0442\u0438. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043d\u0430\u043c \u043f\u0440\u0438\u0433\u043e\u0434\u0438\u0442\u0441\u044f \u0441\u0442\u0430\u0440\u0430\u044f \u0434\u043e\u0431\u0440\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f softmax (\u0442\u0430 \u0441\u0430\u043c\u0430\u044f, \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043c\u044b \u0443\u0436\u0435 \u043d\u043e\u0440\u043c\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043b\u0438 \u0432\u0435\u0441\u0430 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u044f).<\/p>\n<p><strong>\u041f\u043e\u0447\u0435\u043c\u0443 \u0441\u0442\u043e\u0438\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c softmax \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e\u0441\u0442\u044f\u043c\u0438?<\/strong><\/p>\n<p>Softmax \u2013 \u044d\u0442\u043e \u0443\u0434\u043e\u0431\u043d\u043e\u0435 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e <a href=\"https:\/\/en.wikipedia.org\/wiki\/Luce%27s_choice_axiom\" rel=\"noopener noreferrer nofollow\">\u0430\u043a\u0441\u0438\u043e\u043c\u044b \u0432\u044b\u0431\u043e\u0440\u0430 \u041b\u044c\u044e\u0441\u0430<\/a>. \u041e\u043d\u043e \u0442\u0430\u043a\u043e\u0432\u043e: \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u0430\u044f \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e\u0441\u0442\u044c \u0434\u0432\u0443\u0445 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432 \u043d\u0435 \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442 \u043d\u0430\u043b\u0438\u0447\u0438\u044f \u043f\u0440\u043e\u0447\u0438\u0445 \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e\u0441\u0442\u043d\u044b\u0445 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432. \u0415\u0441\u043b\u0438 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 A \u0432\u0434\u0432\u043e\u0435 \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u0435\u0435 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0430 B, \u0442\u043e \u044d\u0442\u043e \u0441\u043e\u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u0435 \u043d\u0435 \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442 \u043d\u0430\u043b\u0438\u0447\u0438\u044f \u0438\u043b\u0438 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u044f \u0434\u0440\u0443\u0433\u0438\u0445 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432 (\u0445\u043e\u0442\u044f, \u043a\u043e\u043d\u0435\u0447\u043d\u043e, \u0430\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u044b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u043c\u043e\u0433\u0443\u0442 \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c\u0441\u044f).<\/p>\n<p>\u0412\u0435\u043a\u0442\u043e\u0440 \u0441\u043a\u0430\u043b\u044f\u0440\u043d\u044b\u0445 \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u0439 (\u00ab\u043b\u043e\u0433\u0438\u0442\u00bb \u0432 \u0442\u0435\u0440\u043c\u0438\u043d\u043e\u043b\u043e\u0433\u0438\u0438 \u0418\u0418) \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u044b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0433\u0443\u0442 \u043d\u0435 \u0443\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0442\u044c\u0441\u044f \u0432 \u043a\u0430\u043a\u0443\u044e-\u043b\u0438\u0431\u043e \u0448\u043a\u0430\u043b\u0443. \u0415\u0441\u043b\u0438 \u0431\u0430\u043b\u043b A \u0432\u044b\u0448\u0435, \u0447\u0435\u043c \u0431\u0430\u043b\u043b B, \u0442\u043e \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e, \u0447\u0442\u043e A \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u0435\u0435 \u2013 \u0430 \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e. \u041c\u043e\u0436\u043d\u043e \u043f\u043e\u0434\u043a\u043e\u0440\u0440\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432\u0445\u043e\u0434\u043d\u044b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f softmax \u0442\u0430\u043a, \u043a\u0430\u043a \u043d\u0430\u043c \u0443\u0433\u043e\u0434\u043d\u043e, \u0433\u043b\u0430\u0432\u043d\u043e\u0435, \u0441\u043e\u0431\u043b\u044e\u0434\u0430\u0442\u044c \u0438\u0445 \u043f\u043e\u0440\u044f\u0434\u043e\u043a (\u0431\u043e\u043b\u0435\u0435 \u043a\u0440\u0443\u043f\u043d\u044b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043e\u0441\u0442\u0430\u044e\u0442\u0441\u044f \u0431\u043e\u043b\u0435\u0435 \u043a\u0440\u0443\u043f\u043d\u044b\u043c\u0438).<\/p>\n<p>\u0420\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0451\u043d\u043d\u044b\u0439 \u043f\u043e\u0434\u0445\u043e\u0434, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0449\u0438\u0439 \u044d\u0442\u043e\u0433\u043e \u0434\u043e\u0431\u0438\u0442\u044c\u0441\u044f \u2013 \u043d\u043e\u0440\u043c\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u043f\u0443\u0442\u0451\u043c \u0432\u044b\u0447\u0438\u0442\u0430\u043d\u0438\u044f \u043d\u0430\u0438\u0431\u043e\u043b\u044c\u0448\u0435\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0438\u0437 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0432 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0435 (\u0442\u0430\u043a \u0447\u0442\u043e \u043d\u0430\u0438\u0431\u043e\u043b\u044c\u0448\u0435\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u0440\u0430\u0432\u043d\u044b\u043c 0, \u0430 \u0432\u0441\u0435 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u2013 \u043e\u0442\u0440\u0438\u0446\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u043c \u0447\u0438\u0441\u043b\u0430\u043c). \u0417\u0430\u0442\u0435\u043c \u0431\u0435\u0440\u0451\u043c \u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043d\u0430\u0438\u0432\u044b\u0441\u0448\u0438\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 (\u0441\u043a\u0430\u0436\u0435\u043c, \u0442\u043e\u043f-5 \u0438\u043b\u0438 \u0442\u043e\u043f-10). \u041d\u0430\u043a\u043e\u043d\u0435\u0446, \u043f\u0435\u0440\u0435\u0434 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0435\u0439 \u0432\u0441\u0435\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 softmax \u0443\u043c\u043d\u043e\u0436\u0430\u0435\u043c \u0438\u0445 \u043d\u0430 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u0443.<\/p>\n<p>\u041a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043d\u0430\u0438\u0432\u044b\u0441\u0448\u0438\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439, \u0441 \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u043c\u044b \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u043c, \u043e\u0431\u044b\u0447\u043d\u043e \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f\u00a0<em>top_n<\/em>, \u0430 \u043c\u043d\u043e\u0436\u0438\u0442\u0435\u043b\u044c-\u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u0430 (\u0432\u0435\u0440\u043d\u0435\u0435, \u043e\u0431\u0440\u0430\u0442\u043d\u043e\u0435 \u0435\u043c\u0443 \u0447\u0438\u0441\u043b\u043e) \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u00ab\u0442\u0435\u043c\u043f\u0435\u0440\u0430\u0442\u0443\u0440\u043e\u0439\u00bb (<em>\u0422<\/em>). \u0427\u0435\u043c \u0432\u044b\u0448\u0435 \u0442\u0435\u043c\u043f\u0435\u0440\u0430\u0442\u0443\u0440\u0430, \u0442\u0435\u043c \u0431\u043e\u043b\u0435\u0435 \u0433\u043b\u0430\u0434\u043a\u043e\u0435 \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e\u0441\u0442\u0435\u0439 \u0443 \u043d\u0430\u0441 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f, \u0438 \u0442\u0435\u043c \u0432\u044b\u0448\u0435 \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e\u0441\u0442\u044c, \u0447\u0442\u043e \u043d\u0430 \u043c\u0435\u0441\u0442\u043e \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0435\u043d\u0438\u044f \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0431\u0440\u0430\u043d \u043d\u0435 \u043f\u0435\u0440\u0432\u044b\u0439 \u043f\u043e\u043f\u0430\u0432\u0448\u0438\u0439\u0441\u044f \u0442\u043e\u043a\u0435\u043d. <\/p>\n<p>\u0424\u043e\u0440\u043c\u0443\u043b\u0430 \u0434\u043b\u044f \u0440\u0430\u0441\u0447\u0451\u0442\u0430 \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e\u0441\u0442\u0435\u0439 \u0442\u043e\u043a\u0435\u043d\u043e\u0432    <\/p>\n<figure class=\"\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/a6a\/685\/d63\/a6a685d634b1bb26d07ca1cb2cdda672.png\" width=\"174\" height=\"31\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/a6a\/685\/d63\/a6a685d634b1bb26d07ca1cb2cdda672.png\"\/><\/figure>\n<p>\u0433\u0434\u0435\u00a0scores\u00a0\u2014 \u044d\u0442\u043e \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0438\u0437 \u043d\u0430\u0438\u0432\u044b\u0441\u0448\u0438\u0445 <em>top_n<\/em>\u00a0\u0431\u0430\u043b\u043b\u043e\u0432.   <\/p>\n<h2>\u041f\u043e\u0447\u0435\u043c\u0443 \u044d\u0442\u043e\u0442 \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f &#171;\u0442\u0435\u043c\u043f\u0435\u0440\u0430\u0442\u0443\u0440\u043e\u0439&#187;<\/h2>\n<p>\u0424\u0443\u043d\u043a\u0446\u0438\u044f softmax \u0442\u0430\u043a\u0436\u0435 \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f\u00a0<a href=\"https:\/\/en.wikipedia.org\/wiki\/Boltzmann_distribution\" rel=\"noopener noreferrer nofollow\">\u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u0411\u043e\u043b\u044c\u0446\u043c\u0430\u043d\u0430<\/a>. \u041e\u043d\u0430 \u0448\u0438\u0440\u043e\u043a\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0432 \u0444\u0438\u0437\u0438\u043a\u0435. \u0421\u0440\u0435\u0434\u0438 \u043f\u0440\u043e\u0447\u0435\u0433\u043e, \u043d\u0430 \u043d\u0435\u0439 \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u0430\u00a0<a href=\"https:\/\/en.wikipedia.org\/wiki\/Barometric_formula\" rel=\"noopener noreferrer nofollow\">\u0431\u0430\u0440\u043e\u043c\u0435\u0442\u0440\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u0444\u043e\u0440\u043c\u0443\u043b\u0430<\/a>, \u043f\u043e \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u043f\u043b\u043e\u0442\u043d\u043e\u0441\u0442\u0438 \u0432\u043e\u0437\u0434\u0443\u0445\u0430 \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0432\u044b\u0441\u043e\u0442\u044b.<\/p>\n<p>\u00a0<\/p>\n<p>\u041a\u0430\u043a \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e, \u0442\u0451\u043f\u043b\u044b\u0439 \u0432\u043e\u0437\u0434\u0443\u0445 \u043f\u043e\u0434\u043d\u0438\u043c\u0430\u0435\u0442\u0441\u044f \u0432\u0432\u0435\u0440\u0445 \u0438 \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442\u0441\u044f \u043d\u0430 \u0441\u0440\u0430\u0432\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u0432\u044b\u0441\u043e\u0442\u0435. \u0412 \u0433\u043e\u0440\u044f\u0447\u0435\u043c \u0432\u043e\u0437\u0434\u0443\u0445\u0435 \u0441\u0440\u0430\u0432\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0432\u044b\u0441\u043e\u043a\u0430 \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e\u0441\u0442\u044c, \u0447\u0442\u043e \u043c\u043e\u043b\u0435\u043a\u0443\u043b\u0430 \u043e\u0442 \u0447\u0430\u0441\u0442\u044b\u0445 \u0441\u0442\u043e\u043b\u043a\u043d\u043e\u0432\u0435\u043d\u0438\u0439 \u0441 \u0434\u0440\u0443\u0433\u0438\u043c\u0438 \u043c\u043e\u043b\u0435\u043a\u0443\u043b\u0430\u043c\u0438 \u0437\u0430\u0431\u0435\u0440\u0451\u0442\u0441\u044f \u043d\u0430 \u0442\u0430\u043a\u0443\u044e \u0432\u044b\u0441\u043e\u0442\u0443, \u043a\u0443\u0434\u0430 \u0432 \u0438\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0431\u044b \u043d\u0435 \u043f\u043e\u043f\u0430\u043b\u0430. \u0412 \u043e\u0442\u043b\u0438\u0447\u0438\u0435 \u043e\u0442 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u0438 \u0441 \u0431\u043e\u043b\u0435\u0435 \u0445\u043e\u043b\u043e\u0434\u043d\u044b\u043c\u0438 \u0442\u0435\u043c\u043f\u0435\u0440\u0430\u0442\u0443\u0440\u0430\u043c\u0438, \u043f\u043b\u043e\u0442\u043d\u043e\u0441\u0442\u044c \u0432\u043e\u0437\u0434\u0443\u0445\u0430 \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u0432\u044b\u0441\u043e\u0442\u0430\u0445 \u0438 \u043f\u0430\u0434\u0430\u0435\u0442 \u043d\u0430 \u0443\u0440\u043e\u0432\u043d\u0435 \u043c\u043e\u0440\u044f.<\/p>\n<p>\u0421\u0440\u0430\u0432\u043d\u0438\u0442\u0435, \u043a\u0430\u043a \u0432\u043e\u0437\u0434\u0443\u0445 \u0434\u0432\u0438\u0436\u0435\u0442\u0441\u044f \u043f\u0440\u0438 \u0440\u0430\u0437\u043d\u044b\u0445 \u0442\u0435\u043c\u043f\u0435\u0440\u0430\u0442\u0443\u0440\u0430\u0445: <\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/e10\/9ce\/6f1\/e109ce6f14a9d797ac4ced0f00151a86.gif\" width=\"928\" height=\"512\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/e10\/9ce\/6f1\/e109ce6f14a9d797ac4ced0f00151a86.gif\"\/><\/figure>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/792\/fe2\/af0\/792fe2af01b49345c3ac0a6c8e08502a.gif\" width=\"928\" height=\"512\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/792\/fe2\/af0\/792fe2af01b49345c3ac0a6c8e08502a.gif\"\/><\/figure>\n<p><em>\u0418\u043b\u043b\u044e\u0441\u0442\u0440\u0430\u0446\u0438\u044f \u0414\u043e\u043c\u0438\u043d\u0438\u043a\u0430 \u0424\u043e\u0440\u0434\u0430,\u00a0<\/em><a href=\"https:\/\/sciencedemos.org.uk\/balls.php\" rel=\"noopener noreferrer nofollow\"><em>Bouncing Balls and the Boltzmann Distribution<\/em><\/a><\/p>\n<p>\u0410\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u043e, \u0432 \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0435\u043c\u043e\u043c \u043d\u0430\u043c\u0438 \u043f\u0440\u0438\u043c\u0435\u0440\u0435, \u0447\u0435\u043c \u0431\u043e\u043b\u044c\u0448\u0435 \u00ab\u0442\u0435\u043c\u043f\u0435\u0440\u0430\u0442\u0443\u0440\u0430\u00bb, \u0442\u0435\u043c \u0432\u044b\u0448\u0435 \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e\u0441\u0442\u044c, \u0447\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0431\u0440\u0430\u043d \u043d\u0435 \u0441\u0430\u043c\u044b\u0439 \u043e\u0447\u0435\u0432\u0438\u0434\u043d\u044b\u0439 \u0442\u043e\u043a\u0435\u043d (\u0440\u0430\u0437\u0443\u043c\u0435\u0435\u0442\u0441\u044f, \u0437\u0430 \u0441\u0447\u0451\u0442 \u043d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u043e\u0447\u0435\u0432\u0438\u0434\u043d\u044b\u0445). \u041b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0432\u044b\u0432\u043e\u0434 \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u043c\u0435\u043d\u0435\u0435 \u043f\u0440\u0435\u0434\u0441\u043a\u0430\u0437\u0443\u0435\u043c\u044b\u043c \u0438 \u0431\u043e\u043b\u0435\u0435 \u00ab\u0442\u0432\u043e\u0440\u0447\u0435\u0441\u043a\u0438\u043c\u00bb.<\/p>\n<p>\u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0432\u044b\u0440\u0430\u0437\u0438\u043c \u0432\u0441\u0451 \u044d\u0442\u043e \u043d\u0430 SQL. \u0423 \u043d\u0430\u0441 \u0431\u044b\u043b \u043f\u0440\u043e\u043c\u043f\u0442 \u00abPostgreSQL is great\u00bb. \u0412\u043e\u0442 \u043f\u0435\u0440\u0432\u044b\u0435 5 \u0442\u043e\u043a\u0435\u043d\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435, \u0432 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0438 \u0441 \u044d\u0442\u043e\u0439 \u043c\u043e\u0434\u0435\u043b\u044c\u044e, \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u043d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u044b\u043c\u0438 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0435\u043d\u0438\u044f\u043c\u0438 \u044d\u0442\u043e\u0439 \u0444\u0440\u0430\u0437\u044b. \u041f\u043e\u043a\u0430\u0437\u0430\u043d\u044b \u0438\u0445 \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e\u0441\u0442\u0438 \u043f\u0440\u0438 \u0440\u0430\u0437\u043d\u043e\u0439 \u0442\u0435\u043c\u043f\u0435\u0440\u0430\u0442\u0443\u0440\u0435:<\/p>\n<pre><code class=\"sql\">WITH    RECURSIVE         initial AS         (         SELECT  ARRAY[6307, 47701, 318, 1049] AS input         ),         hparams AS         (         SELECT  12 AS n_block,                 5 AS top_n,                 ARRAY_LENGTH(input, 1) AS n_seq         FROM    initial         ),         embeddings AS         (         SELECT  place, values         FROM    initial         CROSS JOIN                 hparams         CROSS JOIN LATERAL                 UNNEST(input) WITH ORDINALITY AS tokens (token, ordinality)         CROSS JOIN LATERAL                 (                 SELECT  ordinality - 1 AS place                 ) o         CROSS JOIN LATERAL                 (                 SELECT  wte.values + wpe.values AS values                 FROM    wte                 CROSS JOIN                         wpe                 WHERE   wte.token = tokens.token                         AND wpe.place = o.place                 ) embedding         ),         transform AS         (         SELECT  0 AS block, place, values         FROM    embeddings         UNION ALL         (         WITH    previous AS                 (                 SELECT  *                 FROM    transform                 )         SELECT  block + 1 AS block, transformed_layer.*         FROM    hparams         CROSS JOIN LATERAL                 (                 SELECT  block                 FROM    previous                 WHERE   block &lt; 12                 LIMIT   1                 ) q         CROSS JOIN LATERAL                 (                 WITH    ln_2_b AS                         (                         SELECT  *                         FROM    ln_2_b                         WHERE   block = q.block                         ),                         ln_2_g AS                         (                         SELECT  *                         FROM    ln_2_g                         WHERE   block = q.block                         ),                         c_proj_w AS                         (                         SELECT  *                         FROM    c_proj_w                         WHERE   block = q.block                         ),                         c_proj_b AS                         (                         SELECT  *                         FROM    c_proj_b                         WHERE   block = q.block                         ),                         mlp_c_fc_w AS                         (                         SELECT  *                         FROM    mlp_c_fc_w                         WHERE   block = q.block                         ),                         mlp_c_fc_b AS                         (                         SELECT  *                         FROM    mlp_c_fc_b                         WHERE   block = q.block                         ),                         mlp_c_proj_w AS                         (                         SELECT  *                         FROM    mlp_c_proj_w                         WHERE   block = q.block                         ),                         mlp_c_proj_b AS                         (                         SELECT  *                         FROM    mlp_c_proj_b                         WHERE   block = q.block                         ),                         c_attn_w AS                         (                         SELECT  *                         FROM    c_attn_w                         WHERE   block = q.block                         ),                         c_attn_b AS                         (                         SELECT  *                         FROM    c_attn_b                         WHERE   block = q.block                         ),                         ln_1_g AS                         (                         SELECT  *                         FROM    ln_1_g                         WHERE   block = q.block                         ),                         ln_1_b AS                         (                         SELECT  *                         FROM    ln_1_b                         WHERE   block = q.block                         ),                         mha_norm AS                         (                         SELECT  place, mm.values + c_attn_b.values AS values                         FROM    (                                 SELECT  place, ARRAY_AGG(INNER_PRODUCT(c_attn_w.values, layer_norm.values) ORDER BY y)::VECTOR(2304) AS values                                 FROM    (                                         SELECT  place, agg.values * ln_1_g.values + ln_1_b.values AS values                                         FROM    (                                                 SELECT  place, norm.values                                                 FROM    previous                                                 CROSS JOIN LATERAL                                                         (                                                         SELECT  AVG(value) AS mean,                                                                 VAR_POP(value) AS variance                                                         FROM    UNNEST(values::REAL[]) value                                                         ) agg                                                 CROSS JOIN LATERAL                                                         (                                                         SELECT  ARRAY_AGG((value - mean) \/ SQRT(variance + 1E-5) ORDER BY ordinality)::VECTOR(768) AS values                                                         FROM    UNNEST(values::REAL[]) WITH ORDINALITY AS n(value, ordinality)                                                         ) norm                                                 ) agg                                         CROSS JOIN                                                 ln_1_b                                         CROSS JOIN                                                 ln_1_g                                         ) layer_norm                                 CROSS JOIN                                         c_attn_w                                 GROUP BY                                         place                                 ) mm                         CROSS JOIN                                 c_attn_b                         ),                         heads AS                         (                         SELECT  place, head,                                 (values::REAL[])[(head * 64 + 1):(head * 64 + 64)]::VECTOR(64) AS q,                                 (values::REAL[])[(head * 64 + 1 + 768):(head * 64 + 64 + 768)]::VECTOR(64) AS k,                                 (values::REAL[])[(head * 64 + 1 + 1536):(head * 64 + 64 + 1536)]::VECTOR(64) AS v                         FROM    mha_norm                         CROSS JOIN                                 GENERATE_SERIES(0, 11) head                         ),                         sm_input AS                         (                         SELECT  head, h1.place AS x, h2.place AS y, INNER_PRODUCT(h1.q, h2.k) \/ 8 + CASE WHEN h2.place > h1.place THEN -1E10 ELSE 0 END AS value                         FROM    heads h1                         JOIN    heads h2                         USING   (head)                         ),                         sm_diff AS                         (                         SELECT  head, x, y, value - MAX(value) OVER (PARTITION BY head, x) AS diff                         FROM    sm_input                         ),                         sm_exp AS                         (                         SELECT  head, x, y, CASE WHEN diff &lt; -745.13 THEN 0 ELSE EXP(diff) END AS e                         FROM    sm_diff                         ),                         softmax AS                         (                         SELECT  head, x, y AS place, e \/ SUM(e) OVER (PARTITION BY head, x) AS value                         FROM    sm_exp                         ),                         attention AS                         (                         SELECT  place, ARRAY_AGG(value ORDER BY head * 64 + ordinality)::VECTOR(768) AS values                         FROM    (                                 SELECT  head, x AS place, SUM(ARRAY_FILL(softmax.value, ARRAY[64])::VECTOR(64) * heads.v) AS values                                 FROM    softmax                                 JOIN    heads                                 USING   (head, place)                                 GROUP BY                                         head, x                                 ) q                         CROSS JOIN LATERAL                                 UNNEST(values::REAL[]) WITH ORDINALITY v (value, ordinality)                         GROUP BY                                 place                         ),                         mha AS                         (                         SELECT  place, w.values + c_proj_b.values + previous.values AS values                         FROM    (                                 SELECT  attention.place, ARRAY_AGG(INNER_PRODUCT(attention.values, c_proj_w.values) ORDER BY c_proj_w.place)::VECTOR(768) AS values                                 FROM    attention                                 CROSS JOIN                                         c_proj_w                                 GROUP BY                                         attention.place                                 ) w                         CROSS JOIN                                 c_proj_b                         JOIN    previous                         USING   (place)                         ),                         ffn_norm AS                         (                         SELECT  place, agg.values * ln_2_g.values + ln_2_b.values AS values                         FROM    (                                 SELECT  place, norm.values                                 FROM    mha                                 CROSS JOIN LATERAL                                         (                                         SELECT  AVG(value) AS mean,                                                 VAR_POP(value) AS variance                                         FROM    UNNEST(values::REAL[]) value                                         ) agg                                 CROSS JOIN LATERAL                                         (                                         SELECT  ARRAY_AGG((value - mean) \/ SQRT(variance + 1E-5) ORDER BY ordinality)::VECTOR(768) AS values                                         FROM    UNNEST(values::REAL[]) WITH ORDINALITY AS n(value, ordinality)                                         ) norm                                 ) agg                         CROSS JOIN                                 ln_2_b                         CROSS JOIN                                 ln_2_g                         ),                         ffn_a AS                         (                         SELECT  gelu.place, gelu.values                         FROM    (                                 SELECT  place, w.values + mlp_c_fc_b.values AS values                                 FROM    (                                         SELECT  ffn_norm.place, ARRAY_AGG(INNER_PRODUCT(ffn_norm.values, mlp_c_fc_w.values) ORDER BY mlp_c_fc_w.place)::VECTOR(3072) AS values                                         FROM    ffn_norm                                         CROSS JOIN                                                 mlp_c_fc_w                                         GROUP BY                                                 ffn_norm.place                                         ) w                                 CROSS JOIN                                         mlp_c_fc_b                                 ) v                         CROSS JOIN LATERAL                                 (                                 SELECT  place, ARRAY_AGG(0.5 * value * (1 + TANH(0.797884560802 * (value + 0.044715 * value*value*value))) ORDER BY ordinality)::VECTOR(3072) AS values                                 FROM    UNNEST(values::REAL[]) WITH ORDINALITY n (value, ordinality)                                 GROUP BY                                         place                                 ) gelu                         ),                         ffn AS                         (                         SELECT  place, w.values + mlp_c_proj_b.values + mha.values AS values                         FROM    (                                 SELECT  ffn_a.place, ARRAY_AGG(INNER_PRODUCT(ffn_a.values, mlp_c_proj_w.values) ORDER BY mlp_c_proj_w.place)::VECTOR(768) AS values                                 FROM    ffn_a                                 CROSS JOIN                                         mlp_c_proj_w                                 GROUP BY                                         ffn_a.place                                 ) w                         CROSS JOIN                                 mlp_c_proj_b                         JOIN    mha                         USING   (place)                         )                 SELECT  *                 FROM    ffn                 ) transformed_layer         )         ),         block_output AS         (         SELECT  *         FROM    hparams         JOIN    transform         ON      transform.block = n_block         ),         ln_f AS         (         SELECT  place, norm.values * ln_f_g.values + ln_f_b.values AS values         FROM    block_output         CROSS JOIN LATERAL                 (                 SELECT  AVG(value) AS mean,                         VAR_POP(value) AS variance                 FROM    UNNEST(values::REAL[]) AS n(value)                 ) agg         CROSS JOIN LATERAL                 (                 SELECT  ARRAY_AGG((value - mean) \/ SQRT(variance + 1E-5) ORDER BY ordinality)::VECTOR(768) AS values                 FROM    UNNEST(values::REAL[]) WITH ORDINALITY AS n (value, ordinality)                 ) norm         CROSS JOIN                 ln_f_b         CROSS JOIN                 ln_f_g         ),         logits AS         (         SELECT  logits.*         FROM    hparams         CROSS JOIN LATERAL                 (                 SELECT  token, INNER_PRODUCT(ln_f.values, wte.values) AS value                 FROM    ln_f                 CROSS JOIN                         wte                 WHERE   ln_f.place = n_seq - 1                 ORDER BY                         value DESC                 LIMIT   (top_n)                 ) logits         ),         temperatures (temperature) AS         (         VALUES         (0.5),         (1),         (2)         ),         tokens AS         (         SELECT  token, value, softmax, temperature         FROM    temperatures         CROSS JOIN LATERAL                 (                 SELECT  *, (e \/ SUM(e) OVER ()) AS softmax                 FROM    (                         SELECT  *,                                 (value - MAX(value) OVER ()) \/ temperature AS diff                         FROM    logits                         ) exp_x                 CROSS JOIN LATERAL                         (                         SELECT  CASE WHEN diff &lt; -745.13 THEN 0 ELSE EXP(diff) END AS e                         ) exp                 ) q         ) SELECT  token,         cluster,         TO_CHAR(t1.value, 'S00.000') AS score,         TO_CHAR(t1.softmax, '0.00') AS \"temperature = 0.5\",         TO_CHAR(t2.softmax, '0.00') AS \"temperature = 1\",         TO_CHAR(t3.softmax, '0.00') AS \"temperature = 2\" FROM    (         SELECT  *         FROM    tokens         WHERE   temperature = 0.5         ) t1 JOIN    (         SELECT  *         FROM    tokens         WHERE   temperature = 1         ) t2 USING   (token) JOIN    (         SELECT  *         FROM    tokens         WHERE   temperature = 2         ) t3 USING   (token) JOIN    tokenizer USING   (token)<\/code><\/pre>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/39b\/00c\/06e\/39b00c06e909aab6901bceb4228137b2.png\" width=\"1256\" height=\"216\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/39b\/00c\/06e\/39b00c06e909aab6901bceb4228137b2.png\"\/><\/figure>\n<h2>\u041b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0432\u044b\u0432\u043e\u0434<\/h2>\n<p>\u0412\u043e\u0442 \u043c\u044b \u0438 \u0433\u043e\u0442\u043e\u0432\u044b \u043f\u0435\u0440\u0435\u0439\u0442\u0438 \u043a \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u043c\u0443 \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u043e\u043c\u0443 \u0432\u044b\u0432\u043e\u0434\u0443: \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u043c\u043e\u0434\u0435\u043b\u044c, \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u0442\u043e\u043a\u0435\u043d \u0432 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0438 \u0441 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u043e\u0439 \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e\u0441\u0442\u044c\u044e, \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0442\u043e\u043a\u0435\u043d \u043a \u043f\u0440\u043e\u043c\u043f\u0442\u0443 \u0438 \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u0442\u044c \u044d\u0442\u043e\u0442 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0434\u043e \u0442\u0435\u0445 \u043f\u043e\u0440, \u043f\u043e\u043a\u0430 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043e \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0442\u043e\u043a\u0435\u043d\u043e\u0432.<\/p>\n<p>\u041a\u0430\u043a \u0431\u044b\u043b\u043e \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u043e \u0432\u044b\u0448\u0435, \u0441\u0430\u043c\u0430 \u0431\u043e\u043b\u044c\u0448\u0430\u044f \u044f\u0437\u044b\u043a\u043e\u0432\u0430\u044f \u043c\u043e\u0434\u0435\u043b\u044c \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0434\u0435\u0442\u0435\u0440\u043c\u0438\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0439. \u042d\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043f\u0435\u0440\u0435\u043c\u043d\u043e\u0436\u0435\u043d\u0438\u044f \u043c\u0430\u0442\u0440\u0438\u0446 \u0438 \u0434\u0440\u0443\u0433\u0438\u0435 \u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438, \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u043c\u044b\u0435 \u043d\u0430\u0434 \u0437\u0430\u0440\u0430\u043d\u0435\u0435 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u044b\u043c\u0438 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u0430\u043c\u0438. \u041f\u043e\u043a\u0430 \u043f\u0440\u043e\u043c\u043f\u0442 \u0438 \u0442\u0430\u043a\u0438\u0435 \u0433\u0438\u043f\u0435\u0440\u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u043a\u0430\u043a \u0442\u0435\u043c\u043f\u0435\u0440\u0430\u0442\u0443\u0440\u0430 \u0438 \u0442\u043e\u043f-N \u043e\u0441\u0442\u0430\u044e\u0442\u0441\u044f \u043d\u0435\u0438\u0437\u043c\u0435\u043d\u043d\u044b\u043c\u0438, \u0432\u044b\u0432\u043e\u0434 \u0442\u0430\u043a\u0436\u0435 \u043e\u0441\u0442\u0430\u0451\u0442\u0441\u044f \u043d\u0435\u0438\u0437\u043c\u0435\u043d\u043d\u044b\u043c. \u00a0<\/p>\n<p>\u0415\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u043d\u0435\u0434\u0435\u0442\u0435\u0440\u043c\u0438\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u2013 \u044d\u0442\u043e \u0432\u044b\u0431\u043e\u0440 \u0442\u043e\u043a\u0435\u043d\u0430. \u0412 \u043d\u0451\u043c \u0437\u0430\u043b\u043e\u0436\u0435\u043d\u0430 (\u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f) \u0441\u0442\u0435\u043f\u0435\u043d\u044c \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e\u0441\u0442\u0438. \u0412\u043e\u0442 \u043f\u043e\u0447\u0435\u043c\u0443 \u0447\u0430\u0442\u0431\u043e\u0442\u044b, \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043d\u0430 GPT, \u043c\u043e\u0433\u0443\u0442 \u0434\u0430\u0432\u0430\u0442\u044c \u0440\u0430\u0437\u043d\u044b\u0435 \u043e\u0442\u0432\u0435\u0442\u044b \u043d\u0430 \u043e\u0434\u0438\u043d \u0438 \u0442\u043e\u0442 \u0436\u0435 \u043f\u0440\u043e\u043c\u043f\u0442.<\/p>\n<p>\u0412\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u0441\u044f \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043f\u0440\u043e\u043c\u043f\u0442\u0430 \u0444\u0440\u0430\u0437\u043e\u0439 \u00abHappy New Year! I wish\u00bb \u0438 \u043f\u0440\u0438\u043a\u0430\u0436\u0435\u043c \u043c\u043e\u0434\u0435\u043b\u0438 \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c 10 \u043d\u043e\u0432\u044b\u0445 \u0442\u043e\u043a\u0435\u043d\u043e\u0432 \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043f\u0440\u043e\u043c\u043f\u0442\u0430. \u0422\u0435\u043c\u043f\u0435\u0440\u0430\u0442\u0443\u0440\u0443 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043c \u0432 2, \u0430 top_n \u0432 5.<\/p>\n<p>\u0423 \u043c\u0435\u043d\u044f \u043d\u0430 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u0435 \u043d\u0430 \u044d\u0442\u043e\u0442 \u0437\u0430\u043f\u0440\u043e\u0441 \u0443\u0445\u043e\u0434\u0438\u0442 2 \u043c\u0438\u043d\u0443\u0442\u044b \u0438 44 \u0441\u0435\u043a\u0443\u043d\u0434\u044b. \u0412\u043e\u0442 \u0442\u0430\u043a\u043e\u0439 \u0432\u044b\u0432\u043e\u0434 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f:<\/p>\n<pre><code class=\"sql\">SELECT SETSEED(0.20231231);   WITH    RECURSIVE         input AS         (         SELECT  'Happy New Year! I wish you' AS prompt,                 10 AS threshold,                 2 AS temperature,                 1 AS top_n         ),         clusters AS         (         SELECT  part_position, bpe.*         FROM    input         CROSS JOIN LATERAL                 REGEXP_MATCHES(prompt, '''s|''t|''re|''ve|''m|''ll|''d| ?\\w+| ?\\d+| ?[^\\s\\w\\d]+|\\s+(?!\\S)|\\s+', 'g') WITH ORDINALITY AS rm (part, part_position)         CROSS JOIN LATERAL                 (                 WITH    RECURSIVE                         bpe AS                         (                         SELECT  (n + 1)::BIGINT AS position, character, TRUE AS continue                         FROM    CONVERT_TO(part[1], 'UTF-8') AS bytes                         CROSS JOIN LATERAL                                 GENERATE_SERIES(0, LENGTH(bytes) - 1) AS n                         JOIN    encoder                         ON      byte = GET_BYTE(bytes, n)                         UNION ALL                         (                         WITH    RECURSIVE                                 base AS                                 (                                 SELECT  *                                 FROM    bpe                                 WHERE   continue                                 ),                                 bn AS                                 (                                 SELECT  ROW_NUMBER() OVER (ORDER BY position) AS position,                                         continue,                                         character,                                         character || LEAD(character) OVER (ORDER BY position) AS cluster                                 FROM    base                                 ),                                 top_rank AS                                 (                                 SELECT  tokenizer.*                                 FROM    bn                                 CROSS JOIN LATERAL                                         (                                         SELECT  *                                         FROM    tokenizer                                         WHERE   tokenizer.cluster = bn.cluster                                         LIMIT   1                                         ) tokenizer                                 ORDER BY                                         token                                 LIMIT   1                                 ),                                 breaks AS                                 (                                 SELECT  0::BIGINT AS position, 1 AS length                                 UNION ALL                                 SELECT  bn.position,                                         CASE WHEN token IS NULL THEN 1 ELSE 2 END                                 FROM    breaks                                 JOIN    bn                                 ON      bn.position = breaks.position + length                                 LEFT JOIN                                         top_rank                                 USING   (cluster)                                 )                         SELECT  position, character, token IS NOT NULL                         FROM    breaks                         LEFT JOIN                                 top_rank                         ON      1 = 1                         CROSS JOIN LATERAL                                 (                                 SELECT  STRING_AGG(character, '' ORDER BY position) AS character                                 FROM    bn                                 WHERE   bn.position >= breaks.position                                         AND bn.position &lt; breaks.position + length                                 ) bn                         WHERE   position > 0                         )                         )                 SELECT  position, character AS cluster                 FROM    bpe                 WHERE   NOT continue                 ) bpe         ),         tokens AS         (         SELECT  ARRAY_AGG(token ORDER BY part_position, position) AS input         FROM    clusters         JOIN    tokenizer         USING   (cluster)         ),         gpt AS         (         SELECT  input, ARRAY_LENGTH(input, 1) AS original_length         FROM    tokens         UNION ALL         SELECT  input || next_token.token, original_length         FROM    gpt         CROSS JOIN                 input         CROSS JOIN LATERAL                 (                 WITH    RECURSIVE                         hparams AS                         (                         SELECT  ARRAY_LENGTH(input, 1) AS n_seq,                                 12 AS n_block                         ),                         embeddings AS                         (                         SELECT  place, values                         FROM    hparams                         CROSS JOIN LATERAL                                 UNNEST(input) WITH ORDINALITY AS tokens (token, ordinality)                         CROSS JOIN LATERAL                                 (                                 SELECT  ordinality - 1 AS place                                 ) o                         CROSS JOIN LATERAL                                 (                                 SELECT  wte.values + wpe.values AS values                                 FROM    wte                                 CROSS JOIN                                         wpe                                 WHERE   wte.token = tokens.token                                         AND wpe.place = o.place                                 ) embedding                         ),                         transform AS                         (                         SELECT  0 AS block, place, values                         FROM    embeddings                         UNION ALL                         (                         WITH    previous AS                                 (                                 SELECT  *                                 FROM    transform                                 )                         SELECT  block + 1 AS block, transformed_layer.*                         FROM    hparams                         CROSS JOIN LATERAL                                 (                                 SELECT  block                                 FROM    previous                                 WHERE   block &lt; 12                                 LIMIT   1                                 ) q                         CROSS JOIN LATERAL                                 (                                 WITH    ln_2_b AS                                         (                                         SELECT  *                                         FROM    ln_2_b                                         WHERE   block = q.block                                         ),                                         ln_2_g AS                                         (                                         SELECT  *                                         FROM    ln_2_g                                         WHERE   block = q.block                                         ),                                         c_proj_w AS                                         (                                         SELECT  *                                         FROM    c_proj_w                                         WHERE   block = q.block                                         ),                                         c_proj_b AS                                         (                                         SELECT  *                                         FROM    c_proj_b                                         WHERE   block = q.block                                         ),                                         mlp_c_fc_w AS                                         (                                         SELECT  *                                         FROM    mlp_c_fc_w                                         WHERE   block = q.block                                         ),                                         mlp_c_fc_b AS                                         (                                         SELECT  *                                         FROM    mlp_c_fc_b                                         WHERE   block = q.block                                         ),                                         mlp_c_proj_w AS                                         (                                         SELECT  *                                         FROM    mlp_c_proj_w                                         WHERE   block = q.block                                         ),                                         mlp_c_proj_b AS                                         (                                         SELECT  *                                         FROM    mlp_c_proj_b                                         WHERE   block = q.block                                         ),                                         c_attn_w AS                                         (                                         SELECT  *                                         FROM    c_attn_w                                         WHERE   block = q.block                                         ),                                         c_attn_b AS                                         (                                         SELECT  *                                         FROM    c_attn_b                                         WHERE   block = q.block                                         ),                                         ln_1_g AS                                         (                                         SELECT  *                                         FROM    ln_1_g                                         WHERE   block = q.block                                         ),                                         ln_1_b AS                                         (                                         SELECT  *                                         FROM    ln_1_b                                         WHERE   block = q.block                                         ),                                         mha_norm AS                                         (                                         SELECT  place, mm.values + c_attn_b.values AS values                                         FROM    (                                                 SELECT  place, ARRAY_AGG(INNER_PRODUCT(c_attn_w.values, layer_norm.values) ORDER BY y)::VECTOR(2304) AS values                                                 FROM    (                                                         SELECT  place, agg.values * ln_1_g.values + ln_1_b.values AS values                                                         FROM    (                                                                 SELECT  place, norm.values                                                                 FROM    previous                                                                 CROSS JOIN LATERAL                                                                         (                                                                         SELECT  AVG(value) AS mean,                                                                                 VAR_POP(value) AS variance                                                                         FROM    UNNEST(values::REAL[]) value                                                                         ) agg                                                                 CROSS JOIN LATERAL                                                                         (                                                                         SELECT  ARRAY_AGG((value - mean) \/ SQRT(variance + 1E-5) ORDER BY ordinality)::VECTOR(768) AS values                                                                         FROM    UNNEST(values::REAL[]) WITH ORDINALITY AS n(value, ordinality)                                                                         ) norm                                                                 ) agg                                                         CROSS JOIN                                                                 ln_1_b                                                         CROSS JOIN                                                                 ln_1_g                                                         ) layer_norm                                                 CROSS JOIN                                                         c_attn_w                                                 GROUP BY                                                         place                                                 ) mm                                         CROSS JOIN                                                 c_attn_b                                         ),                                         heads AS                                         (                                         SELECT  place, head,                                                 (values::REAL[])[(head * 64 + 1):(head * 64 + 64)]::VECTOR(64) AS q,                                                 (values::REAL[])[(head * 64 + 1 + 768):(head * 64 + 64 + 768)]::VECTOR(64) AS k,                                                 (values::REAL[])[(head * 64 + 1 + 1536):(head * 64 + 64 + 1536)]::VECTOR(64) AS v                                         FROM    mha_norm                                         CROSS JOIN                                                 GENERATE_SERIES(0, 11) head                                         ),                                         sm_input AS                                         (                                         SELECT  head, h1.place AS x, h2.place AS y, INNER_PRODUCT(h1.q, h2.k) \/ 8 + CASE WHEN h2.place > h1.place THEN -1E10 ELSE 0 END AS value                                         FROM    heads h1                                         JOIN    heads h2                                         USING   (head)                                         ),                                         sm_diff AS                                         (                                         SELECT  head, x, y, value - MAX(value) OVER (PARTITION BY head, x) AS diff                                         FROM    sm_input                                         ),                                         sm_exp AS                                         (                                         SELECT  head, x, y, CASE WHEN diff &lt; -745.13 THEN 0 ELSE EXP(diff) END AS e                                         FROM    sm_diff                                         ),                                         softmax AS                                         (                                         SELECT  head, x, y AS place, e \/ SUM(e) OVER (PARTITION BY head, x) AS value                                         FROM    sm_exp                                         ),                                         attention AS                                         (                                         SELECT  place, ARRAY_AGG(value ORDER BY head * 64 + ordinality)::VECTOR(768) AS values                                         FROM    (                                                 SELECT  head, x AS place, SUM(ARRAY_FILL(softmax.value, ARRAY[64])::VECTOR(64) * heads.v) AS values                                                 FROM    softmax                                                 JOIN    heads                                                 USING   (head, place)                                                 GROUP BY                                                         head, x                                                 ) q                                         CROSS JOIN LATERAL                                                 UNNEST(values::REAL[]) WITH ORDINALITY v (value, ordinality)                                         GROUP BY                                                 place                                         ),                                         mha AS                                         (                                         SELECT  place, w.values + c_proj_b.values + previous.values AS values                                         FROM    (                                                 SELECT  attention.place, ARRAY_AGG(INNER_PRODUCT(attention.values, c_proj_w.values) ORDER BY c_proj_w.place)::VECTOR(768) AS values                                                 FROM    attention                                                 CROSS JOIN                                                         c_proj_w                                                 GROUP BY                                                         attention.place                                                 ) w                                         CROSS JOIN                                                 c_proj_b                                         JOIN    previous                                         USING   (place)                                         ),                                         ffn_norm AS                                         (                                         SELECT  place, agg.values * ln_2_g.values + ln_2_b.values AS values                                         FROM    (                                                 SELECT  place, norm.values                                                 FROM    mha                                                 CROSS JOIN LATERAL                                                         (                                                         SELECT  AVG(value) AS mean,                                                                 VAR_POP(value) AS variance                                                         FROM    UNNEST(values::REAL[]) value                                                         ) agg                                                 CROSS JOIN LATERAL                                                         (                                                         SELECT  ARRAY_AGG((value - mean) \/ SQRT(variance + 1E-5) ORDER BY ordinality)::VECTOR(768) AS values                                                         FROM    UNNEST(values::REAL[]) WITH ORDINALITY AS n(value, ordinality)                                                         ) norm                                                 ) agg                                         CROSS JOIN                                                 ln_2_b                                         CROSS JOIN                                                 ln_2_g                                         ),                                         ffn_a AS                                         (                                         SELECT  gelu.place, gelu.values                                         FROM    (                                                 SELECT  place, w.values + mlp_c_fc_b.values AS values                                                 FROM    (                                                         SELECT  ffn_norm.place, ARRAY_AGG(INNER_PRODUCT(ffn_norm.values, mlp_c_fc_w.values) ORDER BY mlp_c_fc_w.place)::VECTOR(3072) AS values                                                         FROM    ffn_norm                                                         CROSS JOIN                                                                 mlp_c_fc_w                                                         GROUP BY                                                                 ffn_norm.place                                                         ) w                                                 CROSS JOIN                                                         mlp_c_fc_b                                                 ) v                                         CROSS JOIN LATERAL                                                 (                                                 SELECT  place, ARRAY_AGG(0.5 * value * (1 + TANH(0.797884560802 * (value + 0.044715 * value*value*value))) ORDER BY ordinality)::VECTOR(3072) AS values                                                 FROM    UNNEST(values::REAL[]) WITH ORDINALITY n (value, ordinality)                                                 GROUP BY                                                         place                                                 ) gelu                                         ),                                         ffn AS                                         (                                         SELECT  place, w.values + mlp_c_proj_b.values + mha.values AS values                                         FROM    (                                                 SELECT  ffn_a.place, ARRAY_AGG(INNER_PRODUCT(ffn_a.values, mlp_c_proj_w.values) ORDER BY mlp_c_proj_w.place)::VECTOR(768) AS values                                                 FROM    ffn_a                                                 CROSS JOIN                                                         mlp_c_proj_w                                                 GROUP BY                                                         ffn_a.place                                                 ) w                                         CROSS JOIN                                                 mlp_c_proj_b                                         JOIN    mha                                         USING   (place)                                         )                                 SELECT  *                                 FROM    ffn                                 ) transformed_layer                         )                         ),                         block_output AS                         (                         SELECT  *                         FROM    hparams                         JOIN    transform                         ON      transform.block = n_block                         ),                         ln_f AS                         (                         SELECT  place, norm.values * ln_f_g.values + ln_f_b.values AS values                         FROM    block_output                         CROSS JOIN LATERAL                                 (                                 SELECT  AVG(value) AS mean,                                         VAR_POP(value) AS variance                                 FROM    UNNEST(values::REAL[]) AS n(value)                                 ) agg                         CROSS JOIN LATERAL                                 (                                 SELECT  ARRAY_AGG((value - mean) \/ SQRT(variance + 1E-5) ORDER BY ordinality)::VECTOR(768) AS values                                 FROM    UNNEST(values::REAL[]) WITH ORDINALITY AS n (value, ordinality)                                 ) norm                         CROSS JOIN                                 ln_f_b                         CROSS JOIN                                 ln_f_g                         ),                         logits AS                         (                         SELECT  token, INNER_PRODUCT(ln_f.values, wte.values) AS value                         FROM    hparams                         JOIN    ln_f                         ON      ln_f.place = n_seq - 1                         CROSS JOIN                                 wte                         ORDER BY                                 value DESC                         LIMIT   (top_n)                         ),                         tokens AS                         (                         SELECT  token,                                 high - softmax AS low,                                 high                         FROM    (                                 SELECT  *,                                         SUM(softmax) OVER (ORDER BY softmax) AS high                                 FROM    (                                         SELECT  *, (e \/ SUM(e) OVER ()) AS softmax                                         FROM    (                                                 SELECT  *,                                                         (value - MAX(value) OVER ()) \/ temperature AS diff                                                 FROM    logits                                                 ) exp_x                                         CROSS JOIN LATERAL                                                 (                                                 SELECT  CASE WHEN diff &lt; -745.13 THEN 0 ELSE EXP(diff) END AS e                                                 ) exp                                         ) q                                 ) q                         ),                         next_token AS                         (                         SELECT  *                         FROM    (                                 SELECT  RANDOM() AS rnd                                 ) r                         CROSS JOIN LATERAL                                 (                                 SELECT  *                                 FROM    tokens                                 WHERE   rnd >= low                                         AND rnd &lt; high                                 ) nt                         )                 SELECT  *                 FROM    next_token                 ) next_token         WHERE   ARRAY_LENGTH(input, 1) &lt; original_length + threshold                 AND next_token.token &lt;> 50256         ),         output AS         (         SELECT  CONVERT_FROM(STRING_AGG(SET_BYTE('\\x00', 0, byte), '' ORDER BY position), 'UTF8') AS response         FROM    (                 SELECT  STRING_AGG(cluster, '' ORDER BY ordinality) AS response                 FROM    input                 JOIN    gpt                 ON      ARRAY_LENGTH(input, 1) = original_length + threshold                 CROSS JOIN LATERAL                         UNNEST(input) WITH ORDINALITY n (token, ordinality)                 JOIN    tokenizer                 USING   (token)                 ) q         CROSS JOIN LATERAL                 STRING_TO_TABLE(response, NULL) WITH ORDINALITY n (character, position)         JOIN    encoder         USING   (character)         ) SELECT  * FROM    output <\/code><\/pre>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/1a0\/0f8\/41d\/1a00f841de73f9bb1baf6ce719e8ae7d.png\" width=\"1259\" height=\"92\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/1a0\/0f8\/41d\/1a00f841de73f9bb1baf6ce719e8ae7d.png\"\/><\/figure>\n<p>\u0418\u0418 \u0441\u043e \u0441\u0432\u043e\u0435\u0439 \u0440\u0430\u0431\u043e\u0442\u043e\u0439 \u0441\u043f\u0440\u0430\u0432\u0438\u043b\u0441\u044f \u043e\u0442\u043b\u0438\u0447\u043d\u043e. \u042f \u0438\u0441\u043a\u0440\u0435\u043d\u043d\u0435 \u0436\u0435\u043b\u0430\u044e \u0432\u0430\u043c \u0432\u0441\u0435\u0433\u043e \u0441\u0430\u043c\u043e\u0433\u043e \u043b\u0443\u0447\u0448\u0435\u0433\u043e \u0432 \u043d\u0430\u0441\u0442\u0443\u043f\u0438\u0432\u0448\u0435\u043c \u0433\u043e\u0434\u0443!<\/p>\n<p>\u0412\u0441\u0435 \u0437\u0430\u043f\u0440\u043e\u0441\u044b \u0438 \u043a\u043e\u0434 \u0434\u043b\u044f \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u0432\u044b\u043b\u043e\u0436\u0435\u043d\u044b \u0432 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0438 \u043d\u0430 GitHub:\u00a0<a href=\"https:\/\/github.com\/quassnoi\/explain-extended-2024\" rel=\"noopener noreferrer nofollow\">quassnoi\/explain-extended-2024<\/a>.<\/p>\n<\/p>\n<\/div>\n<\/div>\n<\/div>\n<p><!----><!----><\/div>\n<p><!----><!----><br \/> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/articles\/786276\/\"> https:\/\/habr.com\/ru\/articles\/786276\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p>\u0412 \u043c\u0438\u043d\u0443\u0432\u0448\u0435\u043c \u0433\u043e\u0434\u0443 \u0432\u0441\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0438 \u0433\u043e\u0432\u043e\u0440\u0438\u043b\u0438 \u043e\u0431 \u0418\u0418 \u0438 \u043e \u0442\u043e\u043c, \u043a\u0430\u043a \u043e\u043d \u043c\u043e\u0436\u0435\u0442 \u0432\u0441\u0451 \u0437\u0430 \u0432\u0430\u0441 \u0441\u0434\u0435\u043b\u0430\u0442\u044c.<\/p>\n<p>\u041c\u043d\u0435 \u043d\u0440\u0430\u0432\u0438\u0442\u0441\u044f, \u043a\u043e\u0433\u0434\u0430 \u043a\u0442\u043e-\u0442\u043e \u0438\u043b\u0438 \u0447\u0442\u043e-\u0442\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0437\u0430 \u043c\u0435\u043d\u044f. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0440\u0435\u0448\u0438\u043b: \u043f\u043e\u043f\u0440\u043e\u0448\u0443-\u043a\u0430 ChatGPT \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0437\u0430 \u043c\u0435\u043d\u044f \u043d\u043e\u0432\u043e\u0433\u043e\u0434\u043d\u0438\u0439 \u043f\u043e\u0441\u0442:<\/p>\n<p>&#171;\u042d\u0439, ChatGPT. \u0410 \u0442\u044b \u043c\u043e\u0436\u0435\u0448\u044c \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0431\u043e\u043b\u044c\u0448\u0443\u044e \u044f\u0437\u044b\u043a\u043e\u0432\u0443\u044e \u043c\u043e\u0434\u0435\u043b\u044c \u043d\u0430 SQL?&#187;<br \/> &#171;\u041d\u0435\u0442, SQL \u043d\u0435 \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u0442 \u0434\u043b\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u044f\u0437\u044b\u043a\u043e\u0432\u044b\u0445 \u043c\u043e\u0434\u0435\u043b\u0435\u0439. \u042f\u0437\u044b\u043a SQL \u043f\u0440\u0435\u0434\u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d \u0434\u043b\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u043a \u0434\u0430\u043d\u043d\u044b\u043c, \u0445\u0440\u0430\u043d\u044f\u0449\u0438\u043c\u0441\u044f \u0432 \u0420\u0421\u0423\u0411\u0414 \u0438 \u0434\u043b\u044f \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u044d\u0442\u0438\u043c\u0438 \u0437\u0430\u043f\u0440\u043e\u0441\u0430\u043c\u0438. \u0414\u043b\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u044f\u0437\u044b\u043a\u043e\u0432\u043e\u0439 \u043c\u043e\u0434\u0435\u043b\u0438 \u0442\u0440\u0435\u0431\u0443\u044e\u0442\u0441\u044f \u0441\u043b\u043e\u0436\u043d\u044b\u0435 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u044b, \u043e\u0431\u0448\u0438\u0440\u043d\u044b\u0435 \u0434\u0430\u0442\u0430\u0441\u0435\u0442\u044b, \u0430 \u0437\u0430\u0447\u0430\u0441\u0442\u0443\u044e \u2013 \u0438 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u0438 \u0434\u043b\u044f \u0433\u043b\u0443\u0431\u043e\u043a\u043e\u0433\u043e \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f. SQL \u0432\u0441\u0435\u043c\u0438 \u044d\u0442\u0438\u043c\u0438 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044f\u043c\u0438 \u043d\u0435 \u043e\u0431\u043b\u0430\u0434\u0430\u0435\u0442.&#187;<\/p>\n<p>\u0427\u0442\u043e \u0436, \u043b\u0438\u0448\u043d\u0438\u0439 \u0440\u0430\u0437 \u0443\u0431\u0435\u0436\u0434\u0430\u0435\u0448\u044c\u0441\u044f, \u0447\u0442\u043e, \u0435\u0441\u043b\u0438 \u0445\u043e\u0447\u0435\u0448\u044c \u0447\u0442\u043e-\u0442\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0445\u043e\u0440\u043e\u0448\u043e \u2013 \u0441\u0434\u0435\u043b\u0430\u0439 \u044d\u0442\u043e \u0441\u0430\u043c. <\/p>\n<p>\u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0436\u0435 \u0432\u043e\u043e\u0434\u0443\u0448\u0435\u0432\u0438\u043c\u0441\u044f \u044d\u0442\u0438\u043c \u043e\u043f\u0442\u0438\u043c\u0438\u0441\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u043c \u043f\u043b\u0430\u043d\u043e\u043c \u0438 \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u043c \u0431\u043e\u043b\u044c\u0448\u0443\u044e \u044f\u0437\u044b\u043a\u043e\u0432\u0443\u044e \u043c\u043e\u0434\u0435\u043b\u044c \u043d\u0430 \u044f\u0437\u044b\u043a\u0435 SQL.<\/p>\n<h2>\u0422\u0435\u043e\u0440\u0438\u044f <\/h2>\n<p>\u0413\u043e\u0442\u043e\u0432\u044f \u044d\u0442\u043e\u0442 \u043f\u043e\u0441\u0442, \u044f \u0432\u0434\u043e\u0445\u043d\u043e\u0432\u043b\u044f\u043b\u0441\u044f \u0447\u0443\u0434\u0435\u0441\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0451\u0439 <a href=\"https:\/\/jaykmody.com\/blog\/gpt-from-scratch\/\" rel=\"noopener noreferrer nofollow\">GPT in 60 Lines of NumPy<\/a>, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043d\u0430\u043f\u0438\u0441\u0430\u043b \u0414\u0436\u0435\u0439 \u041c\u043e\u0434\u0438. \u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u043e\u0431\u044a\u044f\u0441\u043d\u0435\u043d\u043e \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0435\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u043c\u043e\u0434\u0435\u043b\u0438 GPT, \u043f\u0440\u0438\u0447\u0451\u043c, \u044d\u0442\u043e \u0441\u0434\u0435\u043b\u0430\u043d\u043e \u0433\u043e\u0440\u0430\u0437\u0434\u043e \u043b\u0443\u0447\u0448\u0435, \u0447\u0435\u043c \u043c\u043e\u0433\u043b\u043e \u0431\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c\u0441\u044f \u0443 \u043c\u0435\u043d\u044f. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0434\u043b\u044f \u043f\u043e\u0440\u044f\u0434\u043a\u0430 \u0432\u043a\u0440\u0430\u0442\u0446\u0435 \u043d\u0430\u043f\u043e\u043c\u043d\u044e \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442.<\/p>\n<p><strong>\u0427\u0442\u043e \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u043e\u0431\u043e\u0439 \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u0438\u0432\u043d\u0430\u044f \u0431\u043e\u043b\u044c\u0448\u0430\u044f \u044f\u0437\u044b\u043a\u043e\u0432\u0430\u044f \u043c\u043e\u0434\u0435\u043b\u044c \u0441 \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0442\u043e\u0447\u043a\u0438 \u0437\u0440\u0435\u043d\u0438\u044f?<\/strong><\/p>\n<p>\u0413\u0435\u043d\u0435\u0440\u0430\u0442\u0438\u0432\u043d\u0430\u044f LLM \u2013 \u044d\u0442\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u044f. \u041e\u043d\u0430 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u043d\u0430 \u0432\u0432\u043e\u0434 \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u0443\u044e \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432 (\u0432 \u0442\u0435\u0440\u043c\u0438\u043d\u043e\u043b\u043e\u0433\u0438\u0438 \u0418\u0418 \u043e\u043d\u0430 \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u00ab\u043f\u0440\u043e\u043c\u043f\u0442\u00bb) \u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043c\u0430\u0441\u0441\u0438\u0432 \u0441\u0442\u0440\u043e\u043a \u0438 \u0447\u0438\u0441\u0435\u043b. \u0412\u043e\u0442 \u043a\u0430\u043a\u043e\u0432\u0430 \u0441\u0438\u0433\u043d\u0430\u0442\u0443\u0440\u0430 \u044d\u0442\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438:<\/p>\n<pre><code>llm(prompt: str) -> list[tuple[str, float]]<\/code><\/pre>\n<p>\u042d\u0442\u043e \u0434\u0435\u0442\u0435\u0440\u043c\u0438\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f. \u0423 \u043d\u0435\u0451 \u043f\u043e\u0434 \u043a\u0430\u043f\u043e\u0442\u043e\u043c \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u0441\u0435\u0440\u044c\u0451\u0437\u043d\u0430\u044f \u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u043a\u0430, \u043d\u043e \u0432\u0441\u044f \u044d\u0442\u0430 \u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u043a\u0430 \u0436\u0451\u0441\u0442\u043a\u043e \u0432\u0448\u0438\u0442\u0430 \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0443. \u0415\u0441\u043b\u0438 \u0432\u044b \u0431\u0443\u0434\u0435\u0442\u0435 \u043c\u043d\u043e\u0433\u043e\u043a\u0440\u0430\u0442\u043d\u043e \u0441\u043e\u043e\u0431\u0449\u0430\u0442\u044c \u044d\u0442\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043e\u0434\u0438\u043d \u0438 \u0442\u043e\u0442 \u0436\u0435 \u0432\u0432\u043e\u0434, \u0442\u043e \u0432\u0441\u044f\u043a\u0438\u0439 \u0440\u0430\u0437 \u0431\u0443\u0434\u0435\u0442\u0435 \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u044c \u043e\u0442 \u043d\u0435\u0451 \u043e\u0434\u0438\u043d \u0438 \u0442\u043e\u0442 \u0436\u0435 \u0432\u044b\u0432\u043e\u0434. <\/p>\n<p>\u0422\u0435\u043c, \u043a\u043e\u043c\u0443 \u0434\u043e\u0432\u043e\u0434\u0438\u043b\u043e\u0441\u044c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f ChatGPT \u0438 \u043f\u043e\u0434\u043e\u0431\u043d\u044b\u043c\u0438 \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u0430\u043c\u0438, \u044d\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c\u0441\u044f \u0443\u0434\u0438\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u043c, \u0432\u0435\u0434\u044c \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u043c\u043e\u0436\u0435\u0442 \u0434\u0430\u0432\u0430\u0442\u044c \u0440\u0430\u0437\u043d\u044b\u0435 \u043e\u0442\u0432\u0435\u0442\u044b \u043d\u0430 \u043e\u0434\u0438\u043d \u0438 \u0442\u043e\u0442 \u0436\u0435 \u0432\u043e\u043f\u0440\u043e\u0441. \u0414\u0430, \u0432\u0441\u0451 \u0432\u0435\u0440\u043d\u043e. \u0427\u0443\u0442\u044c \u043d\u0438\u0436\u0435 \u043e\u0431\u044a\u044f\u0441\u043d\u044e, \u043a\u0430\u043a \u044d\u0442\u043e \u0443\u0441\u0442\u0440\u043e\u0435\u043d\u043e.<\/p>\n<p><strong>\u0427\u0442\u043e \u0437\u0430 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u044d\u0442\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u044f?<\/strong><\/p>\n<p>\u041d\u0435\u0447\u0442\u043e \u043f\u043e\u0434\u043e\u0431\u043d\u043e\u0435:<\/p>\n<pre><code class=\"python\">llm(\"I wish you a happy New\")   0       (' Year', 0.967553) 1       (' Years', 0.018199688) 2       (' year', 0.003573329) 3       (' York', 0.003114716) 4       (' New', 0.0009022804) \u2026 50252   (' carbohyd', 2.3950911e-15) 50253   (' volunte', 2.2590102e-15) 50254   ('pmwiki', 1.369229e-15) 50255   (' proport', 1.1198108e-15) 50256   (' cumbers', 7.568147e-17)<\/code><\/pre>\n<p>\u041e\u043d\u0430 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043c\u0430\u0441\u0441\u0438\u0432 \u043a\u043e\u0440\u0442\u0435\u0436\u0435\u0439. \u041a\u0430\u0436\u0434\u044b\u0439 \u043a\u043e\u0440\u0442\u0435\u0436 \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0438\u0437 \u0441\u043b\u043e\u0432\u0430 (\u0441\u043a\u043e\u0440\u0435\u0435, \u0441\u0442\u0440\u043e\u043a\u0438) \u0438 \u0447\u0438\u0441\u043b\u0430. \u0427\u0438\u0441\u043b\u043e \u2014 \u044d\u0442\u043e \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e\u0441\u0442\u044c, \u0441 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0434\u0430\u043d\u043d\u043e\u0435 \u0441\u043b\u043e\u0432\u043e \u043c\u043e\u0436\u0435\u0442 \u043e\u043a\u0430\u0437\u0430\u0442\u044c\u0441\u044f \u043f\u0440\u043e\u043c\u043f\u0442\u0435 \u043d\u0430 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u043f\u043e\u0437\u0438\u0446\u0438\u0438. \u041c\u043e\u0434\u0435\u043b\u044c \u00ab\u0434\u0443\u043c\u0430\u0435\u0442\u00bb, \u0447\u0442\u043e \u0437\u0430 \u0444\u0440\u0430\u0437\u043e\u0439 \u00abI wish you a happy New\u2026\u00bb (\u00ab\u041f\u043e\u0437\u0434\u0440\u0430\u0432\u043b\u044f\u044e \u0442\u0435\u0431\u044f \u0441 \u041d\u043e\u0432\u044b\u043c\u2026\u00bb) \u0441 \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e\u0441\u0442\u044c\u044e 96,7% \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u0441\u0442\u0440\u043e\u043a\u0430 \u00abYear\u00bb (\u2026\u0433\u043e\u0434\u043e\u043c) \u2013 \u0438 \u0442\u0430\u043a \u0434\u0430\u043b\u0435\u0435.\u00a0 <\/p>\n<p>\u0421\u043b\u043e\u0432\u043e \u00ab\u0434\u0443\u043c\u0430\u0435\u0442\u00bb \u0432\u044b\u0448\u0435 \u043f\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043e \u0432 \u043a\u0430\u0432\u044b\u0447\u043a\u0430\u0445, \u0442\u0430\u043a \u043a\u0430\u043a, \u0435\u0441\u0442\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u043c\u043e\u0434\u0435\u043b\u044c \u043d\u0438 \u043e \u0447\u0451\u043c \u043d\u0435 \u0434\u0443\u043c\u0430\u0435\u0442. \u041e\u043d\u0430 \u043c\u0435\u0445\u0430\u043d\u0438\u0447\u0435\u0441\u043a\u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043c\u0430\u0441\u0441\u0438\u0432\u044b \u0441\u043b\u043e\u0432 \u0438 \u0447\u0438\u0441\u0435\u043b \u0432 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0438 \u0441 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0436\u0451\u0441\u0442\u043a\u043e \u043f\u0440\u043e\u043f\u0438\u0441\u0430\u043d\u043d\u043e\u0439 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0435\u0439 \u043b\u043e\u0433\u0438\u043a\u043e\u0439.<\/p>\n<p><strong>\u0415\u0441\u043b\u0438 \u044d\u0442\u0430 \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0442\u0430\u043a\u0430\u044f \u0442\u043e\u043f\u043e\u0440\u043d\u0430\u044f \u0438 \u0434\u0435\u0442\u0435\u0440\u043c\u0438\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u0430\u044f, \u043a\u0430\u043a \u0436\u0435 \u0435\u0439 \u0443\u0434\u0430\u0451\u0442\u0441\u044f \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0440\u0430\u0437\u043d\u044b\u0435 \u0442\u0435\u043a\u0441\u0442\u044b?<\/strong><\/p>\n<p>\u0411\u043e\u043b\u044c\u0448\u0438\u0435 \u044f\u0437\u044b\u043a\u043e\u0432\u044b\u0435 \u043c\u043e\u0434\u0435\u043b\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u0432 \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u044b\u0445 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f\u0445 (\u0447\u0430\u0442\u0431\u043e\u0442\u044b, \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440\u044b \u043a\u043e\u043d\u0442\u0435\u043d\u0442\u0430, \u043a\u043e\u0434\u0438\u043d\u0433-\u0430\u0441\u0441\u0438\u0441\u0442\u0435\u043d\u0442\u044b, \u0442.\u0434.). \u042d\u0442\u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0440\u0430\u0437 \u0437\u0430 \u0440\u0430\u0437\u043e\u043c \u0432\u044b\u0437\u044b\u0432\u0430\u044e\u0442 \u043c\u043e\u0434\u0435\u043b\u044c \u0438 \u0432\u044b\u0431\u0438\u0440\u0430\u044e\u0442 \u043f\u043e\u0434\u0441\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u0435 \u0435\u044e \u0441\u043b\u043e\u0432\u043e (\u0441 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0441\u0442\u0435\u043f\u0435\u043d\u044c\u044e \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u043e\u0441\u0442\u0438). \u041f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0435 \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d\u043d\u043e\u0435 \u0441\u043b\u043e\u0432\u043e \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043a \u043f\u0440\u043e\u043c\u043f\u0442\u0443, \u0438 \u043c\u043e\u0434\u0435\u043b\u044c \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0441\u043d\u043e\u0432\u0430. \u042d\u0442\u043e\u0442 \u0446\u0438\u043a\u043b \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0435\u0442\u0441\u044f \u0434\u043e \u0442\u0435\u0445 \u043f\u043e\u0440, \u043f\u043e\u043a\u0430 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043e \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0441\u043b\u043e\u0432.<\/p>\n<p>\u041d\u0430\u043a\u043e\u043f\u043b\u0435\u043d\u043d\u0430\u044f \u0442\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0441\u043b\u043e\u0432 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043a\u0430\u043a \u0442\u0435\u043a\u0441\u0442 \u043d\u0430 \u0435\u0441\u0442\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u043c \u044f\u0437\u044b\u043a\u0435, \u0441 \u043f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u043e\u0439 \u0433\u0440\u0430\u043c\u043c\u0430\u0442\u0438\u043a\u043e\u0439, \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441\u043e\u043c \u0438 \u0434\u0430\u0436\u0435 \u043c\u043d\u0438\u043c\u044b\u043c\u0438 \u043f\u0440\u0438\u0437\u043d\u0430\u043a\u0430\u043c\u0438 \u0438\u043d\u0442\u0435\u043b\u043b\u0435\u043a\u0442\u0430 \u0438 \u043b\u043e\u0433\u0438\u043a\u0438. \u0412 \u0434\u0430\u043d\u043d\u043e\u043c \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u0438 \u044f\u0437\u044b\u043a\u043e\u0432\u044b\u0435 \u043c\u043e\u0434\u0435\u043b\u0438 \u043f\u043e\u0434\u043e\u0431\u043d\u044b <a href=\"https:\/\/en.wikipedia.org\/wiki\/Discrete-time_Markov_chain\" rel=\"noopener noreferrer nofollow\">\u043c\u0430\u0440\u043a\u043e\u0432\u0441\u043a\u0438\u043c \u0446\u0435\u043f\u044f\u043c<\/a>, \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0438\u043c \u043f\u043e \u0442\u0430\u043a\u043e\u043c\u0443 \u0436\u0435 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0443.<\/p>\n<p>\u041d\u0430 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0435\u043c \u0443\u0440\u043e\u0432\u043d\u0435 \u0431\u043e\u043b\u044c\u0448\u0430\u044f \u044f\u0437\u044b\u043a\u043e\u0432\u0430\u044f \u043c\u043e\u0434\u0435\u043b\u044c \u0443\u0441\u0442\u0440\u043e\u0435\u043d\u0430 \u0442\u0430\u043a, \u0447\u0442\u043e \u043a\u0430\u0436\u0434\u043e\u0435 \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435 \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0435\u043c\u043e\u0435 \u0441\u043b\u043e\u0432\u043e \u0435\u0441\u0442\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u043b\u043e \u043f\u0440\u043e\u043c\u043f\u0442, \u0441 \u0443\u0447\u0451\u0442\u043e\u043c \u0438\u043c\u0435\u044e\u0449\u0435\u0439\u0441\u044f \u0433\u0440\u0430\u043c\u043c\u0430\u0442\u0438\u043a\u0438, \u0441\u0435\u043c\u0430\u043d\u0442\u0438\u043a\u0438 \u0438 \u0442\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u0438. \u041e\u0441\u043d\u0430\u0441\u0442\u0438\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u0442\u0430\u043a\u043e\u0439 \u043b\u043e\u0433\u0438\u043a\u043e\u0439 \u0441\u0442\u0430\u043b\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0431\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u0446\u0435\u043b\u043e\u0439 \u0441\u0435\u0440\u0438\u0438 \u043d\u0430\u0443\u0447\u043d\u044b\u0445 \u043f\u0440\u043e\u0440\u044b\u0432\u043e\u0432 (\u0438 \u043a\u0430\u0442\u043e\u0440\u0436\u043d\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442\u043e\u0432). \u0423\u0434\u0430\u043b\u043e\u0441\u044c \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0446\u0435\u043b\u043e\u0435 \u0441\u0435\u043c\u0435\u0439\u0441\u0442\u0432\u043e \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u043e\u0432 \u043f\u043e\u0434 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435\u043c GPT \u0438\u043b\u0438 \u00ab\u0433\u0435\u043d\u0435\u0440\u0430\u0442\u0438\u0432\u043d\u044b\u0435 \u043f\u0440\u0435\u0434\u043e\u0431\u0443\u0447\u0435\u043d\u043d\u044b\u0435 \u0442\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0435\u0440\u044b\u00bb.<\/p>\n<h2>\u0427\u0442\u043e \u0442\u0430\u043a\u043e\u0435 &#171;\u0433\u0435\u043d\u0435\u0440\u0430\u0442\u0438\u0432\u043d\u044b\u0439 \u043f\u0440\u0435\u0434\u043e\u0431\u0443\u0447\u0435\u043d\u043d\u044b\u0439 \u0442\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0435\u0440&#187;<\/h2>\n<p>\u00ab\u0413\u0435\u043d\u0435\u0440\u0430\u0442\u0438\u0432\u043d\u044b\u0439\u00bb \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442, \u0447\u0442\u043e \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442 \u0442\u0435\u043a\u0441\u0442 (\u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0432\u043d\u043e \u0434\u043e\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u044f \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0435\u043d\u0438\u044f \u043a \u043f\u0440\u043e\u043c\u043f\u0442\u0443 \u043a\u0430\u043a \u0431\u044b\u043b\u043e \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u043e \u0432\u044b\u0448\u0435).<\/p>\n<p>\u00ab\u0422\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0435\u0440\u00bb \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442, \u0447\u0442\u043e \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0439 \u0442\u0438\u043f \u043d\u0435\u0439\u0440\u043e\u043d\u043d\u043e\u0439 \u0441\u0435\u0442\u0438. \u0421\u0435\u0442\u044c-\u0442\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0435\u0440 \u0431\u044b\u043b\u0430 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u0430 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0435\u0439 Google \u0438 \u043e\u043f\u0438\u0441\u0430\u043d\u0430 \u0432\u00a0<a href=\"https:\/\/arxiv.org\/pdf\/1706.03762.pdf\" rel=\"noopener noreferrer nofollow\">\u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435<\/a>.<\/p>\n<p>\u0422\u0435\u0440\u043c\u0438\u043d \u00ab\u043f\u0440\u0435\u0434\u043e\u0431\u0443\u0447\u0435\u043d\u043d\u044b\u0439\u00bb \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0433\u043e \u0438\u0441\u0442\u043e\u0440\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u044d\u043a\u0441\u043a\u0443\u0440\u0441\u0430. \u0418\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e \u0441\u0447\u0438\u0442\u0430\u043b\u043e\u0441\u044c, \u0447\u0442\u043e \u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0441\u0442\u044c \u043c\u043e\u0434\u0435\u043b\u0438 \u0434\u043e\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0442\u044c \u0442\u0435\u043a\u0441\u0442 \u2013 \u044d\u0442\u043e \u0432\u0441\u0435\u0433\u043e \u043b\u0438\u0448\u044c \u043f\u0440\u0435\u0434\u043f\u043e\u0441\u044b\u043b\u043a\u0430 \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0431\u043e\u043b\u0435\u0435 \u0433\u043b\u0443\u0431\u043e\u043a\u0438\u0445 \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0432\u044b\u0432\u043e\u0434\u043e\u0432 \u0432 \u0440\u0430\u043c\u043a\u0430\u0445 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0437\u0430\u0434\u0430\u0447 (\u043d\u0443\u0436\u043d\u043e \u0443\u043b\u0430\u0432\u043b\u0438\u0432\u0430\u0442\u044c \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u0441\u0432\u044f\u0437\u044c \u043c\u0435\u0436\u0434\u0443 \u0444\u0440\u0430\u0437\u0430\u043c\u0438), \u043a\u043b\u0430\u0441\u0441\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0443\u0433\u0430\u0434\u0430\u0442\u044c, \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0437\u0432\u0451\u0437\u0434 \u0443 \u043e\u0442\u0435\u043b\u044f, \u043f\u0440\u043e\u0430\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0432 \u043e\u0442\u0437\u044b\u0432\u044b \u043f\u043e\u0441\u0442\u043e\u044f\u043b\u044c\u0446\u0435\u0432), \u043c\u0430\u0448\u0438\u043d\u043d\u043e\u0433\u043e \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0430 \u0438 \u0442.\u0434. \u0421\u0447\u0438\u0442\u0430\u043b\u043e\u0441\u044c, \u0447\u0442\u043e \u0434\u0432\u0435 \u044d\u0442\u0438 \u0447\u0430\u0441\u0442\u0438 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043e\u0431\u0443\u0447\u0430\u0442\u044c \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e, \u0438 \u044f\u0437\u044b\u043a\u043e\u0432\u0430\u044f \u0447\u0430\u0441\u0442\u044c \u043f\u043e\u0437\u0438\u0446\u0438\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043b\u0430\u0441\u044c \u043a\u0430\u043a <em>\u043f\u0440\u0435\u0434<\/em>\u043e\u0431\u0443\u0447\u0435\u043d\u0438\u0435, \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0430 \u043a \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c\u0443 \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044e \u0440\u0435\u0448\u0430\u0442\u044c \u0440\u0435\u0430\u043b\u044c\u043d\u0443\u044e \u0437\u0430\u0434\u0430\u0447\u0443.<\/p>\n<p>\u041a\u0430\u043a \u0441\u0444\u043e\u0440\u043c\u0443\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u043e \u0432 \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u043f\u043e GPT:<\/p>\n<p>\u041f\u0440\u043e\u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043e, \u0447\u0442\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0434\u043e\u0431\u0438\u0442\u044c\u0441\u044f \u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u0443\u0441\u043f\u0435\u0445\u043e\u0432 \u043f\u0440\u0438 \u0440\u0435\u0448\u0435\u043d\u0438\u0438 \u0442\u0430\u043a\u0438\u0445 \u0437\u0430\u0434\u0430\u0447 \u043f\u0443\u0442\u0451\u043c \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u0438\u0432\u043d\u043e\u0433\u043e \u043f\u0440\u0435\u0434\u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f \u044f\u0437\u044b\u043a\u043e\u0432\u043e\u0439 \u043c\u043e\u0434\u0435\u043b\u0438 \u043d\u0430 \u0440\u0430\u0437\u043d\u043e\u0440\u043e\u0434\u043d\u043e\u043c \u043a\u043e\u0440\u043f\u0443\u0441\u0435 \u043d\u0435\u0440\u0430\u0437\u043c\u0435\u0447\u0435\u043d\u043d\u043e\u0433\u043e \u0442\u0435\u043a\u0441\u0442\u0430 \u0441 \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u0442\u043e\u043d\u043a\u043e\u0439 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u043e\u0439 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u0434\u043b\u044f \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u0441\u043b\u043e\u0451\u0432 \u0441\u0435\u0442\u0438 (discriminative fine-tuning) \u0432 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0435 \u043a\u0430\u0436\u0434\u043e\u0439 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0438.<\/p>\n<p>\u0422\u0430\u043a\u0438\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u043b\u0438\u0441\u044c \u0434\u043e \u0442\u0435\u0445 \u043f\u043e\u0440, \u043f\u043e\u043a\u0430 \u043d\u0435 \u0441\u0442\u0430\u043b\u043e \u043f\u043e\u043d\u044f\u0442\u043d\u043e, \u0447\u0442\u043e \u0434\u043b\u044f \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u043c\u043e\u0434\u0435\u043b\u0438 \u0432\u0442\u043e\u0440\u043e\u0439 \u0448\u0430\u0433 \u0437\u0430\u0447\u0430\u0441\u0442\u0443\u044e \u0438\u0437\u043b\u0438\u0448\u0435\u043d. \u041c\u043e\u0434\u0435\u043b\u044c-\u0442\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0435\u0440, \u043e\u0431\u0443\u0447\u0435\u043d\u043d\u0430\u044f \u0438\u0441\u043a\u043b\u044e\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u0442\u0435\u043a\u0441\u0442\u043e\u0432, \u043e\u043a\u0430\u0437\u0430\u043b\u0430\u0441\u044c \u0432 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0438 \u0431\u0435\u0437 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f \u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u044c \u0447\u0435\u043b\u043e\u0432\u0435\u0447\u0435\u0441\u043a\u0438\u043c \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f\u043c, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0438\u043c\u0441\u044f \u0432 \u044d\u0442\u0438\u0445 \u0442\u0435\u043a\u0441\u0442\u0430\u0445. \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u043d\u0435 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043b\u043e\u0441\u044c \u043d\u0438\u043a\u0430\u043a\u043e\u0439 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u0442\u043e\u043d\u043a\u043e\u0439 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438. <\/p>\n<p>\u0418\u0442\u0430\u043a, \u0441 \u044d\u0442\u0438\u043c\u0438 \u0432\u043e\u043f\u0440\u043e\u0441\u0430\u043c\u0438 \u043c\u044b \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u043b\u0438\u0441\u044c. \u0422\u0435\u043f\u0435\u0440\u044c \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0441\u043e\u0441\u0440\u0435\u0434\u043e\u0442\u043e\u0447\u0438\u043c\u0441\u044f \u043d\u0430 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438.<\/p>\n<p><strong>\u0413\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044f<\/strong><\/p>\n<p>\u0412\u043e\u0442 \u0447\u0442\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442, \u0435\u0441\u043b\u0438 \u043c\u044b \u043f\u044b\u0442\u0430\u0435\u043c\u0441\u044f \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0442\u0435\u043a\u0441\u0442 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u043f\u0440\u043e\u043c\u043f\u0442\u0430 \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 GPT2:<\/p>\n<pre><code class=\"python\">def generate(prompt: str) -> str:   # \u041f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u0443\u0435\u0442 \u0441\u0442\u0440\u043e\u043a\u0443 \u0432 \u0441\u043f\u0438\u0441\u043e\u043a \u0442\u043e\u043a\u0435\u043d\u043e\u0432.   tokens = tokenize(prompt) # tokenize(prompt: str) -> list[int]     while True:       # \u0412\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c.     # \u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e\u0441\u0442\u043d\u044b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0434\u043b\u044f \u0442\u043e\u043a\u0435\u043d\u043e\u0432: \u0441\u043f\u0438\u0441\u043e\u043a \u0438\u0437 50257 \u0447\u0438\u0441\u0435\u043b \u0441 \u043f\u043b\u0430\u0432\u0430\u044e\u0449\u0435\u0439 \u0442\u043e\u0447\u043a\u043e\u0439, \u0432 \u0441\u0443\u043c\u043c\u0435 \u0434\u0430\u044e\u0449\u0438\u0445 1.     candidates = gpt2(tokens) # gpt2(tokens: list[int]) -> list[float]       # \u0412\u044b\u0431\u0438\u0440\u0430\u0435\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u0442\u043e\u043a\u0435\u043d \u0438\u0437 \u0441\u043f\u0438\u0441\u043a\u0430 \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u0445      next_token = select_next_token(candidates)     # select_next_token(candidates: list[float]) -> int       # \u041f\u0440\u0438\u043a\u0440\u0435\u043f\u043b\u044f\u0435\u0442 \u0435\u0433\u043e \u043a \u0441\u043f\u0438\u0441\u043a\u0443 \u0442\u043e\u043a\u0435\u043d\u043e\u0432     tokens.append(next_token)       # \u0420\u0435\u0448\u0430\u0435\u043c, \u0445\u043e\u0442\u0438\u043c \u043b\u0438 \u043c\u044b \u043f\u0440\u0435\u043a\u0440\u0430\u0442\u0438\u0442\u044c \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044e.     # \u0417\u0434\u0435\u0441\u044c \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0441\u0447\u0451\u0442\u0447\u0438\u043a \u0442\u043e\u043a\u0435\u043d\u043e\u0432, \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u0430, \u0441\u0442\u043e\u043f-\u0441\u043b\u043e\u0432\u043e \u0438\u043b\u0438 \u0447\u0442\u043e-\u0442\u043e \u0435\u0449\u0451.     if should_stop_generating():       break     # \u041f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u0443\u0435\u0442 \u0441\u043f\u0438\u0441\u043e\u043a \u0442\u043e\u043a\u0435\u043d\u043e\u0432 \u0432 \u0441\u0442\u0440\u043e\u043a\u0443   completion = detokenize(tokens) # detokenize(tokens: list[int]) -> str   return completion<\/code><\/pre>\n<p>\u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u043c \u0432\u0441\u0435 \u044d\u0442\u0438 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u043e\u0434\u0438\u043d \u0437\u0430 \u0434\u0440\u0443\u0433\u0438\u043c \u043d\u0430 \u044f\u0437\u044b\u043a\u0435 SQL.<\/p>\n<h2>\u0422\u043e\u043a\u0435\u043d\u0438\u0437\u0430\u0442\u043e\u0440 <\/h2>\n<p>\u041f\u0440\u0435\u0436\u0434\u0435, \u0447\u0435\u043c \u0442\u0435\u043a\u0441\u0442 \u043c\u043e\u0436\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u0441\u043a\u043e\u0440\u043c\u0438\u0442\u044c \u043d\u0435\u0439\u0440\u043e\u043d\u043a\u0435, \u0435\u0433\u043e \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u0442\u044c \u0432 \u0441\u043f\u0438\u0441\u043e\u043a \u0447\u0438\u0441\u0435\u043b. \u041a\u043e\u043d\u0435\u0447\u043d\u043e, \u043d\u0430\u0441 \u044d\u0442\u043e \u043d\u0435 \u0443\u0434\u0438\u0432\u043b\u044f\u0435\u0442: \u0438\u043c\u0435\u043d\u043d\u043e \u0442\u0430\u043a\u0438\u0435 \u0437\u0430\u0434\u0430\u0447\u0438 \u0440\u0435\u0448\u0430\u044e\u0442\u0441\u044f \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u044b\u0445 \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u043e\u043a \u0432\u0440\u043e\u0434\u0435 Unicode. \u041d\u043e \u043e\u0431\u044b\u0447\u043d\u044b\u0439 Unicode \u043d\u0435 \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u0445\u043e\u0440\u043e\u0448\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0441 \u043d\u0435\u0439\u0440\u043e\u043d\u043d\u044b\u043c\u0438 \u0441\u0435\u0442\u044f\u043c\u0438.<\/p>\n<p>\u0412 \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0438, \u043d\u0435\u0439\u0440\u043e\u043d\u043d\u044b\u0435 \u0441\u0435\u0442\u0438 \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u044b \u043d\u0430 \u043e\u0431\u0448\u0438\u0440\u043d\u043e\u043c \u043f\u0435\u0440\u0435\u043c\u043d\u043e\u0436\u0435\u043d\u0438\u0438 \u043c\u0430\u0442\u0440\u0438\u0446, \u0438 \u0432\u0441\u044f \u043f\u0440\u043e\u0433\u043d\u043e\u0441\u0442\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u0441\u0438\u043b\u0430 \u043d\u0435\u0439\u0440\u043e\u043d\u043d\u044b\u0445 \u0441\u0435\u0442\u0435\u0439 \u0437\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0430 \u0432 \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442\u0430\u0445 \u044d\u0442\u0438\u0445 \u043c\u0430\u0442\u0440\u0438\u0446. \u041d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0438\u0437 \u0442\u0430\u043a\u0438\u0445 \u043c\u0430\u0442\u0440\u0438\u0446 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442 \u043f\u043e \u0441\u0442\u0440\u043e\u043a\u0435 \u043d\u0430 \u043a\u0430\u0436\u0434\u043e\u0435 \u0438\u0437 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u0432 \u00ab\u0430\u043b\u0444\u0430\u0432\u0438\u0442\u0435\u00bb, \u0432 \u0434\u0440\u0443\u0433\u0438\u0445 \u043f\u0440\u0435\u0434\u0443\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u043e \u043f\u043e \u0441\u0442\u0440\u043e\u043a\u0435 \u043d\u0430 \u00ab\u0441\u0438\u043c\u0432\u043e\u043b\u00bb.<\/p>\n<p>\u0412 \u044d\u0442\u043e\u043c \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0435 \u0441\u043c\u044b\u0441\u043b \u0442\u0435\u0440\u043c\u0438\u043d\u043e\u0432 \u00ab\u0430\u043b\u0444\u0430\u0432\u0438\u0442\u00bb \u0438 \u00ab\u0441\u0438\u043c\u0432\u043e\u043b\u00bb \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043f\u043e\u044f\u0441\u043d\u0438\u0442\u044c. \u0412 Unicode \u0434\u043b\u0438\u043d\u0430 \u00ab\u0430\u043b\u0444\u0430\u0432\u0438\u0442\u0430\u00bb \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 149186 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432 (\u0438\u043c\u0435\u043d\u043d\u043e \u0441\u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0445 \u0442\u043e\u0447\u0435\u043a Unicode \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u043d\u0430 \u043c\u043e\u043c\u0435\u043d\u0442 \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0438 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438), \u0430 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u00ab\u0441\u0438\u043c\u0432\u043e\u043b\u0430\u00bb \u043c\u043e\u0436\u0435\u0442 \u0432\u044b\u0441\u0442\u0443\u043f\u0430\u0442\u044c, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440: \ufdfd (\u0434\u0430, \u044d\u0442\u043e \u043e\u0434\u0438\u043d\u043e\u0447\u043d\u0430\u044f \u0442\u043e\u0447\u043a\u0430 Unicode, \u043d\u043e\u043c\u0435\u0440 65021, \u043e\u043d\u0430 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442\u00a0<a href=\"https:\/\/en.wikipedia.org\/wiki\/Basmala\" rel=\"noopener noreferrer nofollow\">\u0446\u0435\u043b\u043e\u0439 \u0444\u0440\u0430\u0437\u0435 \u043d\u0430 \u0430\u0440\u0430\u0431\u0441\u043a\u043e\u043c \u044f\u0437\u044b\u043a\u0435<\/a>, \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u0432\u0430\u0436\u043d\u043e\u0439 \u0434\u043b\u044f \u043c\u0443\u0441\u0443\u043b\u044c\u043c\u0430\u043d). \u041e\u0442\u043c\u0435\u0447\u0443, \u0447\u0442\u043e \u044d\u0442\u0443 \u0444\u0440\u0430\u0437\u0443 \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0431\u044b \u0437\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0438 \u043e\u0431\u044b\u0447\u043d\u043e\u0439 \u0430\u0440\u0430\u0431\u0441\u043a\u043e\u0439 \u0432\u044f\u0437\u044c\u044e. \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u043e\u0434\u043d\u043e\u043c\u0443 \u0442\u0435\u043a\u0441\u0442\u0443 \u043c\u043e\u0436\u0435\u0442 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432 \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u043a\u0438.<\/p>\n<p>\u00a0<\/p>\n<p>\u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0440\u0430\u0437\u0431\u0435\u0440\u0451\u043c \u044d\u0442\u0443 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044e \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u0441\u043b\u043e\u0432\u0430 &#171;PostgreSQL&#187;. \u0415\u0441\u043b\u0438 \u0431\u044b \u043c\u044b \u043f\u043e\u043f\u044b\u0442\u0430\u043b\u0438\u0441\u044c \u0437\u0430\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0435\u0451 (\u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u0442\u044c \u0432 \u043c\u0430\u0441\u0441\u0438\u0432 \u0447\u0438\u0441\u0435\u043b) \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 Unicode, \u0442\u043e \u0443 \u043d\u0430\u0441 \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c \u0431\u044b 10 \u0447\u0438\u0441\u0435\u043b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0433\u043b\u0438 \u0431\u044b \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u044c\u0441\u044f \u0432 \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u0435 \u043e\u0442 1 \u0434\u043e 149186. \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u0432 \u043d\u0430\u0448\u0435\u0439 \u043d\u0435\u0439\u0440\u043e\u043d\u043d\u043e\u0439 \u0441\u0435\u0442\u0438 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043b\u043e\u0441\u044c \u0431\u044b \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u043c\u0430\u0442\u0440\u0438\u0446\u0443 \u0438\u0437 149186 \u0441\u0442\u0440\u043e\u043a \u0438 \u0441\u043e\u0432\u0435\u0440\u0448\u0438\u0442\u044c \u0440\u044f\u0434 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0439 \u043d\u0430\u0434 10 \u0441\u0442\u0440\u043e\u043a\u0430\u043c\u0438 \u0438\u0437 \u044d\u0442\u043e\u0439 \u043c\u0430\u0442\u0440\u0438\u0446\u044b. \u041d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0438\u0437 \u044d\u0442\u0438\u0445 \u0441\u0442\u0440\u043e\u043a (\u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u0431\u0443\u043a\u0432\u0430\u043c \u043b\u0430\u0442\u0438\u043d\u0438\u0446\u044b) \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0438\u0441\u044c \u0431\u044b \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u0447\u0430\u0441\u0442\u043e, \u0438 \u0432 \u043d\u0438\u0445 \u0431\u044b\u043b\u043e \u0431\u044b \u0437\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u043e \u043c\u043d\u043e\u0433\u043e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438. \u0414\u0440\u0443\u0433\u0438\u0435 \u0441\u0438\u043c\u0432\u043e\u043b\u044b, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0441\u043c\u0430\u0439\u043b\u0438\u043a \u043a\u0430\u043a\u0430\u0448\u043a\u0438 \u0438 \u0442\u0430\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0435 \u0441\u0438\u043c\u0432\u043e\u043b\u044b \u0438\u0437 \u043c\u0451\u0440\u0442\u0432\u044b\u0445 \u044f\u0437\u044b\u043a\u043e\u0432 \u0435\u0434\u0432\u0430 \u043b\u0438 \u0432\u043e\u043e\u0431\u0449\u0435 \u0445\u043e\u0442\u044c \u0440\u0430\u0437 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0438\u0441\u044c, \u043d\u043e \u0438 \u043d\u0430 \u0438\u0445 \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043c\u0435\u0441\u0442\u043e.<\/p>\n<p>\u0415\u0441\u0442\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u043c\u044b \u0445\u043e\u0442\u0438\u043c, \u0447\u0442\u043e\u0431\u044b \u043e\u0431\u0430 \u044d\u0442\u0438 \u0447\u0438\u0441\u043b\u0430, \u0438 \u0434\u043b\u0438\u043d\u0430 \u00ab\u0430\u043b\u0444\u0430\u0432\u0438\u0442\u0430\u00bb, \u0438 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u00ab\u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432\u00bb \u043e\u0441\u0442\u0430\u0432\u0430\u043b\u0438\u0441\u044c \u043a\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u043c\u0435\u043d\u044c\u0448\u0435. \u0412 \u0438\u0434\u0435\u0430\u043b\u0435 \u00ab\u0441\u0438\u043c\u0432\u043e\u043b\u044b\u00bb \u043d\u0430\u0448\u0435\u0433\u043e \u0430\u043b\u0444\u0430\u0432\u0438\u0442\u0430 \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u0442\u044c \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u044b \u0440\u0430\u0432\u043d\u043e\u043c\u0435\u0440\u043d\u043e, \u0430 \u0435\u0449\u0451 \u043c\u044b \u043f\u043e-\u043f\u0440\u0435\u0436\u043d\u0435\u043c\u0443 \u0445\u043e\u0442\u0438\u043c, \u0447\u0442\u043e\u0431\u044b \u043d\u0430\u0448\u0430 \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u043a\u0430 \u043d\u0435 \u0443\u0441\u0442\u0443\u043f\u0430\u043b\u0430 \u043f\u043e \u043c\u043e\u0449\u043d\u043e\u0441\u0442\u0438 Unicode.<\/p>\n<p>\u0418\u043d\u0442\u0443\u0438\u0442\u0438\u0432\u043d\u043e \u043f\u043e\u043d\u044f\u0442\u043d\u043e, \u0447\u0442\u043e \u044d\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c, \u043f\u0440\u0438\u0441\u0432\u043e\u0438\u0432 \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u0435 \u043d\u043e\u043c\u0435\u0440\u0430 \u0442\u0435\u043c \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044f\u043c \u0441\u043b\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0447\u0430\u0441\u0442\u043e \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u044e\u0442\u0441\u044f \u0432 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u043c\u044b\u0445 \u043d\u0430\u043c\u0438 \u0442\u0435\u043a\u0441\u0442\u0430\u0445. \u0412 Unicode \u0432\u044b\u0448\u0435\u0443\u043f\u043e\u043c\u044f\u043d\u0443\u0442\u0430\u044f \u0440\u0435\u043b\u0438\u0433\u0438\u043e\u0437\u043d\u0430\u044f \u0430\u0440\u0430\u0431\u0441\u043a\u0430\u044f \u0444\u0440\u0430\u0437\u0430 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0437\u0430\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0430 \u043b\u0438\u0431\u043e \u043a\u0430\u043a \u043e\u0434\u0438\u043d \u043a\u043e\u0434\u043e\u0432\u044b\u0439 \u0441\u0438\u043c\u0432\u043e\u043b, \u043b\u0438\u0431\u043e \u0431\u0443\u043a\u0432\u0430 \u0437\u0430 \u0431\u0443\u043a\u0432\u043e\u0439. \u041f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u043c\u044b \u0432\u044b\u043a\u0430\u0442\u044b\u0432\u0430\u0435\u043c \u043d\u0430\u0448\u0443 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u0443\u044e \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u043a\u0443, \u0442\u043e\u0447\u043d\u043e \u0442\u0430\u043a \u0436\u0435 \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043f\u043e\u0441\u0442\u0443\u043f\u0430\u0442\u044c \u0441 \u0442\u0435\u043c\u0438 \u0441\u043b\u043e\u0432\u0430\u043c\u0438 \u0438 \u0444\u0440\u0430\u0437\u0430\u043c\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u0430\u0436\u043d\u044b \u0432 \u0440\u0430\u043c\u043a\u0430\u0445 \u043d\u0430\u0448\u0435\u0439 \u043c\u043e\u0434\u0435\u043b\u0438 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043e\u043d\u0438 \u0447\u0430\u0441\u0442\u043e \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u044e\u0442\u0441\u044f \u0432 \u0442\u0435\u043a\u0441\u0442\u0430\u0445).<\/p>\n<p>\u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0431\u044b \u0432\u044b\u0434\u0435\u043b\u0438\u0442\u044c \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0435 \u0447\u0438\u0441\u043b\u0430 \u0434\u043b\u044f \u0441\u0442\u0440\u043e\u043a &#171;Post&#187;, &#171;greSQL&#187; \u0438 &#171;ing&#187;. \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u043e\u0431\u0430 \u0441\u043b\u043e\u0432\u0430 &#171;PostgreSQL&#187; \u0438 &#171;Posting&#187; \u0432 \u043d\u0430\u0448\u0435\u043c \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0438 \u0431\u0443\u0434\u0443\u0442 \u0438\u043c\u0435\u0442\u044c \u0434\u043b\u0438\u043d\u0443 \u043f\u043e 2. \u041a\u043e\u043d\u0435\u0447\u043d\u043e \u0436\u0435, \u043c\u044b \u0441\u0442\u0440\u0435\u043c\u0438\u043c\u0441\u044f \u0437\u0430\u043a\u0440\u0435\u043f\u043b\u044f\u0442\u044c \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0435 \u043a\u043e\u0434\u043e\u0432\u044b\u0435 \u0441\u0438\u043c\u0432\u043e\u043b\u044b \u0434\u043b\u044f \u0431\u043e\u043b\u0435\u0435 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0445 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0435\u0439 \u0438 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0445 \u0431\u0430\u0439\u0442. \u0414\u0430\u0436\u0435 \u043d\u0430\u0442\u044b\u043a\u0430\u044f\u0441\u044c \u043d\u0430 \u0442\u0430\u0440\u0430\u0431\u0430\u0440\u0449\u0438\u043d\u0443 \u0438\u043b\u0438 \u043d\u0430 \u0438\u043d\u043e\u044f\u0437\u044b\u0447\u043d\u044b\u0439 \u0442\u0435\u043a\u0441\u0442, \u0442\u0430\u043a\u0443\u044e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u0432\u0441\u0451 \u0440\u0430\u0432\u043d\u043e \u0443\u0434\u0430\u0441\u0442\u0441\u044f \u0437\u0430\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u0442\u044c, \u0445\u043e\u0442\u044f, \u043d\u0430 \u044d\u0442\u043e \u0438 \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0431\u043e\u043b\u044c\u0448\u0435 \u0432\u0440\u0435\u043c\u0435\u043d\u0438.<\/p>\n<p>\u0412 GPT2 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 \u043f\u043e\u0434 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435\u043c\u00a0<a href=\"https:\/\/en.wikipedia.org\/wiki\/Byte_pair_encoding\" rel=\"noopener noreferrer nofollow\">\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0434\u0438\u0430\u0434\u0430\u043c\u0438<\/a>\u00a0(Byte Pair Encoding),<\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-365259","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/365259","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=365259"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/365259\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=365259"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=365259"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=365259"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}