Расшифровка нлп: НЛП — что это такое? Расшифровка, определение, перевод

Содержание

методы и техники нейролингвистического программирования человека и боевого NLP

Классная идея — мы можем научиться умениям других людей. Я уже писал, что НЛП по сути — это система моделирования успешности. Вот как раз для того, чтобы выяснить как работает чужое умение и обучать этому других. И это может касаться практически чего угодно: слепой печати, хождению по углям, игре на бирже, продажам, умению знакомиться или управлять собственным состоянием.

Кстати, однажды один из студентов Джона Гриндера для сдачи зачёта по мастерскому курсу НЛП, смоделировал углехождение. После этого начал проводить семинары по обучению этому самому углехождению, которые внезапно оказались весьма популярны.
Ричард Бендлер, когда к нему попался человек с фобией, отправился — как завещал великий Милтон Эриксон — искать людей, которые сами справились со своими фобиями. Нашёл пару таких, выяснил как они это сделали и создал технику «Быстрое Лечение Фобий». Которая позволяет расправиться с фобией минут за 15 (правда-правда — мы проходим эту технику на тренинге Успешное Мышление 2 и вполне быстро разные фобии убираем).

Лично я, когда сертифицировался на мастера НЛП, моделировал слепую печать на компьютере. И сам научился, и других обучил. Вот прямо сейчас этой моделью пользуюсь.

Каждый человек уникален или «карта не территория»

Мужчины ошибаются думая, что все женщины разные, а женщины ошибаются думая, что все мужчины одинаковые.
Шутка.

Действительно — у каждого из нас свой личный жизненный опыт, свой взгляд на мир. И этот взгляд на мир уникален. Личный взгляд на мир человека в НЛП называют картой (в отличие от окружающего мира, который, соответственно, называют территорией). Карты бывают разные — более или менее удобные, подходящие и подробные. Единственное, какими они не бывают — правильными или неправильными, потому что это только описание, модель. Любая, даже очень хорошая карта, где-то будет не слишком удобна: самая лучшая карта города Москвы совершенно бесполезна в славном городе Саратове, а карта вин французского ресторана не слишком удобна для ориентации в метро города Берлина.

И, естественно, карта не является территорией, точно так же как очень подробное описание борща (даже с картинками) самим борщём не станет. Так вот, большинство проблем возникает когда человек пытается мир (территорию) подогнать под свою карту, вместо того, чтобы перерисовать свою карту так, чтобы она была более удачной для данной территории. И, в какой-то мере, всё то, чем занимается НЛП — это помощь человеку в нахождении таких личных карт мира, которые помогут ему стать более успешным, удачливым, счастливым и здоровым. Естественно, если он этого хочет.

Очень многие приёмы изменения в НЛП связаны с «расширением» карты — поиском более широкого взгляда на ситуацию. Ну действительно, если у нас есть проблема, то решение находится где-то вне нашей карты мира. И для того, чтобы проблеме разрешить, надо карту расширить так, чтобы это самое решение в неё попало.

За каждым поведением стоит положительное намерение

Калибровка

Люди говорят одно, но часто чувствуют и действуют сильно иначе. В НЛП есть такое важное понятие, как калибровка — умение замечать внешние признаки состояния. Потому как любая наша оценка проявляется во всём теле: в интонациях, движениях, жестах, позе, конструкции предложения или дыхании. И калибровка позволяет понять, что на самом деле человек чувствует, как к кому относится, чего хочет. И намного меньше обращать внимания на то, что он говорит.Так как говорить он может для того, чтобы понравиться, что от него ждут или что он считает более правильным сказать в данный момент. Или просто потому, что не осознал свои оценки и чувства. Калибровка позволяет сделать общение намного более точным и эффективным, а поведение человека намного более понятным.

У нас уже есть все необходимые ресурсы для достижения наших целей

Для того, чтобы из Москвы доехать до Саратова автомобилю требуется бензин (а поезду — электричество). И автомобиль, и бензин — это необходимые ресурсы для достижения цели в виде приезда в Саратов. Так вот, в НЛП предполагается что у нас либо уже есть нужные ресурсы для достижения цели: стать более успешным, прекратить курить, общаться лучше или наконец написать этот доклад, — либо мы их можем найти. Мир большой, нужно просто поискать.

По крайней мере думая так вы скорее добъетесь результата, чем медитируя на тему «почему я такой несчастный» и «у меня всё-равно ничего не получится, я не создан для счастья (успеха, замужества, достатка и обладания автомобилем BMW X5)».

Экологическая проверка

В НЛП есть очень важная вещь — проверка экологии изменения. Это проверка последствий действий — не станет ли хуже после достижения целей? А то стал гендиректором, но заработал язву, перестал бояться высоты, упал с балкона и сломал палец, продемонстрировал уверенность и спокойствие во время разноса начальства и был уволен. Вот чтобы новые способности, навыки и убеждения не испортили жизнь, надо проверять заранее и подкручивать результат так, чтобы всё получилось хорошо.

Модели и техники

Модель в НЛП — это такое полезное описание (карта). Например, как уточнять, о чём говорит человек («мета-модель языка»), как во время общения изменить оценку («рефрейминг») или убеждение («фокусы языка»), в какой последовательности собирать информацию («SCORE»), типизация людей («мета-программы»).

Про модели можно почитать в Энциклопедии НЛП.

Техники НЛП — это пошаговые инструкции. Чаще всего техники описывают как решить какую-то проблему («Взмах», «Шестишаговый рефрейминг», «Быстрое лечение фобий», «Изменение личностной истории»). Но есть и про то, как правильно ставить цели («Хорошо сформулированный результат») или как лучше общаться («Стратегия эффективной коммуникации»).

На самом деле техники — это тоже модели, ведь они что-то описывают, и обычно весьма полезны.

Многие техники НЛП — это результат моделирования того, как люди успешно сами решали похожие проблемы. Например, «Стратегия эффективной коммуникации» является результатом моделирования успешных коммуникаторов, «Изменение личностной истории» смоделирована с великого Милтона Эриксона, того самого, которые создал эриксоновский гипноз, а «Быстрое лечение фобий» с людей, которые сами свои фобии убрали.

Описание различных техник в Энциклопедии НЛП .

Ценности, критерии и убеждения

То, к чему мы стремимся, чего хотим или наоборот, избегаем, как раз и определяется ценностями , критериями и убеждениями .
Ценности — важные понятия для человека, обычно выражаемые абстрактными словами, вроде: счастье, свобода, справедливость, достаток. Так как ценности достаточно абстрактны, к ценностям прилагаются критерии

— способы измерения реализации ценности. Например, ценность «достаток», а критерии достатка «заработок больше 150.000 в месяц, своя квартира, машина и дача».
Убеждения — правила жизни, описывающие как с ценностью взаимодействовать. Например, для ценности «любовь» убеждения могут быть:
— Самое важное в жизни — это любовь.
— Любовь приходит и уходит.
— Я недостоин любви.
— Настоящая любовь бывает только раз в жизни.
Убеждения могут разрешать и запрещать достижение ценности, описывать что нужно для её достижение и каковы её критерии. Например, даже если «любовь» для человека вещь очень важная, убеждение «я не заслужил любви» будет «запрещать» ему эту самую любовь получить.

Убеждения управляют нашей жизнью: либо человек делает что-то ради своих убеждений, либо не делает ничего.

Одно время никому не удавалось пробежать стометровку быстрее десяти секунд. Пока в 1968 Джим Хайнс не пробежал за 9,9 секунд. После этого быстренько все начали бегать быстрее, рекорд за рекордом. Сейчас рекорд 9,69. Ну не верили бегуны до Хайнса, что можно быстрее 10 секунд, в их реальности такой возможности не существовало. Пока этот гад оригинал Хайнс подло это убеждение не разрушил.

Убеждения являются и одними из важнейших фильтров восприятия. Если женщина не верит, что существуют порядочные (по её критериям) мужчины — они ей в жизни и не попадаются. А даже если попадаются, их поведение интерпретируется так, чтобы не дай бог под критерии не попал.

В НЛП есть довольно много техник для изменения ограничивающих убеждений (например, «Музей Старых Убеждений»), а так же набор речевых конструкций для изменения убеждений прямо во время разговора — фокусы языка (они же раскрутки).

Наше отношение кодируется при помощи субмодальностей

В общении оценка и отношение составляет 85%. А вот внутри об отношении — важно, нравится, правильно, законно, моё, чужое, плохо, замечательно, верно, — мы узнаём при помощи так называемых субмодальностей .

Модальностями (сенсорными) в НЛП и психологии называют слух (аудиальная модальность), зрение (визуальная модальности) и чувства (кинестетическая модальность).

Например, мы можем образ отодвинуть или приблизить (что обычно усиливает переживание), сделать ярче или темнее (ослабляет переживание), раскрасить по-другому (тут уже от подбора цветов зависит) или размыть фон (делает объект важнее). Аналогично можно менять характеристики звуков и ощущений.

Так вот. Просто меняя субмодальности можно изменить отношение: сделать неприятное нейтральным, усилить мотивацию, убрать навязчивость, превратить сомнение в убеждение или замешательство в понимание. При помощи визуальных и аудиальных субмодальностей можно управлять собственным вниманием. А при помощи кинестетических субмодальностей вполне успешно можно научиться контролировать разные интересные состояниями, вроде творчества, повышенного внимания, опьянения или супермотивации.

Подробнее про субмодальности в презентации.

Мы можем управлять состоянием при помощи якорей

Хотелось бы вам управлять собственным состоянием? Так, чтобы нажал на кнопку — и уверен в себе. Или спокоен, весел, бодр, расслаблен, сосредоточен. А точно так же управлять другими людьми — раз, и человеку хорошо? Или спокойно, весело и так далее? Наверняка же хотелось бы такую штуку — ну хотя бы попробовать. И такая штука есть — это

якоря , такие метки в сознании, которые запускают нужное состояние.

На самом деле якоря — это условные рефлексы. Но слово якорь звучит более понятно.

При помощи якорей мы можем «включать» и «выключать» своё состояние: внимание, бодрость, спокойствие, мотивированность или творчество; можем перенести состояние из того места, где оно есть в то место, где его пока не хватает: например спокойствие и уверенность есть лёжа дома на диване, а при общении с клиентами его пока нет, вот с дивана к клиентам и можно перенести; можно управлять состоянием других людей, а так же разрушать старые уже не нужные якоря.

Вы, наверняка, замечали, что в последнее время предложения об освоении различных технологий личностного роста и саморазвития мелькают на каждом шагу. К одной из них относят нейролингвистическое программирование. Но возникает вопрос: насколько полезно или вредно его использование?

С развитием технологий и расширением доступа во всемирную паутину большинство населения Земли получило возможность взглянуть на иную жизнь, нежели их собственная: через социальные сети, YouTube, Instagram. И, глядя на фотографии знаменитостей и богатых людей, многие люди начали задавать себе вопросы: «а чем я хуже?», «что я могу сделать, чтобы владеть тем же?», «какими качествами этот человек превосходит меня?». И это только один из примеров волнующих современного человека тем, которые тесно связаны с персональным восприятием своего места в мире.

Не секрет, что недовольство собой или происходящими вокруг событиями нередко приводят к развитию депрессии, погружению в меланхолию или даже развитию расстройств личности.

Здесь на помощь человеку приходит психологическая наука, включая такие направления, как гештальтпсихология, гуманистическая психология, транзакционный анализ и другие. Однако, помимо общепризнанных научных школ, существуют немало тех, которые пользуются дурной славой в связи с тем, что, вместо позитивного результата, их использование может привести к плачевным последствиям. К одним из таких и относится нейролингвистическое программирование, или НЛП. О нем мы сегодня и поговорим.

Что такое НЛП?

Нейролингвистическое программирование, если опираться на слова его создателя Ричарда Бэндлера, это «позиция и методология». Несмотря на это, как сторонники, так и противники НЛП называют его практическим направлением в психотерапии, правда, их мнения расходятся, когда дело доходит до эффективности практик НЛП.

В своей основе НЛП использует целый спектр различных научных и псевдонаучных направлений, включая психотерапию, гештальтпсихологию, гипноз, программирование и лингвистику.

Основная цель НЛП заключается в том, чтобы помочь человеку стать лучше.

Конечно, здесь можно возразить и сказать, что основная цель НЛП — заработать, но этот вопрос мы обсудим в конце. В его основе лежит модель, которая позволяет всем желающим и способным воспроизвести паттерны (схемы, модели, идеи) мастерства на основе субъективного опыта успешных людей. Проще говоря, если знаменитый миллиардер сидит, закинув левую ногу на правую, вам нужно делать так же. Это самый простой и грубый пример, но он отражает содержание НЛП: хочешь стать лучше — ориентируйся на тех, кто лучше.

Создатели НЛП утверждали, что наш мозг способен действовать по принципу компьютера, который можно запрограммировать на определенную модель поведения и жизни.

История НЛП

Без исторической справки и описания личностей, которые стояли в основе создания НЛП, нельзя понять его суть и причины его критики. Впервые ростки НЛП зародились благодаря совместной работе трех личностей: Ричарда Бэндлера, Джона Гриндера и Фрэнка Пьюселика. Учитывая то, что последний упоминается крайне редко и неохотно, он не включается в число основателей НЛП. Считается, что именно Бэндлер, занимавшийся программированием, и Гриндер, психолог и лингвист, разработали первую теоретическую модель «языкового программирования» человека.

Ричард Бэндлер

В наши дни Ричард Бэндлер — чрезвычайно дискуссионная личность.

Но в далеком 1972 году он был заинтересованным студентом, посвятившим себя, в свободное от программирования и математики время, изучению гештальтпсихологии, которая практиковалась на интенсивных групповых семинарах. Именно в ходе жарких дискуссий рождалась теоретическая основа НЛП. Бэндлер, несмотря на то что был еще студентом, фактически руководил группой и был «моделью» Гриндера, на которую тот должен был опираться. То есть Гриндер должен был имитировать поведение Бэндлера. В эту еще не оформившуюся концепцию, созданную вторым, первый внес лингвистическое содержание.

Сама фигура Ричарда Бэндлера крайне противоречива: он был груб, заносчив, ссорился со своими коллегами, принимал кокаин и даже пытался доказать через суд, что интеллектуальные права на НЛП принадлежат ему, но проиграл. Сегодня он является одним из тысячи тренеров по личностному развитию, которые говорят людям, что для продуктивной работы нужно работать, а чтобы не грустить — не нужно грустить. Но сама теория при всем при этом достойна обсуждения.

Суть НЛП

Нужно отметить, что названия первых выпущенных по НЛП книг указывают на их направленность: «Структура магии. Том 1-2» (1975, 1976), «Шаблоны гипнотических техник Милтона Эриксона. Том 1-2» (1975, 1977). Они не были глубоко научными, как не является таковой сама теория НЛП на сегодняшний день.

По утверждению создателей, книги были предназначены для «простых» людей. И в этом их особенность.

Нейролингвистическое программирование не является частью психологии или психотерапии, это методика, собрание советов, практические рекомендации и, как уже было сказано выше, позиция. НЛП не боится критики, наоборот, приветствует её. И главным фактором успешности своих практик его представители называют эмпирические методы, то есть опыт и его результаты. Чтобы успешно освоить эту технику, нужно быть готовым к экспериментам, так как НЛП даёт не сам ответ, а лишь ряд рекомендаций для собственного поиска.

Давайте разберем подробнее основные постулаты НЛП.

Постулат 1. Каждый человек имеет репрезентативную систему

Мы получаем информацию о мире благодаря органам чувств, которые носят название репрезентативные системы . Полученные данные передаются в центральную нервную систему, где они обрабатываются в виде данных, которые служат основой для выработки поведения.

Таким образом, можно определить, какой из них пользуетесь вы сами и другие люди. Например, если человек в своей речи акцентирует внимание на словах «я смотрю на этот вопрос так же», он пользуется визуальной системой, если «я чувствую то же, что и ты» — кинестетической. Подобные указатели являются предикатами , или специфическими языковыми ключами в речи человека, которые также могут называться лингвистическими маркерами .

Благодаря определению репрезентативной модели человека, можно осуществить 3 вида действия, которые помогут нам войти с ним в раппорт (доверительные отношения). Во-первых, это присоединение , при котором вы согласуете свою модель с моделью другого человека, то есть используете лингвистические паттерны и лексику для имитации модели собеседника. Например, если человек говорит вам: «Я вижу, что ты не съел кашу», вы можете ответить: «Да, это действительно так выглядит». Или, второй вариант действия, сказать: «Да, я слышу твой аргумент и согласен с ним» и отсоединиться .

Третий вариант называется отзеркаливание и предполагает максимальную имитацию поведения человека. Если присоединение предполагает, что вы разделяете репрезентативную систему человека в целом, то для отзеркаливания вам нужно действовать в точности, как он. То есть если ваш собеседник почешет за ухом, вы должны (через определенное время, конечно, чтобы он не подумал, что вы дразнитесь) сделать то же самое.

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

Достигается она просто — через ежедневные тренировки, которые заключаются в наблюдениях за дыханием, изменением цвета лица, мышечного тонуса, положения нижней губы и тона голоса. В процессе, чтобы «присоединиться» к человеку, вам нужно производить калибровку своего поведения, в зависимости от увиденных паттернов поведения вашего собеседника.


Зачем это нужно? Люди, которые мыслят и ведут себя одинаково, с большей вероятностью привлекают друг друга.

Постулат 2. «Карта» не является «территорией»

Существуют два уровня восприятия реальности: внутренний и внешний. Мы конструируем реальность на внутреннем уровне (внутренняя репрезентация) посредством получения данных органами чувств с их последующей переработкой. Однако наша внутренняя интерпретация события не является его реальным отражением. Поэтому «карта», которая создаётся внутри нас, не является «территорией», существующей снаружи.

Постулат 3. Поведение человека соответствует его «карте»

Восприятие реальности, а следовательно, и наши действия, зависит напрямую от нашей внутренней «карты». Они состоят из наших убеждений, ценностей, поэтому они позиционируются как наши «мысли». Таким образом, практики НЛП утверждают, что изменение «карты» способствует формированию новой модели. Если говорить проще, то объективная реальность есть, это не матрица, но мы её всё равно воспринимаем неправильно. Так почему бы не запрограммировать восприятие более практичными мыслями?

Постулат 4. Сознание и тело прямо влияют на состояние друг друга

Эффект плацебо явно демонстрирует факт того, что наличие убеждений может привести к изменению физического состояния. И если разум может вылечить тело, то возможен и обратный процесс. То есть если мы будем чувствовать моральную боль в сердце, то появится угроза формирования реальной болезни, как утверждают практики НЛП.

Постулат 5. Нужно уважать модель мира, или «карту», других людей

Субъективное восприятие действительно есть и будет вызывать немалое количество споров, связанных, как правило, с попыткой переубедить человека или с непониманием того, почему он мыслит так, а не иначе. Для профессионала НЛП важной основой взаимодействия с людьми является принятие возможности существования их «карты» и уважение к ней. Более того, при попытке воздействовать на «карту» может возникнуть, и, скорее всего, возникнет защитная реакция, что перечеркнет усилия по установке раппорта.

Постулат 6. Личность и поведение — не одно и то же

Моральные ценности личности не определяются действиями, которые могут зависеть от определенного контекста. Нужно ожидать того, что поведение человека в одинаковых ситуациях, но при воздействии разных факторов, может отличаться. Таким образом, поведение не определяет самого человека.

Постулат 7. Основной результат коммуникации — это не донесение мысли, а реакция

В связи с субъективным восприятием, предоставленная одним человеком информация может трактоваться другим совершенно иным образом. Коммуникация не является монологом, и реакция вашего собеседника определяет эффективность вашей способности донести мысль. Если человек не реагирует нужным вам образом, то следует сменить не его модель восприятия, а вашу модель поведения и коммуникации.

Постулат 8. Поражений не существует, есть обратная связь

Один из основных постулатов НЛП заключается в том, что поражений не существует. Если в процессе общения вы не смогли донести мысль, то это должно быть обратной связью , то есть возможностью проанализировать свои ошибки и исправить их. Практики НЛП часто приводят в пример слова Томаса Эдисона, который провел более 10000 неудачных экспериментов и говорил, что он не терпел поражения, а обнаружил 10000 вариантов того, как делать не следует. Как правило, неудача воспринимается как повод отступить, в то время как должна давать возможность адаптировать свое поведение.

Критика НЛП

Прежде, чем говорить о критике НЛП, нужно учесть два момента. Во-первых, как и любая другая наука, психология открыта новым идеям и опыту, ведь без этого невозможно развитие. Но психологи как её представители — другое дело. Не секрет, что критиковать проще, чем построить собственную научную теорию, в связи с чем в науке нередки случаи, когда индекс Хирша, или индекс научного цитирования и основной показатель успешности ученого, создаётся исключительно благодаря критическим работам.

И, во-вторых, НЛП — это теоретическая основа, которой может воспользоваться каждый. Как и один из его двух создателей, Ричард Бэндлер, сторонники НЛП могут приобрести дурную репутацию в связи с неправильным или корыстным использованием полученных знаний. Например, те же тренеры личностного развития, называющие НЛП уникальным способом сделать из простого человека успешного миллиардера.

В целом можно выделить три основные позиции:

  1. Сторонники — те, кто полностью разделяют идеи НЛП.
  2. Противники — те, кто считают, что теоретическая база НЛП серьезно подорвана и может нанести вред не только самому человеку, но и окружающим его людям. Они, как правило, выбирают основной целью критики пафосный и ненаучный язык, которым описывается НЛП. Нейролингвистическое программирование обещает многое, отчего и требования к результатам завышены.
  3. У реалистов наиболее неконфликтная позиция из представленных. Реалисты одновременно видят и плюсы, и минусы НЛП. Они выделяют слабую эффективность, неразвитость теории, завышенные обещания создателей и сторонников НЛП, однако отмечают научную обоснованность первых работ по НЛП и возможность достижения позитивного результата от использования определенных методик.

Что можно сказать по существу?

В этой статье мы не стали обсуждать конкретные методики «достижения счастья» и превращения себя в «успешного бизнесмена», пусть этим занимаются тренеры личностного развития. Мы разобрали некоторые из постулатов НЛП, чтобы каждый читатель мог для себя определить , согласиться ли с данными тезисами.

НЛП собрало вокруг себя огромное количество критики, хотя никогда не пыталось достать с небес звезды. Человек, который понимает постулаты НЛП и разделяет их, не станет вступать в споры, ведь он сделал собственный выбор.

Именно идея о восприятии и выборе красной нитью проходит через всю концепцию: если вы не хотите понимать, не делайте этого, если хотите — делайте.

Сама суть НЛП заключается в утверждении того, что мы не можем полностью воссоздать реальность внутри себя, но это дает возможность самому решать, какой мы её видим. Отсюда, кстати, и повсеместное распространение личностных тренингов на основе НЛП, создатели которых не имеют профильного образования и заинтересованы в получении прибыли.

Конечно, чересчур сильное увлечение чужими практиками может привести к нестабильности вашего внутреннего состояния, но НЛП учит человека быть успешным и при этом уважать восприятие мира другими людьми. Вполне адекватные постулаты, не правда ли? Это то, как видит концепцию НЛП автор статьи. То, что увидите вы, — зависит от вас самих.

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter .

Нейролингвистическое программирование является популярным и бурно обсуждаемым направлением практической психологии . Актуальность данного предмета обусловлена рядом причин. Во-первых, методы НЛП находятся на стыке нескольких дисциплин: психологии, психотерапии, программирования и языкознания. Во-вторых, НЛП представляет собой новое исследовательское направление, нацеленное, главным образом, на практическое применение в жизни человека. Кроме того, хотя нейролингвистическое программирование часто критикуется академическим сообществом, данная дисциплина содержит большое количество полезных и «работающих» приёмов, о которых и пойдёт речь в уроках этого раздела. В данном онлайн-тренинге вы бесплатно научитесь пользоваться ключевыми техниками НЛП: метамоделью, фреймингом, рапортом, якорением, работой с состояниями и репрезентативными системами, а также познакомитесь с лучшими практиками, играми, книгами, видеороликами данной тематики.

Что это такое?

НЛП (Нейролингвистическое программирование ) — это область практической психологии, разрабатывающая прикладные техники, моделирующие приёмы и практики знаменитых психотерапевтов и мастеров коммуникаций.

Другими словами, НЛП занимается изучением положительного опыта специалистов в области психотерапии, гештальтпсихологии, психоанализа, лингвистики, гипноза, с целью в дальнейшем использовать этот опыт. По сути, НЛП представляет собой моделирование приёмов успешных людей для того, чтобы сделать эти приёмы общедоступными.

Стоит отметить, что НЛП не является наукой, а знания, в силу особенностей их получения, не могут быть полноценно научно верифицированы. Более того, научное сообщество скептически относится к данному направлению, и в вузах редко можно встретить курсы по НЛП. Но важно понимать, что у создателей НЛП не было цели сделать полноценную научную теорию. Им важно было найти общедоступные техники, раскрывая сложные методики известных практиков психологии.

Краткая история

Совместная работа по созданию нейролингвистического программирования была начата в конце 1960-х годов группой специалистов Калифорнийского университета: Ричардом Бендлером, Джоном Гриндером, Фрэнком Пьюселиком во главе с их научным попечителем знаменитым ученым-антропологом Грегори Бейтсоном. Система НЛП была разработана с целью ответить на вопрос, почему определённые психотерапевты так эффективно взаимодействуют со своими клиентами. Вместо того чтобы исследовать данный вопрос с точки зрения психотерапевтической теории, Бендлер и Гриндер обратились к анализу методов и техник, применяемых этими психотерапевтами, путем наблюдения за ходом их работы. Затем ученые сгруппировали изученные методы в различные категории и представили их в виде общих моделей межличностных отношений и влияния людей друг на друга.

Знаменитыми специалистами, чей профессиональный опыт было решено преобразовать в модели, были выбраны:

  • Вирджиния Сатир — семейная терапия
  • Милтон Эриксон — эриксоновский гипноз
  • Фриц Пёрлз — гештальттерапия

Первые результаты изучения практических навыков этих психотерапевтов появились в 1975 году и были опубликованы в работе «Структура Магии. Том 1» (1975). Затем расширенные материалы исследования модели были представлены в книгах «Структура Магии. Том 2» (1976) и «Изменения в семье» (в соавторстве с Вирджинией Сатир, 1976). Результатом проведенной работы стала так называемая Метамодель, о которой вы узнаете из первого урока нашего тренинга. Эта модель послужила фундаментом для дальнейших исследований в данной области и привела к созданию целого направления практической психологии. Сегодня НЛП является открытой методологией, имеющей множество последователей, дополняющих ее авторскими разработками.

Применение навыка НЛП

НЛП пытается научить людей наблюдать, понимать и воздействовать на себя и окружающих так же эффективно, как это делают опытные психотерапевты и мастера коммуникаций. Поэтому у НЛП широкий спектр применения, в который можно включить такие направления, как:

  • психотерапия,
  • управление временем,
  • обучение,
  • менеджмент и управление ,
  • продажи,
  • юриспруденция,
  • писательство и журналистика.

НЛП позволяет развивать коммуникативные навыки, необходимые каждому человеку. Кроме того, НЛП помогает личному развитию: способности правильно понимать свои эмоциональные состояния, разносторонне воспринимать окружающий мир, достигать гибкости в поведении. Продвинутые техники НЛП позволяют лечить фобии и психологические травмы, сохранять хорошую психическую форму и поддерживать высокий уровень работоспособности.

Как этому научиться

Дополнительный материал

В рамках одного онлайн курса невозможно описать все возможные модели и техники нейролингвистического программирования. Это связано и с тем, что данное исследовательское направление продолжает развиваться, моделируя новые психологические и лингвистические техники. Многие из этих техник достаточно специфические, поэтому они будут интересны далеко не всем читателям 4brain. Чтобы вам было легче найти нужную информацию, мы решили дать ссылки на дополнительные материалы (книги, видео, статьи), которые не вошли в наш курс.

Книги

В магазинах можно встретить множество учебников по НЛП, но часто эти книги содержат мало полезной информации. Чтобы вы могли лучше ориентироваться в литературе по нейролингвистическому программированию, мы подобрали список наиболее популярных и проверенных книг . В него вошли:

  • Фокусы языка. Роберт Дилтс
  • Из лягушек — в принцы. Джон Гриндер
  • НЛП-практик: полный сертификационный курс. Учебник магии НЛП. Боденхамер Б., Холл М.
  • Искусство убеждать. Ричард Бендлер
  • 77 лучших техник НЛП. Майкл Холл
  • И некоторые другие.

Видео

В силу того что многие техники НЛП представляют собой конкретные речевые приёмы и способы поведения, всему этому сложно научиться, только лишь читая текстовое описание. Важной составляющей обучения являются наглядные примеры людей, которые уже освоили нужную технику, а также мастер-классы и лекции ведущих специалистов. Видеоролики с такими примерами и выступлениями мы тоже постарались включить в наш тренинг и дополнительные материалы.

Во все времена человек стремился найти приемы и техники того, как он может влиять на окружающих людей, при этом добиваться от них желаемого. В некоторой степени завесу тайны открывает нейролингвистическое программирование, которое на сегодняшний день является популярным. Оно базируется на идее о том, что человека делают его в некоторой степени поддающимся манипуляциям. Примеры НЛП можно проследить повсюду.

Человек обладает мышлением. Его формированием зачастую занимаются родители, учителя и общество в целом. Если понимать, каким образом человек запрограммирован, можно на него влиять. Также учитываются особенности функционирования мышления. Можно абсолютно не знать человека, но воздействовать на его мышление таким образом, что будет естественно вписываться в его процесс.

Сайт психологической помощи сайт понимает, что многие читатели хотели бы знать тайные секреты влияния. Однако нейролингвистическому программированию нужно обучаться постоянно, ведь даже последователи данной теории не все тайны пока еще раскрыли.

Каждый день человек является объектом для программирования. Его, как робота или компьютер, пытаются запрограммировать на определенные действия, которые желательны не ему самому, а другим людям, которые его программируют. Как они это делают? Основными методами являются манипулирование на страхе или повторения. Когда вам страшно, вы не контролируете себя, а значит, делаете то, что обычно делаете, поддаваясь панике. Если вам постоянно повторять одно и то же, то со временем вы привыкнете к этой мысли и согласитесь с тем, что вам говорят или что с вами делают.

Человека можно запрограммировать на определенные действия через идею, которую вы выражаете словами письменно или устно. Говорите человеку только то, какую идею вы хотите внедрить в его голову. Со временем на подсознательном уровне он запомнит ее и будет действовать в соответствии с внедренной мыслью. Здесь применяется принцип: все, что вы делаете, видите, говорите, слышите и т. д., формирует ваше будущее. А здесь формируется будущее посредством слова, смысл которых вы хотите внедрить в голову другого человека.

Большинство людей легче воспринимают конкретную ситуацию – картинку или образ происходящего, а не философскую мысль. Другими словами, лучше демонстрировать картинку или создавать такую ситуацию, чтобы она запомнилась человеку и осталась у него в подсознании.

Более того, люди не любят длинные речи или тексты. Больше запоминаются короткие выражения, слоганы или фразы. Поэтому если вы хотите воздействовать на людей словом, говорите поменьше, используя четкие и ясные выражения.

Что такое нейролингвистическое программирование?

Нейролингвистическое программирование (НЛП) – недавно появившееся понятие, которое обозначает набор техник и приемов, которые главным образов сказываются на деятельности мышления человека таким образом, что он начинает выполнять нужные действия. Обычно люди обращаются к НЛП с желанием управлять и манипулировать другими людьми. На самом деле психологи сомневаются в эффективности данных методик. Конечно, на человека можно воздействовать помимо его воли. Однако он продолжает оставаться свободным человеком. Если он останется бдительным и не захочет поддаваться , тогда никакие НЛП-техники на него не подействуют.

Первоначально нейролингвистическое программирование было направлено на изменение человека самого себя. Человек может достичь успеха и сделать свою жизнь такой, какой она ему будет нравиться, если воспользуется специальными техниками и начнет воздействовать на самого себя.

В НЛП используется множество приемов, среди которых популярными являются:

  1. Использование слова. Люди еще не полностью осознали значение слова, которое на самом деле несет очень сильное влияние.
  2. Подстройка на уровне невербалики.

Каждый читатель должен понять, что его мозг является своеобразным компьютером, в который закладывались определенные шаблоны, стереотипы, убеждения, страхи, комплексы, эмоции, опыт и пр. Все это теперь влияет на поведение человека, его стратегию делания выбора и принятия решений, образ жизни и т. д. Если человек недоволен своей жизнью или собой, то он должен понять, что в первую очередь все проблемы находятся у него в голове. Можно с помощью специальных приемов настроить себя на , чтобы помешать остальным программам, которые уже сделали человека несчастным, действовать.

Техники нейролингвистического программирования

Нейролингвистическое программирование было разработано Бендлером, Эриксоном и Гриндером. Изначально техники использовались в психиатрической практике для устранения страхов, фобий, стрессовых состояний и пр. Однако НЛП получило популярность среди обычных людей, которые тоже захотели самостоятельно воздействовать на свое подсознание.

Следует брать ответственность на себя за те последствия, которые возникнут в результате нейролингвистического воздействия на окружающих. Техниками НЛП можно как принести пользу, так и навредить.

Очень распространенными становятся техники в рекламе, где специалисты пытаются обойти все преграды и защитные психологические механизмы. В первую очередь учитывается, каким образом человек воспринимает информацию, а затем уже используются соответствующие слова:

  • На визуалов (людей, которые воспринимают информацию преимущественно глазами) воздействуют такие слова, как «посмотри», «обрати внимание», «обрати свой взор» и пр.
  • На аудиалов (людей, которые преимущественно воспринимают информацию через уши) воздействуют такие слова, как «послушай», «услышь», «прислушайся» и пр.
  • На кинестетиков (людей, которые привычно воспринимают информацию через тактильные ощущения) воздействуют такие слова, как «потрогай», «мягкий», «ощути» и пр.

Нейролингвистическое программирование может изменить жизнь человека. Все зависит от того, на что человек направляет силы. Можно избавиться от страхов и негативных эмоций. Можно повысить свою самооценку. Можно отработать новые навыки успешной коммуникации. Можно изменить свое отношение к конкретным явлениям или жизни в целом.

На примере возникновения чувства ревности рассмотрим, как действует нейролингвистическое программирование:

  1. Сначала человек себе представляет картины измены своего партнера. То есть действует визуальный канал.
  2. Затем человек начинает представлять себе охи и вздохи во время измены (аудиальный канал).
  3. Развивается ревность (кинестетический канал).

Чтобы изменить свое ощущение, нужно на первом или втором этапе изменить сценарий:

  1. К примеру, на этапе визуализации нужно осознавать, что картинки являются ложными, недоказанными, неправдивыми.
  2. На этапе аудиального восприятия нужно представить, что любовники занимаются половым актом под юмористическую программу или мультяшную музыку.
  3. Уже на третьем этапе ревности не возникнет, если первые два этапа были проделаны правильно.

НЛП предлагает множество техник, которые должны позволить достичь поставленной цели. Приведем некоторые из них:

  • «Засветить пленку» — когда нужно отпустить или забыть какое-то воспоминание. Нужно каждый раз делать картинку воспоминаний все более светлой, пока она полностью не исчезнет.
  • Чтобы вспомнить о том, что было забыто, нужно как можно чаще прокручивать в голове воспоминание, «сгущать краски», выдвигать предположения, что было, так делать до тех пор, пока воспоминание не будет изъято.
  • «Двадцать лет спустя» — когда нужно снизить силу теперешних переживаний. Для этого нужно представить себя, место или другого человека спустя двадцать лет и обратить внимание на то, какие теперь возникают ощущения к нему (к ситуации).

Важным приемом в НЛП является раппорт – подстройка человека под собеседника с целью установления с ним контакта доверия и доброжелательности. Делается это путем занимания позы, выполнения жестов и мимики, которую делает человек.

Нейролингвистическое программирование предлагает людям действовать так, как будто желаемый результат уже был достигнутым, реальным. Это позволяет человеку избавиться от многих зажимов и внутренних страхов. Считается, что человек совершает максимально благоприятное действие на сегодняшний момент и исходит всегда из благих побуждений. Отрицательный результат не является чем-то плохим, а показывает возможность человека в следующий раз действовать по-другому, поскольку у него есть потенциал.

Еще одним приемом НЛП является «Якорь» — это когда человек у себя или у другого индивида желает вызывать определенное состояние при помощи условного раздражителя. Так, человек постоянно совершает какое-то действие, говорит слово или наблюдает предмет, при этом испытывая положительные эмоции. После нескольких повторений данного процесса можно уже просто сказать слово, сделать действие или посмотреть на предмет, чтобы возникли положительные эмоции как условный рефлекс.

Примеры нейролингвистического программирования

Нейролингвистическое программирование получило свою популярность в рабочей сфере, где люди желают воздействовать и достигать желаемых результатов. Так, наиболее популярными сферами становятся управление, торговля, реклама и даже политика. Однако есть люди, которые применяют НЛП и в любовных отношениях, так, например, известно такое направление, как пикап, который предлагает различные способы привлечения девушек быстро.

Зачем программировать людей на что-либо? Каждый человек хочет иметь влияние на окружающих, чтобы они делали то, что хочет он. Конечно, лишь единицы имеют такого рода влияние. Но если хорошо постараться, то можно и самому приблизиться к такому рода контакта с окружающими, чтобы они начали исполнять ваши пожелания.

Как запрограммировать людей своими словами? Самое простое и легкое правило: вы должны говорить лишь то, что непосредственно касается вашего желания. Не говорите того, чего бы вы не хотели, чтобы воплотилось в реальность. Помните, что все ваши слова являются программами, которые впечатываются в голову вашего собеседника и потом реализовываются через его поступки. Чего вы хотите? О том и говорите. Обо всем остальном забудьте. Ни слова не говорите о том, чего бы вы не хотели видеть в своей жизни.

Неужели можно таким способом запрограммировать человека? Можно. Ведь говорят же, что «если постоянно говорить другому, что он свинья, то вскоре он захрюкает». Здесь действует тот же самый принцип: вы постоянно говорите об одном и том же, чем и программируете человека на исполнение вашего желания. И не беспокойтесь по поводу того, что вначале человек не хочет вам подчиняться. Вначале всегда происходит сопротивление. Но потом человек свыкается с мыслью о том, что вы ему говорили, после чего он сам начинает думать о том же, на что вы его программировали.

Итог

Нейролингвистическое программирование предлагает множество техники и приемов. Это отдельное направление, которое нужно изучать, чтобы быть гуру и уметь управлять как своей, так и чужой жизнью.

Что такое НЛП (нейролингвистическое программирование)? Это довольно-таки широко трактующийся способ воздействия на людей, включающий в себя моделирование поведения, программирование мышления и контроль над разумом. А еще НЛП — это специфическое направление психологии. Вообще, рассказать об этом можно многое, но сейчас заострить внимание стоит на самых интересных аспектах данной темы.

История и предпосылки возникновения метода

Перед тем как в подробностях рассказать о том, что такое НЛП, стоит обратиться к истории. Само направление было разработано в 60-70-х годах американскими учеными — лингвистом Джоном Гриндером и психологом Ричардом Бендлером.

Специалисты доступно объясняют принцип нейролингвистического программирования. Ученые говорят, что в этом методе воплощена основная идея Альфреда Коржибски — американского исследователя и основателя общей семантики. Звучит она так: все наши модели мира и когнитивные карты (образы знакомого пространственного окружения) — это репрезентации, искаженные из-за особенностей неврологического функционирования, а также из-за ограничений, которые с ним связаны.

Ученые уверяют — после того как информация попадает в рецепторы пяти чувств, она подвергается лингвистическим и нейрологическим трансформациям. Причем до того, как человек (точнее, его мозг, сознание) сам получит к ней доступ. Это говорит лишь об одном — на опыте никто из нас никогда не переживает объективную реальность. В любом случае она изменяется нейрологией и языком.

Основа метода

Без ее непосредственного изучения довольно-таки сложно понять, что такое НЛП. Сам метод подразумевает, в первую очередь, исследование структуры субъективного опыта. То есть того, что пережил только тот или иной конкретный человек.

Нейролингвистических программистов в первую очередь интересует то, как люди пропускают через себя реальность и конструируют ее. Ученые признают, что, возможно, пресловутая объективная реальность (мир, существующий независимо от человека и его сознания) существует. Но никому не дано узнать, что она собой представляет, иначе, чем через восприятие и последовательно формирующиеся о ней убеждения.

Во всех книгах по НЛП сказано, что у субъективного опыта имеется своя структура и организация. То есть, для каждого человека его убеждения, идеи и восприятие собираются, согласно имеющейся между ними взаимосвязи. Они структурированы и организованы. И это проявляется как на микро-, так и на макроуровне.

Ученые утверждают — все поведенческие акты и общение (как вербальное, так и невербальное), отражают то, как человек внутренне структурирует понятия и убеждения, свойственные ему. И опытному наблюдателю подвластно работать с этими процессами.

В этом однозначно есть доля истины. Субъективная природа человеческих переживаний не даст нам обхватить объективный мир никогда. У людей нет доступа к абсолютному познанию реальности. Все что у них есть — набор убеждений о ней, который создается в течение жизни.

Принципы метода

Изучив их хотя бы вкратце, можно примерно понять, что такое НЛП. И один из принципов звучит так — что бы ни делал человек, им движет позитивное намерение, которое зачастую даже не осознается. То есть поведение, демонстрируемое им в тот или иной момент, является лучшим из доступных или самым правильным. Сторонники НЛП считают — поиск новых альтернатив может быть полезным, так как они помогают изменить поведение, не желаемое для других людей.

Еще в данной теме имеет место быть такое понятие, как раппорт. Оно обозначает качественную связь, установленную между двумя людьми. Характеризуется легкостью общения, обоюдным доверием, беспрепятственным течением речи. В сфере психологии и психиатрии уделяется особое внимание раппортам между врачами и пациентами. Так как их наличие влияет на исход психотерапии. Поэтому специалисты НЛП акцентируют внимание на том, что именно составляет раппорт, а также какие факторы позволяют его добиться и поддерживать в дальнейшем.

Третий принцип звучит так: «Нет поражения. Есть лишь обратная связь». В НЛП коммуникация никогда не рассматривается в контексте неудачи и успеха. Только с точки зрения эффективности. Если результаты оказываются неэффективными, то это для исследователей — повод не разочаровываться, а искать обратную связь. Она и определит успешность выполняемых действий. Этот принцип, кстати, заимствован из теории информации английского психиатра Уильяма Росса Эшби.

Четвертый принцип: «Наличие выбора лучше, чем его отсутствие». Вот, что важно усвоить для начинающих — НЛП направлено на распознание «застоев» и на выявление новых вариантов действия в любой ситуации. Сторонники метода говорят — более эффективно повлиять на что-то может индивид, для которого характерна не сила, а гибкость в спектре проявляемых реакций.

Пятый принцип: «Смысл коммуникации — получаемая реакция». Как уже говорилось вначале, НЛП — манипулирование людьми в каком-то смысле. Так вот, главное в коммуникации — не намерение, которое стоит за посылаемым сообщением, а реакция, вызванная им у оппонента. Если начать руководствоваться данным принципом, то можно стать в общении более эффективным. Ведь по визуальной реакции оппонента можно проследить, как до него доходит та или иная информация.

Сознание и тело оказывают взаимовлияние

Это — одно из правил НЛП. И с его истинностью сложно спорить. Когда человек танцует под любимую музыку — его настроение улучшается. Если принимает таблетку снотворного — мозг отключается. Когда человека толкают в спину в час пик в метро, его ЦНС моментально реагирует раздражением на это.

Во всех случаях происходящее с телом влияет на сознание. В обратную сторону принцип тоже работают. Человек готовится к выступлению перед массой — его сердцебиение учащается. Ему делают комплимент — щеки розовеют, возникает улыбка. Сообщают плохую новость — возникает перепад давления, слезы.

При чем тут НЛП? В расшифровке аббревиатуры присутствует термин «программирование», под которым в данном контексте подразумевается закладывание в сознание определенной функции. Так вот, в этом случае человек должен осознать силу своей мысли над телом. Заложить это в своем сознании, запрограммировать себя на данный принцип. И тогда он поймет, насколько велики его возможности.

Конечно, многие скептически относятся к этому принципу. Но сторонники НЛП считают, что люди, живущие в соответствии с ним, могут отдавать своему телу приказы. Заставить себя похудеть или выздороветь без таблеток, повысить настроение.

Скептицизм развеял эффект плацебо. Был эксперимент: исследователи собрали больных людей и, разделив их на две группы, стали лечить. Одним давали лекарственные препараты. Другим — «пустышки», таблетки-плацебо. Но те об этом не знали. Врачи хотели выяснить, что влияет на людей — химические вещества, или же их вера в получаемое лечение. По итогам эксперимента оказалось, что «пустышки» подействовали наравне с медикаментами, и в некоторых случаях даже оказались эффективнее их.

Внутренние ресурсы безграничны

Так звучит следующее правило НЛП. Каждый человек обладает фантастическими ресурсами, но в полной мере их практически не использует. Почему? Из-за природной лени.

Зачем читать и заниматься самообразованием, если можно достать смартфон и быстро загуглить то, что интересует? Зачем пытаться овладеть навыком управления своим телом, давлением и температурой, когда есть аспирин, жаропонижающие?

НЛП — это сфера знаний и методов, в которой огромное внимание уделяется именно скрытому потенциалу. Одной из главных задач является обнаружение в глубине души необходимых ресурсов для достижения тех или иных целей, нахождения талантов, быстрого усвоения навыков и знаний. В общем, всего того, что способно облегчить существование.

И вот правило НЛП на каждый день: нужно приучить себя обращать особое внимание на людей, способности которых восхищают. Это — самый простой способ выявить и развить свои скрытые таланты. Ведь человек замечает в других те качества, которые свойственны ему самому! Только он об этом, порой, не догадывается. Сторонники НЛП уверены: если человек отметил чью-то одаренность или способность, порадовался за ее обладателя — значит, у него имеются такие же склонности. Просто он не позволял их себе проявить раньше.

Но и к недостаткам это тоже относится. Человек обвиняет кого-то в зависти, подлости, злости, подлости? А не свойственны ли они и ему тоже? Вероятно, да. Особенно раздражают те качества, которые люди подсознательно не принимают в самих себе.

Кем быть в этом мире — решение индивидуальное

Наверное, каждый слышал фразы, наподобие: «Все зависит от нас самих» или «Ты — хозяин своей жизни». Вот только, как оно обычно бывает, мало кто вдумывается в такие слова, осознает их смысл. А в НЛП одно из ключевых правил именно так и звучит: «Кем человек будет — победителем или побежденным — зависит лишь от него».

Каждый — творец своей Вселенной. Правитель собственной Судьбы. Тот, кто может «заказывать» себе богатство или бедность, здоровье или болезни, удачу или крах. Иногда «заказы» делаются бессознательно.

Одни скептически усмехнутся, другие найдут сотни опровержений и аргументов против данного утверждения, остальные задумаются. Но нужно помнить, что речь идет про НЛП — технику манипулирования людьми и собственным сознанием. Порой, некоторые люди так азартно и даже агрессивно начинают устраивать свою жизнь, что фраза «Я могу!» становится ежечасно сопровождающим их девизом. И они добиваются воистину поразительных результатов.

Потому что эти люди верят в собственные силы и в себя, принимают ответственность за свою Судьбу на себя (понимая, что ни творят ее, а не карма, начальство, высшие силы, правительство или обстоятельства), а также занимаются раскрытием внутреннего потенциала. Они проводят над собой капитальную работу каждый день. На НЛП не нужно смотреть, как на псевдонаучную методику. Это — мотивации, установки, изучение своего сознания, постоянный процесс самосовершенствования. Здесь нужна сила.

Прием № 1: создание якоря

Многие люди увлекаются НЛП и манипулированием собственным сознанием. В основном потому, что ни хотят быть… счастливыми. Люди приходят к нейролингвистическому программированию с надеждой, что смогут себя «настроить» на хорошую жизнь. И это возможно.

У подавляющего большинства из нас были/есть моменты, когда мы абсолютно счастливы. Вершина блаженства, так сказать. Жизнь идет как по маслу, все получается, отсутствуют всякие преграды, желания исполняются. Жаль, что так не всегда. Но что мешает запомнить это состояние, и постоянно в него возвращаться мысленно?

Это один из ключевых приемов НЛП. Надо вспомнить свое блаженное состояние, именуемое «ресурсным», представить гамму чувств, испытываемую в тот момент. Когда они станут максимально яркими, нужно поставить «якорь». Это может быть что угодно — щелчок пальцами, легкое оттягивание мочки уха, мягкое сдавливание ладонью плеча. В общем-то, главное, дабы это был жест, доступный для осуществления в любой ситуации.

Упражнение надо повторять. Вспоминать свои чувства и блаженно время и на пике ставить выбранный «якорь». Тут цель простая — сформировать некий условный рефлекс. Когда ее удастся добиться, то человек при помощи своего якоря будет испытывать всю гамму тех эмоций и чувств. И этот навык действительно улучшает психологическое состояние при тоскливых, грустных, неблагоприятных жизненных обстоятельствах.

Кстати, «якорь» можно заменить предметом. Рефлекс добавочно выработается еще и на основе ассоциаций. Но тогда нужно будет носить его с собой постоянно.

Прием № 2: воздействие на других

Многие люди желают при помощи нейролингвистического программирования освоить манипулирование. НЛП-техник, помогающих воздействовать на других, существует множество. Но все они основываются на специфике речи, построении предложений, обращении, отношении к человеку. Итак, вот лишь некоторые приемы НЛП, помогающие воздействовать на людей:

  • Метод трех согласий. В основу положена инерционность психики. Принцип таков: перед тем, как озвучить важный вопрос, на который нужно получить твердое «да» от собеседника, надо задать ему три незначительных, легких, стопроцентно подразумевающих положительный ответ. Несколько раз согласившись, он продолжит это делать инерционно.
  • Иллюзия выбора. Хитрая техника манипулирования НЛП. С одной стороны человек предлагает выбор. С другой — стимулирует ответчика сделать то, что ему нужно. Например: «Вы приобретете весь комплект либо его часть?».
  • Слова-ловушки. Они цепко «ловят» сознание практически каждого человека в сети. Например: «Вы чувствуете уверенность после наших занятий?». И совершенно неважно, что человек этого не заметил. Его сознание в ловушку уже попало, и он задумался, начал искать подтверждение заданному вопросу.
  • Утверждение позитивной действительности, принимаемой на веру. Например: «Ну ты ведь умный человек, ты согласишься с этим». И оппонент уже не заинтересован спорить, так как этим он подставит под сомнение факт о том, что он умен.
  • Вопросы-команды. То, чему мало кто перечит. Например, не «Сделай тише музыку», а «Не затруднит тебя немного приглушить звук?». Первый вариант звучит честнее, но выглядит как приказ. При озвучивании второго создается иллюзия, что человек считается с мнением оппонента, раз спрашивает его в вежливой форме, а не заставляет. Такому нельзя отказать.
  • Оборот «чем… тем…». Связка того, что нужно самому манипулятору. К примеру: «Чем дольше вы находитесь за рулем этой машины, тем больше понимаете, что хотите стать ее владельцем».

И это — лишь некоторые оказываемые воздействие на человека НЛП-приемы. Но им всем может противостоять человек, разбирающийся в этой теме, и знающий, что манипуляторы есть везде. Достаточно лишь задать себе вопрос: «А мне действительно это нужно?». Сознание тут же отреагирует приведением аргументов.

Сфера рекламы

В ней можно найти массу примеров НЛП. Хорошие ролики, лозунги, билборды, вызывают такую реакцию у потребителя: вижу à хочу à покупаю. В их основу могут закладываться ценности — то, что представляет святость для целевой аудитории. Образы пожилых родителей, бабушек и дедушек, семьи, возлюбленных, домашнего комфорта… это все давит на чувственность потребителя.

Субмодальности — тоже одна из основ рекламных приемов НЛП. Акцент делается на кинестическое, аудиальное и визуальное восприятие. Все знают такие ролики. Удачно подобранные ракурсы, эффект отдаления и приближения, динамичное развитие сюжета, будоражащая сознание музыка… используется все, лишь бы потребитель почувствовал себя частью рекламы. Такой контекст легко пробуждает аппетит, призывает к действию, позволяет почувствовать себя обладателем рекламируемой вещи наяву.

Еще эффективной техникой является трюизм. То, что взято из авторитетных источников, можно сказать. То, что не вызовет недоверия. Например: «Одобрено всемирной ассоциацией…», «Медики рекомендуют…», «Сделано в Германии» и т. д.

Постановка целей по SMART

Данный метод тоже имеет прямое отношение к НЛП. Аббревиатура SMART отражает критерии, которым должна соответствовать цель, намеченная человеком к достижению. Итак, это:

  • S — specific (конкретика).
  • M — measurable (измеримость).
  • А — attainable (достижимость).
  • R — relevant (значимость).
  • Т — time-bounded (соотношение с конкретными сроками).

Человек, расписывая цель по SMART, программирует себя самым непосредственным образом. Вот пример, как может выглядеть продуманная установка: «Что я хочу? Собственный бизнес, открыть свое заведение. Что для этого нужно? Заработать стартовый капитал, расписать план, возможно взять кредит на развитие. Какие у меня возможности для этого? Амбиции, перспективная работа и ранние успехи — значит, можно ставить цель выше предела возможностей. Зачем мне свой бизнес? Это — давняя мечта, а желания должны сбываться, плюс ко всему, я буду работать на себя, и иметь перспективу развития сферы в дальнейшем. Сколько у меня времени на подготовку? 2 года».

Это лишь один из примеров. В любом случае соответствие цели данным критериям увеличит вероятность ее реализации. Говоря простым языком, чтобы что-то изменить в жизни, надо иметь четкое представление о том, чего хочется конкретно.

Кстати, не будет лишним почитать некоторые книги по НЛП. В частности те, которые были написаны основателями метода. Рекомендуется к прочтению их труд под названием «Структура магии» в двух томах (1975 и 1976 годы). А еще можно прочитать книгу «Изменения в семье», написанный совместно с американским психологом Вирджинией Сатир.

Также стоящим трудом является «НЛП-практик». Авторы — Боб Боденхамер и Майкл Холл. Данная книга интересна как новичкам в теме НЛП, так и людям с навыками в данной сфере, желающим их улучшить.

Три страшные буквы — НЛП

Если в детстве нас стращают Бабой Ягой и Серым волком, то взрослых людей пугают уже более серьёзными вещами. Расшифровка – нейро-лингвистическое программирование – приводит в ещё большее замешательство и заставляет нервничать людей, которые никогда не слышали об этом направлении психотерапии. Ключевое слово «программирование» заставляет думать, что данная методика делает из людей зомби, подчиняя их воле психотерапевта. А вот как обстоит всё на самом деле, стоит разобраться более пристально.

Откуда что взялось?

А началось всё в семидесятые годы двадцатого столетия с наблюдательного математика Ричарда Бэндлера и его единомышленника лингвиста Джона Гриндера. Эти два человека, далёкие от мира психотерапии, выявили интересную закономерность, что если людей, страдающих различными фобиями, заставить взглянуть на пугающую ситуацию «со стороны», то страх пропадает, и появляется возможность избавиться от негативных переживаний. В своей работе два новатора использовали принцип копирования техник успешных терапевтов, включая известного своим недирективным гипнозом Милтона Эриксона, создателя гештальт-терапии Фрица Перлза, семейного психотерапевта Вирджинии Сатир и многих других людей, которые, по мнению основоположников нейро-лингвистического программирования, являлись примером человеческого совершенства.

Сейчас под нейро-лингвистическим программированием понимают метод эффективной коммуникации, открывающий людям большие возможности во многих областях жизни: личностный рост, творчество, взаимодействие с окружающими, карьера, бизнес, образование. В своё время именно это направление психотерапии произвело фурор, продемонстрировав, что бороться с фобиями можно за считанные минуты и безболезненно для клиента.

Сказка в реальности

В нейро-лингвистическом программировании учитывается уникальность каждого человека, его субъективное отношение ко всему с ним происходящему. У каждого из нас есть своя карта мира, которая помогает нам ориентироваться в нашем окружении. Но при этом существует убеждение, что если один человек умеет что-то делать, значит и других можно этому научить. И даже неудача или провал не рассматриваются с негативной точки зрения, а считаются плюсом – обратной связью, дополнительной информацией, объясняющей, что, возможно, путь решения проблемы выбран не совсем верный.

Исходя из этой установки, существует ещё один постулат нейро-лингвистического программирования, который выражается в том, что если не получается что-то сделать привычным способом, надо просто «зайти с другой стороны», попробовать осуществить задуманное немного иначе. То есть, достаточно изменить свои действия, чтобы получить совершенно другой результат.

Именно опираясь на эти и многие другие правила, нейро-лингвистическое программирование учит взаимодействовать с окружающим миром, считывая информацию, поступающую извне с опорой на собственный опыт. Тем более, что, по мнению НЛПистов, у каждого человека есть все необходимые жизненные ресурсы для достижения желаемого. Нужно только позаботиться о том, чтобы они оказались в нужное время в нужном месте.

Специалисты называют нейро-лингвистическо программирование эпистемологией – наукой о том, как мы познаём. Иначе можно назвать это наукой психологического программирования с помощью речи, если исходить из самого названия. Недаром используется в этом направлении психотерапии, и весьма активно, заимствованный у Милтона Эриксона метод языковых оборотов, позволяющий манипулировать людьми.

Главное, найти кнопку

Именно этот момент вызывает больше всего нареканий со стороны противников НЛП, говорящих о неэтичности манипуляций по отношению к окружающим. Но мы забываем, что так или иначе мы манипулируем теми, с кем общаемся. Иногда мы это делаем осознанно, когда хотим добиться чего-то конкретного, а порой это бывает совершенно незаметно для нас самих. Мы делаем комплимент, надеясь понравиться человеку, стараемся помогать окружающим в надежде, что в дальнейшем они не обойдут нас своим вниманием…

Но если перевести такое манипулирование в разряд бизнеса или личностного роста, то можно достичь удивительных успехов, которым будут поражаться другие люди. В нейро-лингвистическоv программированиb активно используют теорию о том, что наше сознание воздействует на наше тело, а значит, оно же может воздействовать и на окружающую нас действительность в той мере, в какой нам это необходимо.

Для кого-то нейро-лингвистическое программирование – это способ изменить своё существующее положение, избавиться от каких-то внутренних проблем. Другие видят в нейро-лингвистическом программировании, каким оно является сейчас, возможность стать кем угодно, избавиться от личностных границ. Третьи с его помощью стремятся понять то, что раньше казалось непостижимым. А кто-то пытается глобально воздействовать и на себя, и на своё окружение. В любом случае, у каждого человека своя цель в этой жизни, но чтобы достичь её, важно правильно распорядиться собственными ресурсами. А этому уже можно научиться у тех, кто умеет.

Нейролингвистическое программирование (НЛП) — презентация онлайн

1. Семинар 1_1 ПСД11-о

Выполнила:
Котко Людмила Владимировна

2. Нейролингвистическое программирование (НЛП).

Система НЛП была
разработана с целью
выявления паттернов
в работе
выдающихся
специалистов в
области психологии,
и применения их
опыта, как синтеза
эффективных техник
на практике.
Ричард Бэндлер, 1950 г.р.
Джо Гриндер, 1940 г.р.

3. Специалистами, чей опыт было решено преобразовать в модели были:

Вирджиния Сатир (семейный
терапевт),
Милтон Эриксон (эриксоноский
гипноз),
Фриц Перлз (гештальттерапевт).

4. Расшифровка термина НЛП.

«Нейро» — поведение берет начало в
неврологических процессах видения,
слушания, восприятия запаха, вкуса,
прикосновения и ощущения. Мы
воспринимаем мир через пять своих
органов чувств
«Лингвистическое» – язык как средство
коммуникации.
«Программирование» – способы
организации идей и действий для
получения результата.

5. Карты и Фильтры

Карта – это не территория, которую она
описывает.
Мы обращаем внимание на те аспекты
мира, которые нас интересуют. и
игнорируем другие. Мир всегда богаче,
чем те идеи, которые мы имеем
относительно его.

6. Карты и Фильтры

Фильтры
восприятия
Социальный
фильтр
Индивидуальный
фильтр
НейроФизиологический
фильтр

7. Фильтры восприятия.

«Как выглядит кусок хлеба, зависит от того,
голодны вы или сыты» (Арабская поговорка).
Нейрофизиологический фильтр (зрение,
слух, осязание, обоняние, вкус),
Социальный фильтр (язык,
национальность, обычаи, обряды, история
народа и государства, и др.),
Индивидуальный фильтр (мысли,
эмоции, черты характера, интересы,
привычки, симпатии, антипатии, способы
поведения, реакции, и т.д.).

8. Поведенческие рамки

Ориентация на результат, а не на
проблемы. Поиск того, к чему
стремишься, поиск решений и их
использование для продвижения к цели.
Рамка обвинения. «Почему у меня
возникла эта проблема? Чья это ошибка?».
Вопрос «Как?» (понимание структуры
проблемы) вместо «Почему?» (поиск
причин и оправданий).

9. Поведенческие рамки

Обратная связь вместо неудачи.
Нет неудачи – есть только результаты. Вы
можете использовать полученные
результаты для того, чтобы
скорректировать направление приложения
своих усилий. Обратная связь удерживает
цель в поле вашего зрения.
Рассматривать возможность, а не
необходимость. Сосредоточьтесь на том,
что вы можете сделать, на имеющихся
возможностях, а не на ограничивающих
вас обстоятельствах.

10. Поведенческие рамки

Позиция любопытства и удивления
взамен притворства. Маленькие дети
учатся чрезвычайно быстро, и в этом им
помогает их любопытство.
Все мы имеем или можем создать
внутренние ресурсы, необходимые нам
для достижения наших целей. Вы с
большей вероятностью добьетесь успеха,
если будете действовать в предположении.
как будто это верно, нежели предполагая
обратное.

11. Основные мысли НЛП

Карта не соответствует местности.
Опыт имеет свою структуру. Чтобы
изменить опыт, нужно поменять образец и
структуру.
Разум и тело – едины.
Все в природе взаимосвязано.
Если один человек смог сделать что-то, то
и любой другой сможет.
У нас есть все ресурсы, или их можно
создать.

12. Основные мысли НЛП

Человеческое поведение имеет некоторую
цель.
Позитивное намерение в поведении
человека.
Подсознание благожелательно к нам.
Человек совершает лучший из возможных
выборов, наилучшим образом.
Иметь выбор лучше чем не иметь.
Обучение происходит через действие.

13. Основные мысли НЛП

Если вам не удается то, что вы делаете, сделайте
что-либо другое.

14. Области применения НЛП

Отношения
Влияние на сознание масс
Переговоры,
общение
Маркетинг
Обучение
Постановка целей
Психотерапия,
психосоматика
Личностный
рост

15. Четыре стадии научения:

1. Неосознанное незнание
2. Осознанное незнание
3. Осознанное знание
4. Неосознанное знание
Процесс забывания — это переход от п. 4 к
п. 2. Процесс переучивания — это переход
от п. 2 обратно к п. 4, но уже с большим
количеством выборов. Мы исследуем
различные модели научения чуть позже.
Мы способны сознательно ухватить лишь
очень маленький кусочек из того объема
информации, который мир предлагает нам,
неосознанно мы реагируем и замечаем
значительно больше, чем осознаем.
Эта идея была подчеркнута в 1956 году
американским психологом Джорджем
Миллером в классической статье «Магическое
число семь, плюс-минус два?»
Наше подсознание — это все
жизнеобеспечивающие процессы нашего
организма, все то, чему мы уже научились,
наш прошлый опыт и все то, что мы могли бы
заметить, но не замечаем в настоящий
момент. Подсознание является значительно
более осведомленным, чем сознание.

17. Источники информации:

«Джозеф О’Коннор, Ян Мак-Дермотт
Принципы NLP»
«С.Андреас и др. Миссия НЛП»

НЛ-Программирование (2) Необходимость расшифровки метафоры — НЛП-Практика

НЛ-Программирование (1) Пять шагов программы

Мы метапрактики считаем, что термин «нейро-лингвистическое программирование» выбран в качестве титульного наименования направления деятельности совсем не случайно. Разумеется, здесь есть и аллюзии на термин “parental programming” невероятно популярного в то время Эрика Берна (и тут же «принцы» и «лягушки»), и отсылки к фундаментальному (по словам Бэндлера) труду Альфреда Коржибского (я писал об этом несколько раз). Метанимус видит в термине «программирование» буквальную метафору и указывает, что в любой нл-программе должна быть своя алгоритмическая составляющая с шагами, циклами, тестами и возвратами. Мы разделяем это его утверждение. Тем не менее, считаем, что метафора программирования как деятельности должна быть расшифрована и истолкована. Это наполнит абстрактные паруса термина полезными пресуппозициями и придаст метафоре программирования больше жизненности. Для нас же это будет полезной тренировкой в распознавании подобия (изоморфизма) и пресуппозиций. В целом такая расшифровка будет еще и утилизацией метафоры.

Перед тем, как проводить аналогии между пятью шагами компьютерной программы и шагами нл-программы, следует сделать несколько замечаний.

1. Во-первых, компьютерные вычисления основаны на модели человеческого мышления. Правда, весьма выхолощенного и специфического, строго причинно-следственного. Эта модель человеческого мышления называется «логика». Она была создана для весьма конкретных целей — споров, дебатов и выяснения того, что логика называет «истиной», по конкретным правилам. Далее эта модель стала основой для построения научного мышления. Так получилось, что процессоры (по-русски — «обработчики» — данных) как устройства получилось реализовать на основе двоичной логики: транзистор либо не пропускает через себя ток (и это «нет» или «ноль»), либо пропускает (и это «да», либо что-то отличное от ноля). Попытки построить процессор на базе иного набора правил или некой другой логики или «логики» пока либо не увенчались успехом с какой-то внятной эффективностью, либо не пошли в серию, либо существуют, но о них стараются не распространяться.

Ещё раз, основной тезис: модели компьютерного вычисления строятся на весьма ограниченной и выхолощенной модели человеческого мышления. Но человеческое мышление здесь всё же первично.

2. Правила, по которым создаётся и работает компьютерная программа (например, описанные в прошлой статье пять этапов программы) являются в некоторой степени абстракцией реальной деятельности человека и его коммуникации с окружающим миром, в том числе с другими людьми.

Напрямую и в явном виде переносить или экстраполировать эти правила на любую деятельность и коммуникацию человека было бы большой наивностью.

3. Однако Ричард Бэндлер как один из основателей НЛП имеет математическое образование, и слово «программирование» не зря вынесено в название метода и задаёт для него пресуппозицию работы. Одного взгляда на диаграммы и блок-схемы в книгах Изменяемся с семьями и НЛП: Том 1 достаточно, чтобы убедиться: слово «программирование» здесь явно не случайно — и пусть Джон Гриндер утверждает обратное, сколько ему угодно.

Мы придерживаемся мнения, что «программирование» это не аллегория и не намёк и даже в первую очередь совсем не маркетинговая находка. «Программирование» это метафора, и, как любая метафора, содержит структурное сходство с человеческой деятельностью, коммуникацией.

Задача данного цикла статей — учитывая математическое и программистское образование Ричарда Бэндлера, а так же некоторую не-чуждость компьютерных вычислений процессам человеческого мышления — поразмышлять на тему: каким из приведенных шагов следовать и как (с поправкой на коммуникацию с человеком) чтобы результат этой коммуникации можно было назвать «программой»? Каким критериям должна соответствовать такая коммуникация, чтобы её можно было назвать «программированием»?

Часть 1 — NLP, Computer Vision / Хабр

Всем привет! Представляю вам перевод статьи Analytics Vidhya с обзором событий в области AI / ML в 2018 году и трендов 2019 года. Материал довольно большой, поэтому разделен на 2 части. Надеюсь, что статья заинтересует не только профильных специалистов, но и интересующихся темой AI. Приятного чтения!Навигация по статье

Введение

Последние несколько лет для AI энтузиастов и профессионалов в области машинного обучения прошли в погоне за мечтой. Эти технологии перестали быть нишевыми, стали мейнстримом и уже влияют на жизни миллионов людей прямо сейчас. В разных странах были созданы AI министерства [

подробнее тут

— прим. пер.] и выделены бюджеты чтобы не отставать в этой гонке.

То же самое справедливо и для профессионалов в области data science. Еще пару лет назад вы могли комфортно себя чувствовать, зная пару инструментов и приёмов, но это время прошло. Количество событий, произошедших за последнее время в data science и объем знаний, который требуется, чтобы идти в ногу со временем в этой области, поражают воображение.

Я решил сделать шаг назад и взглянуть на разработки в некоторых ключевых областях в сфере искусственного интеллекта с точки зрения специалистов по data science. Какие прорывы произошли? Что случилось в 2018 и чего ждать в 2019 году? Прочитайте эту статью, чтобы получить ответы!

P.S. Как в любом прогнозе, ниже представлены мои личные выводы, основанные на попытках соединить отдельные фрагменты в целую картину. Если ваша точка зрения отличается от моей, я буду рад узнать ваше мнение о том что ещё может измениться в data science в 2019 году.

Области, которые мы затронем в этой статье:

— Natural Language Proces (NLP)
— Компьютерное зрение
— Инструменты и библиотеки
— Reinforcement Learning
— Проблемы этики в AI

Natural Language Processing (NLP)

Заставлять машины разбирать слова и предложения всегда казалось несбыточной мечтой. В языках очень много нюансов и особенностей, которые иногда сложно понять даже людям, но 2018 год стал по настоящему переломным моментом для NLP.

Мы наблюдали один потрясающий прорыв за другим: ULMFiT, ELMO, OpenAl Transformer, Google BERT, и это не полный список. Успешное применение transfer learning (искусство применять предварительно обученные модели к данным) распахнуло двери применению NLP во множестве задач.

Transfer learning (трансферное обучение) — позволяет адаптировать заранее обученную модель/систему к вашей конкретной задаче с использованием относительно небольшого объема данных.

Давайте посмотрим на некоторые из этих ключевых разработок более детально.

ULMFiT

Разработанный Себастьяном Рудером и Джереми Ховардом (fast.ai), ULMFiT был первым фреймворком, который получил transfer learning в этом году. Для непосвященных, аббревиатура ULMFiT означает “Universal Language Model Fine-Tuning”. Джереми и Себастьян по праву добавили слово “универсальный” в ULMFiT — этот фреймворк может применяться практически к любой задаче NLP!

Самое лучше в ULMFiT то, что вам не нужно обучать модели с нуля! Исследователи уже сделали самое сложное за вас — берите и применяйте в своих проектах. ULMFiT превзошел другие методы в шести задачах по классификации текста.

Можете почитать туториал от Пратика Джоши [Pateek Joshi — прим. пер.] о том как начать применять ULMFiT для любой задачи по классификации текста.

ELMo

Угадайте, что означает аббревиатура ELMo? Сокращение от Embeddings from Language Models [вложения из языковых моделей — прим. пер.]. И ELMo привлек внимание ML сообщества сразу после релиза.

ELMo использует языковые модели, чтобы получать вложения для каждого слова, а также учитывает контекст, в котором слово укладывается в предложение или параграф. Контекст — важнейший аспект NLP, в реализации которого большинство разработчиков раньше проваливались. ELMo использует двунаправленные LSTM для создания вложений.

Долгая краткосрочная память (англ. Long short-term memory; LSTM) — разновидность архитектуры рекуррентных нейронных сетей, предложенная в 1997 году Сеппом Хохрайтером и Юргеном Шмидхубером. Как и большинство рекуррентных нейронных сетей, LSTM-сеть является универсальной в том смысле, что при достаточном числе элементов сети она может выполнить любое вычисление, на которое способен обычный компьютер, для чего необходима соответствующая матрица весов, которая может рассматриваться как программа. В отличие от традиционных рекуррентных нейронных сетей, LSTM-сеть хорошо приспособлена к обучению на задачах классификации, обработки и прогнозирования временных рядов в случаях, когда важные события разделены временными лагами с неопределенной продолжительностью и границами.

— источник. Wikipedia

Как и ULMFiT, ELMo качественно повышает производительность в решении большого количества NLP задач, таких, как анализ настроения текста или ответы на вопросы.

BERT от Google

Довольно много экспертов отмечают, что выход BERT обозначил начало новой эры в NLP. Следом за ULMFiT и ELMo BERT вырвался вперед, продемонстрировав высокую производительность. Как гласит оригинальный анонс: “BERT — концептуально простой и эмпирически мощный”.

BERT показал выдающиеся результаты в 11 NLP задачах! Посмотрите результаты в тестах SQuAD:

Хотите попробовать? Можете использовать реимплементацию на PyTorch, либо TensorFlow код от Google и попробовать повторить результат на своей машине.

PyText от Facebook

Как же Facebook мог остаться в стороне от этой гонки? Компания предлагает собственный open-source NLP фреймворк, который называется PyText. Как следует из исследования опубликованного Facebook, PyText увеличил точность диалоговых моделей на 10% и сократил время обучения.

PyText фактически стоит за несколькими собственными продуктами Facebook, такими как Messenger. Так что работа с ним добавит неплохой пункт в ваше портфолио и бесценные знания, которые вы, несомненно, получите.

Можете попробовать сами, скачайте код с GitHub.

Google Duplex

Сложно поверить в то что вы ещё не слышали о Google Duplex. Вот демо, которое долгое время мелькало в заголовках:

Поскольку это продукт Google, есть небольшой шанс, что рано или поздно код будет опубликован для всех желающих. Конечно, эта демонстрация поднимает много вопросов: от этических, до вопросов конфиденциальности, но об этом мы поговорим позже. Пока просто наслаждайтесь тем, как далеко мы продвинулись с ML в последние годы.

Тренды в NLP на 2019 год

Кто лучше, чем сам Себастьян Рудер, может дать представление о том, куда NLP движется в 2019 году? Вот его выводы:


  1. Применение предварительно обученных языковых моделей вложений станет повсеместным; передовые модели без поддержки будут очень редко встречаться.
  2. Появятся предварительно обученные представления, которые могут кодировать специализированную информацию, которая дополнит вложения языковой модели. Мы сможем групировать различные типы предварительно обученных представлений в зависимости от требований задачи.
  3. Появится больше работ в области многоязычных приложений и многоязычных моделей. В частности, опираясь на межъязыковые вложения слов, мы увидим появление глубоких предварительно обученных межъязыковых представлений.

Компьютерное зрение


Сегодня компьютерное зрение — самое популярное направление в области deep learning. Похоже, что первые плоды технологии уже получены и мы находимся на стадии активного развития. Независимо от того, изображения это или видео, мы наблюдаем появление множества фреймворков и библиотек, которые с легкостью решают задачи компьютерного зрения.

Вот мой список лучших решений, которые можно было увидеть в этом году.

Выход BigGANs

Йен Гудфеллоу спроектировал GANs в 2014 году, и концепт породил множество разнообразных приложений. Год за годом мы наблюдали как оригинальный концепт дорабатывался для применения на реальных кейсах. Но одна вещь оставалась неизменной до этого года — изображения, сгенерированные компьютером, были слишком легко отличимы. В кадре всегда появлялась некоторая несогласованность, которая делала различие очень очевидным.

В последние месяцы в этом направлении появились сдвиги, а, с созданием BigGAN, такие проблемы могут быть решены раз и навсегда. Посмотрите на изображения сгенерированные этим методом:

Не вооружившись микроскопом, сложно сказать, что не так с этими изображениями. Конечно каждый решит сам для себя, но нет сомнений в том, что GAN изменяет способ восприятия цифровых изображений (и видео).

Для справки: эти модели сначала прошли обучение на наборе данных ImageNet, а затем на JFT-300M, чтобы продемонстрировать, что эти модели хорошо переносятся c одного датасета на другой. Вот ссылка на страницу из рассылки GAN, объясняющая способ визуализации и понимания GAN.

Модель Fast.ai обучилась на ImageNet за 18 минут

Это действительно крутая реализация. Существует распространенное мнение о том, что, для выполнения задач глубокого обучения, вам потребуются терабайты данных и большие вычислительные ресурсы. Это же справедливо для обучения модели с нуля на данных ImageNet. Большинство из нас думали так же, прежде чем несколько человек на fast.ai не смогли доказать всем обратное.

Их модель давала точность в 93% при впечатляющих 18 минутах. Железо, которое они использовали, в деталях описанное в их блоге, состояло из 16 публичных AWS облачных инстансов, каждый с 8 GPU NVIDIA V100. Они построили алгоритм использующий fast.ai и PyTorch библиотеки.

Общая стоимость сборки составила всего 40 долларов! Более подробно Джереми описал их подходы и методы здесь. Это общая победа!

vid2vid от NVIDIA

За последние 5 лет обработка изображений достигла больших успехов, но как насчет видео? Методы перевода из статического фрейма в динамический оказались немного сложнее, чем предполагалось. Можете ли вы взять последовательность кадров из видео и предсказать, что произойдет в следующем кадре? Такие исследования были и раньше, но публикации были в лучшем случае расплывчатым.

NVIDIA решила сделать общедоступным свое решение в начале этого года [2018 год — прим. пер.], что было положительно оценено обществом. Цель vid2vid состоит в том, чтобы вывести функцию отображения из заданного входного видео, чтобы создать выходное видео, которое передаёт содержание входного видео с невероятной точностью.

Вы можете попробовать их имплементацию на PyTorch, забирайте

на GitHub тут

.

Тренды в машинном зрении на 2019 год

Как я упоминал ранее, в 2019 году мы скорее увидим развитие тенденций 2018 года, а не новые прорывы: самоуправляемые автомобили, алгоритмы распознавания лиц, виртуальная реальность и другое. Можете не согласиться со мной, если у вас другая точка зрения или дополнения, поделитесь ей, что еще нам ожидать в 2019 году?

Вопрос с дронами, ожидающий одобрения политиков и правительства, может наконец получить зеленый свет в Соединенных Штатах (Индия в этом вопросе далеко позади ). Лично мне хотелось бы, чтобы больше исследований проводились в реальных сценариях. Такие конференции, как CVPR и ICML, хорошо освещают последние достижения в этой области, но насколько проекты близки к реальности — не очень понятно.

“Visual question answering” и “visual dialog systems”, могут, наконец, выйти с долгожданным дебютом. Эти системы лишены возможности обобщения, но ожидается, что мы скоро увидим интегрированный мультимодальный подход.

Самообучение вышло на первый план в этом году. Могу поспорить, что в следующем году оно найдет применение в гораздо большем количестве исследований. Это действительно крутое направление: признаки определяются напрямую из вводимых данных, вместо траты времени на маркировку изображений вручную. Будем держать пальцы скрещенными!

Читать продолжение: Часть 2 — Инструменты и библиотеки, AutoML, Reinforcement Learning, этика в AI

Что такое НЛП ? Какие техники НЛП существуют?

Люди рождаются с мозгом, но, к сожалению к нему не прилагается инструкция по эксплуатации. Техники НЛП позволяют добиться карьерного роста, успехов в работе, улучшить взаимоотношения с людьми, используя личностный ресурс. Каждый человек может вооружиться потенциалом своей личности, реализовывая желания и мечты. Но нужно знать, как это делать. Существует лишь одно препятствие к цели — это вы сами.

Нейролингвистическое программирование — это универсальное и понятное руководство, позволяющее научиться грамотно использовать собственные ресурсы в достижении целей, которые еще вчера казались нереальными. >Прикладная психология позволяет понять, как работает ум, каким образом формируются мысли и как на их основе возникают поведенческие факторы. Разобравшись в этой программе, вы сможете осознать, что вас тормозит на пути к успеху.

Одним из важных факторов, которые влияют на качество жизни любого человека, является его взаимодействие с социумом. Когнитивная психотерапия это не просто метод работы с пациентом это помогает скорректировать неправильное восприятие определенных ситуаций здоровым человеком

Аббревиатура НЛП расшифровывается как нейролингвистическое программирование. Термин произошел от английского Neuro-linguistic programming, подразумевает формирование личности посредством воздействия на самого себя. Охватывает подход к моделированию поведения людей, формированию межличностного пространства, ведь все начинается с мысли. Только после того, как возникла идея, человек переходит к действию. Техники НЛП необходимы для того, чтобы направить мысли в нужное русло, тем самым улучшив качество жизни.

Расшифровка слов, из которых состоит термин:

  • Нейро — создание уникальной психической системы фильтров, необходимой для обработки импульсов, поглощаемых человеческими чувствами. Первая ментальная карта состоит из простых ощущений — запахов, вкусов, тактильных чувств. 
  • Лингвистическое — человек передает полученной информации языковое (лингвистическое) значение.
  • Программирование — поведенческая реакция, возникающая на основе двух вышеописанных процессов.

Плюсы и минусы подхода

  • Как и в других практиках, в НЛП есть приверженцы и скептики. Попробуем разобраться, чем это обусловлено.

Плюсы подхода

  • НЛП — это психология личности, доведенная практически до совершенства. Это как готовить блюда, пользуясь кухонными весами и рецептурой – все взвешенно, точно, но при этом нет ничего лишнего. Человек сможет разобраться откуда исходят страхи и как их преодолеть, как стать успешным, научиться взаимодействовать с другими людьми, выстраивать отношения и так далее. Это повышает его ценность как сотрудника и партнера по жизни.

Один из главных плюсов НЛП – возможность самостоятельно изменить свое сознание и восприятие. В числе преимуществ также:

  • здоровый прагматизм;
  • практичность;
  • объективность;
  • технологичность;
  • возможность формировать внутренние ментальные карты.

Минусы подхода

НЛП – это технология, подразумевающий не ценностный, а не инструментальный подход.

  • В числе главных минусов, которые приписывают НЛП – отсутствие теории личности. Ее суть заключается в рассматривании человеком врожденных и приобретенных источников характера с разных позиций, а также возрастных изменений, их влияния на формирование личности. А еще теория личности затрагивает бессознательные и сознательные сферы, такие как свобода, воля, объективность и субъективность.

Создатели НЛП, в числе которых Джон Гриндер и Ричард Бендлер, брали во внимание теорию личности и частично ее изучили, но внедрили не все. Создается впечатление, что психологи останавливались на ее изучении, но как только подметили способность человеческого ума выдавать желаемое за действительное и верить в панацею, сразу остановились. Затем началась игра на человеческих слабостях.

Кому подойдет НЛП и чем может помочь?

НЛП поможет всем, у кого есть потребность справиться с зависимостью, переживаниями, проблемами в разных сферах жизни. При этом техники НЛП просты и понятны, при желании их постигнет каждый. Они помогают практически «от всего», главное, научиться ими правильно владеть.

Кредо НЛП звучит примерно так: визуализировать, визуализировать и еще раз визуализировать. То есть, человек просматривает свою жизнь как фильм. Это позволяет увидеть картинку в деталях и научиться анализировать. Для неподготовленной личности это сложная работа, но когда он вникнет в тонкости НЛП, то сможет «прокручивать» каждую жизненную ситуацию.

Можно привести простой пример – одни люди, являясь инвалидами, покоряют вершины, занимаются спортом, открывают бизнес и показывают каждым движением, что жизнь прекрасна. Они придерживаются знаменитой английской поговорки: «Не нужно плакать о пролитом молоке».

Но существует и другая категория вполне здоровых людей, которые настолько загружаются в своих проблемах, депрессии и безвыходности, что перестают жить полноценной жизнью. НЛП позволяет быстро и без последствий исправить «программу» своей жизни. Но у некоторых позиция жертвы настолько сильно въедается в сознание, что по-другому они не представляют своего существования. Но даже в этом случае техники НЛП работают, главное, достучаться до человека и сделать все возможное, чтобы он захотел их использовать.

Каждый, кого интересует НЛП, может начинать мыслить по-другому, анализируя происходящее. Заручившись помощью тренера, умения приходят очень быстро.

НЛП поможет побороть тревогу, фобии, страхи, стресс. Кроме того, практики помогут наладить такие сферы жизни:

  • благополучие и здоровье;
  • денежную энергию, бизнес;
  • отношения, семейную жизнь.

С помощью НЛП людям удавалось наладить и другие аспекты, важные для них.

Сколько стоит НЛП ?

Стоимость нейролингвистического программирования зависит от программы, по которой специалист работает с человеком. Практики могут быть нацелены на улучшение качества жизни в целом или воздействовать на отдельные сферы, например, ведение бизнеса. Человек учится организовывать свое мышление, поведение, речь, владеть собой, что положительно сказывается на его карьере. 

Чтобы освоить азы НЛП и стать начинающим тренером, достаточно пройти курсы «Мастер НЛП». Продолжительность курса 16 дней, 4 дня по 4 сегмента. Средняя стоимость 1000-3000 гривен. Окончательная цена зависит от тренера и его квалификации. Курс НЛП может обойтись и 8 000 гривен, но преимуществом окажется множество уроков, бесплатные дополнительные материалы.

НЛП: от теории к практике

Представьте себе наш мир в глубокой древности, когда племена жили в частичной изоляции или на большом расстоянии друг от друга. Когда жизнь была полностью статична, а людей связывали совместные страхи, верования, обряды и даже накопленный опыт. В то время выживание зависело скорей от физической силы, чем от умения коммуницировать друг с другом. 

Сегодня же все наоборот — грамотная коммуникация напрямую влияет на успех в жизни и “выживание”. В современном мире мы можем свободно общаться с людьми из разных точек мира. С людьми, у которых свои убеждения, верования, опыт и представления о жизни. Абсолютно логично возникает вопрос: “А как наладить грамотную коммуникацию с тем, кого не знаешь, да еще и склонить его сделать то, что нужно мне?”

Как раз этим вопросом и занимается НЛП.

>« Нейролингвистическое программирование — это комплекс техник, с помощью которых можно воздействовать на человека, изменяя его мнение в нужную сторону.

Немного истории

Работа над НЛП началась еще в далеких 60-х группой ученых Калифорнийского университета: Ричардом Бендлером, Джоном Гриндером, Фрэнком Пьюселиком и Грегори Бейтсоном. Они искали ответ на вопрос, почему определенные психотерапевты более результативно взаимодействуют со своими клиентами, чем другие. Ученые начали изучать методы и приемы, которые применялись успешными психологами, путем наблюдения за их деятельностью. Итогом их труда стал комплекс техник, позволяющий эффективно общаться и достигать личностного роста.

