Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Шолле Ф. - Глубокое обучение на Python (Библиотека программиста) - 2023.pdf
Скачиваний:
6
Добавлен:
07.04.2024
Размер:
11.34 Mб
Скачать

11.2. Подготовка текстовых данных    387

А.теперь.рассмотрим.детали..Далее.мы.пройдем.весь.путь.реализации.моделей. машинного.перевода.с.самого.начала.с.помощью.Transformer.

11.2. ПОДГОТОВКА ТЕКСТОВЫХ ДАННЫХ

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

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

.затем.текст.разбивается.на.единицы.(называемые.токенами).—.символы,. слова.или.группы.слов;.данный.процесс.называется.токенизацией;

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

Давайте.рассмотрим.каждый.из.этих.шагов.поближе.

Рис. 11.1. Порядок преобразования простого текста в векторы

388    Глава 11. Глубокое обучение для текста

11.2.1. Стандартизация текста

Рассмотрим.два.текста:

. sunset came. i was staring at the Mexico sky. Isnt nature splendid??;

. Sunset came; I stared at the México sky. Isn’t nature splendid?.

Они.очень.похожи,.а.по.смыслу.так.вообще.идентичны:.«Солнце.клонится.к.закату..Я.смотрел.на.мексиканское.небо..Разве.природа.не.прекрасна?».Однако,. если.преобразовать.их.в.последовательности.байтов,.получатся.очень.разные. представления:.буквы.i.и.I.—.это.два.разных.символа,.Mexico.и.México.—.два. разных.слова,.isnt.не.равно.isn’t.и.т..д..Модель.машинного.обучения.не.знает,.что. i.и.I.—.это.одна.и.та.же.буква,.что.é .—.это.e.с.ударением.или.что.staring.и.stared.—. две.формы.одного.и.того.же.глагола.

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

Одна.из.самых.простых.и.распространенных.схем.стандартизации.—.«преоб- разовать.в.нижний.регистр.и.удалить.знаки.препинания»..После.ее.применения. наши.два.текста.превратятся.в:

. sunset came i was staring at the mexico sky isnt nature splendid;

. sunset came i stared at the méxico sky isnt nature splendid.

Тексты.стали.еще.ближе.друг.к.другу..Следующее.распространенное.преоб- разование.—.приведение.специальных.символов.в.стандартную.форму:.на- пример .замена .é .на .e, .æ .на .ae .и.т..д..После .этого .наш .токен .méxico .превратится .в .mexico.

Есть.еще.более.продвинутое.преобразование,.которое,.впрочем,.редко.исполь- зуется.в.контексте.машинного.обучения..Речь.идет.о.стемминге.—.выделении. корня.(скажем,.из.различных.форм.спряжения.глагола).для.преобразования. в.единую.форму:.caught.(«пойман»).и.been catching.(«был.пойман»).в.[catch]. («поймать»).или.cats.(«кошки»).в.[cat].(«кошка»)..После.стемминга.was staring и.stared.превращаются.в.[stare].—.и.два.похожих.текста.наконец.получают.оди- наковое.представление:

. sunset came i [stare] at the mexico sky isnt nature splendid.

Благодаря.этим.методам.стандартизации.модели.потребуется.меньше.данных. для.обучения.и.она.будет.лучше.их.обобщать..Ей.не.понадобятся.многочисленные.примеры.типа.Sunset.и.sunset,.чтобы.понять,.что.они.означают.одно.и.то.же;. и.она.сможет.увидеть.смысл.слова.México,.даже.если.в.обучающем.наборе.будет.

11.2. Подготовка текстовых данных    389

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

11.2.2. Деление текста на единицы (токенизация)

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

.токенизацией на уровне слов.—.токенами.являются.подстроки,.разделенные. пробелами.(или.знаками.препинания)..Один.из.вариантов.—.дальнейшее. деление.слов.на.подслова,.когда.это.применимо:.например,.staring.на.star+ing. или.called.на.call+ed;

.токенизацией на N-граммы.—.токенами.являются.группы.из.N .слов,.сле- дующих.друг.за.другом..Например,.the cat .или.he was .можно.превратить. в.2-граммы.(их.также.называют.биграммами);

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

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

