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

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

Однако у встраивания слов есть огромная ахиллесова пята: слова, имеющие более одного определения. Если встраивание слов присваивает вектор, скажем, слову «банк», оно присваивает один и тот же вектор всем определениям слова «банк». Что делать, если вы хотите использовать это слово в разных контекстах? Здесь в игру вступает внимание. Внимание к себе было представлено в основополагающей статье «Внимание — это все, что вам нужно», написанной несколькими соавторами, в том числе соучредителем Cohere Эйданом Гомесом. Внимание — это очень умный способ различать слова, когда они используются в разных контекстах (что превращает встраивания слов в контекстуализированные вложения слов).

Одно слово, несколько значений

Чтобы понять внимание, давайте посмотрим на два предложения:

  • Предложение 1: Берег реки.
  • Предложение 2: Деньги в банке.

Откуда компьютеру знать, что слово «банк» в первом предложении относится к природной среде, а во втором предложении — к финансовой обстановке? Что ж, давайте зададим вопрос попроще: откуда человеку это знать? Как вы выяснили эти две настройки? Мы с вами, вероятно, делали это, глядя на соседние слова. В первом предложении слово «река» намекало на природу, а во втором предложении слово «деньги» было ключевым для финансовой обстановки. Короче говоря, нам нужен способ использовать другие слова в предложении, чтобы понять, в каком контексте слова «банк» мы хотим использовать.

Здесь в игру вступают встраивания слов. Как вы узнали из предыдущей главы, встраивание слов — это способ назначить векторы (списки чисел) каждому слову. Мне нравится представлять их геометрически. Представьте, что слова «банк», «река» и «деньги» прикреплены к пробковой доске. Кроме того, эта пробковая доска содержит все существующие слова, причем таким образом, что два похожих слова (например, «яблоко» и «груша») находятся рядом. Теперь на этой пробковой доске «банк», «река» и «деньги» не совсем рядом. Однако вам нужно взять слово «банк» и слегка сдвинуть его к слову «река». Назовите это слово «bank1». Теперь возьмите еще одну копию слова «банк» и слегка переместите ее к слову «деньги». Назовите его «банк2». Теперь рассмотрим следующие два измененных предложения.

  • Измененное предложение 1: Берег1 реки.
  • Измененное предложение 2: Деньги в банке2.

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

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

На все эти (и, надеюсь, многие другие!) вопросы будут даны ответы далее.

Перемещение слов на пробковой доске

Во-первых, позвольте мне рассказать вам, что я имею в виду под «перемещением слова ближе к другому». Мне нравится представлять это в среднем из двух слов. Например, предположим, что я хочу переместить слово «банк» на 10% ближе к слову «река». Теперь я думаю о слове «0,9_Берег + 0,1_Река». То есть «банк1» — это на 90% «банк», а на 10% — «река». Также предположим, что «банк2» — это на 80% «банк» и на 20% «деньги». Допустим, это измененные слова:

  • Берег1 = 0,9*Берег + 0,1*Река
  • Банк2 = 0,8*Банк + 0,2*Деньги

Как я получил числа 0,9, 0,1, 0,8 и 0,2? Это будет позже (хорошо, я должен спойлерить, ответ — сходство, но я расскажу об этом позже в этой главе). Сейчас вам может быть интересно, что я подразумеваю под 0,9*Берег + 0,1*Ривер. Что ж, в главе о встраиваниях мы узнали, что встраивание слов состоит из присвоения вектора (списка) чисел каждому слову. Встраивание Cohere связывает каждое слово с вектором длиной 4096 (то есть списком из 4096 чисел на слово). Для простоты давайте представим себе вложение, которое связывает вектор из двух чисел с каждым словом и что следующие числа являются числами:

  • Река: [0,5]
  • Деньги: [8,0]
  • Банк: [6,6]

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

