<jupyter_start><jupyter_text>**Класи задач, що розв’язують НМ** Основні класи задач, що вирішуються штучними НМ: класифікація, регресіяБільш детально для загального поняття НМ: апроксимація функцій, кластеризація, візуальне розпізнання об'єктів, обробка природньої мови, і т.д. **Етапи побудови проекту з НМ** 1. Постановка задачі2. Отримання даних3. Початковий аналіз даних4. Підготовка даних для більш чіткої категоризації, у форматі, прийнятному для імплементації нейронної мережі5. Дослідження різних моделей та обрання найкращої6. Точне налаштування моделі7. Запуск системи, спостереження та супровід **Функція завантаження навчаючої та тестової вибірки. Детально на прикладі** Коли виконуємо навчання з вчителем, ми повинні мати навчаючу та тестову вибірку. Це правильні вхідні та вихідні дані: навчаюча вибірка використовується для навчання (fitting) моделі саме на її даних, а тестова вибірка використовується для оцінки якості. Це розділення довзоляє виявити overfitting.```(x_train, y_train), (x_test, y_test) = fashion_mnist.load_data()```* `x_train` - масив навчаючих вхідних даних. у нашому випадку це масив масивів піксельних даних, тобто зображення одягу* `y_train` - масив відповідних навчаючих вихідних даних, той самий розмір, скільки у `x_train`. У нашому випадку це значення 0..10, що вказує на клас, якому належить зображений одяг (краще виконати додаткову обробку і перетворити в one-hot encoding)* `x_test` - масив тестових вхідних даних, аналогічно з x_train* `y_test` - масив відповідних тестових вихідних даних, той самий розмір, скільки у `x_test`. Аналогічно з y_train. **Дослідження даних. Основні функції. Розбиття даних на перевірочні та тестові.** Для дослідження даних зручно викроистовувати Pandas DataFrame. Спочатку завантажуємо дані з .csv, а потім:*   `info` - виводить загальну інформацію про колонки, їх типи даних та кількіть не-null елементів*  `head()` - виводить перші строки таблиці* `describe()` - статистичні даніТакож завдяки інтеграції Seaborn з pyplot маємо можливість візуалізувати дані. Наприклад, `sns.pairplot` надає зручний спосіб виявити кореляції між парами змінних.Дослідивши дані, можна автоматично розділити їх на тестові та навчаючі. Функції, такі як`keras.preprocessing.image_dataset_from_directory` або `Model.fit` приймають параметр "validation_split", що дозволяють задати відсоткове співвідношення тестових даних із загальної вибірки. **Оцінка якості роботи НМ** Існують різні функції оцінки роботи НМ (середньоквадтратична помилка, `keras.CategoricalAccuracy`, `keras.BinaryAccuracy`). Всі вони певним чином визначають наближеність даних на виході мережі, що навчається, до справжніх тестових/валідаційних даних; або ж вірогідність надання правильної відповіді.Якщо бачимо, що на навчальних даних "якість" близька до 100%, а на тестових/валідаційних даних вона значно менща, це свідчить про overfitting - тобто мережа пристосувалася саме до конкретної вибірки навчальних даних, а не виявила їх загальні характеристики.В такому випадку можна збільшити набір тестових даних, або зменшити такі гіперпараметри, як кількість епох навчання, кількість шарів або нейронів НМ. **Обрати текст (книгу) з ресурсу запропонованого на лекції. Підготувати його довикористання.** Франкенштейн.У текстовому редакторі виконана підготовка: видалені на початку та в кінці тексту технічний та легальний текст про Project Guthenberg.<jupyter_code>!wget 'https://raw.githubusercontent.com/gardenappl/uni/main/semester7/nn/pg41445.txt'
!head pg41445.txt
!tail pg41445.txt<jupyter_output>away; my ashes will be swept into the sea by the winds. My spirit will
sleep in peace; or if it thinks, it will not surely think thus.
Farewell.”

He sprung from the cabin-window, as he said this, upon the ice-raft
which lay close to the vessel. He was soon borne away by the waves, and
lost in darkness and distance.


THE END.<jupyter_text>**Обрати 10 речень. Визначити емоційне забарвлення тексту та окремо речень. Зробитивисновки.**<jupyter_code>from textblob import TextBlob
blob = TextBlob("""The event on which this fiction is founded has been supposed, by Dr.
Darwin, and some of the physiological writers of Germany, as not of
impossible occurrence. I shall not be supposed as according the remotest
degree of serious faith to such an imagination; yet, in assuming it as
the basis of a work of fancy, I have not considered myself as merely
weaving a series of supernatural terrors. The event on which the
interest of the story depends is exempt from the disadvantages of a mere
tale of spectres or enchantment. It was recommended by the novelty of
the situations which it developes; and, however impossible as a physical
fact, affords a point of view to the imagination for the delineating of
human passions more comprehensive and commanding than any which the
ordinary relations of existing events can yield.

It is a subject also of additional interest to the author, that this
story was begun in the majestic region where the scene is principally
laid, and in society which cannot cease to be regretted. I passed the
summer of 1816 in the environs of Geneva. The season was cold and rainy,
and in the evenings we crowded around a blazing wood fire, and
occasionally amused ourselves with some German stories of ghosts, which
happened to fall into our hands. These tales excited in us a playful
desire of imitation. Two other friends (a tale from the pen of one of
whom would be far more acceptable to the public than any thing I can
ever hope to produce) and myself agreed to write each a story, founded
on some supernatural occurrence.

The weather, however, suddenly became serene; and my two friends left me
on a journey among the Alps, and lost, in the magnificent scenes which
they present, all memory of their ghostly visions. The following tale is
the only one which has been completed.""")
blob.sentiment<jupyter_output><empty_output><jupyter_text>Забарвлення негативне, суб'єктивне<jupyter_code>import nltk
nltk.download('punkt')
for sentence in blob.sentences:
  print(sentence.sentiment)<jupyter_output>Sentiment(polarity=-0.6666666666666666, subjectivity=1.0)
Sentiment(polarity=-0.16666666666666666, subjectivity=0.5583333333333333)
Sentiment(polarity=-0.5, subjectivity=0.5)
Sentiment(polarity=-0.08333333333333333, subjectivity=0.44857142857142857)
Sentiment(polarity=-0.16666666666666666, subjectivity=0.3333333333333333)
Sentiment(polarity=0.0, subjectivity=0.0)
Sentiment(polarity=-0.19999999999999998, subjectivity=0.375)
Sentiment(polarity=0.12083333333333333, subjectivity=0.375)
Sentiment(polarity=0.12833333333333333, subjectivity=0.5016666666666667)
Sentiment(polarity=0.25, subjectivity=0.375)
Sentiment(polarity=0.0, subjectivity=0.55)<jupyter_text>Найпозитивніше речення - передостаннє (напевно через 'magnificent scenes') **В текстовому описі вказати слова з помилками. Ввести в текст їх самостійно. Визначитиймовірність можливого виправлення помилок в цих словах(реченнях).** fitcion, Grmany, disadvantges, imposssible<jupyter_code>bad_blob = TextBlob("""The event on which this fitcion is founded has been supposed, by Dr.
Darwin, and some of the physiological writers of Grmany, as not of
impossible occurrence. I shall not be supposed as according the remotest
degree of serious faith to such an imagination; yet, in assuming it as
the basis of a work of fancy, I have not considered myself as merely
weaving a series of supernatural terrors. The event on which the
interest of the story depends is exempt from the disadvantges of a mere
tale of spectres or enchantment. It was recommended by the novelty of
the situations which it developes; and, however imposssible as a physical
fact, affords a point of view to the imagination for the delineating of
human passions more comprehensive and commanding than any which the
ordinary relations of existing events can yield.

It is a subject also of additional interest to the author, that this
story was begun in the majestic region where the scene is principally
laid, and in society which cannot cease to be regretted. I passed the
summer of 1816 in the environs of Geneva. The season was cold and rainy,
and in the evenings we crowded around a blazing wood fire, and
occasionally amused ourselves with some German stories of ghosts, which
happened to fall into our hands. These tales excited in us a playful
desire of imitation. Two other friends (a tale from the pen of one of
whom would be far more acceptable to the public than any thing I can
ever hope to produce) and myself agreed to write each a story, founded
on some supernatural occurrence.

The weather, however, suddenly became serene; and my two friends left me
on a journey among the Alps, and lost, in the magnificent scenes which
they present, all memory of their ghostly visions. The following tale is
the only one which has been completed.""")
for word in bad_blob.words:
  check_results = word.spellcheck()
  if check_results[0][0] != word:
    print(word, check_results)<jupyter_output>fitcion [('fiction', 1.0)]
