20 KiB
Введение в обработку естественного языка
Этот урок охватывает краткую историю и важные концепции обработки естественного языка (NLP), подполе компьютерной лингвистики.
Тест перед лекцией
Введение
NLP, как его часто называют, является одной из самых известных областей, где машинное обучение было применено и используется в программном обеспечении.
✅ Можете ли вы вспомнить программы, которые вы используете каждый день и в которых, вероятно, встроено NLP? А как насчет текстовых редакторов или мобильных приложений, которые вы используете регулярно?
Вы узнаете о:
- Идее языков. Как развивались языки и какие основные области их изучения существуют.
- Определениях и концепциях. Вы также узнаете определения и концепции о том, как компьютеры обрабатывают текст, включая разбор, грамматику и определение существительных и глаголов. В этом уроке есть несколько задач по программированию, а также вводятся важные концепции, которые вы научитесь программировать в следующих уроках.
Компьютерная лингвистика
Компьютерная лингвистика — это область исследований и разработок, которая на протяжении многих десятилетий изучает, как компьютеры могут работать с языками, а также понимать, переводить и общаться на них. Обработка естественного языка (NLP) — это смежная область, сосредоточенная на том, как компьютеры могут обрабатывать "естественные", то есть человеческие, языки.
Пример — диктовка на телефоне
Если вы когда-либо диктовали текст своему телефону вместо того, чтобы печатать, или задавали вопрос виртуальному помощнику, ваша речь была преобразована в текстовую форму, а затем обработана или разобрана на языке, на котором вы говорили. Обнаруженные ключевые слова затем были обработаны в формате, который телефон или помощник могли понять и использовать.
Настоящее лингвистическое понимание — это сложно! Изображение Джен Лупер
Как эта технология стала возможной?
Это стало возможным благодаря тому, что кто-то написал компьютерную программу для этого. Несколько десятилетий назад некоторые писатели-фантасты предсказывали, что люди будут в основном разговаривать с компьютерами, и компьютеры всегда будут точно понимать, что они имеют в виду. К сожалению, оказалось, что это более сложная задача, чем многие представляли. Хотя сегодня эта проблема изучена гораздо лучше, остаются значительные трудности в достижении "идеальной" обработки естественного языка, особенно когда речь идет о понимании смысла предложения. Это особенно сложно, когда нужно понять юмор или определить эмоции, такие как сарказм, в предложении.
Возможно, вы вспомните школьные уроки, где учитель объяснял части грамматики в предложении. В некоторых странах студентов обучают грамматике и лингвистике как отдельному предмету, но во многих эти темы включены в изучение языка: либо родного языка в начальной школе (обучение чтению и письму), либо, возможно, второго языка в средней школе. Не переживайте, если вы не являетесь экспертом в различении существительных и глаголов или наречий и прилагательных!
Если вы путаетесь между простым настоящим и настоящим продолженным временем, вы не одиноки. Это сложная задача для многих людей, даже для носителей языка. Хорошая новость в том, что компьютеры очень хорошо применяют формальные правила, и вы научитесь писать код, который может разбирать предложение так же хорошо, как человек. Более сложная задача, которую вы изучите позже, — это понимание смысла и настроения предложения.
Предварительные требования
Для этого урока основным требованием является умение читать и понимать язык этого урока. Здесь нет математических задач или уравнений для решения. Хотя оригинальный автор написал этот урок на английском языке, он также переведен на другие языки, так что вы можете читать перевод. Есть примеры, где используются разные языки (для сравнения различных грамматических правил). Эти примеры не переведены, но пояснительный текст переведен, так что смысл должен быть понятен.
Для выполнения задач по программированию вы будете использовать Python, а примеры написаны на Python 3.8.
В этом разделе вам понадобятся и будут использоваться:
-
Понимание Python 3. Понимание языка программирования Python 3, этот урок использует ввод данных, циклы, чтение файлов, массивы.
-
Visual Studio Code + расширение. Мы будем использовать Visual Studio Code и его расширение для Python. Вы также можете использовать любой другой IDE для Python по вашему выбору.
-
TextBlob. TextBlob — это упрощенная библиотека для обработки текста на Python. Следуйте инструкциям на сайте TextBlob, чтобы установить его на свою систему (также установите корпуса, как показано ниже):
pip install -U textblob python -m textblob.download_corpora
💡 Совет: Вы можете запускать Python прямо в среде VS Code. Ознакомьтесь с документацией для получения дополнительной информации.
Разговор с машинами
История попыток заставить компьютеры понимать человеческий язык насчитывает десятилетия, и одним из первых ученых, задумавшихся об обработке естественного языка, был Алан Тьюринг.
Тест Тьюринга
Когда Тьюринг исследовал искусственный интеллект в 1950-х годах, он задумался, можно ли провести тест в форме разговора между человеком и компьютером (через переписку), где человек не был бы уверен, общается ли он с другим человеком или с компьютером.
Если после определенного времени общения человек не мог определить, что ответы исходят от компьютера, можно ли было бы сказать, что компьютер думает?
Вдохновение — "игра в подражание"
Идея для этого теста пришла из игры под названием Игра в подражание, где ведущий находится в комнате и должен определить, кто из двух людей (в другой комнате) является мужчиной, а кто — женщиной. Ведущий может отправлять записки и должен придумывать вопросы, ответы на которые помогут определить пол загадочного человека. Конечно, игроки в другой комнате пытаются запутать ведущего, отвечая так, чтобы ввести его в заблуждение, но при этом создавая видимость честных ответов.
Разработка Eliza
В 1960-х годах ученый из MIT по имени Джозеф Вейценбаум разработал Eliza, компьютерного "терапевта", который задавал человеку вопросы и создавал видимость понимания его ответов. Однако, хотя Eliza могла разбирать предложение и определять определенные грамматические конструкции и ключевые слова, чтобы дать разумный ответ, нельзя было сказать, что она понимает предложение. Если Eliza получала предложение в формате "Я чувствую себя грустным", она могла бы перестроить и заменить слова в предложении, чтобы сформировать ответ "Как долго вы чувствуете себя грустным?".
Это создавало впечатление, что Eliza понимает утверждение и задает уточняющий вопрос, тогда как на самом деле она просто меняла время и добавляла несколько слов. Если Eliza не могла определить ключевое слово, на которое у нее был ответ, она давала случайный ответ, который мог подходить к разным утверждениям. Eliza легко можно было обмануть, например, если пользователь писал "Вы — велосипед", она могла ответить "Как долго я являюсь велосипедом?", вместо более логичного ответа.
🎥 Нажмите на изображение выше, чтобы посмотреть видео о программе ELIZA
Примечание: Вы можете прочитать оригинальное описание Eliza, опубликованное в 1966 году, если у вас есть учетная запись ACM. Или прочитайте о Eliza на википедии.
Упражнение — программирование простого разговорного бота
Разговорный бот, как Eliza, — это программа, которая получает ввод от пользователя и создает видимость понимания и разумного ответа. В отличие от Eliza, наш бот не будет иметь множество правил, создающих видимость разумного разговора. Вместо этого наш бот будет обладать только одной способностью — поддерживать разговор с помощью случайных ответов, которые могут подойти для любого тривиального разговора.
План
Ваши шаги при создании разговорного бота:
- Вывести инструкции, объясняющие пользователю, как взаимодействовать с ботом.
- Запустить цикл:
- Принять ввод от пользователя.
- Если пользователь хочет выйти, завершить работу.
- Обработать ввод пользователя и определить ответ (в данном случае ответ — это случайный выбор из списка возможных общих ответов).
- Вывести ответ.
- Вернуться к шагу 2.
Создание бота
Давайте создадим бота. Начнем с определения некоторых фраз.
-
Создайте этого бота на Python с использованием следующих случайных ответов:
random_responses = ["That is quite interesting, please tell me more.", "I see. Do go on.", "Why do you say that?", "Funny weather we've been having, isn't it?", "Let's change the subject.", "Did you catch the game last night?"]Вот пример вывода, чтобы вас направить (ввод пользователя начинается с
>):Hello, I am Marvin, the simple robot. You can end this conversation at any time by typing 'bye' After typing each answer, press 'enter' How are you today? > I am good thanks That is quite interesting, please tell me more. > today I went for a walk Did you catch the game last night? > I did, but my team lost Funny weather we've been having, isn't it? > yes but I hope next week is better Let's change the subject. > ok, lets talk about music Why do you say that? > because I like music! Why do you say that? > bye It was nice talking to you, goodbye!Возможное решение задачи можно найти здесь.
✅ Остановитесь и подумайте
- Как вы думаете, могли бы случайные ответы "обмануть" кого-то, заставив поверить, что бот действительно понимает их?
- Какие функции нужны боту, чтобы быть более эффективным?
- Если бот действительно мог бы "понимать" смысл предложения, нужно ли ему "запоминать" смысл предыдущих предложений в разговоре?
🚀Задание
Выберите один из пунктов "остановитесь и подумайте" выше и попробуйте либо реализовать его в коде, либо написать решение на бумаге, используя псевдокод.
В следующем уроке вы узнаете о ряде других подходов к разбору естественного языка и машинному обучению.
Тест после лекции
Обзор и самостоятельное изучение
Ознакомьтесь с приведенными ниже ссылками для дальнейшего изучения.
Ссылки
- Шуберт, Ленхарт, "Компьютерная лингвистика", Энциклопедия философии Стэнфорда (весеннее издание 2020 года), Эдвард Н. Залта (ред.), URL = https://plato.stanford.edu/archives/spr2020/entries/computational-linguistics/.
- Принстонский университет "О WordNet." WordNet. Принстонский университет. 2010.
Задание
Отказ от ответственности:
Этот документ был переведен с помощью сервиса автоматического перевода Co-op Translator. Хотя мы стремимся к точности, пожалуйста, имейте в виду, что автоматические переводы могут содержать ошибки или неточности. Оригинальный документ на его родном языке следует считать авторитетным источником. Для получения критически важной информации рекомендуется профессиональный перевод человеком. Мы не несем ответственности за любые недоразумения или неправильные интерпретации, возникающие в результате использования данного перевода.

