Эта история состоит из 4 частей: мотивация чисто символьных моделей, моделей подслов: байтовые парные кодировки и друзья, гибридные модели символов и слов и встраивания fastText. Эта история является кратким изложением Stanford CS224N: НЛП с глубоким обучением | Зима 2019 | Лекция 12 — Модели подслов.

Эта история состоит из 4 частей: мотивация чисто символьных моделей, моделей подслов: байтовые парные кодировки и друзья, гибридные модели символов и слов и встраивания fastText. Эта история является кратким изложением Stanford CS224N: НЛП с глубоким обучением | Зима 2019 | Лекция 12 — Модели подслов.

1. Чисто модели уровня персонажа

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

В моделях на уровне символов встраивание слов может состоять из встраивания символов. У модели уровня персонажа есть как минимум 3 преимущества: 1). он может генерировать вложения для неизвестных слов; 2). похожие варианты написания имеют схожие вложения; 3). он решает проблему словарного запаса (OOV). В некоторых случаях модели на уровне символов успешно работают, что несколько удивительно, поскольку традиционно фонемы или буквы не были семантическими единицами.

2. Модели подслов: парные кодировки байтов и другие.

2.1 Парное кодирование байтов

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

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

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

Итак, наиболее распространенный способ сделать это с помощью символов и символьных n-грамм, это означает, что есть Unicode, и вы можете представить все эти прекрасные буквы, как слоговое письмо канадского инуктитута и тому подобное. Но на самом деле есть проблема с Юникодом, который состоит в том, что символов Юникода очень много (может быть, 200 000), и это довольно много. Поэтому мы выбираем только наиболее часто встречающиеся n-граммы символов.

BPE — это алгоритм сегментации слов, хотя он выполняется как восходящая кластеризация. Он начинается со словаря униграмм всех символов (Unicode) в данных. Он инкапсулирует наиболее часто встречающиеся пары n-грамм в новую n-грамму. BPE имеет целевой размер словарного запаса и останавливается, когда вы его достигаете. Он выполняет детерминированную сегментацию слов по самой длинной части, в то время как сегментация осуществляется только в пределах слов, идентифицированных некоторыми предыдущими токенизаторами (обычно токенизатором Моисея для машинного перевода). BPE автоматически выбирает словарный запас для системы.

Например, мы начинаем строить эти глыбы общих последовательностей букв, и поэтому общие биты, такие как est, а также просто общие слова, что-то вроде that в английском языке, очень быстро объединятся вместе и станут единицей нашего словаря. Как правило, мы определяем размер словаря, с которым хотим работать. Например, я хочу работать со словарным запасом в 8000 слов. Мы просто продолжаем делать это, пока в нашем словарном запасе не будет 8000 слов. И это означает, что в нашем словаре будут все отдельные буквы, потому что мы начали с них, и в нем будут общие подпоследовательности слов, такие как es, est, но также будут целые слова, когда есть общие слова, такие как the, too, with и так далее, являющиеся частью нашего словарного запаса.

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

2. Модели подслов: кодировки пар байтов и их друзья

2.2 Модель WordPiece и модель SentencePiece

Google NMT (GNMT) использует варианты моделей BPE: модель WordPiece и модель SentencePiece. Вместо подсчета n-грамм char они используют жадное приближение для максимизации логарифмической вероятности языковой модели для выбора фрагментов и добавляют n-граммы, которые максимально уменьшает недоумение.

Модель WordPiece выполняет токенизацию внутри слов: сначала она размечает слова, а затем применяет BPE. Может быть проблематично, если нам нужно сначала разбить на слова слова, потому что затем нам нужен токенизатор для каждого языкаи это много работы. Так что, может быть, вместо этого мы могли бы просто перейти от последовательности символов, сохранить пробелы и рассматривать это как часть процесса объединения, вы просто строите свои части слов, которые обычно будут иметь пробелы с одной или другой стороны, потому что часто вещи внутри слова представляют собой более обычные сгустки, и вы строите их, и это оказалось весьма успешным. Поэтому в модели SentencePiece пробелы сохраняются как специальный токен (_) и обычно группируются. В конце можно поменять местами, соединив фрагменты и записав их в пробелы.

BERT использует вариант модели WordPiece. BERT работает не со словами, а с частями слов. Таким образом, у него большой словарный запас, в словаре есть относительно распространенные слова, такие как Fairfax. Но тем не менее, чтобы охватить все слова, для OOV используется идея WordPiece. Поэтому, если мне нужно представление для слова OOV hypatia, я составляю его из кусочков. Есть представление h, а затем в версии BERT, которая отличается от версии Google NMT, неначальные фрагменты слов представлены двумя решетками в начале, так что я могу поставить это вместе с h и ##yp и т. д., так что h, ##yp, ##ati, ##a будут моим представлением hypatia. Таким образом, у меня есть векторы слов для фрагментов из 4 слов, а затем я должен решить, что с ними делать. Самый простой и довольно распространенный способ - я просто усредняю ​​4 из них. И есть, очевидно, другие вещи, которые вы могли бы сделать. Вы можете использовать ConvNet и max-pool или запустить небольшой LSTM или что-то еще, чтобы составить представление.

3. Гибридные модели символов и слов

