|
|
<!--
|
|
|
CO_OP_TRANSLATOR_METADATA:
|
|
|
{
|
|
|
"original_hash": "be03c8182982b87ced155e4e9d1438e8",
|
|
|
"translation_date": "2025-09-06T08:40:54+00:00",
|
|
|
"source_file": "6-NLP/3-Translation-Sentiment/README.md",
|
|
|
"language_code": "ru"
|
|
|
}
|
|
|
-->
|
|
|
# Перевод и анализ настроений с использованием машинного обучения
|
|
|
|
|
|
В предыдущих уроках вы узнали, как создать базового бота с помощью библиотеки `TextBlob`, которая использует машинное обучение для выполнения базовых задач обработки естественного языка, таких как извлечение именных фраз. Еще одной важной задачей в области вычислительной лингвистики является точный _перевод_ предложения с одного языка на другой.
|
|
|
|
|
|
## [Тест перед лекцией](https://ff-quizzes.netlify.app/en/ml/)
|
|
|
|
|
|
Перевод — это сложная задача, усложненная тем, что существует тысячи языков, каждый из которых имеет свои уникальные грамматические правила. Один из подходов заключается в преобразовании формальных грамматических правил одного языка, например английского, в структуру, независимую от языка, а затем переводе путем обратного преобразования в другой язык. Этот подход включает следующие шаги:
|
|
|
|
|
|
1. **Идентификация**. Определение или маркировка слов в исходном языке как существительных, глаголов и т.д.
|
|
|
2. **Создание перевода**. Создание прямого перевода каждого слова в формате целевого языка.
|
|
|
|
|
|
### Пример предложения: с английского на ирландский
|
|
|
|
|
|
На английском языке предложение _I feel happy_ состоит из трех слов в следующем порядке:
|
|
|
|
|
|
- **подлежащее** (I)
|
|
|
- **сказуемое** (feel)
|
|
|
- **прилагательное** (happy)
|
|
|
|
|
|
Однако на ирландском языке то же самое предложение имеет совершенно другую грамматическую структуру — эмоции, такие как "*happy*" или "*sad*", выражаются как находящиеся *на вас*.
|
|
|
|
|
|
Английская фраза `I feel happy` на ирландском будет звучать как `Tá athas orm`. *Дословный* перевод будет `Счастье на мне`.
|
|
|
|
|
|
Ирландский носитель языка, переводя на английский, скажет `I feel happy`, а не `Happy is upon me`, потому что он понимает смысл предложения, даже если слова и структура предложения различны.
|
|
|
|
|
|
Формальный порядок слов в ирландском предложении:
|
|
|
|
|
|
- **глагол** (Tá или is)
|
|
|
- **прилагательное** (athas, или happy)
|
|
|
- **подлежащее** (orm, или upon me)
|
|
|
|
|
|
## Перевод
|
|
|
|
|
|
Программа для наивного перевода может переводить только слова, игнорируя структуру предложения.
|
|
|
|
|
|
✅ Если вы изучали второй (или третий и более) язык во взрослом возрасте, вы, возможно, начинали с того, что думали на родном языке, переводили концепцию слово за словом в своей голове на второй язык, а затем произносили перевод. Это похоже на то, что делают программы для наивного перевода. Важно выйти за рамки этого этапа, чтобы достичь беглости!
|
|
|
|
|
|
Наивный перевод приводит к плохим (а иногда и забавным) ошибкам перевода: `I feel happy` дословно переводится как `Mise bhraitheann athas` на ирландском. Это означает (дословно) `я чувствую счастье` и не является правильным ирландским предложением. Несмотря на то, что английский и ирландский языки используются на двух соседних островах, они очень разные, с различными грамматическими структурами.
|
|
|
|
|
|
> Вы можете посмотреть видео о лингвистических традициях Ирландии, например [это](https://www.youtube.com/watch?v=mRIaLSdRMMs)
|
|
|
|
|
|
### Подходы с использованием машинного обучения
|
|
|
|
|
|
До сих пор вы изучали подходы, основанные на формальных правилах обработки естественного языка. Другой подход заключается в игнорировании значения слов и _использовании машинного обучения для выявления закономерностей_. Это может работать в переводе, если у вас есть большое количество текстов (*корпус*) или текстов (*корпуса*) на исходном и целевом языках.
|
|
|
|
|
|
Например, рассмотрим случай с *Гордостью и предубеждением*, известным английским романом, написанным Джейн Остин в 1813 году. Если вы возьмете книгу на английском и ее перевод на *французский*, выполненный человеком, вы сможете выявить фразы, которые были _идиоматически_ переведены с одного языка на другой. Вы скоро попробуете это сделать.
|
|
|
|
|
|
Например, английская фраза `I have no money`, переведенная дословно на французский, может стать `Je n'ai pas de monnaie`. "Monnaie" — это сложный французский "ложный друг", так как "money" и "monnaie" не являются синонимами. Лучший перевод, который мог бы сделать человек, был бы `Je n'ai pas d'argent`, так как он лучше передает смысл того, что у вас нет денег (а не "мелочи", что является значением "monnaie").
|
|
|
|
|
|

|
|
|
|
|
|
> Изображение от [Jen Looper](https://twitter.com/jenlooper)
|
|
|
|
|
|
Если модель машинного обучения имеет достаточно человеческих переводов для построения модели, она может улучшить точность переводов, выявляя общие закономерности в текстах, которые ранее были переведены экспертами, владеющими обоими языками.
|
|
|
|
|
|
### Упражнение — перевод
|
|
|
|
|
|
Вы можете использовать `TextBlob` для перевода предложений. Попробуйте знаменитую первую строку из **Гордости и предубеждения**:
|
|
|
|
|
|
```python
|
|
|
from textblob import TextBlob
|
|
|
|
|
|
blob = TextBlob(
|
|
|
"It is a truth universally acknowledged, that a single man in possession of a good fortune, must be in want of a wife!"
|
|
|
)
|
|
|
print(blob.translate(to="fr"))
|
|
|
|
|
|
```
|
|
|
|
|
|
`TextBlob` довольно хорошо справляется с переводом: "C'est une vérité universellement reconnue, qu'un homme célibataire en possession d'une bonne fortune doit avoir besoin d'une femme!".
|
|
|
|
|
|
Можно утверждать, что перевод TextBlob гораздо точнее, чем французский перевод книги 1932 года, выполненный В. Леконтом и Ш. Прессуаром:
|
|
|
|
|
|
"C'est une vérité universelle qu'un célibataire pourvu d'une belle fortune doit avoir envie de se marier, et, si peu que l'on sache de son sentiment à cet egard, lorsqu'il arrive dans une nouvelle résidence, cette idée est si bien fixée dans l'esprit de ses voisins qu'ils le considèrent sur-le-champ comme la propriété légitime de l'une ou l'autre de leurs filles."
|
|
|
|
|
|
В данном случае перевод, выполненный с использованием машинного обучения, справляется лучше, чем переводчик-человек, который добавляет лишние слова для "ясности".
|
|
|
|
|
|
> Что здесь происходит? Почему TextBlob так хорошо справляется с переводом? Дело в том, что за кулисами используется Google Translate — сложный ИИ, способный анализировать миллионы фраз, чтобы предсказать лучшие строки для выполнения задачи. Здесь нет ничего ручного, и для использования `blob.translate` требуется подключение к интернету.
|
|
|
|
|
|
✅ Попробуйте перевести еще несколько предложений. Что лучше — машинный перевод или перевод человека? В каких случаях?
|
|
|
|
|
|
## Анализ настроений
|
|
|
|
|
|
Еще одна область, где машинное обучение может работать очень хорошо, — это анализ настроений. Немашинный подход к анализу настроений заключается в идентификации слов и фраз, которые являются "положительными" или "отрицательными". Затем, получив новый текст, можно вычислить общий баланс положительных, отрицательных и нейтральных слов, чтобы определить общий настрой.
|
|
|
|
|
|
Этот подход легко обмануть, как вы могли заметить в задаче с Марвином — предложение `Great, that was a wonderful waste of time, I'm glad we are lost on this dark road` является саркастическим, с негативным настроением, но простой алгоритм определяет слова 'great', 'wonderful', 'glad' как положительные, а 'waste', 'lost' и 'dark' как отрицательные. Общий настрой определяется этими противоречивыми словами.
|
|
|
|
|
|
✅ Остановитесь на секунду и подумайте, как мы передаем сарказм как носители языка. Интонация играет большую роль. Попробуйте произнести фразу "Ну, этот фильм был потрясающим" разными способами, чтобы понять, как ваш голос передает смысл.
|
|
|
|
|
|
### Подходы с использованием машинного обучения
|
|
|
|
|
|
Подход с использованием машинного обучения предполагает ручной сбор отрицательных и положительных текстов — твитов, отзывов о фильмах или чего-либо, где человек дал оценку *и* написал мнение. Затем можно применить методы обработки естественного языка к мнениям и оценкам, чтобы выявить закономерности (например, положительные отзывы о фильмах чаще содержат фразу 'Oscar worthy', чем отрицательные, или положительные отзывы о ресторанах чаще содержат слово 'gourmet', чем 'disgusting').
|
|
|
|
|
|
> ⚖️ **Пример**: Если вы работаете в офисе политика, и обсуждается новый закон, избиратели могут писать в офис письма в поддержку или против этого закона. Допустим, вам поручено читать письма и сортировать их на две группы: *за* и *против*. Если писем много, вы можете быть перегружены, пытаясь прочитать их все. Было бы здорово, если бы бот мог прочитать их за вас, понять их и определить, к какой группе относится каждое письмо.
|
|
|
>
|
|
|
> Один из способов достижения этого — использование машинного обучения. Вы бы обучили модель на части писем *против* и части писем *за*. Модель ассоциировала бы определенные фразы и слова с группой против и группой за, *но она не понимала бы содержание*, только то, что определенные слова и шаблоны чаще встречаются в письмах против или за. Вы могли бы протестировать модель на письмах, которые не использовались для обучения, и посмотреть, пришла ли она к тем же выводам, что и вы. Затем, когда вы будете довольны точностью модели, вы сможете обрабатывать будущие письма, не читая каждое из них.
|
|
|
|
|
|
✅ Звучит ли этот процесс как процессы, которые вы использовали в предыдущих уроках?
|
|
|
|
|
|
## Упражнение — сентиментальные предложения
|
|
|
|
|
|
Настроение измеряется с помощью *полярности* от -1 до 1, где -1 — это самое негативное настроение, а 1 — самое позитивное. Настроение также измеряется с помощью шкалы от 0 до 1 для объективности (0) и субъективности (1).
|
|
|
|
|
|
Посмотрите еще раз на *Гордость и предубеждение* Джейн Остин. Текст доступен здесь: [Project Gutenberg](https://www.gutenberg.org/files/1342/1342-h/1342-h.htm). Пример ниже показывает короткую программу, которая анализирует настроение первых и последних предложений книги и отображает их полярность настроения и оценку субъективности/объективности.
|
|
|
|
|
|
Вы должны использовать библиотеку `TextBlob` (описанную выше), чтобы определить `sentiment` (вам не нужно писать собственный калькулятор настроений) в следующей задаче.
|
|
|
|
|
|
```python
|
|
|
from textblob import TextBlob
|
|
|
|
|
|
quote1 = """It is a truth universally acknowledged, that a single man in possession of a good fortune, must be in want of a wife."""
|
|
|
|
|
|
quote2 = """Darcy, as well as Elizabeth, really loved them; and they were both ever sensible of the warmest gratitude towards the persons who, by bringing her into Derbyshire, had been the means of uniting them."""
|
|
|
|
|
|
sentiment1 = TextBlob(quote1).sentiment
|
|
|
sentiment2 = TextBlob(quote2).sentiment
|
|
|
|
|
|
print(quote1 + " has a sentiment of " + str(sentiment1))
|
|
|
print(quote2 + " has a sentiment of " + str(sentiment2))
|
|
|
```
|
|
|
|
|
|
Вы увидите следующий вывод:
|
|
|
|
|
|
```output
|
|
|
It is a truth universally acknowledged, that a single man in possession of a good fortune, must be in want # of a wife. has a sentiment of Sentiment(polarity=0.20952380952380953, subjectivity=0.27142857142857146)
|
|
|
|
|
|
Darcy, as well as Elizabeth, really loved them; and they were
|
|
|
both ever sensible of the warmest gratitude towards the persons
|
|
|
who, by bringing her into Derbyshire, had been the means of
|
|
|
uniting them. has a sentiment of Sentiment(polarity=0.7, subjectivity=0.8)
|
|
|
```
|
|
|
|
|
|
## Задача — проверить полярность настроений
|
|
|
|
|
|
Ваша задача — определить, используя полярность настроений, есть ли в *Гордости и предубеждении* больше абсолютно положительных предложений, чем абсолютно отрицательных. Для этой задачи вы можете предположить, что полярность 1 или -1 является абсолютно положительной или отрицательной соответственно.
|
|
|
|
|
|
**Шаги:**
|
|
|
|
|
|
1. Скачайте [копию Гордости и предубеждения](https://www.gutenberg.org/files/1342/1342-h/1342-h.htm) с Project Gutenberg в формате .txt. Удалите метаданные в начале и конце файла, оставив только оригинальный текст.
|
|
|
2. Откройте файл в Python и извлеките содержимое как строку.
|
|
|
3. Создайте TextBlob, используя строку книги.
|
|
|
4. Проанализируйте каждое предложение в книге в цикле.
|
|
|
1. Если полярность равна 1 или -1, сохраните предложение в массиве или списке положительных или отрицательных сообщений.
|
|
|
5. В конце выведите все положительные и отрицательные предложения (отдельно) и их количество.
|
|
|
|
|
|
Вот пример [решения](https://github.com/microsoft/ML-For-Beginners/blob/main/6-NLP/3-Translation-Sentiment/solution/notebook.ipynb).
|
|
|
|
|
|
✅ Проверка знаний
|
|
|
|
|
|
1. Настроение основано на словах, используемых в предложении, но понимает ли код *значение* слов?
|
|
|
2. Считаете ли вы, что полярность настроений точна, или, другими словами, согласны ли вы с оценками?
|
|
|
1. В частности, согласны ли вы или не согласны с абсолютно **положительной** полярностью следующих предложений?
|
|
|
* “What an excellent father you have, girls!” said she, when the door was shut.
|
|
|
* “Your examination of Mr. Darcy is over, I presume,” said Miss Bingley; “and pray what is the result?” “I am perfectly convinced by it that Mr. Darcy has no defect.
|
|
|
* How wonderfully these sort of things occur!
|
|
|
* I have the greatest dislike in the world to that sort of thing.
|
|
|
* Charlotte is an excellent manager, I dare say.
|
|
|
* “This is delightful indeed!
|
|
|
* I am so happy!
|
|
|
* Your idea of the ponies is delightful.
|
|
|
2. Следующие 3 предложения были оценены как абсолютно положительные, но при внимательном прочтении они не являются положительными. Почему анализ настроений решил, что они положительные?
|
|
|
* Happy shall I be, when his stay at Netherfield is over!” “I wish I could say anything to comfort you,” replied Elizabeth; “but it is wholly out of my power.
|
|
|
* If I could but see you as happy!
|
|
|
* Our distress, my dear Lizzy, is very great.
|
|
|
3. Согласны ли вы или не согласны с абсолютно **отрицательной** полярностью следующих предложений?
|
|
|
- Everybody is disgusted with his pride.
|
|
|
- “I should like to know how he behaves among strangers.” “You shall hear then—but prepare yourself for something very dreadful.
|
|
|
- The pause was to Elizabeth’s feelings dreadful.
|
|
|
- It would be dreadful!
|
|
|
|
|
|
✅ Любой поклонник Джейн Остин поймет, что она часто использует свои книги для критики более нелепых аспектов английского общества эпохи Регентства. Элизабет Беннет, главная героиня *Гордости и предубеждения*, является тонким социальным наблюдателем (как и автор), и ее язык часто сильно нюансирован. Даже мистер Дарси (любовный интерес в истории) отмечает игривое и дразнящее использование языка Элизабет: "Я достаточно долго знаком с вами, чтобы знать, что вы находите большое удовольствие в том, чтобы иногда высказывать мнения, которые на самом деле не являются вашими собственными."
|
|
|
|
|
|
---
|
|
|
|
|
|
## 🚀Задача
|
|
|
|
|
|
Можете ли вы сделать Марвина еще лучше, извлекая другие особенности из пользовательского ввода?
|
|
|
|
|
|
## [Тест после лекции](https://ff-quizzes.netlify.app/en/ml/)
|
|
|
|
|
|
## Обзор и самостоятельное изучение
|
|
|
Существует множество способов извлечения настроения из текста. Подумайте о бизнес-приложениях, которые могут использовать эту технику. Подумайте о том, как она может дать сбой. Узнайте больше о сложных системах корпоративного уровня, которые анализируют настроение, таких как [Azure Text Analysis](https://docs.microsoft.com/azure/cognitive-services/Text-Analytics/how-tos/text-analytics-how-to-sentiment-analysis?tabs=version-3-1?WT.mc_id=academic-77952-leestott). Протестируйте некоторые из предложений из "Гордости и предубеждения", приведенных выше, и посмотрите, сможет ли система уловить нюансы.
|
|
|
|
|
|
## Задание
|
|
|
|
|
|
[Поэтическая лицензия](assignment.md)
|
|
|
|
|
|
---
|
|
|
|
|
|
**Отказ от ответственности**:
|
|
|
Этот документ был переведен с помощью сервиса автоматического перевода [Co-op Translator](https://github.com/Azure/co-op-translator). Хотя мы стремимся к точности, пожалуйста, учитывайте, что автоматические переводы могут содержать ошибки или неточности. Оригинальный документ на его исходном языке следует считать авторитетным источником. Для получения критически важной информации рекомендуется профессиональный перевод человеком. Мы не несем ответственности за любые недоразумения или неправильные интерпретации, возникшие в результате использования данного перевода. |