Dr [('Or', 0.9176954732510288), ('Mr', 0.06172839506172839), ('R', 0.009087791495198902), ('Dr', 0.00823045267489712), ('Fr', 0.0008573388203017832), ('Er', 0.0008573388203017832), ('Gr', 0.0006858710562414266), ('Jr', 0.0003429355281207133), ('Tr', 0.00017146776406035664), ('Br', 0.00017146776406035664), ('Ar', 0.00017146776406035664)]
Grmany [('Many', 0.8982300884955752), ('Germany', 0.10176991150442478)]
disadvantges [('disadvantages', 1.0)]
spectres [('specters', 1.0)]
developes [('developed', 0.7727272727272727), ('develops', 0.21212121212121213), ('developer', 0.015151515151515152)]
imposssible [('impossible', 1.0)]
delineating [('deliberating', 1.0)]<jupyter_text>Схоже, що слово "developes" помилкове (принаймні в сучасній англійській мові не вживається). Також бібліотека не розуміє справді існуючі слова 'Dr', 'delineating' та 'spectres' (останнє слово - британське). Інші слова визначено правильно. Ймовірність виправлення виведена зверху. **Побудувати візуалізацію частот входження слів. Подати у вигляді словарної хмари. Формустворити самостійно.** Сортуємо слова за кількістю.<jupyter_code>from nltk.corpus import stopwords
nltk.download('stopwords')
stops = stopwords.words('english')

import requests
text = requests.get('https://raw.githubusercontent.com/gardenappl/uni/main/semester7/nn/pg41445.txt').text

blob = TextBlob(text)
items = blob.word_counts.items()

from operator import itemgetter
sorted_items = sorted(items, key=itemgetter(1), reverse=True)


# Прибираємо стоп-слова.
top_words = [item for item in sorted_items if item[0] not in stops and item[0].isalnum()]
print(top_words)
top20 = top_words[1:21]

import pandas as pd
df = pd.DataFrame(top20, columns=['word', 'count'])
df
axes = df.plot.bar(x='word', y='count', legend=False)<jupyter_output><empty_output><jupyter_text><jupyter_code>import imageio
mask_image = imageio.imread('https://github.com/gardenappl/uni/raw/main/semester7/nn/heart-mask.jpg')
from wordcloud import WordCloud
wordcloud = WordCloud(colormap='prism', mask=mask_image, background_color='white')
wordcloud.generate(text).to_file('frankenstein-heart.png')
from IPython.display import Image
Image('frankenstein-heart.png')<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.07284709235016475, 'fraction_numerical': 0.053076854572980676, 'mean_word_length': 5.851738865161684, 'pattern_counts': {'":': 0, '<': 22, '<?xml version=': 0, '>': 22, 'https://': 3, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 10, 'word_list_counts': {'cursed_substrings.json': 2, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '6', 'dir': 'jupyter-structured-clean-dedup', 'id': '78223', 'license': 'WTFPL', 'n_tokens_mistral': 4288, 'n_tokens_neox': 4422, 'n_words': 1364, 'path': 'semester7/nn/lecture9-test.ipynb', 'repo_name': 'gardenappl/uni', 'size': '11229'}