Шрифт:
Интервал:
Закладка:
Впрочем, революция глубокого обучения вполне ожидаемо оказала влияние и на машинный перевод (о чём мы поговорим в следующем разделе), что даёт нам некоторые соображения относительно того, как этот спор будет разрешён.
В конце 2010-х гг. появились первые исследования, посвящённые систематическому мониторингу качества машинного перевода. В первую очередь речь идёт об обзорах[2103], [2104], [2105], [2106], публикуемых группой исследователей из компании Intento под руководством Григория Сапунова. Обзор 2020 г. включает в себя анализ качества работы 15 различных систем машинного перевода для 15 отраслей и 14 языковых пар. Сравнение производилось на основе современных метрик качества перевода (в первую очередь BERTScore). При подготовке Стэнфордского отчёта о развитии искусственного интеллекта Artificial Intelligence Index Report за 2019 г.[2107] именно исследование команды Сапунова легло в основу раздела о машинном переводе.
Исследования Intento показывают быстрый рост как числа систем машинного перевода и поддерживаемых ими языковых пар, так и качества самого перевода. Давайте попробуем разобраться в том, какие именно методы сделали возможным столь быстрый прогресс в этой сложной для машинного интеллекта области.
6.3.3 Семантическая вселенная: от Бенджио и Миколова до трансформеров
6.3.3.1 Представление текстовой информации
Для того чтобы использовать нейронные сети в задачах обработки текстов, составленных на естественном языке, нужно решить один важный вопрос: как представить текст в виде набора сигналов на входном или выходном слое нейронной сети? По сути, нам нужно превратить последовательность символов в некий упорядоченный набор чисел, а сделать это можно множеством разных способов. И, что вполне ожидаемо, от того, какой именно способ будет выбран, зависит как скорость обучения нейросетевой модели, так и способность обученной модели эффективно решать поставленную перед ней задачу.
Традиционным способом представления текстовой информации в вычислительной технике является посимвольное кодирование. Каждому символу сопоставляется некоторое число (порядковый номер символа в используемой таблице символов). Например, таблица символов ASCII (American standard code for information interchange, Американский стандартный код для обмена информацией), разработанная в начале 1960-х гг., изначально включала в себя 128 символов, то есть каждому символу таблицы соответствовало число в диапазоне [0…127], для хранения которого необходимо 7 бит информации. Теоретически можно взять, например, рекуррентную сеть с единственным нейроном во входном слое и на вход этого нейрона подавать последовательно коды каждого из символов текста в виде соответствующих сигналов. Или, например, расположить во входном слое семь нейронов, на каждый из которых подавать один из битов двоичного представления каждого из символов. Однако для решения большинства практических задач такие сети не подходят, и вот почему. Допустим, мы хотим создать сеть, которая будет способна, получив на вход некоторое высказывание на естественном языке, сделать вывод о том, ругательное это высказывание или нет. Основной структурной единицей языка является слово. Современные языки насчитывают обычно миллионы словоформ, некоторое подмножество которых относится к инвективной (ругательной) лексике. Чтобы научиться выделять ругательные слова, нейронная сеть в процессе обучения должна будет по сути на основании примеров «изобрести» деление текста на отдельные словоформы, а затем «понять», что наличие в тексте некоторых словоформ (тысячи их!) влияет на значение метки класса. Конечно, достаточно большие сети, обученные с применением огромных вычислительных ресурсов, способны справиться с подобной задачей, однако значительная часть произведённых вычислений будет представлять собой мартышкин труд. Уйма вычислительного времени уйдёт на выяснение того, что мы и так знаем: язык состоит из слов, хорошо известных нам по словарям, и эти слова имеют весьма ограниченный набор значений, лишь иногда зависящих от контекста. Эту информацию было бы неплохо использовать на уровне представления данных на входе сети, что могло бы существенно сократить требуемые для её обучения вычислительные ресурсы. Рассматривая текст в виде последовательности слов, а не символов, сеть могла бы «сосредоточиться» на «изучении» более высокоуровневой структуры высказываний. Если ограничить длину слова 10 буквами, а алфавит 26 английскими буквами, то общее число различных «слов», составленных из произвольных последовательностей символов, превысит 2 × 1014, что минимум в 20 млн раз больше числа реально существующих в английском языке словоформ. Заставлять нейронную сеть искать иголку в таком огромном стоге сена просто контрпродуктивно. Именно поэтому в большинстве случаев в качестве элементарной единицы представления текста в коннекционистских моделях обычно используют слова (словоформы) или части слов.
Взяв словарь, включающий в себя все существующие словоформы (а также знаки препинания и другие элементы текста), мы можем сопоставить каждое слово его порядковому номеру в словаре и использовать этот номер в качестве числового представления слова. Представим для простоты нерекуррентную сеть, которая способна обрабатывать лишь предложения из одного слова. В этом случае наша задача будет сведена к задаче определения того, является одиночное слово ругательством или нет. Получив на вход некоторое число, сеть должна отнести его к одному из двух классов — ругательство или не ругательство. И здесь оказывается, что «обучаемость» нашей сети будет очень сильно зависеть от того, как именно слова расположены в нашем словаре. Если слова-ругательства кто-то уже расположил в начале словаря, то задача становится тривиальной: если порядковый номер слова на входе сети меньше или равен числу ругательств в словаре, то слово является ругательством, в противном случае — не является. Однако, если ругательства рассеяны по словарю случайным образом, единственной возможностью для сети будет по сути запомнить все числа, соответствующие ругательствам, то есть каким-то