20 KiB
Введение в обработку естественного языка
Этот урок охватывает краткую историю и важные концепции обработки естественного языка, подполе компьютерной лингвистики.
Предварительный тест
Введение
NLP, как его обычно называют, является одной из самых известных областей, в которых машинное обучение было применено и использовано в программном обеспечении на производстве.
✅ Можете ли вы вспомнить программное обеспечение, которое вы используете каждый день и которое, вероятно, имеет встроенные элементы NLP? Как насчет ваших текстовых процессоров или мобильных приложений, которые вы используете регулярно?
Вы узнаете о:
- Идее языков. Как развивались языки и какие основные области изучения существовали.
- Определениях и концепциях. Вы также узнаете определения и концепции о том, как компьютеры обрабатывают текст, включая парсинг, грамматику и определение существительных и глаголов. В этом уроке есть несколько задач по программированию, и будут представлены несколько важных концепций, которые вы научитесь кодировать позже в следующих уроках.
Компьютерная лингвистика
Компьютерная лингвистика — это область исследований и разработок на протяжении многих десятилетий, которая изучает, как компьютеры могут работать с языками, а также понимать, переводить и общаться на них. Обработка естественного языка (NLP) — это смежная область, сосредоточенная на том, как компьютеры могут обрабатывать «естественные», или человеческие, языки.
Пример — диктовка на телефоне
Если вы когда-либо диктовали своему телефону вместо того, чтобы печатать, или задавали вопрос виртуальному помощнику, ваша речь была преобразована в текстовый формат, а затем обработана или разобрана на языке, на котором вы говорили. Обнаруженные ключевые слова затем обрабатывались в формате, который телефон или помощник могли понять и на который могли реагировать.
Реальное лингвистическое понимание — это сложно! Изображение от Jen Looper
Как эта технология становится возможной?
Это возможно, потому что кто-то написал компьютерную программу для этого. Несколько десятилетий назад некоторые писатели научной фантастики предсказывали, что люди в основном будут разговаривать со своими компьютерами, и компьютеры всегда будут точно понимать, что они имеют в виду. К сожалению, оказалось, что это более сложная проблема, чем многие предполагали, и хотя сегодня это гораздо лучше понимаемая проблема, существуют значительные трудности в достижении «совершенной» обработки естественного языка, когда дело доходит до понимания смысла предложения. Это особенно трудная задача, когда речь идет о понимании юмора или распознавании эмоций, таких как сарказм, в предложении.
На этом этапе вы, возможно, вспоминаете школьные занятия, на которых учитель разбирал части грамматики в предложении. В некоторых странах студентам преподают грамматику и лингвистику как отдельный предмет, но во многих эти темы включены в процесс изучения языка: либо вашего родного языка в начальной школе (обучение чтению и письму), либо, возможно, второго языка в средней школе. Не беспокойтесь, если вы не являетесь экспертом в различении существительных и глаголов или наречий и прилагательных!
Если вы испытываете трудности с различием между простым настоящим и настоящим продолженным, вы не одиноки. Это сложная задача для многих людей, даже для носителей языка. Хорошая новость в том, что компьютеры действительно хорошо применяют формальные правила, и вы научитесь писать код, который может разбирать предложение так же, как и человек. Более серьезной задачей, которую вы рассмотрите позже, будет понимание смысла и настроения предложения.
Предварительные требования
Для этого урока основным предварительным требованием является возможность читать и понимать язык этого урока. Нет математических задач или уравнений для решения. Хотя оригинальный автор написал этот урок на английском, он также переведен на другие языки, поэтому вы можете читать перевод. Есть примеры, в которых используется несколько разных языков (для сравнения различных грамматических правил разных языков). Эти примеры не переведены, но пояснительный текст переведен, поэтому смысл должен быть понятен.
Для задач по программированию вы будете использовать 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-х годах, он рассматривал возможность проведения разговорного теста с человеком и компьютером (через текстовую переписку), где человек в разговоре не был уверен, общается ли он с другим человеком или с компьютером.
Если после определенной длины разговора человек не мог определить, были ли ответы от компьютера или нет, можно ли сказать, что компьютер думает?
Вдохновение - 'игра в подражание'
Идея для этого пришла из игры на вечеринке под названием Игра в подражание, где допросчик один в комнате и должен определить, кто из двух человек (в другой комнате) является мужчиной, а кто женщиной. Допросчик может отправлять записки и должен попытаться придумать вопросы, на которые письменные ответы раскрывают пол загадочного человека. Конечно, игроки в другой комнате пытаются обмануть допросчика, отвечая на вопросы так, чтобы сбить его с толку, одновременно создавая видимость честного ответа.
Разработка Элизы
В 1960-х годах ученый MIT Джозеф Вайзенбаум разработал Элизу, компьютерного 'терапевта', который задавал человеку вопросы и создавал видимость понимания их ответов. Однако, хотя Элиза могла разбирать предложение и определять определенные грамматические конструкции и ключевые слова, чтобы дать разумный ответ, нельзя было сказать, что она понимает предложение. Если Элизе представили предложение формата "Я грустный", она могла бы переставить и заменить слова в предложении, чтобы сформировать ответ "Как долго ты был грустным?".
Это создавало впечатление, что Элиза понимает утверждение и задает последующий вопрос, тогда как на самом деле она меняла время и добавляла некоторые слова. Если Элиза не могла определить ключевое слово, на которое у нее был ответ, она бы вместо этого дала случайный ответ, который мог бы подойти ко многим различным утверждениям. Элизу можно было легко обмануть, например, если пользователь написал "Ты велосипед", она могла бы ответить "Как долго я был велосипедом?", вместо более разумного ответа.
🎥 Нажмите на изображение выше, чтобы посмотреть видео о оригинальной программе ЭЛИЗА
Примечание: Вы можете прочитать оригинальное описание Элизы, опубликованное в 1966 году, если у вас есть аккаунт ACM. В противном случае прочитайте о Элизе на википедии
Упражнение - кодирование базового разговорного бота
Разговорный бот, подобный Элизе, — это программа, которая вызывает ввод пользователя и кажется, что понимает и отвечает разумно. В отличие от Элизы, наш бот не будет иметь нескольких правил, создающих видимость ведения разумного разговора. Вместо этого наш бот будет иметь только одну способность — поддерживать разговор с помощью случайных ответов, которые могут подойти почти к любому тривиальному разговору.
План
Ваши шаги при создании разговорного бота:
- Вывести инструкции, advising пользователя, как взаимодействовать с ботом
- Начать цикл
- Принять ввод пользователя
- Если пользователь попросил выйти, выйти
- Обработать ввод пользователя и определить ответ (в этом случае ответ — это случайный выбор из списка возможных общих ответов)
- Вывести ответ
- Вернуться к шагу 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!
Один из возможных решений задачи можно найти здесь
✅ Остановитесь и подумайте
- Как вы думаете, случайные ответы могли бы 'обмануть' кого-то, заставив его думать, что бот на самом деле понимал их?
- Какие функции нужны боту, чтобы быть более эффективным?
- Если бот действительно мог бы 'понимать' смысл предложения, нужно ли ему 'помнить' смысл предыдущих предложений в разговоре тоже?
🚀Задача
Выберите один из элементов "остановитесь и подумайте" выше и попробуйте реализовать его в коде или напишите решение на бумаге, используя псевдокод.
В следующем уроке вы узнаете о ряде других подходов к парсингу естественного языка и машинному обучению.
Пост-тест
Обзор и самообучение
Посмотрите на ссылки ниже как на дополнительные возможности для чтения.
Ссылки
- Schubert, Lenhart, "Computational Linguistics", The Stanford Encyclopedia of Philosophy (Spring 2020 Edition), Edward N. Zalta (ed.), URL = https://plato.stanford.edu/archives/spr2020/entries/computational-linguistics/.
- Princeton University "About WordNet." WordNet. Princeton University. 2010.
Задание
Отказ от ответственности:
Этот документ был переведен с использованием услуг машинного перевода на основе ИИ. Хотя мы стремимся к точности, пожалуйста, имейте в виду, что автоматические переводы могут содержать ошибки или неточности. Оригинальный документ на его родном языке следует считать авторитетным источником. Для критически важной информации рекомендуется профессиональный человеческий перевод. Мы не несем ответственности за любые недоразумения или неправильные толкования, возникающие в результате использования этого перевода.