>« В самом названии техники заложены три основополагающие идеи. Первая заключается в том, что все люди думают и действуют на основе нейрологических процессов: слуха, обоняния, зрения, вкуса и осязания. Вторая идея — для выражения своих чувств и мыслей люди используют речь. Третья идея — мышление человека имеет структуру, которую можно записать в виде неких алгоритмов. »

С каждым годом техники становились популярнее и начали выходить за пределы психотерапии. Сегодня же их активно применяют в:

  • продажах;
  • менеджменте;
  • юриспруденции;
  • ораторском мастерстве;
  • писательстве;
  • коучинге;
  • спорте;
  • рекрутинге;
  • актерском мастерстве и т.п. 

Преимущества и недостатки НЛП

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

Специальные техники НЛП даже помогают лечить популярные фобии, психологические травмы и болезни, например, депрессию или бессонницу. 

Кроме того, с помощью нейролингвистического программирования можно подобрать эффективные слова и паттерны, которые позволят лучше подать информацию о себе или о своем продукте в бизнесс-сфере. Мысли будут транслироваться более убедительно, но при этом абсолютно естественно. 

>« Если в магазин пришел клиент-аудиал (тот, кто лучше воспринимает информацию через слух), то хороший продавец моментально подстроит свою речь под него, а также расскажет увлекательную историю создания этого платья. В своей речи продавец будет использовать такие словосочетания, как “Платье не шуршит при ходьбе…”, “Молния расстегивается абсолютно бесшумно…” и т.д. »    

Даже в любовной сфере можно применить техники НЛП. Например, мужчина спрашивает: “Во сколько нам завтра встретится?”, а может сказать: “Когда тебе будет приятнее со мной пообщаться?” Второй случай более подходящий, ведь мужчина передает некое мета-сообщение о том, что девушке будет приятно с ним встретиться.

Из недостатков стоит отметить, тот факт, что НЛП не учитывает теорию личности. Теория, в которой человек рассматривается системно по позициям: врожденные и приобретенные черты характера, свобода воли, доминирующие процессы в сознании, способность к самоконтролю, различные социальные контексты и т.д. 

>« Теория личности — совокупность гипотез о природе личности и различных индивидуальных процессах, формирующих личность. »

Простыми словами каждый человек уникален и те техники НЛП, которые работают на одном человеке, могут быть не так неэффективны на другом.

НЛП и другие направления в психологии

Как направление в практической психологии, НЛП имеет много общих черт с другими направлениями: гештальт, психоанализ, разумный путь, синтон, соционика, трансактный анализ. Вот основные из них:

  1. В первую очередь в НЛП моделируется мастерство уже успешных людей или, говоря другими словами, выясняется, что нужно добавить не-мастеру, чтобы он стал мастером;
  2. НЛП не смотрит на прошлое человека, а изучает способы восприятия, которые могут повлиять на настоящее и будущее;
  3. НЛП — это инструмент, а не совокупность ценностей. Дисциплина не рассказывает, как правильно жить, во что верить и в чем смысл жизни. Есть определенная проблема — НЛП перефразирует ее в задачу и решает. 

Однако своеобразие дисциплины формируется сочетанием уникальных черт:

  1. НЛП не изучает “теорию”, если она не нужна для практики. Главный вопрос — не как это устроено, а как это использовать, чтобы получить нужный результат; 
  2. Приемы НЛП требуют высокой точности. Необходимо точно воспринимать реакцию собеседника, а также точно на него воздействовать. Мастера НЛП отслеживают состояние человека в секундном интервале, моментально меняя средства вербального и невербального воздействия;    
  3. НЛП акцентирует внимание на подсознании. Именно активная работа с внутренними образами позволяет изменять сознание человека. 

Тренинги по НЛП

Стоит отметить, что освоить техники нейролингвистического программирования может каждый желающий. Как правило, популярные тренинги делятся на 3 части:

  • Новичок. Изучение и применение основных техник;
  • Продвинутый. Глубокое изучение всех техник и тонкостей их применения;
  • Мастер. Работа с аудиторией и преподавание НЛП. 

>« Поскольку НЛП применяется во многих отраслях, курсы часто бывают специализированными. Так, дисциплина может преподаваться в контексте увеличения продаж, эффективности менеджмента, улучшения ораторского мастерства и т.д. »  

Тренинги могут длиться от недели и до нескольких месяцев, а их стоимость колеблется в диапазоне от 100 до 600 долларов. При этом цена на отдельные курсы может достигать и 1000 долларов.

Популярные техники НЛП

Существует очень много различных техник и приемов, которые так или иначе влияют на нас. При этом мы даже можем и не догадываться, что нами манипулируют. Торговые центры, работа, учеба, телевизор, интернет — везде используются различные приемы нейролингвистического программирования. 

Вот несколько простейших техник, которые вы можете начать применять уже сегодня:

>Отзеркаливание

Большинство людей настороженно относятся к незнакомцам, а вызвать доверие у настороженного человека практически невозможно. Чтобы установить с собеседником “контакт” нужно начать его в чем-то копировать. Это могут быть жесты, поза, манера речи, походка и даже дыхание. Всю суть техники можно изложить известной фразой Маугли: “Мы с тобой одной крови: ты и я”. Соответственно если мы “одной крови”, то должны доверять друг другу.

>Три “Да”

Чтобы получить от человека положительный ответ на интересующий вас вопрос, попытайтесь сначала задать ему 3 вопроса, на которые он ответит “Да”. Эта техника основана на законе инерции — движение мысли разгоняется в определенном направлении. Если собеседник трижды ответил “Да”, то на 4 раз, задав интересующий вопрос, скорее всего, он ответит также. 

>Переключение внимания

Техника заключается в том, чтобы с помощью вопроса переключить внимание человека на другой объект. К сожалению, мозг человека может фокусироваться только на одном. Со всеми остальными областями можно делать все что угодно. Да, этой техникой часто пользуются иллюзионисты и фокусники, когда акцентируют внимание зрителей на каком-то объекте.

Не стоит думать, что эти несколько техник отображают всю суть нейролингвистического программирования. Существуют приемы, которые нужно тщательно оттачивать годами. Но если вы сможете взобраться на эту гору, то перед вами откроется весьма интересная картина мира.

Чем отличается НЛП от Гештальта?

Гештальт (ГТ) и НЛП характеризуются принципиально разным подходом. Схожесть в том, что если есть проблема оба направления предлагают пути решения: в НЛП это программистские техники, в ГТ, соответственно завершить Гештальт. Для этого предлагаются разные способы.

Отличие в том, что Гештальт призывает изучить проблемную ситуацию, оценить, провести анализ, при этом человек наблюдает за своими реакциями, в том числе и внутренними противоречиями. Это позволяет найти суть и правильный выход. НЛП диктует что нужно делать. То есть человек следует четко прописанному алгоритму.

Общим фактом является то, что проблему нужно разобрать «по молекулам». Однако, ГТ подразумевает причинно-следственную связь. Например, проблема в маленькой зарплате. Значит недостаточно работал, вложил мало ресурсов. Почему? Не было настроения, мотивации и т.д.

В НЛП все происходит несколько иначе. Человек копирует некоторые типы поведения, следует инструкциям, позволяющим устранить проблемы. Простой пример – если плохое настроение, значит нужно чаще улыбаться. Сначала «через силу», но позже это станет привычкой. Также и с зарплатой, нужно себя мотивировать и двигаться к цели.

Какие бывают методы НЛП?

3 основные методики НЛП:

  • Пресуппозиции

Метод подразумевает, что вселенная дружественно настроена к каждому и полна ресурсов. Содержит набор позитивно сформулированных афоризмов, которые используются в качестве базовых элементов для индивидуальных и коллективных практик. По словам известного британского тренера НЛП, Джейна Ревелла, пресуппозиции – это не философия и не набор правил, а скорее предположения, домыслы, которые ложатся в основу действий.

Приверженцы НЛП рассматривают экологию через призму заботы и взаимодействия окружающей среды и живых существ. Применяется также в отношении личности и ее мыслей, поведения.

  • Латерализация мозга

Латерализация мозга – это концепция функциональной асимметрии двух полушарий. Подразумевается, что глаза и жесты связаны с аудиальной, визуальной, кинестетической системами и определенными зонами человеческого мозга. Левая сторона считается более аналитической, а правая – творческой. Зоны мозга определяют склонность к различным видам деятельности. Например, люди с более развитым правым полушарием творческие, с левым – имеют математический склад ума.

Что делать если НЛП не помогает?

Стереотипы о том что НЛП не работает, сложились из-за низкой компетенции некоторых тренеров. Ведь цель большинства нелперов – заработать денег и как можно больше.

Существует и другая сторона вопроса. Не все люди истинно разбираются в вопросах НЛП, берут во внимание только «оболочку» и воспринимают ее как «волшебную таблетку» от всего. Затем приходит осознание, что «панацея» не работает, люди считают НЛП «разводом» и остаются с этим убеждением. Хотя правильнее будет в этой ситуации посмотреть на НЛП с другой стороны, выделив для себя все что работает. У каждого человека эти показатели разные.

Рассмотрим причины, вследствие которых НЛП не работает:

  1. У людей нет четкого понимания техник, они применяются не там где нужно.
  2. Техники применяют по одной, а в большинстве случаев нужен комплексный подход.
  3. Некачественное понимание того, что человек применяет. То есть, пропущен этап осознания.
  4. Недостаточный раппорт и отсутствие транса. Иногда необходимо частичное погружение в транс – полном сознании техники могут не работать.
  5. Недостаточная гибкость. Это от недостатка знаний. Например, когда мы обрабатываем фото, мы знаем множество приемов, но если знаний не хватает, фотография получается менее яркой.

Если НЛП не работает, нужно пересмотреть практики под другим углом, постараться максимально вникнуть в каждую из них. В этом поможет квалифицированный тренер.

Гуру НЛП

Один из основателей НЛП — Ричард Бендлер, американский писатель и психолог. Разработал псевдонаучный подход к межличностному общению совместно с ученым Грегори Бейтсоном и лингвистом Джоном Гриндером. Они издавали книги, плодотворно работали, проводили тренинги и читали лекции. В 1980 году компания Бендлера заработала более 800 000 долларов, они с женой процветали, но к концу года возлюбленная подала на развод. В этот же период завершилось сотрудничество двух создателей.

В числе известных тренеров НЛП — Джудит Делозье. Занимается этим вопросом с 1975 года и добилась невероятных высот — входит в пятерку звездных тренеров мира. Внесла фундаментальную лепту в известные техники нейролингвистического программирования.

Знаменитые тренеры из Университета НЛП (США) — Роберта Дилтс, Сьюзи Смит.

Другие звезды на «небосклоне» НЛП:

  • Современный и востребованный тренер России — Михаил Пелехатый.
  • Гуру из Германии с 15-летним опытом — Анита Хертел. Благодаря ее работе многие компании избежали судебных разбирательств.
  • Бо Щеберг — руководитель Института НЛП в Стокгольме.
  • Дэвид Гордон — один из создателей, стаж более 25 лет.
  • Энни Энтус — хорошо известна в России как тренер НЛП.
  • Сильвия Ранкл — мастер и практик НЛП, кроме того, владеет гипнозом.

>P.S Остались вопросы? Ждем вас в комментариях

Расшифровка… — Винницкий Центр НЛП и эриксоновского гипноза

Треугольник Карпмана: Спаситель-Жертва-Палач

(Преследователь): Вина, Праведность и другие симптомы. «Одна из прекрасных практичных моделей, созданных школой транзактного анализа, наряду со знаменитым «я ОК — ты ОК» и пр.

Знание самой модели совсем не гарантирует, что в эти игры то и дело не включаешься. Да, есть правила, которые от этих «психологических игр второго порядка» отводят, предохраняют. Но я — и не будда какой-нибудь, живущий в постоянной осознанности, и не подозрительно-начекушный параноик.

Так что время от времени ойкаю уже задним числом. Или — чаще — проскочил попытку поиграть со мной вместе, те самые правильные установки автоматически сработали. Или — ой, я в игре, — ну как мальчик!))

Страшного тут ничего нет, главное действительно быстро сообразить, что ты в шаги по треугольнику включился, и быстренько выскакивать.
И маркер тут, когда ты внутри ситуации, — чувства.

Похоже, сильные, «чистые» (беспримесные до ненатуральности) чувства плюс их переключения («драматическая перипетия») — основные сыр и мёд этой ловушки.

Многие путают этот компот с полнотой жизни и любовью: чего-чего, а страстей тут навалом. — А, Дом-2, конечно!))

Так вот: с транзктным анализом знаком поверхностно, наверняка для себя велосипед изобрёл, ну так не в научный журнал и пишу.

Верные мгновенные сигналы, что ты вляпался, нужно «очнуться», распознать игру (расклад ролей прямо сейчас) и немедленно из неё выходить.

1. Вина! Чувство вины — полезнейший маркер, что ты — в треугольнике. Подозреваю, что, как говорят в медицине, патогномоничный (т.е. симптом, который встречается исключительно при одном заболевании и сразу позволяет его диагностировать).

2. Ощущение своей праведности, своей полноправной правоты, ликующее такое, пышущее. — Увы, туда же. Насчёт патогномоничности не знаю; но если и есть какие-то здоровые проявления, то они очень на краю. Против фашистов — о, да! — …а кого в этом сезоне считаем фашистами?..

Ооот трижды осторожно; высочайшая вероятность на этом чувстве, что ты — там, в игре, и на следующем ходу (а ты, кстати, кто сейчас? Спаситель или Палач? шансы, так-то, 50/50, но это и не имеет значения) — и на следующем ходу роль твоя драматически сменится, и это скоро.
Почему ещё и — «Драматический треугольник».

3. Третье чувство-маркер – чувство использованности. Что ты-то со всей душой, а вышло, что тебя – использовали. Обошлись как с вещью. Попользовались – и с равнодушием, или раздражением, или прочим неблагодарным фырканьем отбросили.

4. Четвёртое чувство-маркер — стремление помочь, подставить плечо, взять на буксир… «Бойся первого движения души: оно всегда благородно». Точно, что не уникально для треугольника Карпмана. Но очень скользко, «благими намерениями дорога в ад вымощена». Признак, что именно маркер треугольника – не просто стремление помочь, а вот именно окраска «как-же-ж-иначе-ж!!»

Сам очень склонен в этой точке, Спасителем, в треугольник въезжать.
Поэтому

— три правила «неигровой» помощи.

1. Человек сам прямо просит о помощи. Не намекает, прямо просит!


2. Ты хочешь помочь ему больше, чем не хочешь. Никаких «должен». Это вопрос о том, чего ХОЧЕШЬ больше.


3. Человек для помощи себе использует хотя бы не меньше (в норме — больше!) сил, времени, энергии, чем ты для помощи ему.

Если хотя бы одно из этих трёх условий не соблюдается — ты в игре.
Можешь, — отчего бы нет, — но будь готов к интригующей и «неожиданной» смене ролей. — Я за то, что можно делать всё, если понимаешь, зачем это делаешь)

Подводя итог:
«Треугольник Карпмана» — крайне распространённый вариант манипулятивных психологических игр, в которых участники даже не отдают себе отчёт, «что их так крутит».


Есть четыре маркерных чувства, которые – ура! – позволяют «в моменте» распознать, что ты в игре.

А тогда уже быстро сориентироваться и выйти. Это вина, праведность, использованность, неодолимое стремление помочь «как-же-ж-иначе-ж».


Всё это не означает, что людям «не надо» помогать. Но есть три условия неигровой помощи. Если нарушено хотя бы одно из них – вы в игре. Это тоже можно, но хотя бы понимай, что делаешь своими руками – и принимай ответственность за последствия»

автор текста и фото

Как реализовать декодер поиска луча для обработки естественного языка

Последнее обновление 3 июня 2020 г.

Задачи обработки естественного языка, такие как создание заголовков и машинный перевод, включают создание последовательностей слов.

Модели, разработанные для этих проблем, часто работают, генерируя распределения вероятностей по словарю выходных слов, и именно алгоритмы декодирования выбирают распределения вероятностей для генерации наиболее вероятных последовательностей слов.

В этом руководстве вы откроете для себя алгоритмы декодирования жадного поиска и поиска луча, которые можно использовать для задач генерации текста.

После прохождения этого руководства вы будете знать:

  • Проблема декодирования по задачам генерации текста.
  • Алгоритм декодера жадного поиска и как его реализовать на Python.
  • Алгоритм декодера поиска луча и как его реализовать на Python.

Начните свой проект с моей новой книги «Глубокое обучение для обработки естественного языка», включая пошаговые руководства и файлы исходного кода Python для всех примеров.

Приступим.

  • Обновление май / 2020 : Исправлена ​​ошибка в реализации поиска луча (спасибо всем, кто указал на это, и Константину Вайссеру за его чистое исправление)

Как реализовать декодер поиска луча для обработки естественного языка
Фотография See1, Do1, Teach2, некоторые права защищены.

Декодер для генерации текста

В задачах обработки естественного языка, таких как создание заголовков, обобщение текста и машинный перевод, требуется предсказание последовательности слов.

Модели, разработанные для этих типов задач, обычно выводят распределение вероятностей по каждому слову в словаре для каждого слова в выходной последовательности. Затем процесс декодирования преобразует вероятности в окончательную последовательность слов.

Вы, вероятно, столкнетесь с этим при работе с повторяющимися нейронными сетями в задачах обработки естественного языка, где текст генерируется в качестве вывода. Последний уровень в модели нейронной сети имеет по одному нейрону для каждого слова в выходном словаре, а функция активации softmax используется для вывода вероятности того, что каждое слово в словаре будет следующим словом в последовательности.

Декодирование наиболее вероятной выходной последовательности включает поиск по всем возможным выходным последовательностям на основе их правдоподобия. Размер словарного запаса часто составляет десятки или сотни тысяч слов или даже миллионы слов. Следовательно, проблема поиска экспоненциально зависит от длины выходной последовательности и является трудноразрешимой (NP-полной) для полного поиска.

На практике методы эвристического поиска используются для возврата одной или нескольких приближенных или «достаточно хороших» декодированных выходных последовательностей для данного предсказания.

Поскольку размер графа поиска экспоненциально зависит от длины исходного предложения, мы должны использовать приближения, чтобы найти решение эффективно.

— стр. 272, Справочник по обработке естественного языка и машинному переводу, 2011 г.

Последовательности слов-кандидатов оцениваются на основе их правдоподобия. Обычно для поиска последовательностей текста-кандидатов используют жадный поиск или поиск по лучу. Мы рассмотрим оба этих алгоритма декодирования в этом посте.

Каждое индивидуальное предсказание имеет ассоциированную оценку (или вероятность), и нас интересует выходная последовательность с максимальной оценкой (или максимальной вероятностью) […] Одним из популярных приближенных методов является использование жадного предсказания, при котором на каждом этапе берется элемент с наивысшей оценкой. Хотя этот подход часто бывает эффективным, он явно неоптимален. Действительно, использование лучевого поиска в качестве приблизительного поиска часто работает намного лучше, чем жадный подход.

— страница 227, Методы нейронных сетей в обработке естественного языка, 2017.

Нужна помощь с глубоким обучением текстовых данных?

Пройдите мой бесплатный 7-дневный ускоренный курс электронной почты (с кодом).

Нажмите, чтобы зарегистрироваться, а также получите бесплатную электронную версию курса в формате PDF.

Начните БЕСПЛАТНЫЙ ускоренный курс прямо сейчас

Декодер жадного поиска

Простое приближение — использовать жадный поиск, который выбирает наиболее подходящее слово на каждом шаге выходной последовательности.

Преимущество этого подхода в том, что он очень быстр, но качество конечных выходных последовательностей может быть далеко от оптимального.

Мы можем продемонстрировать подход к декодированию с помощью жадного поиска на небольшом надуманном примере на Python.

Мы можем начать с задачи прогнозирования, которая включает последовательность из 10 слов. Каждое слово прогнозируется как распределение вероятностей по словарю из 5 слов.

# определяем последовательность из 10 слов в словарном запасе из 5 слов данные = [[0,1, 0,2, 0,3, 0,4, 0,5], [0,5, 0,4, 0,3, 0,2, 0,1], [0,1, 0,2, 0,3, 0,4, 0,5], [0,5, 0.4, 0,3, 0,2, 0,1], [0,1, 0,2, 0,3, 0,4, 0,5], [0,5, 0,4, 0,3, 0,2, 0,1], [0,1, 0,2, 0,3, 0,4, 0,5], [0,5, 0,4, 0,3, 0,2, 0,1], [0,1, 0,2, 0,3, 0,4, 0,5], [0,5, 0,4, 0,3, 0,2, 0,1]] data = массив (данные)

# определить последовательность из 10 слов в словаре из 5 слов

data = [[0,1, 0,2, 0,3, 0,4, 0,5],

[0,5, 0,4, 0,3, 0,2, 0,1],

[0,1 , 0,2, 0,3, 0.4, 0,5],

[0,5, 0,4, 0,3, 0,2, 0,1],

[0,1, 0,2, 0,3, 0,4, 0,5],

[0,5, 0,4, 0,3, 0,2, 0,1],

[ 0,1, 0,2, 0,3, 0,4, 0,5],

[0,5, 0,4, 0,3, 0,2, 0,1],

[0,1, 0,2, 0,3, 0,4, 0,5],

[0,5, 0,4, 0,3, 0,2, 0,1]]

данные = массив (данные)

Предположим, что слова были закодированы в целое число, так что индекс столбца можно использовать для поиска связанного слова в словаре.Следовательно, задача декодирования становится задачей выбора последовательности целых чисел из распределений вероятностей.

Математическая функция argmax () может использоваться для выбора индекса массива, имеющего наибольшее значение. Мы можем использовать эту функцию для выбора индекса слова, который наиболее вероятен на каждом этапе последовательности. Эта функция предоставляется непосредственно в numpy.

Приведенная ниже функция greedy_decoder () реализует эту стратегию декодирования с помощью функции argmax.

# жадный декодер def greedy_decoder (данные): # индекс наибольшей вероятности для каждой строки return [argmax (s) для s в данных]

# жадный декодер

def greedy_decoder (data):

# индекс наибольшей вероятности для каждой строки

return [argmax (s) для s в данных]

Собрав все это вместе, полный пример, демонстрирующий жадный декодер, приведен ниже.

из массива импорта numpy из numpy import argmax # жадный декодер def greedy_decoder (данные): # индекс наибольшей вероятности для каждой строки return [argmax (s) для s в данных] # определяем последовательность из 10 слов в словарном запасе из 5 слов данные = [[0,1, 0,2, 0,3, 0,4, 0,5], [0,5, 0,4, 0,3, 0,2, 0,1], [0,1, 0,2, 0,3, 0,4, 0,5], [0,5, 0,4, 0,3, 0,2, 0,1], [0,1, 0,2, 0,3, 0,4, 0,5], [0,5, 0,4, 0,3, 0,2, 0.1], [0,1, 0,2, 0,3, 0,4, 0,5], [0,5, 0,4, 0,3, 0,2, 0,1], [0,1, 0,2, 0,3, 0,4, 0,5], [0,5, 0,4, 0,3, 0,2, 0,1]] данные = массив (данные) # декодировать последовательность результат = greedy_decoder (данные) print (результат)

1

2

3

4

5

6

7

8

9

10

11

12

13

140002

14

18

19

20

21

22

23

из массива импорта numpy

из массива импорта numpy argmax

# жадный декодер

def greedy_decoder (data):

# индекс для наибольшей вероятности каждой строки

return [argmax (s) для s в данных]

# определить последовательность из 10 слов в словаре из 5 слов

data = [[0.1, 0,2, 0,3, 0,4, 0,5],

[0,5, 0,4, 0,3, 0,2, 0,1],

[0,1, 0,2, 0,3, 0,4, 0,5],

[0,5, 0,4, 0,3, 0,2, 0,1],

[0,1, 0,2, 0,3, 0,4, 0,5],

[0,5, 0,4, 0,3, 0,2, 0,1],

[0,1, 0,2, 0,3, 0,4, 0,5],

[0,5, 0,4, 0,3, 0,2, 0,1],

[0,1, 0,2, 0,3, 0,4, 0,5],

[0,5, 0,4, 0,3, 0,2, 0,1]]

данные = массив (данные)

# последовательность декодирования

результат = greedy_decoder (данные)

печать (результат)

При выполнении примера выводится последовательность целых чисел, которая затем может быть отображена обратно в слова в словаре.

[4, 0, 4, 0, 4, 0, 4, 0, 4, 0]

[4, 0, 4, 0, 4, 0, 4, 0, 4, 0]

Декодер поиска луча

Еще одна популярная эвристика — поиск по лучу, который расширяет жадный поиск и возвращает список наиболее вероятных выходных последовательностей.

Вместо того, чтобы жадно выбирать наиболее вероятный следующий шаг при построении последовательности, поиск луча расширяет все возможные следующие шаги и сохраняет k наиболее вероятным, где k является параметром, задаваемым пользователем и управляет количеством лучей или параллельный поиск по последовательности вероятностей.

Алгоритм поиска локального луча отслеживает k состояний, а не только одно. Он начинается с k случайно сгенерированных состояний. На каждом шаге генерируются все преемники всех k состояний. Если какая-либо цель является целью, алгоритм останавливается. В противном случае он выбирает k лучших последователей из полного списка и повторяет.

— страницы 125-126, Искусственный интеллект: современный подход (3-е издание), 2009 г.

Нам не нужно начинать со случайных состояний; вместо этого мы начинаем с k наиболее вероятных слов в качестве первого шага в последовательности.

Общие значения ширины луча: 1 для жадного поиска и значения 5 или 10 для общих проблем эталонных тестов при машинном переводе. Большая ширина луча приводит к лучшей производительности модели, поскольку несколько последовательностей-кандидатов увеличивают вероятность лучшего совпадения целевой последовательности. Эта повышенная производительность приводит к снижению скорости декодирования.

В NMT новые предложения переводятся простым декодером поиска луча, который находит перевод, который приблизительно максимизирует условную вероятность обученной модели NMT.Стратегия поиска луча генерирует перевод слово за словом слева направо, сохраняя при этом фиксированное количество (луч) активных кандидатов на каждом временном шаге. Увеличивая размер луча, можно повысить эффективность трансляции за счет значительного снижения скорости декодера.

— Стратегии поиска луча для нейронного машинного перевода, 2017.

Процесс поиска может останавливаться для каждого кандидата отдельно либо по достижении максимальной длины, по достижении маркера конца последовательности, либо по достижении пороговой вероятности.

Приведем конкретный пример.

Мы можем определить функцию для выполнения поиска луча для заданной последовательности вероятностей и параметра ширины луча k . На каждом шаге каждая последовательность-кандидат дополняется всеми возможными следующими шагами. Каждый возможный шаг оценивается путем умножения вероятностей. Выбираются последовательности k с наиболее вероятными вероятностями, а все другие кандидаты удаляются. Затем процесс повторяется до конца последовательности.

Вероятности — это маленькие числа, и их умножение дает очень маленькие числа. Чтобы избежать потери значимости чисел с плавающей запятой, натуральный логарифм вероятностей суммируется, что позволяет сохранять числа больше и удобнее. Кроме того, поиск часто выполняется путем минимизации оценки. Эта последняя настройка означает, что мы можем отсортировать все последовательности-кандидаты в порядке возрастания по их баллам и выбрать первые k в качестве наиболее вероятных последовательностей-кандидатов.

Функция beam_search_decoder () ниже реализует декодер поиска луча.

# поиск луча def beam_search_decoder (данные, k): последовательности = [[список (), 0,0]] # пройдемся по каждому шагу последовательно для строки в данных: all_candidates = список () # развернуть каждого текущего кандидата для i в диапазоне (len (последовательности)): seq, score = последовательностей [i] для j в диапазоне (len (строка)): кандидат = [seq + [j], оценка — журнал (строка [j])] all_candidates.добавить (кандидат) # упорядочить всех кандидатов по баллам заказанный = отсортированный (all_candidates, key = lambda tup: tup [1]) # выберите k лучших последовательности = заказанные [: k] возвращаемые последовательности

1

2

3

4

5

6

7

8

9

10

11

12

13

140002

# поиск лучей

def beam_search_decoder (data, k):

последовательностей = [[list (), 0.0]]

# пройти каждый шаг в последовательности

для строки в данных:

all_candidates = list ()

# развернуть каждого текущего кандидата

для i в диапазоне (len (последовательности)):

seq, оценка = последовательности [i]

для j в диапазоне (len (строка)):

кандидат = [seq + [j], оценка — журнал (строка [j])]

all_candidates.append (кандидат)

# упорядочить всех кандидатов по количеству баллов

упорядочено = отсортировано (all_candidates, key = lambda tup: tup [1])

# выбрать k лучших

последовательностей = упорядочено [: k]

возвращаемых последовательностей

Мы можем связать это вместе с образцами данных из предыдущего раздела и на этот раз вернуть 3 наиболее вероятные последовательности.