Итак, чтобы вычислить вложения Bank1 и Bank2, мы просто выполняем математические вычисления покомпонентно (то есть для каждого из двух компонентов вектора отдельно). Мы получаем это:

  • Банк1: 0,9*Берег + 0,1*Река = 0,9*[6, 6] + 0,1*[0, 5]
    = [5,4, 5,4] + [0, 0,5]
    = [5,4, 5,9 ]
  • Банк2: ​​0,8_Банк + 0,2_Деньги = 0,8*[6,6] + 0,2*[8,0]
    = [4,8, 4,8] + [1,6, 0]
    = [6,4, 4,8]

Как видите, «банк1» ближе к «реке», а «банк2» — к «деньгам». По сути, «банк1» находится на линии между «банком» и «рекой», 10% по пути. Точно так же «банк2» находится на грани между «банком» и «деньгами», 20% на этом пути.

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

Как решить, какие слова определяют контекст?

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

Давайте сначала обсудим механизм сходства. Компьютер собирается рассматривать все слова в предложении как контекст, включая ненужные слова, такие как «the», «of» и «in». Однако он будет считать их определенной суммой, и эта сумма является как раз сходством между словом и «банком». Мы полагаем, что при хорошем встраивании сходство между словом «банк» и таким словом, как «the», практически равно нулю, поскольку они не связаны друг с другом. Следовательно, модель будет знать, что следует игнорировать эти слова и сосредоточиться на тех, которые могут иметь большее сходство со словом «банк».

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

Это сходство имеет смысл в следующих отношениях:

  • Сходство каждого слова с самим собой равно 1.
  • Сходство между любым не относящимся к делу словом («the», «of» и т. д.) и любым другим словом равно 0.
  • Сходство между «берегом» и «рекой» составляет 0,11.
  • Сходство между «банком» и «деньгами» составляет 0,25.

Почему сходство между «банком» и «деньгами» выше, чем сходство между «банком» и «рекой». Мы можем представить, что слово «банк» чаще используется в одном контексте со словом «деньги», чем со словом «река», и это объясняет разницу. Мы немного упрощаем эту модель, возможно, сходство между «the» и «of» будет не нулевым, а 0,001. Однако, чтобы упростить наши расчеты, мы будем использовать эти цифры.

Теперь переходим к следующему шагу. Мы собираемся использовать сходства, чтобы преобразовать каждое слово этого предложения. Мы назовем эти новые слова «the1», «bank1», «of1», «river1» для первого предложения и «money2», «in2», «the2», «bank2» для второго предложения. Будьте осторожны, мы будем выполнять математические вычисления со словами, но они не будут сильно отличаться от тех, которые мы делали раньше. Давайте посмотрим на первое предложение «Берег реки» и слово «the». Сходство с другими словами заключается в следующем:

Сходства с «the»:

  • : 1
  • банк: 0
  • of: 0
  • река: 0

Поэтому мы превращаем слово «the» в новое слово «the1», которое соответствует сумме 1*»the» + 0*»bank» + 0*»of» + 0* «река». Это эквивалентно слову «the». Это означает, что слово «the» не меняется и оно равно «the1».

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

  • тот: 0
  • банк: 1
  • of: 0
  • река: 0,11

Таким образом, слово «банк» превращается в слово «банк1», заданное уравнением 1»банк» + 0,11»река». Мы почти закончили. Мы хотим, чтобы коэффициенты слова в сумме давали 1, чтобы мы могли разделить все на их сумму, которая равна 1,11. Когда мы это сделаем, мы получим, что слово «банк» преобразуется в слово 0,9*»банк» + 0,1 «река».

Давайте сделаем еще один для последовательности. Слово «деньги» во втором предложении превращается в «деньги2», определяемое уравнением 1*"деньги" + 0,25*"банк". Когда мы нормализуем, мы делим все на 1,25, чтобы получить уравнение 0,8*"деньги" + 0,2*"банк". Все эти уравнения сведены в таблицу ниже.

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

Есть ли что-то еще, заслуживающее внимания?

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