|
|
<!--
|
|
|
CO_OP_TRANSLATOR_METADATA:
|
|
|
{
|
|
|
"original_hash": "1c2ec40cf55c98a028a359c27ef7e45a",
|
|
|
"translation_date": "2025-09-06T08:40:27+00:00",
|
|
|
"source_file": "6-NLP/1-Introduction-to-NLP/README.md",
|
|
|
"language_code": "ru"
|
|
|
}
|
|
|
-->
|
|
|
# Введение в обработку естественного языка
|
|
|
|
|
|
Этот урок охватывает краткую историю и важные концепции *обработки естественного языка*, подполе *компьютерной лингвистики*.
|
|
|
|
|
|
## [Тест перед лекцией](https://ff-quizzes.netlify.app/en/ml/)
|
|
|
|
|
|
## Введение
|
|
|
|
|
|
Обработка естественного языка (NLP), как ее часто называют, является одной из самых известных областей, где машинное обучение было применено и используется в программном обеспечении.
|
|
|
|
|
|
✅ Можете ли вы вспомнить программное обеспечение, которое вы используете каждый день и которое, вероятно, включает элементы NLP? А как насчет ваших текстовых редакторов или мобильных приложений, которые вы используете регулярно?
|
|
|
|
|
|
Вы узнаете о:
|
|
|
|
|
|
- **Идее языков**. Как развивались языки и какие основные области изучения были.
|
|
|
- **Определениях и концепциях**. Вы также узнаете определения и концепции о том, как компьютеры обрабатывают текст, включая синтаксический анализ, грамматику и идентификацию существительных и глаголов. В этом уроке есть несколько задач по программированию, а также вводятся важные концепции, которые вы научитесь программировать в следующих уроках.
|
|
|
|
|
|
## Компьютерная лингвистика
|
|
|
|
|
|
Компьютерная лингвистика — это область исследований и разработок, которая изучает, как компьютеры могут работать с языками, понимать их, переводить и даже общаться. Обработка естественного языка (NLP) — это смежная область, сосредоточенная на том, как компьютеры могут обрабатывать "естественные", то есть человеческие, языки.
|
|
|
|
|
|
### Пример — диктовка на телефоне
|
|
|
|
|
|
Если вы когда-либо диктовали текст своему телефону вместо того, чтобы печатать, или задавали вопрос виртуальному помощнику, ваша речь была преобразована в текстовую форму, а затем обработана или *проанализирована* на языке, на котором вы говорили. Обнаруженные ключевые слова затем были обработаны в формате, который телефон или помощник могли понять и использовать.
|
|
|
|
|
|