из журнала импорта математики из массива импорта numpy из numpy import argmax # поиск луча def beam_search_decoder (данные, k): последовательности = [[список (), 0,0]] # пройдемся по каждому шагу последовательно для строки в данных: all_candidates = список () # развернуть каждого текущего кандидата для i в диапазоне (len (последовательности)): seq, score = последовательностей [i] для j в диапазоне (len (строка)): кандидат = [seq + [j], оценка — журнал (строка [j])] all_candidates.добавить (кандидат) # упорядочить всех кандидатов по баллам заказанный = отсортированный (all_candidates, key = lambda tup: tup [1]) # выберите k лучших последовательности = заказанные [: k] возвращаемые последовательности # определяем последовательность из 10 слов в словарном запасе из 5 слов данные = [[0,1, 0,2, 0,3, 0,4, 0,5], [0,5, 0,4, 0,3, 0,2, 0,1], [0,1, 0,2, 0,3, 0,4, 0,5], [0,5, 0,4, 0,3, 0,2, 0,1], [0,1, 0,2, 0,3, 0,4, 0,5], [0,5, 0,4, 0,3, 0,2, 0,1], [0,1, 0,2, 0,3, 0,4, 0.5], [0,5, 0,4, 0,3, 0,2, 0,1], [0,1, 0,2, 0,3, 0,4, 0,5], [0,5, 0,4, 0,3, 0,2, 0,1]] данные = массив (данные) # декодировать последовательность результат = beam_search_decoder (данные, 3) # результат печати для seq в результате: печать (seq)

1

2

3

4

5

6

7

8

9

10

11

12

13

140002

18

19

20

21

22

23

24

25

26

27

28

29

30

000

000 34

35

36

37

38

39

из журнала импорта math

из массива импорта numpy

из импорта numpy argmax

# beam search

def beam_search_decoder (data, k):

последовательностей = [[list (), 0.0]]

# пройти каждый шаг в последовательности

для строки в данных:

all_candidates = list ()

# развернуть каждого текущего кандидата

для i в диапазоне (len (последовательности)):

seq, оценка = последовательности [i]

для j в диапазоне (len (строка)):

кандидат = [seq + [j], оценка — журнал (строка [j])]

all_candidates.append (кандидат)

# упорядочить всех кандидатов по количеству баллов

упорядочено = отсортировано (all_candidates, key = lambda tup: tup [1])

# выбрать k лучших

последовательностей = упорядочено [: k]

возвращаемых последовательностей

# определить последовательность из 10 слов в словаре из 5 слов

data = [[0.1, 0,2, 0,3, 0,4, 0,5],

[0,5, 0,4, 0,3, 0,2, 0,1],

[0,1, 0,2, 0,3, 0,4, 0,5],

[0,5, 0,4, 0,3, 0,2, 0,1],

[0,1, 0,2, 0,3, 0,4, 0,5],

[0,5, 0,4, 0,3, 0,2, 0,1],

[0,1, 0,2, 0,3, 0,4, 0,5],

[0,5, 0,4, 0,3, 0,2, 0,1],

[0,1, 0,2, 0,3, 0,4, 0,5],

[0,5, 0,4, 0,3, 0,2, 0,1]]

данные = массив (данные)

# последовательность декодирования

результат = beam_search_decoder (data, 3)

# print result

для seq in result:

print (seq)

При выполнении примера печатаются как целочисленные последовательности, так и их логическая вероятность.

Поэкспериментируйте с разными значениями k.

[[4, 0, 4, 0, 4, 0, 4, 0, 4, 0], 6.931471805599453] [[4, 0, 4, 0, 4, 0, 4, 0, 4, 1], 7.154615356

3] [[4, 0, 4, 0, 4, 0, 4, 0, 3, 0], 7.154615356

3]

[[4, 0, 4, 0, 4, 0, 4, 0, 4, 0], 6.931471805599453]

[[4, 0, 4, 0, 4, 0, 4, 0, 4, 1 ], 7.154615356

3]

[[4, 0, 4, 0, 4, 0, 4, 0, 3, 0], 7.154615356

3]

Дополнительная литература

Этот раздел предоставляет дополнительные ресурсы по теме, если вы хотите углубиться.

Сводка

В этом руководстве вы открыли для себя алгоритмы декодирования жадного поиска и поиска по лучу, которые можно использовать для решения задач генерации текста.

В частности, вы выучили:

  • Проблема декодирования по задачам генерации текста.
  • Алгоритм декодера жадного поиска и как его реализовать на Python.
  • Алгоритм декодера поиска луча и как его реализовать на Python.

Есть вопросы?
Задайте свои вопросы в комментариях ниже, и я постараюсь ответить.

Разрабатывайте модели глубокого обучения для текстовых данных уже сегодня!

Разработка собственных текстовых моделей за считанные минуты

… всего несколькими строками кода Python

Узнайте, как это сделать, в моей новой электронной книге:
Deep Learning for Natural Language Processing

Он предоставляет самоучителей по таким темам, как:
Пакет слов, встраивание слов, языковые модели, создание титров, перевод текста и многое другое …

Наконец-то привнесите глубокое обучение в свои проекты обработки естественного языка

Пропустить академики.Только результаты.

Посмотрите, что внутри

Модели кодировщика-декодера для обработки естественного языка

1. Обзор

Модели кодировщика-декодера

и рекуррентные нейронные сети, вероятно, являются наиболее естественным способом представления текстовых последовательностей.

В этом руководстве мы узнаем, что это такое, различные архитектуры, приложения, проблемы, с которыми мы можем столкнуться при их использовании, и каковы наиболее эффективные методы решения этих проблем.

Все, что нужно для понимания, — это базовые знания об искусственных нейронных сетях и обратном распространении.

2. Введение

2.1. Кодеры с рекуррентными нейронными сетями

Понимание текста — это итеративный процесс для людей: когда мы читаем предложение, мы обрабатываем каждое слово, накапливая информацию до конца текста.

Система, накапливающая информацию, состоящую из одинаковых блоков, повторяющихся во времени, — это рекуррентная нейронная сеть (RNN) в области глубокого обучения.

Как правило, кодировщик текста превращает текст в числовое представление.Эту задачу можно реализовать разными способами, но в этом руководстве под кодировщиками подразумевается кодировщик RNN. Давайте посмотрим на схему:

В зависимости от учебника мы можем найти его в свернутом представлении:

Таким образом, каждый блок состоит одновременно из следующих элементов:

Вход блока:

  • Входной вектор (кодирование слова)
  • Скрытый вектор состояния (содержащий состояние последовательности перед текущим блоком)

Выход блока:

  • Выходной вектор, который не всегда создается каждым блоком, как мы увидим через несколько мгновений.

Вес:

2.2. Декодеры

В отличие от кодеров, декодеры разворачивают вектор, представляющий состояние последовательности, и возвращают что-то значимое для нас , например текст, теги или метки.

Существенное различие с кодировщиками состоит в том, что декодерам требуется как скрытое состояние, так и вывод из предыдущего состояния.

Когда декодер начинает обработку, предыдущего вывода нет, поэтому для этих случаев мы используем специальный токен .

Давайте проясним пример ниже, который показывает, как работает машинный перевод:

Произведенное кодировщиком состояние, представляющее предложение на исходном языке (английском): Я люблю изучать .

Затем декодер развернул это состояние на целевой язык (испанский): Amo el aprendizaje .

можно рассматривать как векторизованное представление всей последовательности или, другими словами, мы могли бы использовать кодировщик в качестве приблизительного средства для получения вложений из текста произвольной длины, но это неправильный способ сделать это, поскольку мы Увидим в другом туториале.

2.3. Дополнительная информация

На предыдущей диаграмме мы использовали слова в качестве входных данных для простоты, но на самом деле мы передаем каждое слово вложения вектора (,,…)

Кроме того, в части схемы, относящейся к декодеру, должна быть функция softmax, которая находит слово из словаря с наибольшей вероятностью для этого ввода и скрытого состояния.

Давайте обновим нашу диаграмму этими дополнительными деталями:

3. Архитектуры и их приложения

3.1. Многие к одному

Это широко используется для классификации, обычно для анализа настроений или тегов. Вход — это последовательность слов, а выход — категория. Этот вывод производится последним блоком последовательности:

3.2. Один ко многим

Основное применение этой архитектуры — генерация текста. Входными данными является тема, а выходными данными — последовательность слов, сгенерированная для этой темы:

3.3. Многие ко многим (1-я версия)

Это очень популярная архитектура в машинном переводе (также известная как seq2seq). Входные данные — это последовательность слов, как и выходные данные.

Сеть «ждет», пока этап кодирования завершит создание внутреннего состояния. Он просто начинает декодирование, когда кодировщик закончит:

3.4. Многие ко многим (2-я версия)

Распространенными приложениями для этой архитектуры являются субтитры к видео и теги речи. В то же время, когда идут кадры, создаются подписи / теги, поэтому не нужно ждать окончательного состояния перед его декодированием:

4.Плюсы и минусы

Преимущества рекуррентных нейронных сетей:

  • Кормим вводы любой длины
  • Размер модели не увеличивается с размером ввода
  • Они естественным образом моделируют события во времени

Недостатки следующие:

  • Они медленные, потому что должны обрабатываться последовательно. Имейте в виду, что нам всегда нужно предыдущее состояние для вычисления текущего
  • Есть проблемы исчезающего и взрывающегося градиента
  • Они не работают с длинными последовательностями

5.Подразделения ЛСТМ и ГРУ

5.1. Что такое исчезающие / взрывающиеся градиенты?

Градиент — это вектор, который мы используем для обновления весов сети, чтобы он мог работать лучше в будущем.

Из-за обратного распространения и правила цепочки , когда обновление градиента небольшое, оно уменьшается экспоненциально с увеличением количества слоев . Следовательно, в очень глубоких архитектурах с большим количеством уровней обновление, происходящее на очень глубоком уровне, не влияет на передние уровни (оно исчезает), и сеть не может изучить .

На рисунке ниже мы видим RNN, где начальные обновления экспоненциально теряют силу с течением последовательности:

Мы сталкиваемся с противоположной ситуацией со взрывными градиентами: Если градиент большой, он увеличивается экспоненциально, что делает процесс обучения очень нестабильным.

подразделений LSTM и GRU были созданы для решения этой проблемы.

5.2. Базовые единицы РНН

Единицы Vanilla RNN выглядят так:

  • Вход: предыдущее состояние в последовательности и вектор слова для текущего состояния
  • Выход: текущее состояние, которое будет передано следующему устройству, и выходной вектор

Давайте посмотрим, как закодировать RNN с использованием ванильных единиц в Python и Tensorflow:

  импортировать тензорный поток как tf

...

model = tf.keras.Sequential ([
  tf.keras.layers.Embedding (vocab_size, 64),
  tf.keras.layers.GlobalAveragePooling1D (),
  tf.keras.layers.Dense (64, Activation = 'relu'),
  tf.keras.layers.Dense (1, активация = 'сигмоид')
])  

5.3. LSTM

Блоки долговременной краткосрочной памяти (LSTM) состоят из ячейки, входного элемента, выходного элемента и элемента забывания.

На следующем рисунке у нас есть схема LSTM:

Функция каждого элемента, составляющего этот блок:

  • Состояние ячейки: это состояние ячейки (памяти)
  • Входной вентиль: регулирует, насколько новое значение может поступать в ячейку.
  • Забыть ворота: он контролирует, до какой степени новое значение остается в ячейке
  • Выходной вентиль: он регулирует степень, в которой значение в ячейке используется для вычисления выходной активации модуля LSTM.

Используя эти шлюзы, управляющие долгосрочными зависимостями в последовательности, RNN предотвращают потерю некоторой ключевой информации .

Код для создания RNN с использованием LSTM будет:

  импортировать тензорный поток как tf

...

model = tf.keras.Sequential ([
  tf.keras.layers.Embedding (vocab_size, 64),
  tf.keras.layers.Bidirectional (tf.keras.layers.LSTM (64)),
  tf.keras.layers.Dense (64, Activation = 'relu'),
  tf.keras.layers.Dense (1, активация = 'сигмоид')
])  

5.4. ГРУ

Блокируемые рекуррентные блоки (GRU) являются более поздними, и их конструкция аналогична LSTM, но с меньшим количеством параметров (у них отсутствует выходной вентиль):

Давайте посмотрим на код:

  импортировать тензорный поток как tf

...

model = tf.keras.Sequential ([
  tf.keras.layers.Embedding (vocab_size, 64),
  tf.keras.layers.Bidirectional (tf.keras.layers.GRU (64)),
  tf.keras.layers.Dense (64, Activation = 'relu'),
  tf.keras.layers.Dense (1, активация = 'сигмоид')
])  

5.5. Когда использовать каждый?

В общем, не использует стандартные RNN, всегда используют единицы LSTM или GRU.

Как выбрать между LSTM или GRU? Эмпирического правила не существует: это часто зависит от задачи, поэтому попробуйте оба варианта и используйте наиболее эффективный модуль.

В случае, если они работают аналогично, предпочтите GRU над LSTM, поскольку они менее затратны в вычислительном отношении.

6. Внимание Механизм

LSTM и GRU улучшают производительность RNN за счет более длинных последовательностей, но некоторые конкретные задачи требуют еще большей мощности для правильной работы.

Один из типичных примеров — нейронный машинный перевод, где грамматические структуры в кодировщике и декодере сильно различаются. Чтобы перевести каждое следующее слово, нам нужно сосредоточиться на определенных словах из входного предложения, возможно, в совсем другом порядке.

Давайте посмотрим на пример перевода предложения « L’accord sure la zone économique européene a été signé en août 1992 ″ на английский язык:

В приведенной выше матрице мы видим, как «зона» сильно фокусируется на «Area» и более мягко на «Economic» . Мы также можем заметить, что «européenne» сильно ориентирован на «европейский».

Здесь мы видим, что механизм внимания позволяет декодеру сосредоточиться на определенных частях входной последовательности, чтобы должным образом произвести следующий вывод .

См. Ниже схему, показывающую, как этот механизм вписывается в уже имеющуюся у нас архитектуру:

7. Заключение

В этой статье мы изучили строительные блоки моделей кодировщика-декодера с рекуррентными нейронными сетями, а также их общие архитектуры и приложения.

Мы также рассмотрели наиболее частые проблемы, с которыми мы сталкиваемся при использовании этих моделей, и способы их устранения с помощью модулей LSTM или GRU, а также механизма внимания.

Теперь, когда мы изучили все эти новые методы вместе с предоставленными фрагментами вспомогательного кода, мы готовы приступить к созданию наших собственных моделей в реальной жизни.

Руководство по модели кодировщика-декодера и механизму внимания | Эдуардо Муньос

Как мы упоминали ранее, мы заинтересованы в групповом обучении сети; поэтому мы создаем функцию, которая выполняет обучение пакета данных:

  • Вызвать кодировщик для последовательности пакетного ввода — на выходе будет закодированный вектор
  • Установить начальные состояния декодера на закодированный вектор
  • Вызов декодер, принимая в качестве входных данных целевую последовательность со смещением вправо.Выходные данные — логиты (функция softmax применяется в функции потерь).
  • Вычислить потерю и точность пакетных данных
  • Обновить обучаемые параметры кодера и декодера
  • Обновить оптимизатор

Как вы можете заметить, наша функция поезда принимает три последовательности:

  • Входная последовательность: массив целых чисел формы: [batch_size, max_seq_len, embedding dim] . Это входная последовательность для кодировщика.
  • Целевая последовательность: Массив целых чисел формы: [batch_size, max_seq_len, embedding dim] .Это цель нашей модели, результат, который нам нужен для нашей модели.
  • Целевая входная последовательность: Массив целых чисел формы: [batch_size, max_seq_len, embedding dim] . Это входная последовательность для декодера, потому что мы используем учитель, заставляющий .

Принуждение учителя

Принуждение учителя — это метод обучения, критически важный для разработки моделей глубокого обучения в НЛП. «Это способ быстрого и эффективного обучения повторяющихся моделей нейронных сетей, которые используют в качестве входных данных достоверную информацию из предыдущего временного шага.», [8]« Что учитель заставляет использовать рекуррентные нейронные сети? » Джейсон Браунли, доктор философии

В рекуррентной сети обычно входом в RNN на временном шаге t является выход RNN на предыдущем временном шаге, t-1. Но с помощью принуждения учителя мы можем использовать фактический результат для улучшения обучающих возможностей модели.

«Принуждение учителя работает с использованием фактических или ожидаемых выходных данных из набора обучающих данных на текущем временном шаге y (t) в качестве входных данных на следующем временном шаге X (t + 1), а не выходных данных, генерируемых сетью.

— «Глубокое обучение» Иэна Гудфеллоу

Итак, в нашем примере целевой выход на временном шаге t является входом декодера на временном шаге t + 1. Наша входная последовательность для декодера будет ожидаемой целевой последовательностью, сдвинутой на одну позицию вправо. Для этого мы вставляем начальный токен последовательности в первую позицию, чтобы токен в позиции 1 переместился в позицию 2, токен с 2 по 3 и так далее. Чтобы уравнять длины последовательностей и разграничить их конец, в целевой последовательности мы поместим маркер конца последовательности в последнюю позицию.

Когда результат нашей модели не отличается от того, что было видно на модели во время обучения, принуждение учителя очень эффективно. Но если нам нужна более творческая модель, в которой при заданной входной последовательности может быть несколько возможных выходов, мы должны избегать этого метода или применять его случайным образом (только в некоторых случайных временных шагах).

Теперь мы можем закодировать основную функцию поезда:

Мы почти готовы — наш последний шаг включает вызов основной функции поезда, и мы создаем объект контрольной точки для сохранения нашей модели.Поскольку тренировочный процесс требует длительного времени, мы будем сохранять его каждые две эпохи. Позже мы сможем восстановить его и использовать для прогнозов.

Мы обучаем нашу модель кодировщика-декодера в течение ограниченного периода времени (примерно один час), используя 40 000 пар предложений и RNN из 512 единиц. Мы достигаем хороших результатов:

Делаем прогнозы

На этапе прогнозирования входными данными является последовательность длины один, токен sos . Затем мы повторно вызываем кодировщик и декодер, пока не получим токен eos или не достигнем максимальной длины.

Вот несколько примеров полученных нами прогнозов:

 [«мы не пойдем», «почему тебе грустно?»] 
[«нет вамос. ',' ¿por que estas triste? ']

Трансформаторные модели кодировщика-декодера

 ! Pip install трансформаторы == 4.2.1
! pip install фраза == 0.1.95
  

Модель кодера-декодера на основе трансформатора была представлена ​​Васвани. и другие. в знаменитом Attention — это все, что вам нужно бумаги и сегодня это де-факто стандартная архитектура кодера-декодера при обработке естественного языка (НЛП).

В последнее время было проведено много исследований по разным предварительному обучению объективы для моделей кодеров-декодеров на базе трансформаторов, , например Т5, Барт, Пегас, ProphetNet, Мардж, и т. Д. …, но модель архитектуры остался в основном прежним.

Цель сообщения в блоге — дать подробное объяснение как модели архитектуры кодера-декодера на основе трансформатора от последовательности к последовательности проблемы.Сфокусируемся на математической модели определяется архитектурой и тем, как модель может использоваться для вывода. Попутно мы дадим некоторую справочную информацию о последовательности в последовательность. модели в NLP и разбить кодировщик-декодер на базе трансформатора архитектура в его кодировщика и декодера частей. Мы предоставляем много иллюстрации и установить связь между теорией модели кодеров-декодеров на базе трансформаторов и их практическое применение в 🤗Трансформаторы для вывода.Обратите внимание, что это сообщение в блоге не объясняет , а не как такие модели можно обучить — это тема будущего блога Почта.

Модели кодеров-декодеров на базе трансформаторов являются результатом многолетней Исследование представлений , изучение архитектур моделей и . Этот блокнот содержит краткое изложение истории нейронных кодировщики-декодеры модели. Для получения дополнительной информации читателю рекомендуется прочитать этот замечательный блог опубликовать Себастион Рудер. Кроме того, базовое понимание рекомендуется архитектура с самовниманием .Следующее сообщение в блоге автора Джей Аламмар служит хорошим напоминанием об оригинальной модели Transformer. здесь.

На момент написания этого блокнота «Трансформеры включают кодировщики-декодеры моделей T5 , Bart , MarianMT и Pegasus , которые кратко описаны в документации по модели резюме.

Ноутбук разделен на четыре части:

  • Предпосылки Краткая история моделей нейронных кодировщиков-декодеров дается с акцентом на модели на основе RNN.
  • Кодер-декодер Модель кодера-декодера на основе трансформатора представлена ​​и объясняется, как модель используется для вывод.
  • Энкодер Часть модели энкодера объяснена в деталь.
  • Декодер Декодерная часть модели объяснена в деталь.

Каждая часть основана на предыдущей части, но также может быть прочитана на ее собственный.

Фон

Задачи генерации естественного языка (NLG), подполе NLP, являются лучшими выражаются как задачи от последовательности к последовательности.Такие задачи можно определить как поиск модели, которая отображает последовательность входных слов в последовательность целевые слова. Некоторые классические примеры — это суммирование и перевод . Далее мы предполагаем, что каждое слово закодировано в векторное представление. входные слова nnn могут быть представлены как последовательность входных векторов nnn:

X1: n = {x1,…, xn}. \ Mathbf {X} _ {1: n} = \ {\ mathbf {x} _1, \ ldots, \ mathbf {x} _n \}. X1: n = {x1,…, xn}.

Следовательно, проблемы от последовательности к последовательности могут быть решены путем нахождения отображение fff из входной последовательности nnn векторов X1: n \ mathbf {X} _ {1: n} X1: n в последовательность целевых векторов mmm Y1: m \ mathbf {Y} _ {1: m} Y1: m, тогда как число векторов-мишеней ммм априори неизвестен и зависит от входных данных последовательность:

f: X1: n → Y1: m.22 для решения задач от последовательности к последовательности следовательно, означает, что необходимо знать количество целевых векторов mmm apriori и должен быть независимым от ввода X1: n \ mathbf {X} _ {1: n} X1: n. Это неоптимально, потому что для задач в NLG количество целевых слов обычно зависит от ввода X1: n \ mathbf {X} _ {1: n} X1: n и не только на входной длине nnn. Например. , статья 1000 слов можно суммировать как до 200 слов, так и до 100 слов в зависимости от его содержание.

В 2014 г. Cho et al.33. После обработки последнего входного вектора xn \ mathbf {x} _nxn, Скрытое состояние кодировщика определяет входную кодировку c \ mathbf {c} c. Таким образом, кодировщик определяет отображение:

fθenc: X1: n → c. f _ {\ theta_ {enc}}: \ mathbf {X} _ {1: n} \ to \ mathbf {c}. fθenc: X1: n → c.

Затем скрытое состояние декодера инициализируется входной кодировкой. и во время логического вывода декодер RNN используется для авторегрессивного генерировать целевую последовательность. Поясним.

Математически декодер определяет распределение вероятностей целевая последовательность Y1: m \ mathbf {Y} _ {1: m} Y1: m с учетом скрытого состояния c \ mathbf {c} c:

pθdec (Y1: m∣c).{m} p _ {\ theta _ {\ text {dec}}} (\ mathbf {y} _i | \ mathbf {Y} _ {0: i-1}, \ mathbf {c}). pθdec (Y1: m ∣c) = i = 1∏m pθdec (yi ∣Y0: i − 1, c).

Таким образом, если архитектура может моделировать условное распределение следующий целевой вектор, учитывая все предыдущие целевые векторы:

pθdec (yi∣Y0: i − 1, c), ∀i∈ {1,…, m}, p _ {\ theta _ {\ text {dec}}} (\ mathbf {y} _i | \ mathbf {Y} _ {0: i-1}, \ mathbf {c}), \ forall i \ in \ {1, \ ldots, m \}, pθdec (yi ∣Y0: i − 1, c), ∀ i∈ {1,…, m},

, то он может моделировать распределение любой последовательности целевого вектора, заданной скрытое состояние c \ mathbf {c} c путем простого умножения всех условных вероятности.

Так как же модель архитектуры декодера на основе RNN pθdec (yi∣Y0: i − 1, c) p _ {\ theta _ {\ text {dec}}} (\ mathbf {y} _i | \ mathbf {Y} _ { 0: i-1}, \ mathbf {c}) pθdec (yi ∣Y0: i − 1, c)?

С точки зрения вычислений, модель последовательно отображает предыдущий внутренний скрытое состояние ci − 1 \ mathbf {c} _ {i-1} ci − 1 и предыдущий целевой вектор yi \ mathbf {y} _iyi до текущего внутреннего скрытого состояния ci \ mathbf {c} _ici и a вектор logit li \ mathbf {l} _ili (показано темно-красным цветом ниже):

fθdec (yi − 1, ci − 1) → li, ci.f _ {\ theta _ {\ text {dec}}} (\ mathbf {y} _ {i-1}, \ mathbf {c} _ {i-1}) \ to \ mathbf {l} _i, \ mathbf {c } _i.fθdec (yi − 1, ci − 1) → li, ci. c0 \ mathbf {c} _0c0 таким образом определяется как c \ mathbf {c} c, являющийся выходом скрытое состояние кодировщика на основе RNN. Впоследствии softmax используется для преобразования вектора логита li \ mathbf {l} _ili в условное распределение вероятностей следующего целевого вектора:

p (yi∣li) = Softmax (li), где li = fθdec (yi − 1, cprev). p (\ mathbf {y} _i | \ mathbf {l} _i) = \ textbf {Softmax} (\ mathbf {l} _i), \ text {with} \ mathbf {l} _i = f _ {\ theta _ {\ text {dec}}} (\ mathbf {y} _ {i-1}, \ mathbf {c} _ {\ text {prev}}).44. Из приведенного выше уравнения мы можно видеть, что распределение текущего целевого вектора yi \ mathbf {y} _iyi напрямую обусловлено предыдущим целевым вектором yi − 1 \ mathbf {y} _ {i-1} yi − 1 и предыдущим скрытым состоянием ci −1 \ mathbf {c} _ {i-1} ci − 1. Поскольку предыдущее скрытое состояние ci − 1 \ mathbf {c} _ {i-1} ci − 1 зависит от всех предыдущие целевые векторы y0,…, yi − 2 \ mathbf {y} _0, \ ldots, \ mathbf {y} _ {i-2} y0,…, yi − 2, он может быть заявлено, что декодер на основе RNN неявно ( например, косвенно ) моделирует условное распределение pθdec (yi∣Y0: i − 1, c) p _ {\ theta _ {\ text {dec}}} (\ mathbf {y} _i | \ mathbf {Y} _ {0: i-1}, \ mathbf {c}) pθdec (yi ∣Y0: i − 1, c).55, которые эффективно выбирают целевой вектор с высокой вероятностью последовательности из pθdec (Y1: m∣c) p _ {\ theta_ {dec}} (\ mathbf {Y} _ {1: m} | \ mathbf {c}) pθdec (Y1: m ∣c).

При таком методе декодирования во время вывода следующий входной вектор yi \ mathbf {y} _iyi может затем быть выбран из pθdec (yi∣Y0: i − 1, c) p _ {\ theta _ {\ text {dec}} } (\ mathbf {y} _i | \ mathbf {Y} _ {0: i-1}, \ mathbf {c}) pθdec (yi ∣Y0: i − 1, c) и, следовательно, добавляется к входной последовательности, так что декодер Затем RNN моделирует pθdec (yi + 1∣Y0: i, c) p _ {\ theta _ {\ text {dec}}} (\ mathbf {y} _ {i + 1} | \ mathbf {Y} _ {0: i }, \ mathbf {c}) pθdec (yi + 1 ∣Y0: i, c) для выборки следующего входного вектора yi + 1 \ mathbf {y} _ {i + 1} yi + 1 и т. д. в авторегрессивный мод.

Важной особенностью моделей кодеров-декодеров на основе RNN является определение специальных векторов , таких как вектор EOS \ text {EOS} EOS и BOS \ text {BOS} BOS. Вектор EOS \ text {EOS} EOS часто представляет собой окончательный входной вектор xn \ mathbf {x} _nxn, чтобы «указать» кодировщику, что вход последовательность закончилась, а также определяет конец целевой последовательности. В качестве как только EOS \ text {EOS} EOS выбирается из вектора логита, генерация завершено. Вектор BOS \ text {BOS} BOS представляет входной вектор y0 \ mathbf {y} _0y0, подаваемый в декодер RNN на самом первом этапе декодирования.Для вывода первого логита l1 \ mathbf {l} _1l1 требуется ввод, и поскольку на первом шаге не было создано никаких входных данных. специальный BOS \ text {BOS} BOS входной вектор поступает на декодер RNN. Хорошо — довольно сложно! Давайте проиллюстрируйте и рассмотрите пример.

Развернутый кодировщик RNN окрашен в зеленый цвет, а развернутый RNN декодер окрашен в красный цвет.

Английское предложение «Я хочу купить машину», представленное как x1 = I \ mathbf {x} _1 = \ text {I} x1 = I, x2 = want \ mathbf {x} _2 = \ text {want} x2 = хочу, x3 = to \ mathbf {x} _3 = \ text {to} x3 = to, x4 = buy \ mathbf {x} _4 = \ text {buy} x4 = buy, x5 = a \ mathbf {x} _5 = \ text {a} x5 = a, x6 = car \ mathbf {x} _6 = \ text {car} x6 = car и x7 = EOS \ mathbf {x} _7 = \ text {EOS} x7 = EOS переводится на немецкий: «Ich will ein Auto kaufen «определяется как y0 = BOS \ mathbf {y} _0 = \ text {BOS} y0 = BOS, y1 = Ich \ mathbf {y} _1 = \ text {Ich} y1 = Ich, y2 = will \ mathbf {y} _2 = \ text {will} y2 = will, y3 = ein \ mathbf {y} _3 = \ text {ein} y3 = ein, y4 = Auto, y5 = kaufen \ mathbf {y} _4 = \ text {Auto}, \ mathbf {y} _5 = \ text {kaufen} y4 = Auto, y5 = kaufen и y6 = EOS \ mathbf {y} _6 = \ text {EOS} y6 = EOS. 66.На рисунке выше горизонтальная стрелка, соединяющая развернутый кодировщик RNN представляет собой последовательные обновления скрытых штат. Окончательное скрытое состояние кодировщика RNN, представленное c \ mathbf {c} c, затем полностью определяет кодировку входных данных. последовательность и используется как начальное скрытое состояние декодера RNN. Это можно увидеть как преобразование декодера RNN на закодированный вход.

Для генерации первого целевого вектора в декодер загружается BOS \ text {BOS} BOS вектор, показанный как y0 \ mathbf {y} _0y0 на рисунке выше.Цель вектор RNN затем дополнительно отображается на вектор логита l1 \ mathbf {l} _1l1 с помощью уровня прямой связи LM Head для определения условное распределение первого целевого вектора, как объяснено выше:

pθdec (y∣BOS, c). p _ {\ theta_ {dec}} (\ mathbf {y} | \ text {BOS}, \ mathbf {c}). pθdec (y∣BOS, c).

Выбирается слово Ich \ text {Ich} Ich (показано серой стрелкой, соединяющей l1 \ mathbf {l} _1l1 и y1 \ mathbf {y} _1y1) и, следовательно, вторая цель вектор может быть выбран:

будет ∼pθdec (y∣BOS, Ich, c).\ text {will} \ sim p _ {\ theta_ {dec}} (\ mathbf {y} | \ text {BOS}, \ text {Ich}, \ mathbf {c}). will∼pθdec (y∣BOS, Ich, c).

И так до тех пор, пока на шаге i = 6i = 6i = 6, вектор EOS \ text {EOS} EOS не будет выбран из l6 \ mathbf {l} _6l6, и декодирование не будет завершено. Результирующая цель последовательность составляет Y1: 6 = {y1,…, y6} \ mathbf {Y} _ {1: 6} = \ {\ mathbf {y} _1, \ ldots, \ mathbf {y} _6 \} Y1: 6 = {y1,…, y6}, что является «Ich will ein Auto kaufen» в нашем примере выше.

Подводя итог, модель кодера-декодера на основе RNN, представленная fθencf _ {\ theta _ {\ text {enc}}} fθenc и pθdec p _ {\ theta _ {\ text {dec}}} pθdec, определяет распределение p (Y1: m∣X1: n) p (\ mathbf {Y} _ {1: m} | \ mathbf {X} _ {1: n}) p (Y1: m ∣X1: n) к факторизация:

pθenc, θdec (Y1: m∣X1: n) = ∏i = 1mpθenc, θdec (yi∣Y0: i − 1, X1: n) = ∏i = 1mpθdec (yi∣Y0: i − 1, c), с c = fθenc (X).{m} p _ {\ theta _ {\ text {dec}}} (\ mathbf {y} _i | \ mathbf {Y} _ {0: i-1}, \ mathbf {c}), \ text {with} \ mathbf {c} = f _ {\ theta_ {enc}} (X). pθenc, θdec (Y1: m ∣X1: n) = i = 1∏m pθenc, θdec (yi ∣Y0: i − 1, X1: n) = i = 1 ∏m pθdec (yi ∣Y0: i − 1, c), где c = fθenc (X).

Во время вывода эффективные методы декодирования могут авторегрессивно сгенерировать целевую последовательность Y1: m \ mathbf {Y} _ {1: m} Y1: m.

Модель кодера-декодера на основе RNN взяла штурмом сообщество NLG. В В 2016 г. компания Google объявила о полной замене разработанной услуги перевода с помощью единой модели кодировщика-декодера на основе RNN (см. здесь).44 Нейронная сеть может определять распределение вероятностей по всем слова, , т.е. p (y∣c, Y0: i − 1) p (\ mathbf {y} | \ mathbf {c}, \ mathbf {Y} _ {0: i-1}) p (y∣c , Y0: i − 1) как следует. Сначала сеть определяет отображение входов c, Y0: i − 1 \ mathbf {c}, \ mathbf {Y} _ {0: i-1} c, Y0: i − 1 во встроенное векторное представление y ′ \ Mathbf {y ‘} y ′, что соответствует целевому вектору RNN. Встроенный векторное представление y ′ \ mathbf {y ‘} y ′ затем передается на «язык модель головы «, что означает, что он умножается на слова. матрица внедрения , i.66 Sutskever et al. (2014) меняет порядок ввода так, чтобы в приведенном выше примере ввод векторы будут соответствовать x1 = car \ mathbf {x} _1 = \ text {car} x1 = car, x2 = a \ mathbf {x} _2 = \ text {a} x2 = a, x3 = buy \ mathbf { x} _3 = \ text {buy} x3 = buy, x4 = to \ mathbf {x} _4 = \ text {to} x4 = to, x5 = want \ mathbf {x} _5 = \ text {want} x5 = Хочу, x6 = I \ mathbf {x} _6 = \ text {I} x6 = I и x7 = EOS \ mathbf {x} _7 = \ text {EOS} x7 = EOS. В мотивация состоит в том, чтобы обеспечить более короткую связь между соответствующими пары слов, такие как x6 = I \ mathbf {x} _6 = \ text {I} x6 = I и y1 = Ich \ mathbf {y} _1 = \ text {Ich} y1 = Ich.Исследовательская группа подчеркивает, что обращение входной последовательности было ключевой причиной того, что их модель улучшена производительность машинного перевода.

Кодер-декодер

В 2017 г. Vaswani et al. представил трансформатор Transformer и тем самым дал рождение модели на базе трансформатора кодировщика-декодера .

Аналогичен моделям кодировщика-декодера на базе RNN, трансформаторный модели кодировщика-декодера состоят из кодировщика и декодера, которые обе стопки из блоков остаточного внимания .Ключевое нововведение трансформаторные модели кодировщика-декодера заключается в том, что такое остаточное внимание блоки могут обрабатывать входную последовательность X1: n \ mathbf {X} _ {1: n} X1: n переменной длина nnn без отображения повторяющейся структуры. Не полагаясь на рекуррентная структура позволяет преобразовывать кодировщики-декодеры высокая степень распараллеливания, что делает модель на порядки больше вычислительно эффективен, чем модели кодировщика-декодера на основе RNN на современное оборудование.

Напоминаем, что для решения задачи от последовательности к последовательности нам необходимо найти отображение входной последовательности X1: n \ mathbf {X} _ {1: n} X1: n на выход последовательность Y1: m \ mathbf {Y} _ {1: m} Y1: m переменной длины mmm.Посмотрим как модели кодеров-декодеров на основе трансформаторов используются для поиска такого отображение.

Подобно моделям кодировщика-декодера на основе RNN, трансформатор на основе модели кодировщика-декодера определяют условное распределение целевых векторы Y1: n \ mathbf {Y} _ {1: n} Y1: n с заданной входной последовательностью X1: n \ mathbf {X} _ {1: n} X1: n:

pθenc, θdec (Y1: m∣X1: n). p _ {\ theta _ {\ text {enc}}, \ theta _ {\ text {dec}}} (\ mathbf {Y} _ {1: m} | \ mathbf {X} _ {1: n}). pθenc, θdec (Y1: m ∣X1: n).

Кодер на основе трансформатора кодирует входную последовательность X1: n \ mathbf {X} _ {1: n} X1: n в последовательность из скрытых состояний X‾1: n \ mathbf {\ overline { X}} _ {1: n} X1: n, таким образом определяя отображение:

fθenc: X1: n → X‾1: n.f _ {\ theta _ {\ text {enc}}}: \ mathbf {X} _ {1: n} \ to \ mathbf {\ overline {X}} _ {1: n}. fθenc: X1: n → X1: n.

Затем часть декодера на основе трансформатора моделирует условное распределение вероятностей последовательности целевых векторов Y1: n \ mathbf {Y} _ {1: n} Y1: n с учетом последовательности закодированных скрытых состояний X‾1: n \ mathbf {\ overline {X}} _ {1: n} X1: n:

pθdec (Y1: n∣X‾1: n). p _ {\ theta_ {dec}} (\ mathbf {Y} _ {1: n} | \ mathbf {\ overline {X}} _ {1: n}). pθdec (Y1: n ∣X1: n ).

По правилу Байеса это распределение может быть разложено на произведение условное распределение вероятностей целевого вектора yi \ mathbf {y} _iyi учитывая закодированные скрытые состояния X‾1: n \ mathbf {\ overline {X}} _ {1: n} X1: n и все предыдущие целевые векторы Y0: i − 1 \ mathbf {Y} _ {0: i-1} Y0: i − 1:

pθdec (Y1: n∣X‾1: n) = ∏i = 1npθdec (yi∣Y0: i − 1, X‾1: n).{n} p _ {\ theta _ {\ text {dec}}} (\ mathbf {y} _i | \ mathbf {Y} _ {0: i-1}, \ mathbf {\ overline {X}} _ {1: n}). pθdec (Y1: n ∣X1: n) = i = 1∏n pθdec (yi ∣Y0: i − 1, X1: n).

Трансформаторный декодер тем самым отображает последовательность закодированных скрытых указывает X‾1: n \ mathbf {\ overline {X}} _ {1: n} X1: n и все предыдущие целевые векторы Y0: i − 1 \ mathbf {Y} _ {0: i-1} Y0: i − 1 в вектор logit li \ mathbf {l} _ili. Логит вектор li \ mathbf {l} _ili затем обрабатывается операцией softmax для определить условное распределение pθdec (yi∣Y0: i − 1, X‾1: n) p _ {\ theta _ {\ text {dec}}} (\ mathbf {y} _i | \ mathbf {Y} _ {0: i -1}, \ mathbf {\ overline {X}} _ {1: n}) pθdec (yi ∣Y0: i − 1, X1: n), так же, как это делается для декодеров на основе RNN.Однако в отличие от Декодеры на основе RNN, распределение целевого вектора yi \ mathbf {y} _iyi явно (или напрямую) обусловлено всеми предыдущими целевыми векторами y0,…, yi − 1 \ mathbf {y} _0, \ ldots, \ mathbf {y} _ {i-1} y0,…, yi − 1 Как мы увидим позже деталь. 0-й целевой вектор y0 \ mathbf {y} _0y0 настоящим представлен специальный «начало предложения» BOS \ text {BOS} вектор BOS.

Определив условное распределение pθdec (yi∣Y0: i − 1, X‾1: n) p _ {\ theta _ {\ text {dec}}} (\ mathbf {y} _i | \ mathbf {Y} _ {0 : i-1}, \ mathbf {\ overline {X}} _ {1: n}) pθdec (yi ∣Y0: i − 1, X1: n), теперь мы можем авторегрессивно сгенерировать вывод и, таким образом, определить отображение входной последовательности X1: n \ mathbf {X} _ {1: n} X1: n в выходную последовательность Y1: m \ mathbf {Y} _ {1: m} Y1: m при выводе.

Давайте визуализируем полный процесс авторегрессивной генерации модели кодеров-декодеров на базе трансформатора.

Трансформаторный энкодер окрашен в зеленый цвет, а Трансформаторный декодер окрашен в красный цвет. Как и в предыдущем разделе, мы показываем, как английское предложение «Я хочу купить машину», представленное как x1 = I \ mathbf {x} _1 = \ text {I} x1 = I, x2 = want \ mathbf {x} _2 = \ text { want} x2 = want, x3 = to \ mathbf {x} _3 = \ text {to} x3 = to, x4 = buy \ mathbf {x} _4 = \ text {buy} x4 = buy, x5 = a \ mathbf {x} _5 = \ text {a} x5 = a, x6 = car \ mathbf {x} _6 = \ text {car} x6 = car и x7 = EOS \ mathbf {x} _7 = \ text {EOS} x7 = EOS переводится на немецкий: «Ich will ein Auto kaufen «определяется как y0 = BOS \ mathbf {y} _0 = \ text {BOS} y0 = BOS, y1 = Ich \ mathbf {y} _1 = \ text {Ich} y1 = Ich, y2 = will \ mathbf {y} _2 = \ text {will} y2 = will, y3 = ein \ mathbf {y} _3 = \ text {ein} y3 = ein, y4 = Auto, y5 = kaufen \ mathbf {y} _4 = \ text {Auto}, \ mathbf {y} _5 = \ text {kaufen} y4 = Auto, y5 = kaufen и y6 = EOS \ mathbf {y} _6 = \ text {EOS} y6 = EOS.

Сначала кодировщик обрабатывает всю входную последовательность X1: 7 \ mathbf {X} _ {1: 7} X1: 7 = «Я хочу купить машину» (представлен светом зеленые векторы) в контекстуализированную кодированную последовательность X‾1: 7 \ mathbf {\ overline {X}} _ {1: 7} X1: 7. Например. x‾4 \ mathbf {\ overline {x}} _ 4×4 определяет кодировка, которая зависит не только от ввода x4 \ mathbf {x} _4x4 = «buy», но и все остальные слова «я», «хочу», «к», «а», «машина» и «EOS», , то есть контекст.

Затем входная кодировка X‾1: 7 \ mathbf {\ overline {X}} _ {1: 7} X1: 7 вместе с BOS вектор, i.е. y0 \ mathbf {y} _0y0, подается на декодер. Декодер обрабатывает входные данные X‾1: 7 \ mathbf {\ overline {X}} _ {1: 7} X1: 7 и y0 \ mathbf {y} _0y0, чтобы первый логит l1 \ mathbf {l} _1l1 (показан более темным красным) для определения условное распределение первого целевого вектора y1 \ mathbf {y} _1y1:

pθenc, dec (y∣y0, X1: 7) = pθenc, dec (y∣BOS, я хочу купить машину EOS) = pθdec (y∣BOS, X‾1: 7). p _ {\ theta_ {enc, dec}} (\ mathbf {y} | \ mathbf {y} _0, \ mathbf {X} _ {1: 7}) = p _ {\ theta_ {enc, dec}} (\ mathbf {y} | \ text {BOS}, \ text {Я хочу купить машину EOS}) = p _ {\ theta_ {dec}} (\ mathbf {y} | \ text {BOS}, \ mathbf {\ overline { X}} _ {1: 7}).pθenc, dec (y∣y0, X1: 7) = pθenc, dec (y∣BOS, я хочу купить машину EOS) = pθdec (y∣BOS, X1: 7).

Затем выбирается первый целевой вектор y1 \ mathbf {y} _1y1 = Ich \ text {Ich} Ich из распределения (обозначено серыми стрелками) и теперь может быть снова подается на декодер. Теперь декодер обрабатывает как y0 \ mathbf {y} _0y0 = «BOS» и y1 \ mathbf {y} _1y1 = «Ich» для определения условного распределение второго целевого вектора y2 \ mathbf {y} _2y2:

pθdec (y∣BOS Ich, X‾1: 7). p _ {\ theta_ {dec}} (\ mathbf {y} | \ text {BOS Ich}, \ mathbf {\ overline {X}} _ {1: 7}).pθdec (y∣BOS Ich, X1: 7).

Мы можем снова выполнить выборку и создать целевой вектор y2 \ mathbf {y} _2y2 = «буду». Мы продолжаем в авторегрессивном режиме до тех пор, пока на шаге 6 не появится EOS. вектор выбирается из условного распределения:

EOS∼pθdec (y∣BOS Ich will ein Auto kaufen, X‾1: 7). \ text {EOS} \ sim p _ {\ theta_ {dec}} (\ mathbf {y} | \ text {BOS Ich будет ein Auto kaufen}, \ mathbf {\ overline {X}} _ {1: 7}). EOS∼pθdec (y∣BOS Ich будет ein Auto kaufen, X1: 7).

И так далее в авторегрессивном режиме.

Важно понимать, что энкодер используется только в первом прямой переход к карте X1: n \ mathbf {X} _ {1: n} X1: n в X‾1: n \ mathbf {\ overline {X}} _ {1: n} X1: n. Начиная со второго прямого прохода, декодер может напрямую использовать ранее рассчитанная кодировка X‾1: n \ mathbf {\ overline {X}} _ {1: n} X1: n. Для ясности, давайте проиллюстрируем первый и второй прямой проход для нашего пример выше.

Как видно, только на шаге i = 1i = 1i = 1 мы должны кодировать «Я хочу купить автомобиль EOS «на X‾1: 7 \ mathbf {\ overline {X}} _ {1: 7} X1: 7.На шаге i = 2i = 2i = 2 контекстные кодировки «Я хочу купить машину EOS» просто повторно используется декодером.

В 🤗Трансформаторах это авторегрессивное поколение выполняется под капотом. при вызове метода .generate () . Воспользуемся одним из наших переводов модели, чтобы увидеть это в действии.

  из трансформаторов импортных MarianMTModel, MarianTokenizer

tokenizer = MarianTokenizer.from_pretrained («Хельсинки-НЛП / opus-mt-en-de»)
model = MarianMTModel.from_pretrained ("Хельсинки-НЛП / opus-mt-en-de")


input_ids = tokenizer («Я хочу купить машину», return_tensors = «pt»).input_ids


output_ids = model.generate (input_ids) [0]


печать (tokenizer.decode (output_ids))
  

Выход:

   Ich will ein Auto kaufen
  

Вызов .generate () делает многие вещи скрытыми. Сначала проходит input_ids в кодировщик. Во-вторых, он передает заранее определенный токен, которым является символ \ text {} в случае MarianMTModel вместе с закодированными input_ids для декодера.11. Более подробно о том, как работает декодирование с поиском луча, можно посоветовал прочитать этот блог Почта.

В приложение мы включили фрагмент кода, который показывает, как простая Метод генерации может быть реализован «с нуля». Чтобы полностью понять, как авторегрессивное поколение работает под капотом, это Настоятельно рекомендуется прочитать Приложение.

Подводя итог:

  • Трансформаторный энкодер определяет отображение от входа последовательность X1: n \ mathbf {X} _ {1: n} X1: n в контекстуализированную последовательность кодирования X‾1: n \ mathbf {\ overline {X}} _ {1: n} X1: n.
  • Трансформаторный декодер определяет условное распределение pθdec (yi∣Y0: i − 1, X‾1: n) p _ {\ theta _ {\ text {dec}}} (\ mathbf {y} _i | \ mathbf {Y} _ {0: i-1}, \ mathbf {\ overline {X}} _ {1: n}) pθdec (yi ∣Y0: i − 1, X1: n).
  • При соответствующем механизме декодирования выходная последовательность Y1: m \ mathbf {Y} _ {1: m} Y1: m может быть автоматически выбран из pθdec (yi∣Y0: i − 1, X‾1: n), ∀i∈ {1,…, m} p _ {\ theta _ {\ text {dec}}} (\ mathbf {y} _i | \ mathbf { Y} _ {0: i-1}, \ mathbf {\ overline {X}} _ {1: n}), \ forall i \ in \ {1, \ ldots, m \} pθdec (yi ∣ Y0: i − 1, X1: n), ∀i∈ {1,…, m}.

Отлично, теперь, когда мы получили общий обзор того, как На базе трансформатора работают модели кодировщиков-декодеров , мы можем глубже погрузиться в как кодировщик, так и декодер части модели. В частности, мы увидит, как именно кодировщик использует слой самовнимания чтобы получить последовательность контекстно-зависимых векторных кодировок и как Уровни самовнимания позволяют эффективно распараллеливать. Тогда мы будем подробно объясните, как слой самовнимания работает в декодере модель и как декодер зависит от выхода кодировщика с перекрестное внимание слоя для определения условного распределения pθdec (yi∣Y0: i − 1, X‾1: n) p _ {\ theta _ {\ text {dec}}} (\ mathbf {y} _i | \ mathbf { Y} _ {0: i-1}, \ mathbf {\ overline {X}} _ {1: n}) pθdec (yi ∣Y0: i − 1, X1: n).11 В случае "Helsinki-NLP / opus-mt-en-de" декодирование параметры доступны здесь, где мы видим, что модель применяет поиск луча с num_beams = 6 .

Энкодер

Как упоминалось в предыдущем разделе, энкодер на базе трансформатора отображает входную последовательность в контекстуализированную последовательность кодирования:

fθenc: X1: n → X‾1: n. 11.Двунаправленный Слой самовнимания помещает каждый входной вектор x′j, ∀j∈ {1,…, n} \ mathbf {x ‘} _ j, \ forall j \ in \ {1, \ ldots, n \} x′j, ∀j∈ {1,…, n} по отношению ко всем входные векторы x′1,…, x′n \ mathbf {x ‘} _ 1, \ ldots, \ mathbf {x’} _ nx′1,…, x′n и тем самым преобразует входной вектор x′j \ mathbf {x ‘} _ jx′j в более «изысканный» контекстное представление самого себя, определяемое как x′′j \ mathbf {x »} _ jx′′j. Таким образом, первый блок кодера преобразует каждый входной вектор входная последовательность X1: n \ mathbf {X} _ {1: n} X1: n (показана светло-зеленым цветом ниже) из контекстно-независимое векторное представление в контекстно-зависимое векторное представление, и следующие блоки кодировщика дополнительно уточняют это контекстное представление до тех пор, пока последний блок кодера не выдаст окончательное контекстное кодирование X‾1: n \ mathbf {\ overline {X}} _ {1: n} X1: n (показано более темным зеленый внизу).22.

Наш примерный энкодер на базе трансформатора состоит из трех энкодеров. блоков, тогда как второй блок кодировщика показан более подробно в красный прямоугольник справа для первых трех входных векторов x1, x2andx3 \ mathbf {x} _1, \ mathbf {x} _2 и \ mathbf {x} _3x1, x2 иx3. Двунаправленный Механизм самовнимания проиллюстрирован полносвязным графом в показаны нижняя часть красного поля и два слоя прямой связи. в верхней части красного поля.Как было сказано ранее, мы сосредоточимся только на о механизме двунаправленного самовнимания.

Как видно, каждый выходной вектор слоя самовнимания x′′i, ∀i∈ {1,…, 7} \ mathbf {x »} _ i, \ forall i \ in \ {1, \ ldots, 7 \} x′′i, ∀i∈ {1,…, 7} напрямую зависит от , от все входных вектора x′1,…, x′7 \ mathbf {x ‘} _ 1, \ ldots, \ mathbf {x’} _ 7x′1,…, x′7. Это означает, например , что входное векторное представление слова «хочу», то есть x′2 \ mathbf {x ‘} _ 2x′2, находится в прямой связи со словом «купить», я.е. x′4 \ mathbf {x ‘} _ 4x′4, но также со словом «I», т.е. x′1 \ mathbf {x’} _ 1x′1. Выходное векторное представление «хочу», , то есть x′′2 \ mathbf {x »} _ 2x′′2, таким образом, представляет собой более точный контекстный представление слова «хочу».

Давайте подробнее рассмотрим, как работает двунаправленное самовнимание. Каждый входной вектор x′i \ mathbf {x ‘} _ ix′i входной последовательности X′1: n \ mathbf {X’} _ {1: n} X′1: n блока кодера проецируется на ключевой вектор ki \ mathbf {k} _iki, вектор значений vi \ mathbf {v} _ivi и вектор запроса qi \ mathbf {q} _iqi (показаны ниже оранжевым, синим и фиолетовым соответственно) с помощью трех обучаемых весовых матриц Wq, Wv, Wk \ mathbf {W} _q, \ mathbf {W} _v, \ mathbf {W} _kWq, Wv, Wk:

qi = Wqx′i, \ mathbf {q} _i = \ mathbf {W} _q \ mathbf {x ‘} _ i, qi = Wq x′i, vi = Wvx′i, \ mathbf {v} _i = \ mathbf {W} _v \ mathbf {x ‘} _ i, vi = Wv x′i, ki = Wkx′i, \ mathbf {k} _i = \ mathbf {W} _k \ mathbf {x ‘} _ i, ki = Wk x′i, ∀i∈ {1,… n}.\ forall i \ in \ {1, \ ldots n \}. ∀i∈ {1,… n}.

Обратите внимание, что одинаковые весовые матрицы применяются к каждому входному вектору xi, ∀i∈ {i,…, n} \ mathbf {x} _i, \ forall i \ in \ {i, \ ldots, n \} xi, ∀i∈ {i,…, n}. После проецирования каждого входной вектор xi \ mathbf {x} _ixi в вектор запроса, ключа и значения, каждый вектор запроса qj, ∀j∈ {1,…, n} \ mathbf {q} _j, \ forall j \ in \ {1, \ ldots, n \} qj, ∀j∈ {1,…, n} равен в сравнении ко всем ключевым векторам k1,…, kn \ mathbf {k} _1, \ ldots, \ mathbf {k} _nk1,…, kn. Чем больше похожий один из ключевых векторов k1,… kn \ mathbf {k} _1, \ ldots \ mathbf {k} _nk1,… kn должен вектор запроса qj \ mathbf {q} _jqj, тем важнее соответствующий вектор значений vj \ mathbf {v} _jvj для выходного вектора x′′j \ mathbf {x »} _ jx′′j.\ intercal \ mathbf {q} _j) Softmax (K1: n⊺ qj) как показано в уравнении ниже. Для полного описания слой самовнимания, читателю рекомендуется взглянуть на это сообщение в блоге или исходная бумага.

Хорошо, это звучит довольно сложно. Проиллюстрируем двунаправленный слой самовнимания для одного из векторов запросов нашего пример выше. Для простоты предполагается, что наш примерный Декодер на базе трансформатора использует только одну концентрирующую головку конфиг.num_heads = 1 и что нормализация не применяется.

Слева показан ранее проиллюстрированный второй блок кодера. снова и справа, детальная визуализация двунаправленного Механизм самовнимания дан для второго входного вектора x′2 \ mathbf {x ‘} _ 2x′2, который соответствует входному слову «хочу». Вначале проецируются все входные векторы x′1,…, x′7 \ mathbf {x ‘} _ 1, \ ldots, \ mathbf {x’} _ 7x′1,…, x′7 к соответствующим векторам запросов q1,…, q7 \ mathbf {q} _1, \ ldots, \ mathbf {q} _7q1,…, q7 (вверху фиолетовым цветом показаны только первые три вектора запроса), значение векторы v1,…, v7 \ mathbf {v} _1, \ ldots, \ mathbf {v} _7v1,…, v7 (показаны синим) и ключ векторы k1,…, k7 \ mathbf {k} _1, \ ldots, \ mathbf {k} _7k1,…, k7 (показаны оранжевым).{\ intercal} K1: 7⊺ и q2 \ mathbf {q} _2q2, таким образом, делает его можно сравнить векторное представление «хочу» со всеми другими входные векторные представления «Я», «К», «Купить», «А», «Автомобиль», «EOS», чтобы веса самовнимания отражали важность каждого из другие входные векторные представления x′j, с j ≠ 2 \ mathbf {x ‘} _ j \ text {, с} j \ ne 2x′j, с j = 2 для уточненного представления x′′2 \ mathbf { x »} _ 2x′′2 слова «хочу».

