Применение машинного обучения к естественному языку — уникальная сложная задача. Если компьютерное зрение можно рассматривать как открытие окна в физический мир, то область обработки естественного языка (NLP) открывает окно в сознание говорящего. Можно также возразить, что это не столько окно, сколько абстрактный код, который слушатель должен расшифровать.
Мы знаем, что можно выучить язык; в конце концов, дети учатся говорить так же, как учатся видеть. Большинство младенцев во всем мире изучают даже более одного языка одновременно!
Тем не менее, есть веская причина, по которой зрение и физическое мышление младенцев развиваются быстрее, чем их языковое развитие: речь сложна. Одно и то же предложение может означать разные вещи в зависимости от контекста. Слова развиваются с течением времени, поскольку говорящие коренным образом меняют значения слов и то, как они используются (буквально!). И чаще, чем вы думаете, говорящие играют с языком в шутках или преувеличениях или даже говорят прямо противоположное тому, что они считают сарказмом.
Мы считаем, что понимание и решение этих проблем с помощью сильных исследований и разработок НЛП может привести к более надежным, обобщаемым языковым моделям. Здесь мы предлагаем пять советов для инженеров НЛП — или организаций, рассматривающих проект в НЛП, — которые следует учитывать в своем подходе.
Попробуйте сломать вашу модель
Наилучшие сценарии, которые вы представляете своей модели на обучении, часто не являются наиболее вероятными сценариями, с которыми она столкнется в дикой природе. В одних областях это более верно, чем в других. Если вы просто обрабатываете статьи New York Times, чтобы определить, касаются ли они политики Канады, вы можете полагаться на в основном одинаковые форматы ввода от документа к документу. Но если, скажем, вы классифицируете посты в Facebook по тому, находится ли пользователь в депрессии, или анализируете данные из нескольких корпусов, все становится менее предсказуемым.
Во-первых, входные данные могут полностью сломать вашу модель, выдав ошибку. Если вы обучили свою модель только сообщениям в социальных сетях из 200–300 слов, и она внезапно заставила ее обрабатывать документ из 5000 смайликов (это не гипотетически, мы говорим из опыта), ваша модель может не справиться. обрабатывать такой большой массив или иметь дело с массивом, состоящим из символов, с которыми он не знаком.
Во-вторых, ваш ввод может быть незнакомым по содержанию, но похожим по структуре, так что модель выдает результат, но нежелательный. Например, если у вас есть алгоритм моделирования темы, который сортирует каждый отдельный документ по финансовым, спортивным или политическим новостям, а затем кормит его сплетнями о знаменитостях, назначенная тема почти обязательно будет неверной.
Чтобы защититься от обоих, инженеры NLP должны думать так же, как архитекторы информационной безопасности, которые проводят тестирование на проникновение, пытаясь сломать то, что они создают. Важно регулярно проводить стресс-тестирование вашей модели как на начальном этапе обучения, так и после развертывания, вводя в нее неожиданные входные данные. В некоторых случаях мы зашли так далеко, что написали быстрые сценарии для создания тарабарщины, чтобы соответствующим образом настроить модель. Кроме того, мы часто находили полезным заменять слова на их синонимы и смотреть, работает ли наше приложение так, как задумано. Например, если при классификации текста со сценами насилия заменить «удар» на «удар», получим ли мы желаемый результат?
Это всего лишь пара возможных небольших способов сделать вашу модель более надежной. Но независимо от того, как именно вы нарушаете чувство регулярности вашей модели, вы никогда не должны позволять своему приложению становиться слишком удобным.
По мере изменения языка должна меняться и ваша модель.
Большая часть двусмысленности языка связана с изменением его использования и значения с течением времени. Для инженеров НЛП это означает, что приложения обречены, если модели, на которые они опираются, слишком статичны и не способны адаптироваться к новым словам, синтаксису и конструкциям.
Прошлый год дает достаточно примеров. Модель, обученная на тексте 2018 года и развернутая для классификации текста 2019 года, могла бы разумно поместить документ со словом "блокировка" в вектор, близкий к несколько угрожающему, что может иметь ряд последствий в зависимости от приложения. Однако к середине 2020 года «изоляция» стала полусинонимом «карантина»; модель, созданная для классификации текстов насилия, вышла бы из-под контроля из-за ложных срабатываний.
В подобных случаях, когда слово достаточно редкое, чтобы ранее не было частью повседневной речи, обучение его на нескольких дополнительных примерах является возможным способом корректировки весов модели. В таких случаях вы даже иногда можете просто внести ручные корректировки на основе правил (например, если текст содержит «блокировка» и также содержит «коронавирус», классифицируйте его как ненасильственный).
В других ситуациях, когда чрезвычайно распространенное слово меняет значение (скажем, если бы появилась новая компания Water стоимостью 100 миллиардов долларов) или когда совершенно новые слова и сленг становятся неуловимыми, требуется более комплексное переобучение. На самом деле, идеально вводить новые данные в вашу модель на достаточно регулярной основе, чтобы обучать ее словам, о которых вы, возможно, даже не знаете (на этом этапе ваше приложение должно быть в состоянии обрабатывать «sus»). В любом случае используйте свое чутье — если вы чувствуете, что ваша модель дает результаты, значительно несоразмерные вашим ожиданиям, возможно, пришло время для корректировки.
Контекст имеет значение
Как известно многим инженерам НЛП, роза не всегда роза. Контекст текста имеет значение, и именно поэтому обнаружение таких черт, как сарказм и юмор, является одной из самых сложных проблем в этой области. Это также означает потенциально неверные результаты в классификаторе. В случае нашей примерной модели, которая выявляет агрессивный язык, это означает, например, заботу о том, чтобы «я хочу убить его» и «Сара подумала про себя: «Я хочу убить его»» не анализировались каким-либо образом. что исключает их грамматические и синтаксические нюансы. Как люди, первое предложение более очевидно является продуктом повседневных речевых моделей, которые делают более вероятным, что человек действительно напечатал его при общении с кем-то еще. Во втором предложении явно присутствует литературный характер, который может быть менее важным.
Легко получить модели, которые фокусируются на одном слове или энграмме без поправки на контекст. Некоторая предварительная обработка предназначена для минимизации количества отдельных слов или символов, которые должна запомнить ваша модель, и это может означать удаление пунктуации и отображение всех слов в нижнем или верхнем регистре. В нашем примере именно та информация, которая часто обрабатывается как посторонняя, помогла бы отрицательно классифицировать последнее предложение.
Другая информация также может влиять на контекстуализацию. Есть ли необычная степень выделения курсивом и полужирным шрифтом? Есть ли предшествующая или последующая информация, например, ответ, который модулирует определенные качества, которые в противном случае могут показаться четкими сигналами? Контекстуализация документа — одна из постоянно трудных задач в НЛП, не в последнюю очередь потому, что существует так много возможных способов сделать это (и точно так же, как изменения в языке требуют корректировки модели, так же возникают и меняются новые контексты). Но принимать их во внимание необходимо, чтобы свести к минимуму небрежность и максимизировать точность и аккуратность, когда ваше приложение будет в конечном итоге развернуто.
Не обязательно полагаться только на одну модель
Иногда лучший способ улучшить модель — полностью построить новую и интегрировать их вместе в единый конвейер. Это может быть особенно полезно при попытке контекстуализации документа. Например, одна модель может классифицировать документ как насильственный или ненасильственный, глядя только на сам словарь. Если он помечен как насильственный, его можно передать через другую модель, которая проверяет все данные, вырезанные из первого, такие как пунктуация, стиль и т. д., чтобы определить, меняет ли контекст документа смысл текста.
Разделяя задания между несколькими моделями, ваше приложение получает две выгоды. Во-первых, каждая модель может более детально сосредоточиться на своей задаче и работать лучше, чем одна модель, пытающаяся делать все — разделение труда на основе машинного обучения. Во-вторых, это предотвращает безудержную сложность вашей модели, которая усложняет корректировку (и требует больших ресурсов) и затрудняет точное определение причинно-следственной связи.
Развертывание дополнительной модели особенно полезно, когда ее можно обучить на открытых или существующих данных, которые уже помечены (или их очень легко пометить), поэтому для ее создания не требуется удвоить время, затрачиваемое на маркировку данных. Если, скажем, вы хотите включить шаг в конвейер, который сначала определяет язык документа, для начала нет недостатка в предварительно помеченных корпусах. Но существует множество и менее простых примеров, и во время построения стоит выполнить поиск, чтобы увидеть, доступен ли существующий набор данных, чтобы добавить дополнительную модель проще, чем вы могли изначально ожидать.
Держите людей в курсе
Наконец, никогда не забывайте, что в конечном итоге вы анализируете результаты работы людей — как таковые, сами люди необходимы, чтобы убедиться, что ваша модель делает то, что она должна, помечать ложные срабатывания и в целом обеспечивать гарантию качества.
Если ваше приложение обрабатывает миллионы документов каждый день, вы, очевидно, не сможете просмотреть каждую отдельную классификацию или вывод. Но наличие нескольких человек, регулярно читающих выборку результатов, имеет большое значение для выявления любых красных флажков. В некоторых приложениях вы также можете передать каждый отдельный документ, которому присвоена определенная метка, на проверку человеком, чтобы вы не в конечном итоге по ошибке автоматизировали действие, которое заслуживает строгого усмотрения. Как показывает практика, чем более существенны результаты вашей модели для жизни людей, тем критичнее будет человеческий обзор.
Связаться с сильным
Свяжитесь с нами, чтобы узнать больше о том, как мы помогаем ведущим организациям создавать, развертывать и поддерживать современные системы НЛП.
*Эта статья была впервые опубликована в блоге Strong Analytics здесь.
Strong Analytics создает науку о данных, машинное обучение и искусственный интеллект корпоративного уровня для поддержки продуктов и решений следующего поколения. Наша команда ученых и инженеров, занимающихся полным стеком данных, ускоряет внедрение инноваций благодаря своему опыту в области разработки, научной строгости и глубокому знанию самых современных технологий. Мы работаем с инновационными организациями всех размеров, от стартапов до компаний из списка Fortune 500. Представьтесь в Twitter или LinkedIn или расскажите нам о своих потребностях в науке о данных.