|
|
|
> Настоящее лингвистическое понимание — это сложно! Изображение от [Jen Looper](https://twitter.com/jenlooper)
|
|
|
|
|
|
### Как эта технология стала возможной?
|
|
|
|
|
|
Это стало возможным благодаря тому, что кто-то написал компьютерную программу для выполнения этой задачи. Несколько десятилетий назад некоторые писатели-фантасты предсказывали, что люди будут в основном разговаривать с компьютерами, и компьютеры всегда будут точно понимать, что они имеют в виду. К сожалению, оказалось, что это более сложная задача, чем многие представляли, и хотя сегодня она гораздо лучше изучена, существуют значительные трудности в достижении "идеальной" обработки естественного языка, особенно когда дело касается понимания смысла предложения. Это особенно сложная задача, когда речь идет о понимании юмора или выявлении эмоций, таких как сарказм, в предложении.
|
|
|
|
|
|
На этом этапе вы, возможно, вспомните школьные уроки, где учитель объяснял части грамматики в предложении. В некоторых странах студентов обучают грамматике и лингвистике как отдельному предмету, но во многих эти темы включены в изучение языка: либо вашего первого языка в начальной школе (обучение чтению и письму), либо, возможно, второго языка в средней школе. Не переживайте, если вы не являетесь экспертом в различении существительных от глаголов или наречий от прилагательных!
|
|
|
|
|
|
Если вы затрудняетесь с различием между *простым настоящим временем* и *настоящим продолженным временем*, вы не одиноки. Это сложная задача для многих людей, даже для носителей языка. Хорошая новость заключается в том, что компьютеры очень хорошо применяют формальные правила, и вы научитесь писать код, который может *анализировать* предложение так же хорошо, как человек. Большая сложность, которую вы изучите позже, заключается в понимании *смысла* и *настроения* предложения.
|
|
|
|
|
|
## Предварительные требования
|
|
|
|
|
|
Для этого урока основным предварительным требованием является способность читать и понимать язык урока. Здесь нет математических задач или уравнений для решения. Хотя оригинальный автор написал этот урок на английском языке, он также переведен на другие языки, так что вы можете читать перевод. Есть примеры, где используются несколько разных языков (для сравнения различных грамматических правил). Они *не* переведены, но пояснительный текст переведен, так что смысл должен быть понятен.
|
|
|
|
|
|
Для задач по программированию вы будете использовать Python, а примеры написаны на Python 3.8.
|
|
|
|
|
|
В этом разделе вам понадобятся и будут использоваться:
|
|
|
|
|
|
- **Понимание Python 3**. Понимание языка программирования Python 3, этот урок использует ввод данных, циклы, чтение файлов, массивы.
|
|
|
- **Visual Studio Code + расширение**. Мы будем использовать Visual Studio Code и его расширение для Python. Вы также можете использовать любой IDE для Python на ваш выбор.
|
|
|
- **TextBlob**. [TextBlob](https://github.com/sloria/TextBlob) — это упрощенная библиотека обработки текста для Python. Следуйте инструкциям на сайте TextBlob, чтобы установить его на вашу систему (установите также корпуса, как показано ниже):
|
|
|
|
|
|
```bash
|
|
|
pip install -U textblob
|
|
|
python -m textblob.download_corpora
|
|
|
```
|
|
|
|
|
|
> 💡 Совет: Вы можете запускать Python прямо в среде VS Code. Ознакомьтесь с [документацией](https://code.visualstudio.com/docs/languages/python?WT.mc_id=academic-77952-leestott) для получения дополнительной информации.
|
|
|
|
|
|
## Общение с машинами
|
|
|
|
|
|
История попыток заставить компьютеры понимать человеческий язык насчитывает десятилетия, и одним из первых ученых, задумавшихся о обработке естественного языка, был *Алан Тьюринг*.
|
|
|
|
|
|
### Тест Тьюринга
|
|
|
|
|
|
Когда Тьюринг исследовал *искусственный интеллект* в 1950-х годах, он задумался, можно ли провести тест, в котором человек и компьютер (через переписку) общаются, и человек не уверен, общается ли он с другим человеком или с компьютером.
|
|
|
|
|
|
Если после определенного времени общения человек не может определить, что ответы исходят от компьютера, можно ли сказать, что компьютер *думает*?
|
|
|
|
|
|
### Вдохновение — "игра в подражание"
|
|
|
|
|
|
Идея для этого теста пришла из игры под названием *Игра в подражание*, где ведущий находится в комнате и должен определить, кто из двух людей (в другой комнате) является мужчиной, а кто женщиной. Ведущий может отправлять записки и должен придумать вопросы, ответы на которые помогут определить пол загадочного человека. Конечно, участники в другой комнате пытаются запутать ведущего, отвечая на вопросы так, чтобы ввести его в заблуждение, но при этом создавая видимость честных ответов.
|
|
|
|
|
|
### Разработка Элизы
|
|
|
|
|
|
В 1960-х годах ученый из MIT *Джозеф Вейценбаум* разработал [*Элизу*](https://wikipedia.org/wiki/ELIZA), компьютерного "терапевта", который задавал человеку вопросы и создавал видимость понимания его ответов. Однако, хотя Элиза могла анализировать предложение и идентифицировать определенные грамматические конструкции и ключевые слова, чтобы дать разумный ответ, нельзя было сказать, что она *понимает* предложение. Если Элизе было представлено предложение в формате "**Я** <u>грустный</u>", она могла бы переставить и заменить слова в предложении, чтобы сформировать ответ "Как долго **вы были** <u>грустным</u>".
|
|
|
|
|
|
Это создавало впечатление, что Элиза понимает утверждение и задает уточняющий вопрос, тогда как на самом деле она просто меняла время и добавляла некоторые слова. Если Элиза не могла идентифицировать ключевое слово, для которого у нее был ответ, она давала случайный ответ, который мог быть применим к многим различным утверждениям. Элизу можно было легко обмануть, например, если пользователь писал "**Вы** <u>велосипед</u>", она могла бы ответить "Как долго **я был** <u>велосипедом</u>?", вместо более разумного ответа.
|
|
|
|
|
|
[](https://youtu.be/RMK9AphfLco "Разговор с Элизой")
|
|
|
|
|
|
> 🎥 Нажмите на изображение выше, чтобы посмотреть видео о программе Элиза
|
|
|
|
|
|
> Примечание: Вы можете прочитать оригинальное описание [Элизы](https://cacm.acm.org/magazines/1966/1/13317-elizaa-computer-program-for-the-study-of-natural-language-communication-between-man-and-machine/abstract), опубликованное в 1966 году, если у вас есть учетная запись ACM. Или прочитайте об Элизе на [википедии](https://wikipedia.org/wiki/ELIZA).
|
|
|
|
|
|
## Упражнение — программирование простого разговорного бота
|
|
|
|
|
|
Разговорный бот, как Элиза, — это программа, которая получает ввод от пользователя и создает видимость понимания и разумного ответа. В отличие от Элизы, наш бот не будет иметь множество правил, создающих видимость разумного разговора. Вместо этого наш бот будет обладать одной способностью — поддерживать разговор с помощью случайных ответов, которые могут подойти для почти любого тривиального разговора.
|
|
|
|
|
|
### План
|
|
|
|
|
|
Ваши шаги при создании разговорного бота:
|
|
|
|
|
|
1. Вывести инструкции, объясняющие пользователю, как взаимодействовать с ботом
|
|
|
2. Запустить цикл
|
|
|
1. Принять ввод от пользователя
|
|
|
2. Если пользователь попросил выйти, завершить работу
|
|
|
3. Обработать ввод пользователя и определить ответ (в данном случае ответ — это случайный выбор из списка возможных общих ответов)
|
|
|
4. Вывести ответ
|
|
|
3. Вернуться к шагу 2
|
|
|
|
|
|
### Создание бота
|
|
|
|
|
|
Давайте создадим бота. Начнем с определения некоторых фраз.
|
|
|
|
|
|
1. Создайте этого бота самостоятельно на Python, используя следующие случайные ответы:
|
|
|
|
|
|
```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?"]
|
|
|
```
|
|
|
|
|
|
Вот пример вывода, который может вас направить (ввод пользователя начинается с `>`):
|
|
|
|
|
|
```output
|
|
|
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!
|
|
|
```
|
|
|
|
|
|
Одно из возможных решений задачи находится [здесь](https://github.com/microsoft/ML-For-Beginners/blob/main/6-NLP/1-Introduction-to-NLP/solution/bot.py)
|
|
|
|
|
|
✅ Остановитесь и подумайте
|
|
|
|
|
|
1. Как вы думаете, случайные ответы могли бы "обмануть" кого-то, заставив думать, что бот действительно понимает их?
|
|
|
2. Какие функции понадобились бы боту, чтобы быть более эффективным?
|
|
|
3. Если бот действительно мог бы "понимать" смысл предложения, нужно ли ему "запоминать" смысл предыдущих предложений в разговоре?
|
|
|
|
|
|
---
|
|
|
|
|
|
## 🚀Задача
|
|
|
|
|
|
Выберите один из элементов "остановитесь и подумайте" выше и попробуйте либо реализовать его в коде, либо написать решение на бумаге, используя псевдокод.
|
|
|
|
|
|
В следующем уроке вы узнаете о ряде других подходов к анализу естественного языка и машинному обучению.
|
|
|
|
|
|
## [Тест после лекции](https://ff-quizzes.netlify.app/en/ml/)
|
|
|
|
|
|
## Обзор и самостоятельное изучение
|
|
|
|
|
|
Ознакомьтесь с приведенными ниже ссылками для дальнейшего изучения.
|
|
|
|
|
|
### Ссылки
|
|
|
|
|
|
1. Шуберт, Ленхарт, "Компьютерная лингвистика", *Stanford Encyclopedia of Philosophy* (Spring 2020 Edition), Edward N. Zalta (ed.), URL = <https://plato.stanford.edu/archives/spr2020/entries/computational-linguistics/>.
|
|
|
2. Принстонский университет "О WordNet." [WordNet](https://wordnet.princeton.edu/). Принстонский университет. 2010.
|
|
|
|
|
|
## Задание
|
|
|
|
|
|
[Найдите бота](assignment.md)
|
|
|
|
|
|
---
|
|
|
|
|
|
**Отказ от ответственности**:
|
|
|
Этот документ был переведен с помощью сервиса автоматического перевода [Co-op Translator](https://github.com/Azure/co-op-translator). Хотя мы стремимся к точности, пожалуйста, учитывайте, что автоматические переводы могут содержать ошибки или неточности. Оригинальный документ на его исходном языке следует считать авторитетным источником. Для получения критически важной информации рекомендуется профессиональный перевод человеком. Мы не несем ответственности за любые недоразумения или неправильные интерпретации, возникшие в результате использования данного перевода. |