Чтобы лучше понять значение двунаправленного слой самовнимания, предположим, что следующее предложение обрабатывается: « Дом красивый и удачно расположенный в центре города. где легко добраться на общественном транспорте ».Слово «это» относится к «дому», который находится на расстоянии 12 «позиций». В энкодеры на основе трансформатора, двунаправленный слой самовнимания выполняет одну математическую операцию, чтобы поместить входной вектор «дом» во взаимосвязи с входным вектором «оно» (сравните с первая иллюстрация этого раздела). Напротив, в RNN на основе кодировщик, слово, которое находится на расстоянии 12 «позиций», потребует не менее 12 математические операции, означающие, что в кодировщике на основе RNN линейный количество математических операций не требуется.Это делает его много кодировщику на основе RNN сложнее моделировать контекстные представления. Также становится ясно, что энкодер на основе трансформатора гораздо менее склонен к потере важной информации, чем основанный на RNN модель кодер-декодер, поскольку длина последовательности кодирования равна оставил то же самое, , т.е. len (X1: n) = len (X‾1: n) = n \ textbf {len} (\ mathbf {X} _ {1: n}) = \ textbf {len} (\ mathbf {\ overline {X}} _ {1: n}) = nlen (X1: n) = len (X1: n) = n, в то время как RNN сжимает длину из ∗ len ((X1: n) = n * \ textbf {len} ((\ mathbf {X} _ {1: n}) = n ∗ len ((X1: n) = n просто len (c) = 1 \ textbf {len} (\ mathbf {c}) = 1len (c) = 1, что очень затрудняет работу RNN для эффективного кодирования дальнодействующих зависимостей между входными словами.\ intercal \ mathbf {K} _ {1: n}) + \ mathbf {X ‘} _ {1: n}. X′′1: n = V1: n Softmax (Q1: n⊺ K1: n) + X′1: n.

Выходные данные X′′1: n = x′′1,…, x′′n \ mathbf {X »} _ {1: n} = \ mathbf {x »} _ 1, \ ldots, \ mathbf { x »} _ nX′′1: n = x′′1,…, x′′n вычисляется с помощью серии умножений матриц и softmax операция, которую можно эффективно распараллелить. Обратите внимание, что в Модель кодировщика на основе RNN, вычисление скрытого состояния c \ mathbf {c} c должно выполняться последовательно: вычисление скрытого состояния первый входной вектор x1 \ mathbf {x} _1x1, затем вычислить скрытое состояние второй входной вектор, который зависит от скрытого состояния первого скрытого вектор и др.Последовательный характер RNN не позволяет эффективно распараллеливание и делает их более неэффективными по сравнению с модели кодировщиков на базе трансформаторов на современном оборудовании GPU.

Отлично, теперь мы должны лучше понять а) как модели кодировщиков на основе трансформаторов эффективно моделируют контекстные представления и б) как они эффективно обрабатывают длинные последовательности входные векторы.

Теперь давайте напишем небольшой пример кодирующей части нашего MarianMT модели кодировщика-декодера для проверки того, что объясненная теория выполняется на практике.11 Подробное объяснение роли слоев прямой связи в трансформаторных моделях выходит за рамки этого ноутбука. это утверждал в Yun et. al, (2017) что уровни прямой связи имеют решающее значение для сопоставления каждого контекстного вектора x′i \ mathbf {x ‘} _ ix′i индивидуально с желаемым выходным пространством, которое самовнимание слой самостоятельно не справляется. Должен быть здесь отмечено, что каждый выходной токен x ′ \ mathbf {x ‘} x ′ обрабатывается тот же слой прямой связи. Подробнее читателю рекомендуется прочитать бумага.22 Однако входной вектор EOS необязательно добавлять к входная последовательность, но, как было показано, во многих случаях улучшает производительность. В отличие от 0-го BOS \ text {BOS} целевой вектор BOS декодер на основе трансформатора требуется как начальный входной вектор для предсказать первый целевой вектор.

  из трансформаторов импортных MarianMTModel, MarianTokenizer
импортный фонарик

tokenizer = MarianTokenizer.from_pretrained («Хельсинки-НЛП / opus-mt-en-de»)
модель = MarianMTModel.from_pretrained ("Хельсинки-НЛП / opus-mt-en-de")

вложения = модель.get_input_embeddings ()


input_ids = tokenizer («Я хочу купить машину», return_tensors = «pt»). input_ids


encoder_hidden_states = model.base_model.encoder (input_ids, return_dict = True) .last_hidden_state


input_ids_perturbed = tokenizer («Я хочу купить дом», return_tensors = «pt»). input_ids
encoder_hidden_states_perturbed = model.base_model.encoder (input_ids_perturbed, return_dict = True) .last_hidden_state


print (f "Длина вложений ввода {вложений (input_ids).форма [1]}. Длина encoder_hidden_states {encoder_hidden_states.shape [1]} ")


print ("Кодировка для` I` равна его возмущенной версии ?: ", torch.allclose (encoder_hidden_states [0, 0], encoder_hidden_states_perturbed [0, 0], atol = 1e-3))
  

Выходы:

  Длина вложений ввода 7. Длина encoder_hidden_states 7
    Кодировка для `I` равна его возмущенной версии ?: False
  

Сравниваем длину вложений входного слова, i.е. вложений (input_ids) , соответствующих X1: n \ mathbf {X} _ {1: n} X1: n, с длина encoder_hidden_states , соответствующая X‾1: n \ mathbf {\ overline {X}} _ {1: n} X1: n. Кроме того, мы переадресовали последовательность слов «Хочу купить машину» и слегка возмущенный вариант «Хочу купить дом «через кодировщик, чтобы проверить, есть ли первая выходная кодировка, соответствует «I», отличается, когда в входная последовательность.

Как и ожидалось, выходная длина вложений входного слова и кодировщика выходные кодировки, i.е. len (X1: n) \ textbf {len} (\ mathbf {X} _ {1: n}) len (X1: n) и len (X‾1: n) \ textbf {len} (\ mathbf { \ overline {X}} _ {1: n}) len (X1: n), равно. Во-вторых, это может быть отметил, что значения закодированного выходного вектора x‾1 = «I» \ mathbf {\ overline {x}} _ 1 = \ text {«I»} x1 = «I» отличаются, когда последнее слово меняется с «автомобиль» на «дом». Однако это не должно вызывать сюрприз, если кто-то понял двунаправленное самовнимание.

Кстати, модели с автокодированием , такие как BERT, имеют точно такие же Архитектура как на базе трансформатора модели кодировщика . Автокодирование модели используют эту архитектуру для массового самоконтроля предварительное обучение текстовых данных в открытом домене, чтобы они могли сопоставить любое слово последовательность к глубокому двунаправленному представлению. В Devlin et al. (2018) авторы показывают, что предварительно обученная модель BERT с одним классификационным слоем для конкретной задачи сверху может достичь результатов SOTA по одиннадцати задачам НЛП. Все автокодирование модели 🤗Трансформаторов можно найти здесь.

Декодер

Как упоминалось в разделе Кодер-декодер , преобразователь на основе преобразователя декодер определяет условное распределение вероятностей цели последовательность с учетом контекстуализированной кодирующей последовательности:

pθdec (Y1: m∣X‾1: n), p _ {\ theta_ {dec}} (\ mathbf {Y} _ {1: m} | \ mathbf {\ overline {X}} _ {1: n} ), pθdec (Y1: m ∣X1: n),

, который по правилу Байеса может быть разложен на продукт условного распределения следующего целевого вектора с учетом контекстуализированного кодирующая последовательность и все предыдущие целевые векторы:

pθdec (Y1: m∣X‾1: n) = ∏i = 1mpθdec (yi∣Y0: i − 1, X‾1: n).{m} p _ {\ theta_ {dec}} (\ mathbf {y} _i | \ mathbf {Y} _ {0: i-1}, \ mathbf {\ overline {X}} _ {1: n}). pθdec (Y1: m ∣X1: n) = i = 1∏m pθdec (yi ∣Y0: i − 1, X1: n).

Давайте сначала разберемся, как декодер на основе трансформатора определяет распределение вероятностей. Трансформаторный декодер представляет собой набор блоки декодера , за которыми следует плотный слой, «голова LM». Стек блоков декодера сопоставляет контекстуализированную последовательность кодирования X‾1: n \ mathbf {\ overline {X}} _ {1: n} X1: n и последовательность целевого вектора с добавлением вектор BOS \ text {BOS} BOS и переход к последнему целевому вектору i.е. Y0: i − 1 \ mathbf {Y} _ {0: i-1} Y0: i − 1, в закодированную последовательность целевых векторов Y‾0: i − 1 \ mathbf {\ overline {Y}} _ {0: i-1} Y0: i-1. Затем «голова LM» отображает закодированные последовательность целевых векторов Y‾0: i − 1 \ mathbf {\ overline {Y}} _ {0: i-1} Y0: i − 1 до a последовательность логит-векторов L1: n = l1,…, ln \ mathbf {L} _ {1: n} = \ mathbf {l} _1, \ ldots, \ mathbf {l} _nL1: n = l1,…, ln, тогда как размерность каждого логит-вектора li \ mathbf {l} _ili соответствует размер словарного запаса. {\ intercal} \ mathbf {\ overline {y}} _ {i-1 }) = Softmax (Wemb⊺ y i − 1) = Softmax (li).= \ text {Softmax} (\ mathbf {l} _i). = Softmax (li).

Собираем все вместе, чтобы смоделировать условное распределение последовательности целевых векторов Y1: m \ mathbf {Y} _ {1: m} Y1: m, целевые векторы Y1: m − 1 \ mathbf {Y} _ {1: m-1} Y1: m − 1 Предваряется специальным вектором BOS \ text {BOS} BOS, , то есть y0 \ mathbf {y} _0y0, сначала отображаются вместе с контекстуализированным кодирующая последовательность X‾1: n \ mathbf {\ overline {X}} _ {1: n} X1: n в вектор логита последовательность L1: m \ mathbf {L} _ {1: m} L1: m. Следовательно, каждый целевой вектор логита li \ mathbf {l} _ili преобразуется в условную вероятность распределение целевого вектора yi \ mathbf {y} _iyi с использованием softmax операция.{m} p _ {\ theta_ {dec}} (\ mathbf {y} _i | \ mathbf {Y} _ {0: i-1}, \ mathbf {\ overline {X}} _ {1: n}). pθdec (Y1: m ∣X1: n) = i = 1∏m pθdec (yi ∣Y0: i − 1, X1: n).

В отличие от трансформаторных энкодеров, в трансформаторных декодеры, закодированный выходной вектор y‾i \ mathbf {\ overline {y}} _ iy i должен быть хорошее представление следующего целевого вектора yi + 1 \ mathbf {y} _ {i + 1} yi + 1 и не самого входного вектора. Кроме того, закодированный выходной вектор y‾i \ mathbf {\ overline {y}} _ iy i должен быть обусловлен всеми контекстными кодирующая последовательность X‾1: n \ mathbf {\ overline {X}} _ {1: n} X1: n.22. Слой однонаправленного самовнимания. ставит каждый из своих входных векторов y′j \ mathbf {y ‘} _ jy′j только во взаимосвязь с все предыдущие входные векторы y′i, с i≤j \ mathbf {y ‘} _ i, \ text {with} i \ le jy′i, с i≤j для все j∈ {1,…, n} j \ in \ {1, \ ldots, n \} j∈ {1,…, n} для моделирования распределения вероятностей следующие целевые векторы. Слой перекрестного внимания помещает каждый из входные векторы y′′j \ mathbf {y »} _ jy′′j во взаимосвязи со всеми контекстуализированными кодирующие векторы X‾1: n \ mathbf {\ overline {X}} _ {1: n} X1: n, чтобы обусловить распределение вероятностей следующих целевых векторов на входе кодировщик тоже.

Хорошо, давайте визуализируем декодер на основе трансформатора для нашего Пример перевода с английского на немецкий.

Мы видим, что декодер отображает вход Y0: 5 \ mathbf {Y} _ {0: 5} Y0: 5 «BOS», «Ich», «will», «ein», «Auto», «kaufen» (показаны светло-красным) вместе с контекстуализированной последовательностью «я», «хочу», «к», «купить», «а», «автомобиль», «EOS», т.е. X‾1: 7 \ mathbf {\ overline {X}} _ {1: 7} X1: 7 (показано темно-зеленым) в векторы логита L1: 6 \ mathbf {L} _ {1: 6} L1: 6 (показано на темно-красный).

Применение операции softmax к каждому l1, l2,…, l5 \ mathbf {l} _1, \ mathbf {l} _2, \ ldots, \ mathbf {l} _5l1, l2,…, l5 может таким образом определить условные распределения вероятностей:

pθdec (y∣BOS, X‾1: 7), p _ {\ theta_ {dec}} (\ mathbf {y} | \ text {BOS}, \ mathbf {\ overline {X}} _ {1: 7} ), pθdec (y∣BOS, X1: 7), pθdec (y∣BOS Ich, X‾1: 7), p _ {\ theta_ {dec}} (\ mathbf {y} | \ text {BOS Ich}, \ mathbf {\ overline {X}} _ {1: 7 }), pθdec (y∣BOS Ich, X1: 7), …, \ Ldots,…, pθdec (y∣BOS Ich будет ein Auto kaufen, X‾1: 7). p _ {\ theta_ {dec}} (\ mathbf {y} | \ text {BOS Ich будет ein Auto kaufen}, \ mathbf {\ overline {X}} _ {1: 7}).pθdec (y∣BOS Ich будет ein Auto kaufen, X1: 7).

Общая условная вероятность:

pθdec (Ich будет ein Auto kaufen EOS∣X‾1: n) p _ {\ theta_ {dec}} (\ text {Ich будет ein Auto kaufen EOS} | \ mathbf {\ overline {X}} _ {1: n }) pθdec (Ich будет ein Auto kaufen EOS∣X1: n)

Следовательно,

может быть вычислено как следующее произведение:

pθdec (Ich∣BOS, X‾1: 7) ×… × pθdec (EOS∣BOS Ich будет ein Auto kaufen, X‾1: 7). p _ {\ theta_ {dec}} (\ text {Ich} | \ text {BOS}, \ mathbf {\ overline {X}} _ {1: 7}) \ times \ ldots \ times p _ {\ theta_ {dec} } (\ text {EOS} | \ text {BOS Ich будет ein Auto kaufen}, \ mathbf {\ overline {X}} _ {1: 7}).pθdec (Ich∣BOS, X1: 7) ×… × pθdec (EOS∣BOS Ich будет использовать Auto kaufen, X1: 7).

В красном поле справа показан блок декодера для первых трех целевые векторы y0, y1, y2 \ mathbf {y} _0, \ mathbf {y} _1, \ mathbf {y} _2y0, y1, y2. В нижнем части, механизм однонаправленного самовнимания проиллюстрирован и в в центре проиллюстрирован механизм перекрестного внимания. Давай сначала сосредоточьтесь на однонаправленном самовнимании.

Как при двунаправленном самовнимании, при однонаправленном самовнимании, векторы запросов q0,…, qm − 1 \ mathbf {q} _0, \ ldots, \ mathbf {q} _ {m-1} q0,…, qm − 1 (показаны на фиолетовый внизу), ключевые векторы k0,…, km − 1 \ mathbf {k} _0, \ ldots, \ mathbf {k} _ {m-1} k0,…, km − 1 (показаны оранжевым ниже), и векторы значений v0,…, vm − 1 \ mathbf {v} _0, \ ldots, \ mathbf {v} _ {m-1} v0,…, vm − 1 (показаны на синий ниже) проецируются из соответствующих входных векторов y′0,…, y′m − 1 \ mathbf {y ‘} _ 0, \ ldots, \ mathbf {y’} _ {m-1} y′0,…, y′m −1 (показано светло-красным цветом ниже).Однако при однонаправленном самовнимании каждый вектор запроса qi \ mathbf {q} _iqi сравнивается только с его соответствующим ключевым вектором и все предыдущие, а именно k0,…, ki \ mathbf {k} _0, \ ldots, \ mathbf {k} _ik0,…, ki, чтобы получить соответствующие гири . Это предотвращает включение любой информации в выходной вектор y′′j \ mathbf {y »} _ jy′′j (показан темно-красным ниже) о следующем входном векторе yi, с i> j \ mathbf {y} _i, \ text {с} i> jyi, с i> j для все j∈ {0,…, m − 1} j \ in \ {0, \ ldots, m — 1 \} j∈ {0,…, m − 1}.\ intercal \ mathbf {q} _i) + \ mathbf {y ‘} _ i. y′′i = V0: i Softmax (K0: i⊺ qi) + y′i.

Обратите внимание, что диапазон индекса векторов ключей и значений равен 0: i0: i0: i вместо 0: m − 10: m-10: m − 1, который будет диапазоном ключевых векторов в двунаправленное самовнимание.

Давайте проиллюстрируем однонаправленное самовнимание для входного вектора y′1 \ mathbf {y ‘} _ 1y′1 для нашего примера выше.

Как видно, y′′1 \ mathbf {y »} _ 1y′′1 зависит только от y′0 \ mathbf {y ‘} _ 0y′0 и y′1 \ mathbf {y’} _ 1y′1 .Поэтому положим векторное представление слова «Ich», т.е. y′1 \ mathbf {y ‘} _ 1y′1 только в отношении самого себя и Целевой вектор «BOS», то есть y′0 \ mathbf {y ‘} _ 0y′0, но не с векторное представление слова «будет», т.е. y′2 \ mathbf {y ‘} _ 2y′2.

Итак, почему так важно, чтобы мы использовали однонаправленное самовнимание в декодер вместо двунаправленного самовнимания? Как указано выше, декодер на основе трансформатора определяет отображение из последовательности ввода вектор Y0: m − 1 \ mathbf {Y} _ {0: m-1} Y0: m − 1 в логиты, соответствующие следующему входные векторы декодера, а именно L1: m \ mathbf {L} _ {1: m} L1: m.В нашем примере это означает например , что отображен входной вектор y1 \ mathbf {y} _1y1 = «Ich» в вектор логита l2 \ mathbf {l} _2l2, который затем используется для прогнозирования входной вектор y2 \ mathbf {y} _2y2. Таким образом, если y′1 \ mathbf {y ‘} _ 1y′1 будет иметь доступ к следующим входным векторам Y′2: 5 \ mathbf {Y ‘} _ {2: 5} Y′2: 5, декодер будет просто скопируйте векторное представление «воли», , т.е. y′2 \ mathbf {y ‘} _ 2y′2, чтобы получить его выход y′′1 \ mathbf {y’ ‘} _ 1y′′1. Это было бы перенаправлен на последний уровень, так что закодированный выходной вектор y‾1 \ mathbf {\ overline {y}} _ 1y 1 по существу просто соответствовал бы векторное представление y2 \ mathbf {y} _2y2.

Это явно невыгодно, поскольку декодер на основе трансформатора никогда не учись предсказывать следующее слово, учитывая все предыдущие слова, а просто скопируйте целевой вектор yi \ mathbf {y} _iyi через сеть в y‾i − 1 \ mathbf {\ overline {y}} _ {i-1} y i − 1 для всех i∈ {1,… , m} i \ in \ {1, \ ldots, m \} i∈ {1,…, m}. В чтобы определить условное распределение следующего целевого вектора, распределение не может быть обусловлено следующим целевым вектором. Нет смысла предсказывать yi \ mathbf {y} _iyi из p (y∣Y0: i, X‾) p (\ mathbf {y} | \ mathbf {Y} _ {0: i}, \ mathbf {\ overline {X}}) p (y∣Y0: i, X), поскольку распределение обусловлено целевым вектором, который предполагается модель.Следовательно, однонаправленная архитектура самовнимания позволяет нам определить вероятностное распределение причинно-следственных связей , которое необходимо для эффективного моделирования условного распределения следующих целевой вектор.

Отлично! Теперь мы можем перейти к слою, который соединяет кодировщик и декодер — механизм перекрестного внимания !

Слой перекрестного внимания принимает в качестве входных данных две векторные последовательности: выходы однонаправленного слоя самовнимания, i.е. Y′′0: m − 1 \ mathbf {Y »} _ {0: m-1} Y′′0: m − 1 и контекстуализированные векторы кодирования X‾1: n \ mathbf {\ overline {X }} _ {1: n} X1: n. Как и в слое самовнимания, запрос векторы q0,…, qm − 1 \ mathbf {q} _0, \ ldots, \ mathbf {q} _ {m-1} q0,…, qm − 1 являются проекциями выходные векторы предыдущего слоя, , то есть Y′′0: m − 1 \ mathbf {Y »} _ {0: m-1} Y′′0: m − 1. Однако векторы ключа и значения k0,…, km − 1 \ mathbf {k} _0, \ ldots, \ mathbf {k} _ {m-1} k0,…, km − 1 и v0,…, vm −1 \ mathbf {v} _0, \ ldots, \ mathbf {v} _ {m-1} v0,…, vm − 1 — проекции контекстуализированные векторы кодирования X‾1: n \ mathbf {\ overline {X}} _ {1: n} X1: n.Имея определены векторы ключа, значения и запроса, вектор запроса qi \ mathbf {q} _iqi затем сравниваются с все ключевых вектора и используется соответствующая оценка для взвешивания соответствующих векторов значений, как и в случае двунаправленное самовнимание, чтобы дать выходной вектор y ′ ′ ′ i \ mathbf {y » ‘} _ iy ′ ′ ′ i для всех i∈0,…, m − 1i \ in {0, \ ldots , m-1} i∈0,…, m − 1. \ intercal \ mathbf {q} _i) + \ mathbf {y »} _ я.y ′ ′ ′ i = V1: n Softmax (K1: n⊺ qi) + y′′i.

Обратите внимание, что диапазон индекса векторов ключей и значений равен 1: n1: n1: n соответствует количеству контекстуализированных векторов кодирования.

Давайте визуализируем механизм перекрестного внимания Давайте для ввода вектор y′′1 \ mathbf {y »} _ 1y′′1 для нашего примера выше.

Мы видим, что вектор запроса q1 \ mathbf {q} _1q1 (показан фиолетовым цветом) равен получено из y′′1 \ mathbf {y »} _ 1y′′1 (показано красным) и, следовательно, полагается на вектор представление слова «Ич».Вектор запроса q1 \ mathbf {q} _1q1 затем сравнивается с ключевыми векторами k1,…, k7 \ mathbf {k} _1, \ ldots, \ mathbf {k} _7k1,…, k7 (показаны желтым цветом), соответствующими представление контекстного кодирования всех входных векторов кодировщика X1: n \ mathbf {X} _ {1: n} X1: n = «Я хочу купить автомобиль EOS». Это ставит вектор представление «Ich» в прямую связь со всеми входами кодировщика векторы. Наконец, веса внимания умножаются на значение векторы v1,…, v7 \ mathbf {v} _1, \ ldots, \ mathbf {v} _7v1,…, v7 (показаны бирюзовым) в вывести в дополнение к входному вектору y′′1 \ mathbf {y »} _ 1y′′1 выходной вектор y ′ ′ ′ 1 \ mathbf {y » ‘} _ 1y ′ ′ ′ 1 (показан темно-красным ).

Итак, интуитивно, что именно здесь происходит? Каждый выходной вектор y ′ ′ ′ i \ mathbf {y » ‘} _ iy ′ ′ ′ i является взвешенной суммой всех проекций значений входы кодировщика v1,…, v7 \ mathbf {v} _ {1}, \ ldots, \ mathbf {v} _7v1,…, v7 плюс вход вектор y′′i \ mathbf {y »} _ iy′′i ( см. формулу , проиллюстрированную выше). Ключ механизм понимания следующий: в зависимости от того, насколько похож проекция запроса входного вектора декодера qi \ mathbf {q} _iqi на проекция ключа входного вектора кодировщика kj \ mathbf {k} _jkj, тем более важна проекция значения входного вектора кодировщика vj \ mathbf {v} _jvj.В общих чертах это означает, что чем больше «родственный» входное представление декодера относится к входному представлению кодировщика, больше влияет ли входное представление на выход декодера представление.

Круто! Теперь мы можем видеть, как эта архитектура хорошо обрабатывает каждый вывод. вектор y ′ ′ ′ i \ mathbf {y » ‘} _ iy ′ ′ ′ i на взаимодействии между входом кодировщика векторы X‾1: n \ mathbf {\ overline {X}} _ {1: n} X1: n и входной вектор y′′i \ mathbf {y »} _ iy′′i. Еще одно важное наблюдение на этом этапе заключается в том, что архитектура полностью не зависит от количества nnn контекстуализированные векторы кодирования X‾1: n \ mathbf {\ overline {X}} _ {1: n} X1: n, на которых выходной вектор y ′ ′ ′ i \ mathbf {y » ‘} _ iy ′ ′ ′ i обусловлен.{\ text {cross}} _ {v} Wvcross для получения ключевых векторов k1,…, kn \ mathbf {k} _1, \ ldots, \ mathbf {k} _nk1,…, kn и векторов значений v1 ,…, Vn \ mathbf {v} _1, \ ldots, \ mathbf {v} _nv1,…, vn соответственно используются всеми позиции 1,…, n1, \ ldots, n1,…, n и все векторы значений v1,…, vn \ mathbf {v} _1, \ ldots, \ mathbf {v} _n v1,…, vn суммируются к одному взвешенный усредненный вектор. Теперь также становится очевидным, почему декодер на базе трансформатора не страдает зависимостью от дальнего действия Проблема, от которой страдает декодер на основе RNN.Потому что каждый декодер логит вектор напрямую зависит от каждого отдельного закодированного выходного вектора, количество математических операций для сравнения первого закодированного выходной вектор и последний логит-вектор декодера составляют по существу только один.

В заключение, однонаправленный слой самовнимания отвечает за согласование каждого выходного вектора со всеми предыдущими входными векторами декодера а текущий вектор ввода и слой перекрестного внимания — отвечает за дальнейшее кондиционирование каждого выходного вектора на всех закодированных входных данных. векторы.22 Опять же, подробное объяснение роли прямого игра слоев в моделях на основе трансформатора выходит за рамки этого ноутбук. Это утверждается в Yun et. аль, (2017), что слои с прямой связью имеют решающее значение для сопоставления каждого контекстного вектора x′i \ mathbf {x ‘} _ ix′i индивидуально в желаемое пространство вывода, которое слой самовнимания не может справиться самостоятельно. Здесь следует отметить, что каждый выходной токен x ‘\ mathbf {x’} x ‘обрабатывается одним и тем же уровнем прямой связи. Для большего Подробности, читателю рекомендуется прочитать статью.

  из трансформаторов импортных MarianMTModel, MarianTokenizer
импортный фонарик

tokenizer = MarianTokenizer.from_pretrained («Хельсинки-НЛП / opus-mt-en-de»)
model = MarianMTModel.from_pretrained ("Хельсинки-НЛП / opus-mt-en-de")
вложения = модель.get_input_embeddings ()


input_ids = tokenizer («Я хочу купить машину», return_tensors = «pt»). input_ids


decoder_input_ids = tokenizer (" Ich will ein", return_tensors = "pt", add_special_tokens = False) .input_ids


decoder_output_vectors = модель.base_model.decoder (decoder_input_ids) .last_hidden_state


lm_logits = torch.nn.functional.linear (decoder_output_vectors, embeddings.weight, bias = model.final_logits_bias)


decoder_input_ids_perturbed = tokenizer (" Ich will das", return_tensors = "pt", add_special_tokens = False) .input_ids
decoder_output_vectors_perturbed = model.base_model.decoder (decoder_input_ids_perturbed) .last_hidden_state
lm_logits_perturbed = torch.nn.functional.linear (decoder_output_vectors_perturbed, embeddings.weight, bias = model.final_logits_bias)


print (f "Форма входных векторов декодера {embeddings (decoder_input_ids) .shape}. Форма логитов декодера {lm_logits.shape}")


print ("Кодировка для` Ich` равна его измененной версии ?: ", torch.allclose (lm_logits [0, 0], lm_logits_perturbed [0, 0], atol = 1e-3))
  

Выход:

  Форма входных векторов декодера torch.Size ([1, 5, 512]). Форма декодера logits torch.Size ([1, 5, 58101])
    Кодировка для `Ich` равна его измененной версии ?: True
  

Мы сравниваем выходную форму вложений входных слов декодера, i.е. вложений (decoder_input_ids) (соответствует Y0: 4 \ mathbf {Y} _ {0: 4} Y0: 4, здесь соответствует BOS, а «Ich will das» токенизируется до 4 токены) с размерностью lm_logits (соответствует L1: 5 \ mathbf {L} _ {1: 5} L1: 5). Также мы передали последовательность слов « Ich will das» и слегка возмущенная версия « Ich will das» вместе с encoder_output_vectors через кодировщик, чтобы проверить, есть ли второй lm_logit , соответствующий «Ich», отличается, когда только последнее слово изменено во входной последовательности («ein» -> «das»).

Как и ожидалось, выходные формы вложений входных слов декодера и lm_logits, , т.е. размерность Y0: 4 \ mathbf {Y} _ {0: 4} Y0: 4 и L1: 5 \ mathbf {L} _ {1: 5} L1: 5 в последнем измерение. В то время как длина последовательности такая же (= 5), размерность входа декодера вложение слов соответствует model.config.hidden_size , тогда как размерность lm_logit соответствует размеру словаря model.config.vocab_size , как описано выше.Во-вторых, можно отметить что значения закодированного выходного вектора l1 = «Ich» \ mathbf {l} _1 = \ text {«Ich»} l1 = «Ich» совпадают при изменении последнего слова от «эйн» до «дас». Однако это не должно вызывать удивления, если человек понял однонаправленное самовнимание.