N-ГРАММЫ И МЕШКИ СЛОВ

N-граммы слов — это группы из N последовательных слов, которые можно извлечь из предложения. Та же идея применима к символам.

Вот простой пример. Рассмотрим предложение The cat sat on the mat («Кошка села на коврик»). Его можно разложить на следующий набор 2-грамм:

{"the", "the cat", "cat", "cat sat", "sat",

"sat on", "on", "on the", "the", "the mat", "mat"}

390    Глава 11. Глубокое обучение для текста

Также его можно разложить на такой набор 3-грамм:

{"the", "the cat", "cat", "cat sat", "the cat sat", "sat", "sat on", "on", "cat sat on", "on the", "the", "sat on the", "the mat", "mat", "on the mat"}

Подобные наборы называют мешком биграмм или мешком триграмм соответственно. Термин «мешок» в данном случае отражает тот факт, что вы имеете дело с множеством токенов, а не со списком или последовательностью: токены в мешке не упорядочены. Это семейство методов токенизации называют мешком слов (или мешком N-грамм).

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

11.2.3. Индексирование словаря

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

Например.так:

vocabulary = {}

for text in dataset:

text = standardize(text) tokens = tokenize(text) for token in tokens:

if token not in vocabulary: vocabulary[token] = len(vocabulary)

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

11.2. Подготовка текстовых данных    391

def one_hot_encode_token(token):

vector = np.zeros((len(vocabulary),)) token_index = vocabulary[token] vector[token_index] = 1

return vector

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

Помните,.как.вы.обучали.свои.первые.модели.глубокого.обучения.на.наборе. данных.IMDB.в.главах.4.и.5?.Данные.из.keras.datasets.imdb,.которые.вы.использовали,.уже.были.предварительно.обработаны.и.преобразованы.в.последовательности.целых.чисел,.где.каждое.целое.число.означало.определенное.слово..

Тогда.мы.использовали.параметр.num_words=10000,.чтобы.ограничить.словарь. 10.000.самых.распространенных.слов,.найденных.в.обучающих.данных.

Теперь .отметим .существенную .деталь, .которую .нельзя .упускать .из .виду:. новый.разыскиваемый.в.словаре.токен.может.там.отсутствовать..Возможно,. в.обучающих.данных.не.найдется.слово.cherimoya.(или.вы.сами.можете.исключить.его.из.индекса,.потому.что.оно.слишком.редкое),.поэтому.выполнение. инструкции.token_index = word["cherimoya"] .может.привести.к.исключению. KeyError..Чтобы.этого.избежать,.нужно.предусмотреть.индекс.для.токенов.«вне. словаря»,.который.будет.назначаться.всем.токенам,.отсутствующим.в.словаре.. Обычно.это.индекс.1:.в.таком.случае.вы.должны.определять.индекс.инструкцией.token_index = word.get(token, 1)..При.декодировании.последовательности. целых.чисел.обратно.в.слова.данное.число.можно.заменять.на.что-то.вроде. [UNK].(«несловарный.токен»).

Вы.можете.спросить:.«Почему.именно.1,.а.не.0?».Дело.в.том,.что.число.0.уже. занято.токеном маски .(индекс.0)..Это.специальный.токен,.такой.же.как.несловарный.токен.(индекс.1)..Несловарный.токен.означает.«здесь.было.слово,. которое.не.удалось.распознать»,.а.токен.маски.говорит:.«Игнорируйте.меня,. я.не.слово»..Его.можно.использовать,.в.частности,.для.дополнения.последовательностей.в.данных:.так.как.пакеты.с.данными.должны.быть.непрерывными,. всем.последовательностям.в.пакете.нужно.задать.одинаковую.длину,.поэтому. более.короткие.последовательности.дополняются.до.длины.самой.длинной. последовательности..Если.потребуется.создать.пакет.с.последовательностями. [5, 7, 124, 4, 89] .и.[8, 34, 21],.он.должен.выглядеть.так:

[[5, 7, 124, 4, 89] [8, 34, 21, 0, 0]]