3.1 CNN + сеть автомобильных дорог на уровне символов

Давайте изучим статью ‹Character-Aware Neural Language Models›. Чтобы закодировать связанность подслов, решить проблему редких слов моделей на уровне слов, получить сравнимую выразительность с меньшим количеством параметров и получить мощную, надежную языковую модель, эффективную для различных языков, авторы пытаются построить хорошую языковую модель путем начиная с символов и желая использовать родственные подслова и редкие слова.

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

Затем выходное представление символьных n-грамм загружается в магистральную сеть. Автомобильная сеть моделирует взаимодействие n-грамм и применяет преобразование при переносе исходной информации. Он работает аналогично ячейке памяти LSTM.

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

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

На левой картинке пять слов вверху: while, his, you, richard и trading. Он спрашивает, какие другие слова наиболее похожи на него в соответствии с вычисленными представлениями слов. А верхняя часть — это результат модели LSTM на уровне слов. Что интересно, так это то, что, во-первых, вы помните, что у них были вложения персонажей, которые прошли сверточный слой и максимальное объединение. И если в этот момент вы спросите, что больше всего похоже (вторая часть, LSTM-Char (до шоссе)), то в основном это все еще запоминание вещей о персонажах. Таким образом, слова, наиболее похожие на while, это chile, whole, meanwhile и white. По крайней мере, для первых все они заканчиваются на LE. Таким образом, вы просто получаете сходство последовательности символов. На самом деле это вообще не имеет смысла. Но что интересно, когда они затем проводят его через слои шоссе, слои шоссе успешно учатся преобразовывать эти представления последовательности символов во что-то, что действительно улавливает смысл. Для слова while наиболее похожими словами являются meanwhile, whole, though и nevertheless.

Выводы для этой статьи: 1) В этой статье ставится под сомнение необходимость использования встраивания слов в качестве входных данных для моделирования нейронного языка; 2) CNN плюс сеть Highway над символами могут извлекать богатую семантическую и структурную информацию; 3) Вы можете составлять "строительные блоки" для получения детализированных и мощных моделей!

3. Гибридные модели символов и слов

3.2 Гибридный нейронный машинный перевод (NMT)

Hybrid NMT переводится в основном на уровне слов и переходит на уровень символов только при необходимости.

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

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

Он может просто генерировать такие слова, как «un‹unk›chat», но одним из этих слов является символ UNK. И если он генерирует символ UNK, мы затем берем это скрытое представление и подаем его в качестве начального ввода в LSTM на уровне символов, а затем у нас есть LSTM на уровне символов, и затем мы пусть LSTM на уровне символов генерирует последовательность символов до тех пор, пока она не сгенерирует символ остановки, и мы используем это для генерации слов. Таким образом, мы получаем своего рода гибридный стек из 8 слоев LSTM.

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

Декодирование состоит из 2 этапов: поиск луча на уровне слов и поиск луча на уровне символов для ‹UNK›.

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

4. Символы для встраивания слов

4.1 Вложения FastText

Для встраивания слов вы должны иметь возможность делать полезные вещи с символами или частями слов. Вот тут-то и появляются встраивания FastText. FastText нацелен на эффективную библиотеку представления слов следующего поколения, подобную word2vec, но лучше для редких слов и языков с большим количеством морфологии. Это так. расширение модели скип-граммы word2vec с символьными n-граммами. Вложения FastText представляют слово как символьные n-граммы, дополненные граничными символами, и как целое слово. Например, слово где представлено в виде <wh, whe, her, ere, re>и <where>. Обратите внимание, что <her> или <her отличается от `her`. Префиксы, суффиксы и целые слова имеют особое значение. Он представляет слово как сумму этих представлений.

Уравнение для слов в оценке контекста показывает, что вместо того, чтобы совместно использовать представление или все n-граммы, оно использует «дорожку хэширования», чтобы иметь фиксированное количество векторов. Например, вы представляете слово «где» в виде набора n-грамм. Вам нужен граничный символ (это < и >), чтобы указать начало и конец слова. Таким образом, 3-грамма для слова where может быть <wh, whe, her, ere и re>. А также есть дополнительный только для всего слова, то есть <where>. Итак, where представлено 6 векторами. Помните, что word2vec вычисляет скалярные произведения между вашими векторами представления контекста и вашим центральным вектором представления слова. FastText делает то же самое, но центральным вектором представления слова будут эти 6 векторов. После вычисления каждого вектора FasText суммирует их в конце, чтобы сгенерировать вложение слова для where .

Результат в статье показывает, что для английского языка встраивание FastText не становится лучше, чем CBOW. Но для другого языка с большей морфологией (s.t. German) встраивание FastText работает лучше.

Ссылка

  1. Stanford CS224N: НЛП с глубоким обучением | Зима 2019 | Лекция 12 — Модели подслов

2. Нейронно-машинный перевод редких слов с подсловными единицами

3. SentencePiece: простой и независимый от языка токенизатор и детокенизатор подслов для нейронной обработки текста

4. Модели нейронного языка с учетом символов

5. Достижение открытого словарного нейронного машинного перевода с помощью гибридных моделей слово-символ

6. Обогащение векторов слов информацией о подсловах