В заключение отметим, что модели с авторегрессией , такие как GPT2, имеют та же архитектура, что и на базе трансформатора декодеры модели если один удаляет слой перекрестного внимания, потому что автономный авторегрессивный модели не привязаны к каким-либо выходам энкодера.Так авторегрессивный модели по сути такие же, как модели с автоматическим кодированием , но заменяют двунаправленное внимание с однонаправленным вниманием. Эти модели также можно предварительно обучить работе с массивными текстовыми данными в открытом домене, чтобы показать впечатляющая производительность в задачах генерации естественного языка (NLG). В Radford et al. (2019), авторы показывают, что предварительно обученная модель GPT2 может достичь SOTA или закрыть к результатам SOTA по разнообразным задачам NLG без особой настройки. Все авторегрессивные модели 🤗Трансформаторов можно найти здесь.

Хорошо, вот и все! Теперь вы должны хорошо понимать модели кодеров-декодеров на базе трансформатора и как их использовать с 🤗Библиотека трансформеров.

Большое спасибо Виктору Саню, Саше Рашу, Сэму Шлейферу, Оливеру Остранду, Теду Московицу и Кристиану Кивику за ценные отзывы.

Приложение

Как упоминалось выше, следующий фрагмент кода показывает, как можно программировать простой метод генерации кодировщика-декодера на базе трансформатора модели.Здесь мы реализуем простой метод декодирования жадного , используя torch.argmax для выборки целевого вектора.

  из трансформаторов импортных MarianMTModel, MarianTokenizer
импортный фонарик

tokenizer = MarianTokenizer.from_pretrained («Хельсинки-НЛП / opus-mt-en-de»)
model = MarianMTModel.from_pretrained ("Хельсинки-НЛП / opus-mt-en-de")


input_ids = tokenizer («Я хочу купить машину», return_tensors = «pt»). input_ids


decoder_input_ids = tokenizer ("", add_special_tokens = False, return_tensors = "pt").input_ids

assert decoder_input_ids [0, 0] .item () == model.config.decoder_start_token_id, "` decoder_input_ids` должен соответствовать `model.config.decoder_start_token_id`"




output = model (input_ids, decoder_input_ids = decoder_input_ids, return_dict = True)


encoded_sequence = (outputs.encoder_last_hidden_state,)

lm_logits = outputs.logits


next_decoder_input_ids = torch.argmax (lm_logits [:, -1:], ось = -1)


decoder_input_ids = torch.cat ([decoder_input_ids, next_decoder_input_ids], axis = -1)




lm_logits = модель (Нет, encoder_outputs = encoded_sequence, decoder_input_ids = decoder_input_ids, return_dict = True).логиты


next_decoder_input_ids = torch.argmax (lm_logits [:, -1:], ось = -1)


decoder_input_ids = torch.cat ([decoder_input_ids, next_decoder_input_ids], axis = -1)


lm_logits = модель (Нет, encoder_outputs = encoded_sequence, decoder_input_ids = decoder_input_ids, return_dict = True) .logits
next_decoder_input_ids = torch.argmax (lm_logits [:, -1:], ось = -1)
decoder_input_ids = torch.cat ([decoder_input_ids, next_decoder_input_ids], axis = -1)


print (f "Создано на данный момент: {tokenizer.decode (decoder_input_ids [0], skip_special_tokens = True)}")


  

Выходы:

  Сгенерировано пока: Ich Ich
  

В этом примере кода мы показываем именно то, что было описано ранее.Мы передайте ввод «Я хочу купить машину» вместе с BOS \ text {BOS} BOS токен модели кодировщика-декодера и выборка из первого логита l1 \ mathbf {l} _1l1 (, т.е. первая строка lm_logits ). Настоящим наша выборка стратегия проста: жадно выбрать следующий входной вектор декодера, который имеет наибольшую вероятность. Затем авторегрессивным образом мы передаем выбранный входной вектор декодера вместе с предыдущими входными данными для модель кодировщика-декодера и снова образец.Повторяем это в третий раз. В результате модель сгенерировала слова «Ич Ич». Первое слово точное! Второе слово не очень хорошее. Мы можем видеть здесь, что хороший метод декодирования является ключом к успешной генерации последовательности из заданного модельного распределения.

На практике используются более сложные методы декодирования для выборки lm_logits . Большинство из них покрыто это сообщение в блоге.

Декодирование AI и NLP для издателей

В кругах цифровых издателей сегодня — когда у вас есть такие термины, как: искусственный интеллект (AI) и обработка естественного языка (NLP), которые так часто используются, вам будет полезно познакомиться с ними и, по сути, найти время для их изучения. в режиме реального времени для потенциальных вариантов использования в издательском пространстве.

Благодаря сложным рабочим процессам, характеризующим большую часть издательской экосистемы, возможности ИИ являются весьма многообещающими в той степени, в которой они могут фактически автоматизировать значительную часть этих рабочих процессов и создать значительную ценность для издательского бизнеса, авторов и исследовательского сообщества.

В этом блоге давайте расскажем, как ИИ и НЛП приносят пользу в издательском пространстве.

Расширение возможностей редакторов в принятии решений

AI расширяет возможности человека, помогая машинам определять и создавать новые модели.Он включает в себя разработку алгоритмов, которые позволяют машинам быстро обрабатывать большие объемы данных, распознавать согласованные закономерности в этих данных, принимать решения, основанные на понимании, и предоставлять рекомендации на основе этого анализа. По сути, ИИ может максимально упростить процесс публикации.

Исправление мелких ошибок

Благодаря встроенным технологиям искусственного интеллекта и НЛП инструменты цифрового редактирования могут анализировать каждую попавшуюся статью с помощью предустановленных правил грамматики и форматирования.После анализа содержания технология помогает оценить, является ли статья хорошего качества для публикации. Технология автоматически исправляет мелкие ошибки, такие как грамматические и пунктуационные, и помечает более сложные проблемы, которые могут потребовать внимания редактора. Представленные журналы качественные и позволяют сразу перейти к этапу набора и составления.

Автоматизация рабочих процессов

AI может интеллектуально автоматизировать рабочие процессы, чтобы сократить время публикации, улучшить редакционное качество, повысить удобство работы авторов и повысить оперативность научных исследований.Искусственный интеллект и НЛП могут быть использованы для создания сенсации в процессе рецензирования путем оценки рукописей, извлечения ключевых терминов для определения оригинальности и сопоставления взаимосвязей, проверки качества языка, выявления плагиата и даже сопоставления статей с журналами и рецензентами.

Ускорение внутренних производственных процессов и сокращение времени выполнения заказа

Поскольку производственные процессы отнимают очень много времени и существует постоянный спрос на более быстрые, дешевые и короткие сроки выполнения работ, ИИ может увеличить скорость процесса редактирования и лучше обслуживать авторов благодаря более своевременной публикации.ИИ / НЛП стали незаменимыми, начиная с просеивания большого объема входящего контента и заканчивая пометкой контента и аномалиями процессов.

NLP включает грамматический анализ в машинное обучение. Компьютерная программа обучена распознавать существительное, глагол и объект в предложении, а также понимать структуру слов, чтобы различать их значение. С помощью технологии NLP издатели могут автоматизировать простые задачи редактирования и форматирования и сосредоточиться на более сложных задачах.

Сокращение длительных циклов проверки

За счет уменьшения количества точек соприкосновения, через которые должен проходить документ, ИИ и НЛП вместе могут увеличить скорость прохождения через систему, используя алгоритмы, вместо того, чтобы ждать циклов ручного просмотра, которые обычно длительны и требуют много времени.Это сокращает ручное редакционное вмешательство и, возможно, даже может уменьшить элемент человеческой предвзятости.

Итак, каков последний результат?

Есть два способа увидеть преимущества, которые AI / NLP может принести издательскому столу. С одной стороны, их можно использовать для оптимизации рабочих процессов публикации и, таким образом, для улучшения опыта авторов, поскольку решения, основанные на данных, всегда берут верх над выводами из первых рук. С другой стороны, издатели рассматривают ИИ и НЛП как полезные технологические инструменты, которые могут резко снизить затраты и повысить эффективность работы, одновременно улучшая эффективность рабочего процесса публикации и качество продукции.

Стратегии декодирования для улучшения машинного перевода с низким уровнем ресурсов — Корейский университет

TY — JOUR

T1 — Стратегии декодирования для улучшения машинного перевода с низким уровнем ресурсов

AU — Park, Chanjun

AU — Yang, Yeongwook

AU — Park , Kinam

AU — Lim, Heuiseok

N1 — Информация о финансировании: Финансирование: Эта работа была поддержана грантом Института планирования и оценки информационных и коммуникационных технологий (IITP), финансируемым Министерством науки и ИКТ Кореи (MSIT) (No.2020-0-00368, Нейросимволическая модель для получения знаний и методов вывода), и это исследование было поддержано MSIT, Корея, в рамках программы поддержки ITRC (Центр исследований информационных технологий) (IITP-2020-2018-0- 01405) под надзором IITP (Институт планирования и оценки информационных и коммуникационных технологий). Информация о финансировании: Эта работа была поддержана грантом Института планирования и оценки информационных и коммуникационных технологий (IITP), финансируемым Министерством науки и ИКТ Кореи (MSIT) (No.2020-0-00368, Нейросимволическая модель для получения знаний и методов вывода), и это исследование было поддержано MSIT, Корея, в рамках программы поддержки ITRC (Центр исследований информационных технологий) (IITP-2020-2018-0- 01405) под надзором IITP (Институт планирования и оценки информационных и коммуникационных технологий). Благодарности: спасибо AI Hub за создание отличного набора данных. Я очень благодарен моему другу Ёнсу Ли (Университет Сонгюнкван) за помощь с исправлениями английского языка.Авторские права издателя: © 2020 Авторы. Лицензиат MDPI, Базель, Швейцария.

PY — 2020/10

Y1 — 2020/10

N2 — Предварительная обработка и постобработка являются важными аспектами прикладного программного обеспечения обработки естественного языка (NLP). Предварительная обработка в нейронном машинном переводе (NMT) включает в себя токенизацию подслов, чтобы облегчить проблему неизвестных слов, параллельную фильтрацию корпуса, которая фильтрует только данные, подходящие для обучения, и увеличение данных, чтобы гарантировать, что корпус содержит достаточный контент.Постобработка включает автоматическое пост-редактирование и применение различных стратегий во время декодирования в процессе перевода. Самые последние исследования НЛП основаны на подходе предтренировочной настройки (PFA). Однако, когда малые и средние организации с недостаточным оборудованием пытаются предоставить услуги NLP, часто возникают проблемы с пропускной способностью и памятью. Эти трудности возрастают при использовании PFA для обработки языков с низким уровнем ресурсов, поскольку PFA требует больших объемов данных, а данных для языков с низким уровнем ресурсов часто недостаточно.Используя текущую предпосылку исследования о том, что производительность модели NMT можно повысить с помощью различных стратегий предварительной и постобработки без изменения модели, мы применили различные стратегии декодирования к корейско-английскому NMT, основанному на языковой паре с ограниченными ресурсами. Путем сравнительных экспериментов мы доказали, что производительность перевода можно повысить без изменения модели. Мы экспериментально исследовали, как производительность изменяется в ответ на изменение размера луча и блокировку n-грамм, и были ли характеристики улучшены при применении штрафа по длине.Результаты показали, что различные стратегии декодирования повышают производительность и хорошо сравниваются с предыдущими корейско-английскими подходами NMT. Следовательно, предлагаемая методология может улучшить производительность моделей NMT без использования PFA; это открывает новые возможности для повышения производительности машинного перевода.

AB — Предварительная обработка и постобработка являются важными аспектами прикладного программного обеспечения для обработки естественного языка (NLP). Предварительная обработка в нейронном машинном переводе (NMT) включает в себя токенизацию подслов, чтобы облегчить проблему неизвестных слов, параллельную фильтрацию корпуса, которая фильтрует только данные, подходящие для обучения, и увеличение данных, чтобы гарантировать, что корпус содержит достаточный контент.Постобработка включает автоматическое пост-редактирование и применение различных стратегий во время декодирования в процессе перевода. Самые последние исследования НЛП основаны на подходе предтренировочной настройки (PFA). Однако, когда малые и средние организации с недостаточным оборудованием пытаются предоставить услуги NLP, часто возникают проблемы с пропускной способностью и памятью. Эти трудности возрастают при использовании PFA для обработки языков с низким уровнем ресурсов, поскольку PFA требует больших объемов данных, а данных для языков с низким уровнем ресурсов часто недостаточно.Используя текущую предпосылку исследования о том, что производительность модели NMT можно повысить с помощью различных стратегий предварительной и постобработки без изменения модели, мы применили различные стратегии декодирования к корейско-английскому NMT, основанному на языковой паре с ограниченными ресурсами. Путем сравнительных экспериментов мы доказали, что производительность перевода можно повысить без изменения модели. Мы экспериментально исследовали, как производительность изменяется в ответ на изменение размера луча и блокировку n-грамм, и были ли характеристики улучшены при применении штрафа по длине.Результаты показали, что различные стратегии декодирования повышают производительность и хорошо сравниваются с предыдущими корейско-английскими подходами NMT. Следовательно, предлагаемая методология может улучшить производительность моделей NMT без использования PFA; это открывает новые возможности для повышения производительности машинного перевода.

кВт — стратегии декодирования

кВт — эффективность обработки

кВт — нейронный машинный перевод с корейского на английский

кВт — нейронный машинный перевод

кВт — постобработка

кВт — трансформатор

UR — http: // www .scopus.com/inward/record.url?scp=850903&partnerID=8YFLogxK

U2 — 10.3390 / electronics62

DO — 10.3390 / electronics62

M3 — Артикул

AN3 — 963902:

1

EP — 15

JO — Electronics (Швейцария)

JF — Electronics (Швейцария)

SN — 2079-9292

IS — 10

M1 — 1562

ER —

Decoding API | Текст | TensorFlow

Обзор

В недавнем прошлом было проведено много исследований в области генерации языков с помощью авторегрессивных моделей.При авторегрессивной языковой генерации распределение вероятностей токена на временном шаге K зависит от предсказаний токенов модели до этапа K-1 . Для этих моделей стратегии декодирования, такие как поиск луча, жадный, Top-p и Top-k, являются критическими компонентами модели и в значительной степени влияют на стиль / характер сгенерированного выходного токена на заданном временном шаге K .

Например, Поиск луча снижает риск пропуска скрытых токенов высокой вероятности на сохранение наиболее вероятного числа гипотез на каждом временном шаге и, в конечном итоге, выбор гипотезы с наибольшей общей вероятностью.Мюррей и др. (2018) и Ян и др. (2018) показывают, что поиск луча хорошо работает в задачах машинного перевода. Обе стратегии Beam search и Greedy могут генерировать повторяющиеся токены.

Fan et. al (2018) представил Top-K выборка , в которой K наиболее вероятных токенов отфильтрованы, а масса вероятности перераспределяется только между этими токенами K.

Ari Holtzman et. al (2019) представил Выборка Top-p , которая выбирает из наименьшего возможного набора токенов с совокупная вероятность, которая складывается с вероятностью p .Тогда вероятностная масса равна распространяется среди этого набора. Таким образом, размер набора токенов может динамически увеличиваются и уменьшаются. Top-p, Top-k обычно используются в таких задачах, как создание историй.

Decoding API предоставляет интерфейс для экспериментов с различными стратегиями декодирования на авторегрессионных моделях.

  1. Следующие стратегии выборки представлены в sampling_module.py, который наследуется от базового класса Decoding:

  2. Поиск луча предоставляется в beam_search.ру. гитхаб

Настройка

  pip install -q -U tenorflow-text 
 
  pip install -q tf-models-nightly 
 
  импортировать numpy как np
импортировать matplotlib.pyplot как plt

импортировать тензорный поток как tf

из официального импорта nlp
from official.nlp.modeling.ops import sampling_module
from official.nlp.modeling.ops import beam_search
  

Инициализировать модуль выборки в TF-NLP.

  • symbols_to_logits_fn : используйте это замыкание, чтобы вызвать модель для прогнозирования логитов для шага индекса + 1 .Входы и выходы для этого закрытия следующие:
  Аргументы:
  1] ids: Текущие декодированные последовательности. int тензор с формой (batch_size, index + 1 или 1, если padded_decode имеет значение True)],
  2] index [скаляр]: текущий шаг декодирования,
  3] cache [вложенный словарь тензоров]: используется только для более быстрого декодирования для хранения предварительно вычисленных скрытых состояний для ключей и значений. Дополнительные объяснения в ячейке ниже.
Возврат:
  1] тензор для логитов следующего шага [batch_size, vocab]
  2] updated_cache [вложенный словарь тензоров]. 

Кэш используется для более быстрого декодирования. Вот эталонная реализация вышеуказанного закрытия.

  • length_normalization_fn : Используйте это замыкание для возврата параметра нормализации длины.
  Аргументы:
  1] length: скаляр для индекса декодированного шага.
  2] dtype: тип данных выходного тензора
Возврат:
  1] значение коэффициента нормализации длины.
  
  • vocab_size : Размер выходного словаря.

  • max_decode_length : Скаляр для общего количества шагов декодирования.

  • eos_id : Декодирование остановится, если все выходные декодированные идентификаторы в пакете имеют этот eos_id.

  • padded_decode : Установите значение True, если работает на TPU. Тензоры дополняются до max_decoding_length, если это True.

  • top_k : top_k включен, если это значение> 1.

  • top_p : top_p включен, если это значение> 0 и <1.0

  • sampling_temperature : Используется для повторной оценки выхода softmax. Температура искажает распределение в сторону жетонов с высокой вероятностью и снижает массу в распределении хвостов. Значение должно быть положительным. Низкая температура эквивалентна жадности и делает распределение более резким, а высокая температура делает его более плоским.

  • enable_greedy : по умолчанию это True и жадное декодирование включено. Чтобы поэкспериментировать с другими стратегиями, установите значение False.

Инициализировать гиперпараметры модели

  params = {}
params ['num_heads'] = 2
params ['num_layers'] = 2
params ['batch_size'] = 2
params ['n_dims'] = 256
params ['max_decode_length'] = 4
  

В авторегрессивных архитектурах, таких как модели кодировщика-декодера на базе трансформатора, Кэш используется для быстрого последовательного декодирования. Это вложенный словарь, хранящий предварительно вычисленные скрытые состояния (ключ и значения в блоках самовнимания и в блоках перекрестного внимания) для каждого слоя.

Инициализировать кеш.

  cache = {
    'layer_% d'% layer: {
        'k': tf.zeros ([params ['batch_size'], params ['max_decode_length'], params ['num_heads'], int (params ['n_dims'] / params ['num_heads'])], dtype = tf.float32),
        'v': tf.zeros ([params ['batch_size'], params ['max_decode_length'], params ['num_heads'], int (params ['n_dims'] / params ['num_heads'])], dtype = tf.float32)
        } для слоя в диапазоне (params ['num_layers'])
    }
print ("форма ключа кеширования для уровня 1:", cache ['layer_1'] ['k'].форма)
  
форма ключа кэша для слоя 1 & двоеточие; (2, 4, 2, 128)
2021-08-11 18 & двоеточие; 44 & двоеточие; 59.884533 & двоеточие; I tensorflow / stream_executor / cuda / cuda_gpu_executor.cc & двоеточие; 939] успешное чтение узла NUMA из SysFS имело отрицательное значение (-1), но должен быть хотя бы один узел NUMA, поэтому узел NUMA возвращается ноль
2021-08-11 18 & двоеточие; 44 & двоеточие; 59.892742 & двоеточие; I tensorflow / stream_executor / cuda / cuda_gpu_executor.cc & двоеточие; 939] успешное чтение узла NUMA из SysFS имело отрицательное значение (-1), но должен быть хотя бы один узел NUMA, поэтому узел NUMA возвращается ноль
2021-08-11 18 & двоеточие; 44 & двоеточие; 59.893649 и двоеточие; I tensorflow / stream_executor / cuda / cuda_gpu_executor.cc & двоеточие; 939] успешное чтение узла NUMA из SysFS имело отрицательное значение (-1), но должен быть хотя бы один узел NUMA, поэтому узел NUMA возвращается ноль
2021-08-11 18 & двоеточие; 44 & двоеточие; 59.895413 & двоеточие; I tenorflow / core / platform / cpu_feature_guard.cc & col; 151] Этот двоичный файл TensorFlow оптимизирован с помощью библиотеки глубокой нейронной сети oneAPI (oneDNN) для использования следующих инструкций ЦП в критических для производительности операциях & двоеточие; AVX2 AVX512F FMA
Чтобы включить их в других операциях, перестройте TensorFlow с соответствующими флагами компилятора.2021-08-11 18 & двоеточие; 44 & двоеточие; 59.896128 & двоеточие; I tensorflow / stream_executor / cuda / cuda_gpu_executor.cc & двоеточие; 939] успешное чтение узла NUMA из SysFS имело отрицательное значение (-1), но должен быть хотя бы один узел NUMA, поэтому узел NUMA возвращается ноль
2021-08-11 18 & двоеточие; 44 & двоеточие; 59.897135 & двоеточие; I tensorflow / stream_executor / cuda / cuda_gpu_executor.cc & двоеточие; 939] успешное чтение узла NUMA из SysFS имело отрицательное значение (-1), но должен быть хотя бы один узел NUMA, поэтому узел NUMA возвращается ноль
2021-08-11 18 & двоеточие; 44 & двоеточие; 59.898014 & двоеточие; I tensorflow / stream_executor / cuda / cuda_gpu_executor.cc & двоеточие; 939] успешное чтение узла NUMA из SysFS имело отрицательное значение (-1), но должен быть хотя бы один узел NUMA, поэтому узел NUMA возвращается ноль
2021-08-11 18 & двоеточие; 45 & двоеточие; 00.440341 ​​& двоеточие; I tensorflow / stream_executor / cuda / cuda_gpu_executor.cc & двоеточие; 939] успешное чтение узла NUMA из SysFS имело отрицательное значение (-1), но должен быть хотя бы один узел NUMA, поэтому узел NUMA возвращается ноль
2021-08-11 18 & двоеточие; 45 & двоеточие; 00.441305 и двоеточие; I tensorflow / stream_executor / cuda / cuda_gpu_executor.cc & двоеточие; 939] успешное чтение узла NUMA из SysFS имело отрицательное значение (-1), но должен быть хотя бы один узел NUMA, поэтому узел NUMA возвращается ноль
2021-08-11 18 & двоеточие; 45 & двоеточие; 00.442196 & двоеточие; I tensorflow / stream_executor / cuda / cuda_gpu_executor.cc & двоеточие; 939] успешное чтение узла NUMA из SysFS имело отрицательное значение (-1), но должен быть хотя бы один узел NUMA, поэтому узел NUMA возвращается ноль
2021-08-11 18 & двоеточие; 45 & двоеточие; 00.443081 & двоеточие; I tensorflow / core / common_runtime / gpu / gpu_device.cc & col; 1505] Создано устройство / задание & двоеточие; localhost / replica & двоеточие; 0 / задача & двоеточие; 0 / устройство & двоеточие; GPU & двоеточие; 0 с памятью 14662 МБ и двоеточием; -> устройство и двоеточие; 0, имя & двоеточие; Tesla V100-SXM2-16GB, идентификатор шины pci и двоеточие; 0000 & двоеточие; 00 & двоеточие; 05.0, вычислительные возможности & двоеточие; 7.0
 

Определите замыкание для нормализации длины, если необходимо.

Используется для нормализации окончательных оценок сгенерированных последовательностей и является необязательным.

  def length_norm (длина, dtype):
  "" "Коэффициент нормализации длины возврата."" "
  return tf.pow (((5. + tf.cast (длина, dtype)) / 6.), 0.0)
  

Создать model_fn

На практике это будет заменено реальной реализацией модели, такой как здесь

  аргументов:
i: Шаг, который декодируется.
Возврат:
  логит вероятности размера [batch_size, 1, vocab_size]
  
  вероятностей = tf.constant ([[[0,3, 0,4, 0,3], [0,3, 0,3, 0,4],
                              [0,1, 0,1, 0,8], [0,1, 0,1, 0,8]],
                            [[0.2, 0,5, 0,3], [0,2, 0,7, 0,1],
                              [0,1, 0,1, 0,8], [0,1, 0,1, 0,8]]])
def model_fn (i):
  вероятности возврата [:, i,:]
  

Инициализировать символы_to_logits_fn

  def _symbols_to_logits_fn ():
  "" "Вычисляет логиты следующих токенов." ""
  def symbols_to_logits_fn (ids, i, temp_cache):
    del ids
    logits = tf.cast (tf.math.log (model_fn (i)), tf.float32)
    вернуть логиты, temp_cache
  вернуть символы_to_logits_fn
  

Жадный

Жадное декодирование выбирает идентификатор токена с наибольшей вероятностью в качестве его следующего идентификатора: $ id_t = argmax_ {w} P (id | id_ {1: t-1}) $ на каждом временном шаге $ t $.На следующем рисунке показано жадное декодирование.

  greedy_obj = sampling_module.SamplingModule (
    length_normalization_fn = Нет,
    dtype = tf.float32,
    символы_to_logits_fn = _symbols_to_logits_fn (),
    voiceab_size = 3,
    max_decode_length = params ['max_decode_length'],
    eos_id = 10,
    padded_decode = Ложь)
ids, _ = greedy_obj.generate (
    initial_ids = tf.constant ([9, 1]), initial_cache = кеш)
print ("Жадно декодированные идентификаторы:", идентификаторы)
  
Жадно декодированные идентификаторы и двоеточие; тф.Тензор(
[[9 1 2 2 2]
 [1 1 1 2 2]], shape = (2, 5), dtype = int32)
 

top_k выборка

В выборке Top-K отфильтровываются идентификаторы K наиболее вероятных следующих токенов, и масса вероятности перераспределяется только между этими идентификаторами K .

  top_k_obj = sampling_module.SamplingModule (
    length_normalization_fn = длина_норма,
    dtype = tf.float32,
    символы_to_logits_fn = _symbols_to_logits_fn (),
    voiceab_size = 3,
    max_decode_length = params ['max_decode_length'],
    eos_id = 10,
    sample_temperature = tf.константа (1.0),
    top_k = tf.constant (3),
    padded_decode = Ложь,
    enable_greedy = Ложь)
ids, _ = top_k_obj.generate (
    initial_ids = tf.constant ([9, 1]), initial_cache = кеш)
print ("топ-k выборочных идентификаторов:", ids)
  
ИД и двоеточие, выбранные для выборки топ-k; tf.Tensor (
[[9 1 2 2 2]
 [1 2 1 2 2]], shape = (2, 5), dtype = int32)
 

top_p выборка

Вместо выборки только из наиболее вероятных K идентификаторов токенов, в Top-p выборка выбирает из наименьшего возможного набора идентификаторов, совокупная вероятность которых превышает вероятность p .

  top_p_obj = sampling_module.SamplingModule (
    length_normalization_fn = длина_норма,
    dtype = tf.float32,
    символы_to_logits_fn = _symbols_to_logits_fn (),
    voiceab_size = 3,
    max_decode_length = params ['max_decode_length'],
    eos_id = 10,
    sample_temperature = tf.constant (1.0),
    top_p = tf.constant (0.9),
    padded_decode = Ложь,
    enable_greedy = Ложь)
ids, _ = top_p_obj.generate (
    initial_ids = tf.constant ([9, 1]), initial_cache = кеш)
print ("ID выборки top-p:", ids)
  
идентификаторы выборки top-p и двоеточие; тф.Тензор(
[[9 0 1 1 2]
 [1 0 1 2 2]], shape = (2, 5), dtype = int32)
 

Расшифровка поиска луча

Поиск луча снижает риск пропуска скрытых идентификаторов маркеров высокой вероятности, сохраняя наиболее вероятное число гипотез на каждом временном шаге и, в конечном итоге, выбирая гипотезу, которая имеет наибольшую общую вероятность.

  beam_size = 2
params ['batch_size'] = 1
beam_cache = {
    'layer_% d'% layer: {
        'k': tf.zeros ([params ['batch_size'], params ['max_decode_length'], params ['num_heads'], params ['n_dims']], dtype = tf.float32),
        'v': tf.zeros ([params ['batch_size'], params ['max_decode_length'], params ['num_heads'], params ['n_dims']], dtype = tf.float32)
        } для слоя в диапазоне (params ['num_layers'])
    }
print ("форма ключа кэша для слоя 1:", beam_cache ['layer_1'] ['k']. shape)
ids, _ = beam_search.sequence_beam_search (
    символы_to_logits_fn = _symbols_to_logits_fn (),
    initial_ids = tf.constant ([9], tf.int32),
    initial_cache = кэш-лучей,
    voiceab_size = 3,
    beam_size = размер_ луча,
    альфа = 0,6,
    max_decode_length = params ['max_decode_length'],
    eos_id = 10,
    padded_decode = Ложь,
    dtype = tf.float32)
print ("Идентификаторы поиска луча:", идентификаторы)
  
форма ключа кэша для слоя 1 & двоеточие; (1, 4, 2, 256)
Идентификаторы поиска луча и двоеточие; tf.Tensor (
[[[9 0 1 2 2]
  [9 1 2 2 2]]], shape = (1, 2, 5), dtype = int32)
 
.

Написать ответ

Ваш адрес email не будет опубликован. Обязательные поля помечены *