Skip to content

Instantly share code, notes, and snippets.

@MachineLearningIsEasy
Last active February 8, 2022 21:58
Show Gist options
  • Save MachineLearningIsEasy/9f82cd03400f5d3936af09e5fd776ead to your computer and use it in GitHub Desktop.
Save MachineLearningIsEasy/9f82cd03400f5d3936af09e5fd776ead to your computer and use it in GitHub Desktop.
IMDB classification via LSTM
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"metadata": {
"id": "5K1WlUmN6pJN"
},
"source": [
"![logo.png](data:image/png;base64,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)\n",
"\n",
"[перейти](https://www.bigdataschool.ru/)"
]
},
{
"cell_type": "markdown",
"metadata": {
"colab_type": "text",
"id": "Lv1nORvnYVQn"
},
"source": [
"## Определение тональности отзывов на фильмы с сайта IMDB"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Requirement already satisfied: gensim in /Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages (4.1.0)\n",
"Collecting bs4\n",
" Downloading bs4-0.0.1.tar.gz (1.1 kB)\n",
"Requirement already satisfied: smart-open>=1.8.1 in /Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages (from gensim) (5.2.1)\n",
"Requirement already satisfied: numpy>=1.17.0 in /Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages (from gensim) (1.19.5)\n",
"Requirement already satisfied: scipy>=0.18.1 in /Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages (from gensim) (1.7.0)\n",
"Collecting beautifulsoup4\n",
" Downloading beautifulsoup4-4.9.3-py3-none-any.whl (115 kB)\n",
"\u001b[K |████████████████████████████████| 115 kB 716 kB/s eta 0:00:01\n",
"\u001b[?25hCollecting soupsieve>1.2\n",
" Downloading soupsieve-2.2.1-py3-none-any.whl (33 kB)\n",
"Building wheels for collected packages: bs4\n",
" Building wheel for bs4 (setup.py) ... \u001b[?25ldone\n",
"\u001b[?25h Created wheel for bs4: filename=bs4-0.0.1-py3-none-any.whl size=1272 sha256=05e18baecfdbd2714f3430713ecc95c8180446aef87d986b794113b6de795f5d\n",
" Stored in directory: /Users/masterdelivery/Library/Caches/pip/wheels/73/2b/cb/099980278a0c9a3e57ff1a89875ec07bfa0b6fcbebb9a8cad3\n",
"Successfully built bs4\n",
"Installing collected packages: soupsieve, beautifulsoup4, bs4\n",
"Successfully installed beautifulsoup4-4.9.3 bs4-0.0.1 soupsieve-2.2.1\n",
"\u001b[33mWARNING: You are using pip version 21.1.3; however, version 21.2.4 is available.\n",
"You should consider upgrading via the '/Library/Frameworks/Python.framework/Versions/3.9/bin/python3.9 -m pip install --upgrade pip' command.\u001b[0m\n"
]
}
],
"source": [
"# !pip3 install tensorflow gensim bs4"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 34
},
"colab_type": "code",
"executionInfo": {
"elapsed": 2463,
"status": "ok",
"timestamp": 1554888691310,
"user": {
"displayName": "Максим Батькович",
"photoUrl": "",
"userId": "08926243841298764575"
},
"user_tz": -180
},
"id": "lpsyhVlJX5XH",
"outputId": "2ca82cb8-1d57-4a58-d045-b5f24d3b8ceb"
},
"outputs": [],
"source": [
"from tensorflow.keras.models import Sequential\n",
"from tensorflow.keras.layers import Dense, Dropout, Flatten, Embedding, Flatten, LSTM, SimpleRNN, GRU, SpatialDropout1D,Bidirectional\n",
"from tensorflow.keras import utils\n",
"from keras.preprocessing.text import Tokenizer\n",
"from tensorflow.keras.preprocessing.sequence import pad_sequences\n",
"# from gensim.models import KeyedVectors\n",
"import numpy as np\n",
"import os\n",
"import matplotlib.pyplot as plt\n",
"import pandas as pd\n",
"from bs4 import BeautifulSoup\n",
"import re\n",
"import nltk\n",
"from nltk.corpus import stopwords\n",
"from nltk.stem.porter import PorterStemmer\n",
"from nltk.tokenize.toktok import ToktokTokenizer\n",
"from sklearn.model_selection import train_test_split\n",
"from sklearn.metrics import accuracy_score\n",
"\n",
"%matplotlib inline "
]
},
{
"cell_type": "markdown",
"metadata": {
"colab_type": "text",
"id": "xGDJkdINNWVh"
},
"source": [
"## Загружаем данные"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"imdb_data=pd.read_csv('data/IMDB Dataset.csv')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Препроцессинг текста"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"(50000, 2)\n"
]
},
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>review</th>\n",
" <th>sentiment</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>One of the other reviewers has mentioned that ...</td>\n",
" <td>positive</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>A wonderful little production. &lt;br /&gt;&lt;br /&gt;The...</td>\n",
" <td>positive</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>I thought this was a wonderful way to spend ti...</td>\n",
" <td>positive</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>Basically there's a family where a little boy ...</td>\n",
" <td>negative</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>Petter Mattei's \"Love in the Time of Money\" is...</td>\n",
" <td>positive</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5</th>\n",
" <td>Probably my all-time favorite movie, a story o...</td>\n",
" <td>positive</td>\n",
" </tr>\n",
" <tr>\n",
" <th>6</th>\n",
" <td>I sure would like to see a resurrection of a u...</td>\n",
" <td>positive</td>\n",
" </tr>\n",
" <tr>\n",
" <th>7</th>\n",
" <td>This show was an amazing, fresh &amp; innovative i...</td>\n",
" <td>negative</td>\n",
" </tr>\n",
" <tr>\n",
" <th>8</th>\n",
" <td>Encouraged by the positive comments about this...</td>\n",
" <td>negative</td>\n",
" </tr>\n",
" <tr>\n",
" <th>9</th>\n",
" <td>If you like original gut wrenching laughter yo...</td>\n",
" <td>positive</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" review sentiment\n",
"0 One of the other reviewers has mentioned that ... positive\n",
"1 A wonderful little production. <br /><br />The... positive\n",
"2 I thought this was a wonderful way to spend ti... positive\n",
"3 Basically there's a family where a little boy ... negative\n",
"4 Petter Mattei's \"Love in the Time of Money\" is... positive\n",
"5 Probably my all-time favorite movie, a story o... positive\n",
"6 I sure would like to see a resurrection of a u... positive\n",
"7 This show was an amazing, fresh & innovative i... negative\n",
"8 Encouraged by the positive comments about this... negative\n",
"9 If you like original gut wrenching laughter yo... positive"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"print(imdb_data.shape)\n",
"imdb_data.head(10)"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>review</th>\n",
" <th>sentiment</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>count</th>\n",
" <td>50000</td>\n",
" <td>50000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>unique</th>\n",
" <td>49582</td>\n",
" <td>2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>top</th>\n",
" <td>Loved today's show!!! It was a variety and not...</td>\n",
" <td>positive</td>\n",
" </tr>\n",
" <tr>\n",
" <th>freq</th>\n",
" <td>5</td>\n",
" <td>25000</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" review sentiment\n",
"count 50000 50000\n",
"unique 49582 2\n",
"top Loved today's show!!! It was a variety and not... positive\n",
"freq 5 25000"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"imdb_data.describe()"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"positive 25000\n",
"negative 25000\n",
"Name: sentiment, dtype: int64"
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"imdb_data['sentiment'].value_counts()"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"\"One of the other reviewers has mentioned that after watching just 1 Oz episode you'll be hooked. They are right, as this is exactly what happened with me.<br /><br />The first thing that struck me about Oz was its brutality and unflinching scenes of violence, which set in right from the word GO. Trust me, this is not a show for the faint hearted or timid. This show pulls no punches with regards to drugs, sex or violence. Its is hardcore, in the classic use of the word.<br /><br />It is called OZ as that is the nickname given to the Oswald Maximum Security State Penitentary. It focuses mainly on Emerald City, an experimental section of the prison where all the cells have glass fronts and face inwards, so privacy is not high on the agenda. Em City is home to many..Aryans, Muslims, gangstas, Latinos, Christians, Italians, Irish and more....so scuffles, death stares, dodgy dealings and shady agreements are never far away.<br /><br />I would say the main appeal of the show is due to the fact that it goes where other shows wouldn't dare. Forget pretty pictures painted for mainstream audiences, forget charm, forget romance...OZ doesn't mess around. The first episode I ever saw struck me as so nasty it was surreal, I couldn't say I was ready for it, but as I watched more, I developed a taste for Oz, and got accustomed to the high levels of graphic violence. Not just violence, but injustice (crooked guards who'll be sold out for a nickel, inmates who'll kill on order and get away with it, well mannered, middle class inmates being turned into prison bitches due to their lack of street skills or prison experience) Watching Oz, you may become comfortable with what is uncomfortable viewing....thats if you can get in touch with your darker side.\""
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"imdb_data['review'].loc[0]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Чистим отзывы"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [],
"source": [
"#удаляем html \n",
"def strip_html(text):\n",
" soup = BeautifulSoup(text, \"html.parser\")\n",
" return soup.get_text()\n",
"\n",
"#удаляем квадратные скобки с помощью re\n",
"def remove_between_square_brackets(text):\n",
" return re.sub('\\[[^]]*\\]', '', text)\n",
"\n",
"#функция для очистки текста\n",
"def denoise_text(text):\n",
" text = strip_html(text)\n",
" text = remove_between_square_brackets(text)\n",
" return text\n",
"#применяем к каждому отзыву\n",
"imdb_data['review']=imdb_data['review'].apply(denoise_text)"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [],
"source": [
"#удаляем специальные символы\n",
"def remove_special_characters(text, remove_digits=True):\n",
" pattern=r'[^a-zA-z0-9\\s]'\n",
" text=re.sub(pattern,'',text)\n",
" return text\n",
"#применяем к каждому отзыву\n",
"imdb_data['review']=imdb_data['review'].apply(remove_special_characters)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Стемминг"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [],
"source": [
"#стемминг\n",
"def simple_stemmer(text):\n",
" ps=nltk.porter.PorterStemmer()\n",
" text= ' '.join([ps.stem(word) for word in text.split()])\n",
" return text\n",
"#применяем к каждому отзыву\n",
"imdb_data['review']=imdb_data['review'].apply(simple_stemmer)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Удаляем стоп-слова"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"[nltk_data] Downloading package stopwords to\n",
"[nltk_data] /Users/masterdelivery/nltk_data...\n",
"[nltk_data] Package stopwords is already up-to-date!\n"
]
},
{
"data": {
"text/plain": [
"True"
]
},
"execution_count": 10,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"import nltk\n",
"import ssl\n",
"\n",
"try:\n",
" _create_unverified_https_context = ssl._create_unverified_context\n",
"except AttributeError:\n",
" pass\n",
"else:\n",
" ssl._create_default_https_context = _create_unverified_https_context\n",
"\n",
"nltk.download('stopwords')"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [],
"source": [
"#подгружаем стоп слова\n",
"stopword_list=nltk.corpus.stopwords.words('english')\n",
"#токенизатор\n",
"tokenizer=ToktokTokenizer()\n",
"\n",
"#удаляем стоп слова из отзывов\n",
"def remove_stopwords(text, is_lower_case=False):\n",
" tokens = tokenizer.tokenize(text)\n",
" tokens = [token.strip() for token in tokens]\n",
" if is_lower_case:\n",
" filtered_tokens = [token for token in tokens if token not in stopword_list]\n",
" else:\n",
" filtered_tokens = [token for token in tokens if token.lower() not in stopword_list]\n",
" filtered_text = ' '.join(filtered_tokens) \n",
" return filtered_text\n",
"#применяем к каждому отзыву\n",
"imdb_data['review']=imdb_data['review'].apply(remove_stopwords)"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>review</th>\n",
" <th>sentiment</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>one review ha mention watch 1 oz episod youll ...</td>\n",
" <td>positive</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>wonder littl product film techniqu veri unassu...</td>\n",
" <td>positive</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>thought thi wa wonder way spend time hot summe...</td>\n",
" <td>positive</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>basic famili littl boy jake think zombi hi clo...</td>\n",
" <td>negative</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>petter mattei love time money visual stun film...</td>\n",
" <td>positive</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" review sentiment\n",
"0 one review ha mention watch 1 oz episod youll ... positive\n",
"1 wonder littl product film techniqu veri unassu... positive\n",
"2 thought thi wa wonder way spend time hot summe... positive\n",
"3 basic famili littl boy jake think zombi hi clo... negative\n",
"4 petter mattei love time money visual stun film... positive"
]
},
"execution_count": 12,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"imdb_data.head()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Конвертируем в числовое представление"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>review</th>\n",
" <th>sentiment</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>[one, review, ha, mention, watch, 1, oz, episo...</td>\n",
" <td>positive</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>[wonder, littl, product, film, techniqu, veri,...</td>\n",
" <td>positive</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>[thought, thi, wa, wonder, way, spend, time, h...</td>\n",
" <td>positive</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>[basic, famili, littl, boy, jake, think, zombi...</td>\n",
" <td>negative</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>[petter, mattei, love, time, money, visual, st...</td>\n",
" <td>positive</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" review sentiment\n",
"0 [one, review, ha, mention, watch, 1, oz, episo... positive\n",
"1 [wonder, littl, product, film, techniqu, veri,... positive\n",
"2 [thought, thi, wa, wonder, way, spend, time, h... positive\n",
"3 [basic, famili, littl, boy, jake, think, zombi... negative\n",
"4 [petter, mattei, love, time, money, visual, st... positive"
]
},
"execution_count": 13,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# str в list\n",
"imdb_data['review']=imdb_data['review'].apply(lambda review: review.split(' '))\n",
"imdb_data.head()"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>review</th>\n",
" <th>sentiment</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>[one, review, ha, mention, watch, 1, oz, episo...</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>[wonder, littl, product, film, techniqu, veri,...</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>[thought, thi, wa, wonder, way, spend, time, h...</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>[basic, famili, littl, boy, jake, think, zombi...</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>[petter, mattei, love, time, money, visual, st...</td>\n",
" <td>1</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" review sentiment\n",
"0 [one, review, ha, mention, watch, 1, oz, episo... 1\n",
"1 [wonder, littl, product, film, techniqu, veri,... 1\n",
"2 [thought, thi, wa, wonder, way, spend, time, h... 1\n",
"3 [basic, famili, littl, boy, jake, think, zombi... 0\n",
"4 [petter, mattei, love, time, money, visual, st... 1"
]
},
"execution_count": 14,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# кодируем таргет\n",
"map_sentiment = {'positive':1, 'negative':0}\n",
"imdb_data['sentiment'] = imdb_data['sentiment'].map(map_sentiment)\n",
"imdb_data.head()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Разбиваем на выборку для обучения и теста"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Train Set\n",
"20806 [christoph, lambert, attract, thi, movi, wast,...\n",
"4585 [everyth, rel, seem, main, theme, outset, thi,...\n",
"34042 [thi, far, worst, film, ive, seen, thi, year, ...\n",
"19445 [thi, film, wa, amaz, wa, extrem, funni, move,...\n",
"39714 [thi, romant, comedi, emphasi, comedi, chang, ...\n",
" ... \n",
"22726 [dr, cameron, discredit, scientist, succe, hi,...\n",
"18110 [saw, thi, movi, could, think, wa, disast, im,...\n",
"12487 [thi, bad, b, movi, masquerad, mockumentari, p...\n",
"30282 [alan, alda, play, reallif, sport, illustr, wr...\n",
"38408 [talk, radio, see, man, somewhat, accident, st...\n",
"Name: review, Length: 40000, dtype: object \n",
"\n",
"48340 [gene, roddenberri, never, let, hi, fan, hi, d...\n",
"19126 [find, difficult, comprehend, make, viewer, fe...\n",
"31997 [first, movi, pretti, good, thi, one, pretti, ...\n",
"47931 [love, thi, film, fantast, origin, differ, sol...\n",
"36609 [live, suburb, rel, well, financi, realli, muc...\n",
" ... \n",
"28294 [saw, thi, film, mani, year, ago, absolut, hat...\n",
"7373 [absolut, classic, direct, flawless, act, supe...\n",
"40508 [seen, bad, onesi, noth, good, say, thi, movi,...\n",
"38987 [thi, veri, rare, exampl, movi, transvestit, h...\n",
"32889 [brief, summari, thi, movi, demean, everyon, t...\n",
"Name: review, Length: 10000, dtype: object \n",
"\n",
"Test Set\n",
"20806 0\n",
"4585 1\n",
"34042 0\n",
"19445 1\n",
"39714 1\n",
" ..\n",
"22726 0\n",
"18110 0\n",
"12487 0\n",
"30282 0\n",
"38408 1\n",
"Name: sentiment, Length: 40000, dtype: int64 \n",
"\n",
"48340 1\n",
"19126 0\n",
"31997 0\n",
"47931 1\n",
"36609 0\n",
" ..\n",
"28294 1\n",
"7373 1\n",
"40508 0\n",
"38987 1\n",
"32889 0\n",
"Name: sentiment, Length: 10000, dtype: int64\n"
]
}
],
"source": [
"x_train, x_test, y_train, y_test = train_test_split(imdb_data['review'], imdb_data['sentiment'], test_size = 0.2)\n",
"\n",
"print('Train Set')\n",
"print(x_train, '\\n')\n",
"print(x_test, '\\n')\n",
"print('Test Set')\n",
"print(y_train, '\\n')\n",
"print(y_test)"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {},
"outputs": [],
"source": [
"def get_max_length():\n",
" review_length = []\n",
" for review in x_train:\n",
" review_length.append(len(review))\n",
"\n",
" return int(np.ceil(np.mean(review_length)))"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"129\n",
"Encoded X Train\n",
" [[ 1358 6357 771 ... 0 0 0]\n",
" [ 212 1210 47 ... 314 6240 2547]\n",
" [ 1 163 188 ... 2403 8030 28]\n",
" ...\n",
" [ 1 30 890 ... 0 0 0]\n",
" [ 1670 14484 36 ... 0 0 0]\n",
" [ 250 1304 15 ... 284 274 16929]] \n",
"\n",
"Encoded X Test\n",
" [[ 1926 12410 57 ... 618 41 97]\n",
" [ 68 793 4901 ... 0 0 0]\n",
" [ 38 2 115 ... 0 0 0]\n",
" ...\n",
" [ 56 30 21400 ... 0 0 0]\n",
" [ 1 13 773 ... 0 0 0]\n",
" [ 1309 2307 1 ... 0 0 0]] \n",
"\n",
"Maximum review length: 129\n",
"Dict value: 155979\n"
]
}
],
"source": [
"from tensorflow.keras.preprocessing.text import Tokenizer\n",
"\n",
"token = Tokenizer(lower=False)\n",
"token.fit_on_texts(x_train)\n",
"x_train = token.texts_to_sequences(x_train)\n",
"x_test = token.texts_to_sequences(x_test)\n",
"\n",
"max_length = get_max_length()\n",
"print(max_length)\n",
"x_train = pad_sequences(x_train, maxlen=max_length, padding='post', truncating='post')\n",
"x_test = pad_sequences(x_test, maxlen=max_length, padding='post', truncating='post')\n",
"\n",
"total_words = len(token.word_index) + 1 # add 1 because of 0 padding\n",
"\n",
"print('Encoded X Train\\n', x_train, '\\n')\n",
"print('Encoded X Test\\n', x_test, '\\n')\n",
"print('Maximum review length: ', max_length)\n",
"print('Dict value: ', total_words)"
]
},
{
"cell_type": "markdown",
"metadata": {
"colab_type": "text",
"id": "jmylIFBXNj9S"
},
"source": [
"## Просмотр данных"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 72
},
"colab_type": "code",
"executionInfo": {
"elapsed": 35681,
"status": "ok",
"timestamp": 1554888725421,
"user": {
"displayName": "Максим Батькович",
"photoUrl": "",
"userId": "08926243841298764575"
},
"user_tz": -180
},
"id": "kW6Fb4a8NjcS",
"outputId": "c27d2b59-7925-4ff1-9f28-945fa104b1b1"
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[ 1358 6357 771 1 2 227 53 8 990 2063 12522 228\n",
" 122 13 10 55 26 489 942 349 3 942 2839 58\n",
" 4588 2312 10625 1 2 43 162 152 77 66 64 1066\n",
" 6 78 101 137 310 31 651 881 3782 1602 8029 409\n",
" 1386 0 0 0 0 0 0 0 0 0 0 0\n",
" 0 0 0 0 0 0 0 0 0 0 0 0\n",
" 0 0 0 0 0 0 0 0 0 0 0 0\n",
" 0 0 0 0 0 0 0 0 0 0 0 0\n",
" 0 0 0 0 0 0 0 0 0 0 0 0\n",
" 0 0 0 0 0 0 0 0 0 0 0 0\n",
" 0 0 0 0 0 0 0 0 0]\n",
"1\n"
]
}
],
"source": [
"index = 0\n",
"print(x_train[index])\n",
"print(y_train[index])"
]
},
{
"cell_type": "markdown",
"metadata": {
"colab_type": "text",
"id": "V-ojNrKnb-_C"
},
"source": [
"## Подготовка данных для нейронной сети"
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 34
},
"colab_type": "code",
"executionInfo": {
"elapsed": 36520,
"status": "ok",
"timestamp": 1554888726360,
"user": {
"displayName": "Максим Батькович",
"photoUrl": "",
"userId": "08926243841298764575"
},
"user_tz": -180
},
"id": "edonzKOImqrr",
"outputId": "de31dcc4-8950-40d4-cd12-c25d87df1411"
},
"outputs": [
{
"data": {
"text/plain": [
"(40000, 129)"
]
},
"execution_count": 19,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"x_train.shape"
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 52
},
"colab_type": "code",
"executionInfo": {
"elapsed": 36484,
"status": "ok",
"timestamp": 1554888726361,
"user": {
"displayName": "Максим Батькович",
"photoUrl": "",
"userId": "08926243841298764575"
},
"user_tz": -180
},
"id": "5MH3p9BGce0B",
"outputId": "0f014281-aa6a-4791-aaf8-58ae6feb2310"
},
"outputs": [
{
"data": {
"text/plain": [
"array([ 1358, 6357, 771, 1, 2, 227, 53, 8, 990,\n",
" 2063, 12522, 228, 122, 13, 10, 55, 26, 489,\n",
" 942, 349], dtype=int32)"
]
},
"execution_count": 20,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"x_train[0][:20]"
]
},
{
"cell_type": "markdown",
"metadata": {
"colab_type": "text",
"id": "rhSLT9WjTeMk"
},
"source": [
"## Создание нейронной сети"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": 22,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 88
},
"colab_type": "code",
"executionInfo": {
"elapsed": 1511,
"status": "ok",
"timestamp": 1554033936219,
"user": {
"displayName": "Andrey Sozykin",
"photoUrl": "https://lh5.googleusercontent.com/-ErNH158Vx74/AAAAAAAAAAI/AAAAAAAAALA/FLh7rOkXgJs/s64/photo.jpg",
"userId": "18170979864079203851"
},
"user_tz": -300
},
"id": "Lrzx1e4xTgzL",
"outputId": "5708564a-2d65-4624-b8af-7776ca75a726"
},
"outputs": [],
"source": [
"model = Sequential()\n",
"model.add(Embedding(total_words, 50, input_length=max_length))\n",
"model.add(Flatten())\n",
"model.add(Dense(64))\n",
"model.add(Dense(1, activation='sigmoid'))"
]
},
{
"cell_type": "code",
"execution_count": 23,
"metadata": {
"colab": {},
"colab_type": "code",
"id": "u1yNam-uSunE"
},
"outputs": [],
"source": [
"model.compile(optimizer='rmsprop', \n",
" loss='binary_crossentropy', \n",
" metrics=['accuracy'])"
]
},
{
"cell_type": "markdown",
"metadata": {
"colab_type": "text",
"id": "9CHZwMttYMTb"
},
"source": [
"## Обучаем нейронную сеть"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 448
},
"colab_type": "code",
"executionInfo": {
"elapsed": 79622,
"status": "ok",
"timestamp": 1554034023510,
"user": {
"displayName": "Andrey Sozykin",
"photoUrl": "https://lh5.googleusercontent.com/-ErNH158Vx74/AAAAAAAAAAI/AAAAAAAAALA/FLh7rOkXgJs/s64/photo.jpg",
"userId": "18170979864079203851"
},
"user_tz": -300
},
"id": "AkmNH7ahYLyc",
"outputId": "3d23f42b-4154-4dc1-8f3a-a3715316d718"
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"2021-09-07 14:52:26.363250: I tensorflow/compiler/mlir/mlir_graph_optimization_pass.cc:185] None of the MLIR Optimization Passes are enabled (registered 2)\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 1/10\n",
"1125/1125 [==============================] - 43s 38ms/step - loss: 0.3705 - accuracy: 0.8329 - val_loss: 0.3370 - val_accuracy: 0.8525\n",
"Epoch 2/10\n",
"1125/1125 [==============================] - 42s 38ms/step - loss: 0.1272 - accuracy: 0.9523 - val_loss: 0.4710 - val_accuracy: 0.8355\n",
"Epoch 3/10\n",
"1125/1125 [==============================] - 42s 38ms/step - loss: 0.0168 - accuracy: 0.9944 - val_loss: 0.9568 - val_accuracy: 0.8102\n",
"Epoch 4/10\n",
"1125/1125 [==============================] - 42s 37ms/step - loss: 0.0018 - accuracy: 0.9995 - val_loss: 1.6493 - val_accuracy: 0.7908\n",
"Epoch 5/10\n",
"1023/1125 [==========================>...] - ETA: 3s - loss: 1.0736e-04 - accuracy: 1.0000"
]
}
],
"source": [
"history = model.fit(x_train, \n",
" y_train, \n",
" epochs=10,\n",
" batch_size=32,\n",
" validation_split=0.1)"
]
},
{
"cell_type": "code",
"execution_count": 60,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 280
},
"colab_type": "code",
"executionInfo": {
"elapsed": 2080,
"status": "ok",
"timestamp": 1554034030143,
"user": {
"displayName": "Andrey Sozykin",
"photoUrl": "https://lh5.googleusercontent.com/-ErNH158Vx74/AAAAAAAAAAI/AAAAAAAAALA/FLh7rOkXgJs/s64/photo.jpg",
"userId": "18170979864079203851"
},
"user_tz": -300
},
"id": "a19UCeAMDhQK",
"outputId": "c712842c-317c-4a3c-c224-362bfade5f75"
},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAY4AAAEGCAYAAABy53LJAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjQuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8rg+JYAAAACXBIWXMAAAsTAAALEwEAmpwYAABEjklEQVR4nO3dd3hUZfbA8e9JIUFKaAExtCBNIBAgFKUEAQVdxcoqUi2LouCqP1l110Vl1XXta1k7YkHEtSBrRQUSWAUJRQSUUIWAK0OvCSnn98e9M0xCygQyTMr5PM88mXlvmTNDuCdvue8rqooxxhgTqLBQB2CMMaZiscRhjDGmVCxxGGOMKRVLHMYYY0rFEocxxphSiQh1AKdCgwYNtEWLFqEOwxhjKpSlS5fuVNXYguVVInG0aNGCtLS0UIdhjDEVioj8Uli5NVUZY4wpFUscxhhjSsUShzHGmFKxxGGMMaZULHEYY4wplaAmDhGZKiI7RGRVEdtFRJ4RkfUislJEuvptGyMi69zHGL/ybiLyo3vMMyIiwfwMxhhj8gt2jWMaMKSY7RcArd3HOOAFABGpB9wH9AR6APeJSF33mBeAP/gdV9z5jTHGlLGg3sehqqki0qKYXS4B3lRnbvdFIlJHRBoD/YGvVHU3gIh8BQwRkflAbVVd5Ja/CVwKfB60D2EqtLw8JTsvj9w8JTtXycl1n+c5z7Nz1d2WR45b5vx0jsvJVXLznP1y3Nf++3lXJfAuTuC/TMGxbfn38y/33897/PHnzL+v4rfBmBKM7NWchrWjy/Scob4BMA7Y6vc6wy0rrjyjkPLjiMg4nFoMzZo1K7uIzSmVnZvHL7sOs37HAdb9dpB1Ow7yy65DZGbnORdy9yLvvaj7EoB7cc+r5NdWa6g1JRnc8fRKlziCRlVfBl4GSEpKquSXj4ovKyeXTTsP+ZLD+h0HWL/jIJt2HiI799g/X1yd6sQ3qEGj2uFEhocRES5EhIURESZEhItTFiaEhwuRYWG+svAwISJM/I5xjws/9jMy37ncsjDn2Mhwt8x9H+9+IiC4V2/vD/E9xdsFJxy7yAty3AXf/zwlHm/ZwoRYqBPHNqCp3+smbtk2nOYq//L5bnmTQvY3FcSRo7ls8BxknZsY1v12kPU7DrJ51yFf7UAEmtU7jdYNazKgXSNaN6xJ60Y1OTO2JjWiQv0ra4wJ9f/C2cAEEXkXpyN8n6r+KiJfAg/7dYifD9yjqrtFZL+I9AIWA6OBZ0MSuSnWwawcNzG4CWKHkywy9hzxNc2Hhwkt6p9Gm0a1+F2nxrRqWJPWDWvRMrYG0ZHhof0AxpgiBTVxiMgMnJpDAxHJwBkpFQmgqi8CnwEXAuuBw8C17rbdIvI3YIl7qinejnLgZpzRWtVxOsWtYzyE9h4+eiwx/HasJvHrvkzfPtXCw2gZW4POTepwZdemtG5Uk1YNa9Kifg2qRditRMZUNKJVYGRGUlKS2uy4J2/N9v0s/WW32wfhJAvPgSzf9ujIMF+toVXDmu7zmjSrdxoR4ZYgjKloRGSpqiYVLA91U5WpIL756TdueDMNVagZFUGrhjVJbhPr639o3bAWcXWqExZmHbfGVHaWOEyJfv7ffm6dsZwOZ9TmpVFJnBETbSN7jKnCLHGYYu06mMUNb6RRIyqCV0Yn0TimeqhDMsaEmCUOU6SsnFxuenspngNZzLzxbEsaxhjAEocpgqpy70erWLJ5D88M70Ji0zqhDskYU07YUBdTqFcXbOLfSzO4dUArhnY+I9ThGGPKEUsc5jhzf/6Nhz//iQs6ns5tg9qEOhxjTDljicPkk/7bAW6dsYL2jWvzxO872/BaY8xxLHEYn10Hs7j+jSVUrxbOq2OSOK2adYEZY45nVwYDwNGcPMa/vYzf9mcxc1wvG0FljCmS1TiMM4Jq1o98v3k3j13ZiS7N6pZ8kDGmyrLEYXht4SbeS8tg4oBWXJJY6LpYxhjjY4mjipv38w4e/swZQXW7jaAyxgTAEkcVlv7bASbOWM5ZNoLKGFMKljiqqN2HjnL9G0uIjgznldE2gsoYE7igJg4RGSIia0VkvYjcXcj25iLyjYisFJH5ItLELT9XRFb4PTJF5FJ32zQR2eS3LTGYn6EyOpqTx01vL+W3/Vm8MrobZ9SxEVTGmMAF7c9MEQkHngfOAzKAJSIyW1XX+O32OPCmqr4hIgOAvwOjVHUekOiepx7OCoFz/I6bpKrvByv2ykxVmfzxKr7ftJt/Xp1oI6iMMaUWzBpHD2C9qm5U1aPAu8AlBfZpD8x1n88rZDvAlcDnqno4aJFWIVP/u5l3l2xlwrk2gsoYc2KCmTjigK1+rzPcMn8/AJe7zy8DaolI/QL7XA3MKFD2kNu89ZSIRJVVwJXdvLU7eOjTNQzu0Ig7zrMRVMaYExPqzvE7gWQRWQ4kA9uAXO9GEWkMJABf+h1zD9AO6A7UA+4q7MQiMk5E0kQkzePxBCn8imPdbwe49Z3ltDu9Nk9dlWgjqIwxJyyYiWMb0NTvdRO3zEdVt6vq5araBfiLW7bXb5ffAx+parbfMb+qIwt4HadJ7Diq+rKqJqlqUmxsbJl8oIrKGUGVRlSkzUFljDl5wUwcS4DWIhIvItVwmpxm++8gIg1ExBvDPcDUAucYToFmKrcWgjiLXl8KrCr70CsPZw6qpfxvfyYv2wgqY0wZCFriUNUcYAJOM9NPwHuqulpEpojIUHe3/sBaEUkHGgEPeY8XkRY4NZaUAqeeLiI/Aj8CDYAHg/UZKjpV5b7Zq1i8aTePXtGJrjaCyhhTBkRVQx1D0CUlJWlaWlqowzjlpi7cxJRP1nDLuWcyaXC7UIdjjKlgRGSpqiYVLA9157gJkvlrd/CgO4Lq/85rG+pwjDGViCWOSmj9jgNMfGc5bU+vzZO/txFUxpiyZYmjktlTYARVjSgbQWWMKVuWOCqRozl5jJ++lF/3ZvLSqG7E2QgqY0wQ2J+jlYQzgmo1izbu5qmrOtOtuY2gMsYEh9U4Kolp325mxvdbGN//TC7r0iTU4RhjKjFLHJVASrqHv32yhvPbN2LS+TaCyhgTXJY4Krj1Ow4y4Z1ltLU5qIwxp4gljgps7+Gj3PDGEqIiwmwElTHmlLErTQWVnZvHzdOXsX1vJjPG9bIRVMaYU8YSRwXkHUH17YZdPPl7G0FljDm1rKmqAnrj2828s3gLNyWfyeVdbQSVMebUssRRwaSme5jyyRoGndWIPw22EVTGmFPPEkcFsn7HQW55ZxltGtXi6attBJUxJjQscVQQBUdQ1bQRVMaYECkxcYjIVSLyvogMFJGfRWSHiIw8FcEZh/8IqpdGdaNJ3dNCHZIxpgoLpMbxN+Bd4APgIqATzjKvJRKRISKyVkTWi8jdhWxvLiLfiMhKEZkvIk38tuWKyAr3MduvPF5EFrvnnOkuS1upPfzZT3y7YRd/vzyBbs3rhTocY0wVF0jiOKSq7wO/qOp6Vf0fkFXSQSISDjwPXAC0B4aLSPsCuz0OvKmqnYApwN/9th1R1UT3MdSv/B/AU6raCtgDXB/AZ6iwMrNzeWfxFoZ1a8IV3WwElTEm9AJJHHEi8gzQWESeEZFngbgAjusBrFfVjap6FKfWckmBfdoDc93n8wrZno+ICDAAeN8tegO4NIBYKqzFm3aTlZPHRZ3PCHUoxhgDBHYD4CT351K/skAW8I4Dtvq9zgB6FtjnB+By4J/AZUAtEamvqruAaBFJA3KAR1R1FlAf2KuqOX7nLDSJicg4YBxAs2bNAgi3fEpZ6yEqIoye8dZEZYwpH0pMHKr6htuP0MYtWquq2WX0/ncCz4nIWCAV2Abkutuaq+o2EWkJzBWRH4F9gZ5YVV8GXgZISkrSMor3lEtJ30HPlvWJjgwPdSjGGAMENqqqP7AOp7/iX0C6iPQL4NzbgKZ+r5u4ZT6qul1VL1fVLsBf3LK97s9t7s+NwHygC7ALqCMiEUWdszLJ2HOYDZ5DJLeJDXUoxhjjE0gfxxPA+aqarKr9gMHAUwEctwRo7Y6CqgZcDcz230FEGoiIN4Z7gKlueV0RifLuA/QG1qiq4vSFXOkeMwb4OIBYKqTU9J0AljiMMeVKIIkjUlXXel+oajoQWdJBbj/EBOBL4CfgPVVdLSJTRMQ7Sqo/sFZE0oFGwENu+VlAmoj8gJMoHlHVNe62u4A7RGQ9Tp/HawF8hgopJX0HcXWqc2ZsjVCHYowxPoF0jqeJyKvA2+7rEQTWOY6qfgZ8VqBsst/z9zk2Qsp/n2+BhCLOuRFnxFallp2bx3/X7+LizmfgDCYzxpjyIZDEMR64BbjVfb0Ap6/DBNHyLXs5mJVjzVTGmHInkMQxRlWfBJ4MdjDmmJT0HUSECee0qh/qUIwxJp9A+jhuCnoU5jgp6R66NqtL7egSu5OMMeaUCqTGUUdELi9YqKofBiEeA+w8mMWqbfuZZOttGGPKoUASRwzO5Ib+PbQKWOIIkgXrPIANwzXGlE+BJI4tqnpd0CMxPilrPdSvUY32jWuHOhRjjDlOIH0cq4MehfHJy1MWrNtJvzaxtsKfMaZcKjFxqOpId92MQQAiUl1EagU/tKpp9fb97Dp01JqpjDHlViBzVf0B5ya9l9yiJsCsIMZUpaWk7wCgT+sGIY7EGGMKF0hT1S04c0XtB1DVdUDDYAZVlaWke0iIi6FBzahQh2KMMYUKJHFkuQsxAeDOTFthpykvz/ZnZrNsy15rpjLGlGuBJI4UEfkzUF1EzgP+DfwnuGFVTd+u30luntLPEocxphwLJHHcDXiAH4EbcSYtvDeYQVVVKekeakVF0KVZnVCHYowxRQpkBcA84BXgFXddjSh3XQxThlSV1PSd9G7VgMjwQPK5McaERiCjqm4XkTQRGQ2kA+tEZFJJx5nS2eA5yLa9R6yZyhhT7gU6quom4DmgK9ASuDaQk4vIEBFZKyLrReTuQrY3F5FvRGSliMwXkSZueaKIfCciq91tV/kdM01ENonICveRGEgs5d38tc40I/3a2DBcY0z5Fkji2K+qacAGVd2tqoeBzJIOEpFwnHXKLwDaA8NFpH2B3R4H3lTVTsAU4O9u+WFgtKp2AIYAT4tIHb/jJqlqovtYEcBnKPdS1+2kVcOaNKl7WqhDMcaYYgWSOFqKyGwgXkRmi8h/gPgAjusBrFfVje5w3neBSwrs0x6Y6z6f592uqunu/SKo6nZgB1Bp23Ays3NZvHEX/VpX2o9ojKlEAkkclwBP+P18HLg0gOPigK1+rzPcMn8/AN4p2y8DaolIvpWLRKQHUA3Y4Ff8kNuE9ZSIFHqnnIiMc/tm0jweTwDhhs6ijbvIyskjua0lDmNM+RdI4jhXVVMKPsro/e8EkkVkOZAMbANyvRtFpDHwFnCtO7oL4B6gHdAdqAfcVdiJVfVlVU1S1aTY2PJ9QU5N30lURBg94+uFOhRjjClRIIlj6AmeexvQ1O91E7fMR1W3q+rlqtoF+ItbthdARGoDnwJ/UdVFfsf8qo4s4HWcJrEKLSV9B71a1ic6MjzUoRhjTIkCWY+joYjcUbDQXYe8OEuA1iISj5Mwrgau8d9BRBoAu93axD3AVLe8GvARTsf5+wWOaayqv4qI4DSZrQrgM5RbW3cfZoPnENf0bB7qUIwxJiCB1DjCgZpArQKPYqlqDjAB+BL4CXhPVVeLyBQR8dZi+gNrRSQdaAQ85Jb/HugHjC1k2O10EfkR5072BsCDAXyGcivVVvszxlQwgdQ4/qeqU07k5Kr6Gc4UJf5lk/2ev48zZXvB494G3i7inANOJJbyKjXdQ1yd6pwZWyPUoRhjTEACqXF8FfQoqqjs3Dz+u34X/drE4rS8GWNM+RfIXFV/EpHOQF+3aIGq/hDcsKqGZb/s4WBWjjVTGWMqlEDmqroVmI6zeFND4G0RmRjswKqC1HUeIsKEc1rVL3lnY4wpJwLp47gB6KmqhwBE5B/Ad8CzwQysKkhJ99C1WV1qR0eGOhRjjAlYIIlD8Lspz31uDfInyXMgi1Xb9jNpcNsTOj47O5uMjAwyM0ucNswYY4oVHR1NkyZNiIwM7I/YQBLH68BiEfnIfX0p8NqJhWe8Fq4/uWG4GRkZ1KpVixYtWljHujHmhKkqu3btIiMjg/j4QKYhDKCPw73R71pgt/u4VlWfPplADaSs9VC/RjXaN659QsdnZmZSv359SxrGmJMiItSvX79UrReB1DhQ1WXAshMNzOSXl6ekrttJcptYwsJO/MJvScMYUxZKey2xNUpDYPX2/ew+dLRSDMPt2LEj7du3JzExkbi4OO6///5Qh2TKmVdffZW+ffuSlJRkvx8FbNmyhVGjRtGjRw86duzIzp07Qx1SQAKqcZiylZK+A4A+rSvHan+ff/45zZs35/HHH+fgwYOhDseUI6+99hqLFi3ik08+ISYmJtThlCuZmZkMHz6chx56iOTk5ArVghDIfRwFV+1DRPoHI5iqIiXdQ0JcDA1qFrqUSIWSnZ1NVNTxn0NVmTRpEh07diQhIYGZM2f6ts2fP5+YmBgSExM5/fTTefzxxwH49NNP6dChA4mJicTGxjJt2rTjztu/f3/atm1L+/bt6dWrF9u3bwdg6dKlJCcn061bNwYPHsyvv/7q2/+Pf/wjiYmJdOzYke+//x6A+++/3/e+ABdddBHz588HoGbNmse9b8eOHdm8eTNLliyhU6dOZGZmcujQITp06MCqVcfPs/nkk0/SsWNHOnbsyNNPPw3ApEmTfJ85Li6OxMREJk+enO/7aNmyJU8+6cwfmpuby6RJk+jevTudOnXipZdeAmDEiBEkJiZSr1494uPjSUxM5MUXXyQzM5Nrr72WhIQEunTpwrx58wCYNm0asbGxdO7cmVatWjFjxozj4p02bRoTJkzwvZ4wYYLv+58yZQrdu3enY8eOjBs3DlU97vjNmzczYMAAOnXqxMCBA9myZQsAL7/8Mlu3bqVPnz706tWLlStXkpeXR+vWrfGuk5OXl0erVq3weDz079+ftLS042L6z3/+Q8+ePenSpQuDBg3it99+O26fhx56iDZt2tCxY0ceeOABX2z+/57ef8eCn/HQoUNcd9119OjRgy5duvDxxx/7zi8i/PzzzwD89NNPiEiRv5ve2P3f9+DBgwwcOJCuXbuSkJDgO/fcuXM5cuQIEyZMICEhgbvuOrZCxIwZM0hISKBjx475ymvWrMntt99Ohw4dGDhwoO873LBhA0OGDKFbt2707dvXF2+wBFLjeE9E3gIeBaLdn0nA2cEMrLLan5nNsi17GZ98Zpmd84H/rGbN9v1ldj6A9mfU5r6LO5S434EDB6hV6/g5Lz/88ENWrFjBDz/8wM6dO+nevTv9+vWjcePG5ObmkpyczOzZs/M1XUyePJk33niDpKSkfBexgqZPn063bt0YOnQoaWlpXHDBBUycOJGPP/6Y2NhYZs6cyV/+8hemTp0KwOHDh1mxYgWpqalcd911hV7oA9W9e3eGDh3Kvffey5EjRxg5ciQdO3bMt8/SpUt5/fXXWbx4MapKz549SU5O5rHHHgOcpFWzZk3uvPNOwEmkffv25ZNPPmHJkiXceOON3HHHHbz22mvExMSwZMkSsrKy6N27N+effz7Tp08HYOzYsVx00UVceeWVADzxxBOICD/++CM///wz559/Punp6QBcddVVPPfcc/z73/9mxowZDB8+PODPPGHCBCZPdqaYGzVqFJ988gkXX3xxvn0mTpzImDFjGDNmDFOnTuXWW29l1qxZ7NixgwsvvJD77ruPuXPnMnr0aFasWMHIkSOZPn06t912G19//TWdO3cmNjaWsLCwQhNTnz59WLRoESLCq6++yqOPPsoTTzzh256SksJrr73G8uXLiY6Opn///vTu3ZtBgwYF9BkfeughBgwYwNSpU9m7dy89evTwHdujRw+mTp3Ko48+ytSpU+nZs2fA3x04Q10/+ugjateuzc6dO+nVqxdDhw7F4/Gwbds2Vq1aRd26dTn//POZNWsWPXr04K677mLp0qX5yi+99FIOHTpEUlISTz31FFOmTOGBBx7gueeeY9y4cbz44ou0bt2axYsXc/PNNzN37tySgztBgSSOnsA/gG9xZsWdDvQOWkSV3Lfrd5Kbp/SrBP0bubm5HDhwgBo1jp+gceHChQwfPpzw8HAaNWpEcnIyS5YsYejQoRw5coTo6OjjjgkPD+fAgQMlvu+IESPIysqidu3aDBo0iLVr17Jq1SrOO+88X1yNGzf27e+9SPbr14/9+/ezd+9eAJ566ineftuZS3PTpk2+C/mRI0dITExEVUlOTvbVGLwmT55M9+7diY6O5plnnin0s1922WW+7+Xyyy9nwYIFdOnSpcjPtGDBAhITE1m/fj3PPfccAHPm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c+Zw9tln07VrV4YNG+b7I6VFixb86U9/IiEhgR49erB+/Xqg6Knei5q6fezYsfmmVPGfgr2wf8/NmzcjIrz44ou+f6+4uDjGjh173PdT3O/b+PHjSUpKokOHDtx3332AMxX7/PnzmTp1qm8mhj179gCwYsUKevXqRadOnfKVF/W7XtSU8SejxBqHql4MICLLvc9N4Jb9soeDWTnBbab6/G74349le87TE+CCR0rczaZVt2nVvR577DFfLP7fydq1a3nttdfo3bs31113Hf/617+YMGECY8eO5ZtvvqFNmzaMHj2aF154gdtuuw1wZuStW7cuXbt2ZcOGDZxxxhk8+OCDfP3119SoUYN//OMfPPnkk764YmJi+PHHH3nzzTe57bbb+OSTT4qc6r2oqduLUtS/Z926dWnVqhWzZs3ipptu4osvvqBp06Yln7CAhx56iHr16pGbm8vAgQNZuXIlMTExbN26lbfeeovk5GQmT57MAw88wNNPP83o0aN59tlnjyuHwn/Xi5oy/mQm5yzNcNzAv2njk5LuISJMOKdV/VCHUuZOZFp1oEymVY+Pj+eXX345blr1xMREHnzwQTIyjt3uU9y06t6/kBcsWODb3zuteufOnbn11lvJy8s/GfTkyZP56quvSEtL800fXvCze6dVr1mzpm9a9eJ456o699xzufXWWwHnL+w333yTxMREevbsya5du1i3bl2R51i4cKFvEr7CplXv1KkT119/PePHjy/0+JkzZ/q+D/8a4rx58+jZsycJCQnMnTu31HM2NW3a1Dep5ciRI1m4cCFr164lPj7eN7vymDFjSE091vp97rnn+mbQTUhIYNGiRaxZs4bevXuTmJjIG2+84ZssEI79Gw8fPtw32eV3333HNddcAzgJzzunmnfq9sJ4a4WJiYls2LABKP7fMyoqilatWrF69Wreeust3xTyhSnq9+29996ja9eudOnShdWrV7NmzRpUlaZNm/omN/R+P/v27WPv3r3HlRf8Hvx/1+fMmcMjjzxCYmIi/fv3zzdl/IkKpI/jDvdpQ7/nqOqTJ/XOVUTqOg9dm9WldnQQ2ygDqBkEg02rbtOqB6Ko77848+bNo379+owePZoZM2ZQq1YtzjvvvEKb2Qqes6TzFzV1OxRdayrOtddey6OPPkpOTg6NGjUqcr/Cft82bdrE448/zpIlS6hb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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"plt.plot(history.history['accuracy'], \n",
" label='Доля верных ответов на обучающем наборе')\n",
"plt.plot(history.history['val_accuracy'], \n",
" label='Доля верных ответов на проверочном наборе')\n",
"plt.xlabel('Эпоха обучения')\n",
"plt.ylabel('Доля верных ответов')\n",
"plt.legend()\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {
"colab_type": "text",
"id": "7Uy7y521kqcb"
},
"source": [
"## Распознаем данные из тестового набора"
]
},
{
"cell_type": "code",
"execution_count": 61,
"metadata": {
"colab": {},
"colab_type": "code",
"id": "_eBLaI9skp5z"
},
"outputs": [],
"source": [
"y_predit = model.predict(x_test)"
]
},
{
"cell_type": "code",
"execution_count": 62,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 103
},
"colab_type": "code",
"executionInfo": {
"elapsed": 1489,
"status": "ok",
"timestamp": 1554034045767,
"user": {
"displayName": "Andrey Sozykin",
"photoUrl": "https://lh5.googleusercontent.com/-ErNH158Vx74/AAAAAAAAAAI/AAAAAAAAALA/FLh7rOkXgJs/s64/photo.jpg",
"userId": "18170979864079203851"
},
"user_tz": -300
},
"id": "eDd4vif5lft3",
"outputId": "d9eeb497-5ab0-4f9f-d1a5-4de3dbab2548"
},
"outputs": [
{
"data": {
"text/plain": [
"array([[8.657915e-15],\n",
" [1.000000e+00],\n",
" [1.903680e-02],\n",
" [1.000000e+00],\n",
" [1.000000e+00]], dtype=float32)"
]
},
"execution_count": 62,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"y_predit[:5]"
]
},
{
"cell_type": "markdown",
"metadata": {
"colab_type": "text",
"id": "Hg6AUSlETeeJ"
},
"source": [
"Округляем до 0 или 1"
]
},
{
"cell_type": "code",
"execution_count": 63,
"metadata": {
"colab": {},
"colab_type": "code",
"id": "2jNhqcraSXR6"
},
"outputs": [],
"source": [
"y_predit = y_predit.round()"
]
},
{
"cell_type": "code",
"execution_count": 64,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 137
},
"colab_type": "code",
"executionInfo": {
"elapsed": 1469,
"status": "ok",
"timestamp": 1554034053494,
"user": {
"displayName": "Andrey Sozykin",
"photoUrl": "https://lh5.googleusercontent.com/-ErNH158Vx74/AAAAAAAAAAI/AAAAAAAAALA/FLh7rOkXgJs/s64/photo.jpg",
"userId": "18170979864079203851"
},
"user_tz": -300
},
"id": "HWuRVA5xSwNA",
"outputId": "6578cb1e-cc73-42d2-9c88-058109d2bafc"
},
"outputs": [
{
"data": {
"text/plain": [
"array([[0.],\n",
" [1.],\n",
" [0.],\n",
" ...,\n",
" [1.],\n",
" [1.],\n",
" [0.]], dtype=float32)"
]
},
"execution_count": 64,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"y_predit"
]
},
{
"cell_type": "code",
"execution_count": 65,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"0.8012"
]
},
"execution_count": 65,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"accuracy_score(y_test, y_predit)"
]
},
{
"cell_type": "markdown",
"metadata": {
"colab_type": "text",
"id": "tFZpALxynmA0"
},
"source": [
"# LSTM"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"colab": {},
"colab_type": "code",
"id": "_mXIMe_9nTXc"
},
"outputs": [],
"source": [
"modelLSTM = Sequential()\n",
"modelLSTM.add(Embedding(num_words, 50, input_length=maxlen))\n",
"modelLSTM.add(SpatialDropout1D(0.4))\n",
"modelLSTM.add(LSTM(8, dropout=0.2, recurrent_dropout=0.2))\n",
"modelLSTM.add(Dense(1, activation='sigmoid'))\n",
"\n",
"modelLSTM.compile(optimizer='rmsprop', \n",
" loss='binary_crossentropy', \n",
" metrics=['accuracy'])"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 386
},
"colab_type": "code",
"executionInfo": {
"elapsed": 5630604,
"status": "ok",
"timestamp": 1554459012073,
"user": {
"displayName": "Максим Батькович",
"photoUrl": "",
"userId": "08926243841298764575"
},
"user_tz": -180
},
"id": "0AuyH3TsnVPM",
"outputId": "0b6c34fd-23c9-49c7-85fd-f01b5f073da5"
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Train on 36000 samples, validate on 4000 samples\n",
"Epoch 1/10\n",
"36000/36000 [==============================] - 316s 9ms/sample - loss: 0.5284 - acc: 0.7435 - val_loss: 0.3956 - val_acc: 0.8353\n",
"Epoch 2/10\n",
"36000/36000 [==============================] - 315s 9ms/sample - loss: 0.3824 - acc: 0.8377 - val_loss: 0.3497 - val_acc: 0.8500\n",
"Epoch 3/10\n",
"36000/36000 [==============================] - 315s 9ms/sample - loss: 0.3406 - acc: 0.8600 - val_loss: 0.3486 - val_acc: 0.8558\n",
"Epoch 4/10\n",
"36000/36000 [==============================] - 317s 9ms/sample - loss: 0.3158 - acc: 0.8723 - val_loss: 0.3410 - val_acc: 0.8610\n",
"Epoch 5/10\n",
"36000/36000 [==============================] - 316s 9ms/sample - loss: 0.3025 - acc: 0.8800 - val_loss: 0.3358 - val_acc: 0.8630\n",
"Epoch 6/10\n",
"36000/36000 [==============================] - 316s 9ms/sample - loss: 0.2913 - acc: 0.8847 - val_loss: 0.3275 - val_acc: 0.8677\n",
"Epoch 7/10\n",
"36000/36000 [==============================] - 315s 9ms/sample - loss: 0.2745 - acc: 0.8924 - val_loss: 0.3289 - val_acc: 0.8683\n",
"Epoch 8/10\n",
"36000/36000 [==============================] - 305s 8ms/sample - loss: 0.2684 - acc: 0.8951 - val_loss: 0.3259 - val_acc: 0.8735\n",
"Epoch 9/10\n",
"36000/36000 [==============================] - 300s 8ms/sample - loss: 0.2618 - acc: 0.8971 - val_loss: 0.3304 - val_acc: 0.8670\n",
"Epoch 10/10\n",
"36000/36000 [==============================] - 300s 8ms/sample - loss: 0.2513 - acc: 0.9021 - val_loss: 0.3176 - val_acc: 0.8748\n"
]
}
],
"source": [
"history = modelLSTM.fit(x_train, \n",
" y_train, \n",
" epochs=10,\n",
" batch_size=32,\n",
" validation_split=0.1)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 280
},
"colab_type": "code",
"executionInfo": {
"elapsed": 225,
"status": "ok",
"timestamp": 1554289527139,
"user": {
"displayName": "Максим Батькович",
"photoUrl": "",
"userId": "08926243841298764575"
},
"user_tz": -180
},
"id": "6n-RU6RVnX1v",
"outputId": "8e597761-7ad7-4820-e512-8286be322ebf"
},
"outputs": [
{
"data": {
"image/png": "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\ngk/bFLTW9x+1KKvdupXAyqO2twG/8GWaurPV3Yt5eFUdvf1lDlv2lWGzOfrsmLPHx3PlmeldblNW\nVkZs7LF5/c47/2TixElce+0N7Nmzm5dffo4VK16luLiIadNm8NRTz7tvGjk5e8nPP8Crr74BwAUX\nLOjwXM8++xLBwcFcc81lNDQ08Nprf+bqq/+D2bNP5rvv1vPmm6+7bwwXXnght922hAcf/B3ff//v\nXl3/3Xffyx//+DRXXHE1iYlJHgHBmZ4nef75P5GQkMhzzzlv3vfe+6D7JrNixasAbN68kdtuu4N5\n8+azfPmj7NunqampISYmlgceeJjq6mqWLLmdN998ixUrXnXfLC+77CoKCw/zySf/4rXX/gbArbde\nzxlnnAXAFVdczWWXXcWqVSvJytrqERQ609TUxB//+DLh4eEsXnwL+/fneOz3+ut/4cILL2LBgnNY\nt24Nf/3rqyxevIStWzfxH//xEr/61RL+8Iffs2bNZyxceD5r137OddfdyPr133DWWed2eM6WlhYS\nE5O48867aWlp5sorL2bRoovd69etW0NUVCR//ONLrF//NatWreThhx/r9lpeeOEZXnzxz0RERPLK\nKy+ybt0aJk+eSkaGYvPmH7nkksv57rv1jB2b0e2xusqf4uIifvzxO1544c/4+/tz880/Z+7cebzx\nxuvH5NVNN91GTs5eli9/mvj4BG655Xr27dvLu+++1eF31RdOZEPzoJCVU47JaGDiGHN/J2VYKCw8\nRFJS8jHL9+zZzXXX3QTA+PETOHToIABFRYUkJY302DYgIJCWlhbsdjt+fp0/ZX3PPb+mqqqSOXPm\nEhYWxs6d2ykoyOfNN1dht9uJinJ+5sHBwUybNo2ysjomTpxCQUE+ZnM0X375BXv27Ka11bOZ64kn\n/oC/vz8zZszillt+6V4+enQqkyZN5uWXn3PflNvU1tZgMBhISHD+2psxYxbbtm3pNO0rV67gjTde\nw2DwY8aM2bz88nNkZW1l+/ZtgPPGabFY8Pf37Gi5b59m4sTJmEzO/+qTJ08lJ2cvAO+88xZffPEZ\ntbU1/OlPrx9zzvbX21aQi4iI4IEHfgtAfn4eNTXVHvtonc3tt9/hvqY33nid1tZWwsLCGT9+AgBz\n585j166d/OIXN3P33Xdy3XU3smHDt9x330Ns376N+npnLXNrawsAgYGB1NbWcPvtN2IymaiurnKf\n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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"tags": []
},
"output_type": "display_data"
}
],
"source": [
"plt.plot(history.history['acc'], \n",
" label='Доля верных ответов на обучающем наборе')\n",
"plt.plot(history.history['val_acc'], \n",
" label='Доля верных ответов на проверочном наборе')\n",
"plt.xlabel('Эпоха обучения')\n",
"plt.ylabel('Доля верных ответов')\n",
"plt.legend()\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {
"colab_type": "text",
"id": "8HvMK60godee"
},
"source": [
"# GRU"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 459
},
"colab_type": "code",
"executionInfo": {
"elapsed": 2573846,
"status": "ok",
"timestamp": 1554455893325,
"user": {
"displayName": "Максим Батькович",
"photoUrl": "",
"userId": "08926243841298764575"
},
"user_tz": -180
},
"id": "k37mp6DeofY8",
"outputId": "9df39bd1-cfe0-44f9-ccc2-2bd039a742f8"
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Train on 36000 samples, validate on 4000 samples\n",
"WARNING:tensorflow:From /usr/local/lib/python3.6/dist-packages/tensorflow/python/ops/math_ops.py:3066: to_int32 (from tensorflow.python.ops.math_ops) is deprecated and will be removed in a future version.\n",
"Instructions for updating:\n",
"Use tf.cast instead.\n",
"Epoch 1/10\n",
"36000/36000 [==============================] - 258s 7ms/sample - loss: 0.5403 - acc: 0.7270 - val_loss: 0.4506 - val_acc: 0.7987\n",
"Epoch 2/10\n",
"36000/36000 [==============================] - 258s 7ms/sample - loss: 0.4050 - acc: 0.8248 - val_loss: 0.3826 - val_acc: 0.8382\n",
"Epoch 3/10\n",
"36000/36000 [==============================] - 257s 7ms/sample - loss: 0.3483 - acc: 0.8540 - val_loss: 0.3545 - val_acc: 0.8480\n",
"Epoch 4/10\n",
"36000/36000 [==============================] - 258s 7ms/sample - loss: 0.3134 - acc: 0.8711 - val_loss: 0.3179 - val_acc: 0.8658\n",
"Epoch 5/10\n",
"36000/36000 [==============================] - 257s 7ms/sample - loss: 0.2900 - acc: 0.8816 - val_loss: 0.3063 - val_acc: 0.8715\n",
"Epoch 6/10\n",
"36000/36000 [==============================] - 257s 7ms/sample - loss: 0.2693 - acc: 0.8917 - val_loss: 0.2943 - val_acc: 0.8760\n",
"Epoch 7/10\n",
"36000/36000 [==============================] - 255s 7ms/sample - loss: 0.2581 - acc: 0.8965 - val_loss: 0.2917 - val_acc: 0.8785\n",
"Epoch 8/10\n",
"36000/36000 [==============================] - 256s 7ms/sample - loss: 0.2458 - acc: 0.9007 - val_loss: 0.2861 - val_acc: 0.8802\n",
"Epoch 9/10\n",
"36000/36000 [==============================] - 257s 7ms/sample - loss: 0.2374 - acc: 0.9041 - val_loss: 0.2892 - val_acc: 0.8817\n",
"Epoch 10/10\n",
"36000/36000 [==============================] - 256s 7ms/sample - loss: 0.2288 - acc: 0.9086 - val_loss: 0.2855 - val_acc: 0.8813\n"
]
}
],
"source": [
"modelGRU = Sequential()\n",
"modelGRU.add(Embedding(num_words, 50, input_length=maxlen))\n",
"modelGRU.add(SpatialDropout1D(0.4))\n",
"modelGRU.add(GRU(8, dropout = 0.2, recurrent_dropout = 0.2))\n",
"modelGRU.add(Dense(1, activation='sigmoid'))\n",
"\n",
"modelGRU.compile(optimizer='rmsprop', \n",
" loss='binary_crossentropy', \n",
" metrics=['accuracy'])\n",
"history = modelGRU.fit(x_train, \n",
" y_train, \n",
" epochs=10,\n",
" batch_size=32,\n",
" validation_split=0.1)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"colab": {},
"colab_type": "code",
"id": "iK0EHLgJogjk"
},
"outputs": [],
"source": [
"history = modelGRU.fit(x_train, \n",
" y_train, \n",
" epochs=10,\n",
" batch_size=32,\n",
" validation_split=0.1)"
]
},
{
"cell_type": "markdown",
"metadata": {
"colab_type": "text",
"id": "VR2D0uI4osAu"
},
"source": [
"# SimpleRNN"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"colab": {},
"colab_type": "code",
"id": "KmR2RH6Co5K6"
},
"outputs": [],
"source": [
"modelSRNN = Sequential()\n",
"modelSRNN.add(Embedding(num_words, 50, input_length=maxlen))\n",
"modelSRNN.add(SimpleRNN(8))\n",
"modelSRNN.add(Dense(1, activation='sigmoid'))\n",
"\n",
"modelSRNN.compile(optimizer='rmsprop', \n",
" loss='binary_crossentropy', \n",
" metrics=['accuracy'])"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 386
},
"colab_type": "code",
"executionInfo": {
"elapsed": 1138418,
"status": "ok",
"timestamp": 1554295382036,
"user": {
"displayName": "Максим Батькович",
"photoUrl": "",
"userId": "08926243841298764575"
},
"user_tz": -180
},
"id": "yfXgSY03o-_q",
"outputId": "443ef72e-6f83-4b52-db00-96d78ac6c79f"
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Train on 36000 samples, validate on 4000 samples\n",
"Epoch 1/10\n",
"36000/36000 [==============================] - 95s 3ms/sample - loss: 0.4549 - acc: 0.7958 - val_loss: 0.3700 - val_acc: 0.8447\n",
"Epoch 2/10\n",
"36000/36000 [==============================] - 95s 3ms/sample - loss: 0.3271 - acc: 0.8648 - val_loss: 0.3612 - val_acc: 0.8388\n",
"Epoch 3/10\n",
"36000/36000 [==============================] - 94s 3ms/sample - loss: 0.2767 - acc: 0.8897 - val_loss: 0.3359 - val_acc: 0.8595\n",
"Epoch 4/10\n",
"36000/36000 [==============================] - 94s 3ms/sample - loss: 0.2413 - acc: 0.9048 - val_loss: 0.3499 - val_acc: 0.8537\n",
"Epoch 5/10\n",
"36000/36000 [==============================] - 94s 3ms/sample - loss: 0.2076 - acc: 0.9220 - val_loss: 0.3674 - val_acc: 0.8555\n",
"Epoch 6/10\n",
"36000/36000 [==============================] - 94s 3ms/sample - loss: 0.1778 - acc: 0.9326 - val_loss: 0.3791 - val_acc: 0.8553\n",
"Epoch 7/10\n",
"36000/36000 [==============================] - 94s 3ms/sample - loss: 0.1534 - acc: 0.9424 - val_loss: 0.3874 - val_acc: 0.8462\n",
"Epoch 8/10\n",
"36000/36000 [==============================] - 94s 3ms/sample - loss: 0.1360 - acc: 0.9509 - val_loss: 0.4318 - val_acc: 0.8500\n",
"Epoch 9/10\n",
"36000/36000 [==============================] - 94s 3ms/sample - loss: 0.1198 - acc: 0.9575 - val_loss: 0.4563 - val_acc: 0.8528\n",
"Epoch 10/10\n",
"36000/36000 [==============================] - 94s 3ms/sample - loss: 0.1083 - acc: 0.9609 - val_loss: 0.4087 - val_acc: 0.8490\n"
]
}
],
"source": [
"history = modelSRNN.fit(x_train, \n",
" y_train, \n",
" epochs=10,\n",
" batch_size=32,\n",
" validation_split=0.1)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 280
},
"colab_type": "code",
"executionInfo": {
"elapsed": 1123430,
"status": "ok",
"timestamp": 1554295382039,
"user": {
"displayName": "Максим Батькович",
"photoUrl": "",
"userId": "08926243841298764575"
},
"user_tz": -180
},
"id": "8XAC8TrCo_Rj",
"outputId": "a2a0638b-73e3-441e-a867-26e4c4a72db7"
},
"outputs": [
{
"data": {
"image/png": "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\n9P8J9KTKq9+sjQAAAABJRU5ErkJggg==\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"tags": []
},
"output_type": "display_data"
}
],
"source": [
"plt.plot(history.history['acc'], \n",
" label='Доля верных ответов на обучающем наборе')\n",
"plt.plot(history.history['val_acc'], \n",
" label='Доля верных ответов на проверочном наборе')\n",
"plt.xlabel('Эпоха обучения')\n",
"plt.ylabel('Доля верных ответов')\n",
"plt.legend()\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Задание\n",
" - Измените длину вектора в слое Embedding.\n",
" - Изменяйте количество нейронов в рекуррентном слое.\n",
" - Попробуйте использовать двунаправленные рекуррентные слои (Bidirectional)\n",
" - Попробуйте использовать несколько рекуррентных слоев в сети. "
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"accelerator": "GPU",
"colab": {
"name": "Copy of ДЗ№10 рекуррентные нейронные сети для обработки текстов Лопатин М.В. .ipynb",
"provenance": [
{
"file_id": "1hIoriJFZz0gpsI8X2KPHxThAgz0cNtBX",
"timestamp": 1555142559682
},
{
"file_id": "1xo2ktUFhosKo8dwYQNsO9qk-NHM5qBoM",
"timestamp": 1554284811093
},
{
"file_id": "14qSjZOTB_ZH-xp8E3ar6v_SmCvyIBAeJ",
"timestamp": 1543289943814
},
{
"file_id": "1Bj43ioMWx0OrZSkWGc9p95oaUc2A6olc",
"timestamp": 1542707252376
},
{
"file_id": "1Rx2ZCmlL783MdXCgapJEmB7S1k9qC-sc",
"timestamp": 1542638541701
}
],
"version": "0.3.2"
},
"kernelspec": {
"display_name": "Python 3 (ipykernel)",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.9.6"
}
},
"nbformat": 4,
"nbformat_minor": 4
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment