рдирдлрд░рдд рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рддрдВрддреНрд░рд┐рдХрд╛ рдиреЗрдЯрд╡рд░реНрдХ - "рдирд╣реАрдВ, рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдпрд╣ рдкреНрд░рддрд┐рдмрдВрдз рд╣реИ"

рдирдорд╕реНрддреЗ!

рдХреНрдпрд╛ рдЖрдк рдЕрдХреНрд╕рд░ рд╕реЛрд╢рд▓ рдиреЗрдЯрд╡рд░реНрдХ рдкрд░ рд╡рд┐рд╖рд╛рдХреНрдд рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдВ рджреЗрдЦрддреЗ рд╣реИрдВ? рдпрд╣ рд╕рдВрднрд╡рддрдГ рдЙрд╕ рд╕рд╛рдордЧреНрд░реА рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдЖрдк рджреЗрдЦ рд░рд╣реЗ рд╣реИрдВред рдореИрдВ рдЗрд╕ рд╡рд┐рд╖рдп рдкрд░ рдереЛрдбрд╝рд╛ рдкреНрд░рдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рдХрд░рддрд╛ рд╣реВрдВ рдФрд░ рддрдВрддреНрд░рд┐рдХрд╛ рдиреЗрдЯрд╡рд░реНрдХ рдХреЛ рдирдлрд░рдд рдХреА рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд┐рдЦрд╛рддрд╛ рд╣реВрдВред

рдЗрд╕рд▓рд┐рдП, рд╣рдорд╛рд░рд╛ рд╡реИрд╢реНрд╡рд┐рдХ рд▓рдХреНрд╖реНрдп рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдирд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдХреЛрдИ рдЯрд┐рдкреНрдкрдгреА рдЖрдХреНрд░рд╛рдордХ рд╣реИ, рдЕрд░реНрдерд╛рдд рд╣рдо рджреНрд╡рд┐рдЖрдзрд╛рд░реА рд╡рд░реНрдЧреАрдХрд░рдг рд╕реЗ рдирд┐рдкрдЯ рд░рд╣реЗ рд╣реИрдВред рд╣рдо рдПрдХ рд╕рд░рд▓ рддрдВрддреНрд░рд┐рдХрд╛ рдиреЗрдЯрд╡рд░реНрдХ рд▓рд┐рдЦреЗрдВрдЧреЗ, рдЗрд╕реЗ рд╡рд┐рднрд┐рдиреНрди рд╕рд╛рдорд╛рдЬрд┐рдХ рдиреЗрдЯрд╡рд░реНрдХ рд╕реЗ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЗ рдбреЗрдЯрд╛рд╕реЗрдЯ рдкрд░ рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдХрд░реЗрдВрдЧреЗ, рдФрд░ рдлрд┐рд░ рд╣рдо рд╡рд┐рдЬрд╝реБрдЕрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдХреЗ рд╕рд╛рде рдПрдХ рд╕рд░рд▓ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░реЗрдВрдЧреЗред

рдХрд╛рдо рдХреЗ рд▓рд┐рдП рдореИрдВ Google Colab рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реВрдВрдЧрд╛ред рдпрд╣ рд╕реЗрд╡рд╛ рдЖрдкрдХреЛ рдЬреНрдпреВрдкрд┐рдЯрд░ рдиреЛрдЯрдмреБрдХ рдЪрд▓рд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИ, рдФрд░ рдореБрдлреНрдд рдореЗрдВ GPU (NVidia Tesla K80) рддрдХ рдкрд╣реБрдВрдЪ рд╕рдХрддреА рд╣реИ, рдЬрд┐рд╕рд╕реЗ рд╕реАрдЦрдиреЗ рдХреА рдЧрддрд┐ рдмрдврд╝реЗрдЧреАред рдореИрдВ TendorFlow рдмреИрдХрдПрдВрдб рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА, рдХреЛрд▓рд╛рдм рдореЗрдВ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╕рдВрд╕реНрдХрд░рдг 1.15.0, рдЗрд╕рд▓рд┐рдП рд╕рд┐рд░реНрдл 2.0.0 рдореЗрдВ рдЕрдкрдЧреНрд░реЗрдб рдХрд░реЗрдВред

рд╣рдо рдореЙрдбреНрдпреВрд▓ рдФрд░ рдЕрдкрдбреЗрдЯ рдЖрдпрд╛рдд рдХрд░рддреЗ рд╣реИрдВред

from __future__ import absolute_import, division, print_function, unicode_literals import tensorflow as tf !tf_upgrade_v2 -h 

рдЖрдк рд╡рд░реНрддрдорд╛рди рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рдЗрд╕ рддрд░рд╣ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред

 print(tf.__version__) 

рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдХрд╛рд░реНрдп рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд╣рдо рд╕рднреА рдЖрд╡рд╢реНрдпрдХ рдореЙрдбреНрдпреВрд▓ рдЖрдпрд╛рдд рдХрд░рддреЗ рд╣реИрдВред

 import os import numpy as np # For DataFrame object import pandas as pd # Neural Network from keras.models import Sequential from keras.layers import Dense, Dropout from keras.optimizers import RMSprop # Text Vectorizing from keras.preprocessing.text import Tokenizer # Train-test-split from sklearn.model_selection import train_test_split # History visualization %matplotlib inline import matplotlib.pyplot as plt # Normalize from sklearn.preprocessing import normalize 

рдкреНрд░рдпреБрдХреНрдд рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХрд╛ рд╡рд┐рд╡рд░рдг


  • рдУрдПрд╕ - рдлрд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП

  • рд╕реБрдиреНрди - рд╕рд░рдгрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП

  • рдкрд╛рдВрдбрд╛ - рд╕рд╛рд░рдгреАрдмрджреНрдз рдбреЗрдЯрд╛ рдХреЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЗ рд▓рд┐рдП рдПрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп

  • рдХреЗрд░рд╕ - рдПрдХ рдореЙрдбрд▓ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП

  • keras.preprocessing.Text - рдкрд╛рда рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рддрдВрддреНрд░рд┐рдХрд╛ рдиреЗрдЯрд╡рд░реНрдХ рдХреЗ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рд╕рдВрдЦреНрдпрд╛рддреНрдордХ рд░реВрдк рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП

  • sklearn.train_test_split - рдкреНрд░рд╢рд┐рдХреНрд╖рдг рд╕реЗ рдкрд░реАрдХреНрд╖рдг рдбреЗрдЯрд╛ рдХреЛ рдЕрд▓рдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП

  • matplotlib - рд╕реАрдЦрдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреА рдХрд▓реНрдкрдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП

  • sklearn.normalize - рдкрд░реАрдХреНрд╖рдг рдФрд░ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдбреЗрдЯрд╛ рдХреЛ рд╕рд╛рдорд╛рдиреНрдп рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП

рдХрд╛рдЧрд▓ рдХреЗ рд╕рд╛рде рдбреЗрдЯрд╛ рдкрд╛рд░реНрд╕ рдХрд░рдирд╛


рдореИрдВ рд╕реАрдзреЗ рдХреЛрд▓рд╛рдм рд▓реИрдкрдЯреЙрдк рдореЗрдВ рд╣реА рдбреЗрдЯрд╛ рд▓реЛрдб рдХрд░рддрд╛ рд╣реВрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдХрд┐рд╕реА рднреА рд╕рдорд╕реНрдпрд╛ рдХреЗ рдмрд┐рдирд╛, рдореИрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЙрдиреНрд╣реЗрдВ рдирд┐рдХрд╛рд▓ рд░рд╣рд╛ рд╣реВрдВред

 path = 'labeled.csv' df = pd.read_csv(path) df.head() 



рдФрд░ рдпрд╣ рд╣рдорд╛рд░реЗ рдбреЗрдЯрд╛рд╕реЗрдЯ рдХреА рд╣реЗрдбрд┐рдВрдЧ рд╣реИ ... рдореИрдВ рднреА рдХрд┐рд╕реА рддрд░рд╣ "рд░рд┐рдлреНрд░реЗрд╢ рдкреЗрдЬ, рдореЛрд░рди" рд╕реЗ рдЕрд╕рд╣рдЬ рдорд╣рд╕реВрд╕ рдХрд░рддрд╛ рд╣реВрдВред
рдЗрд╕рд▓рд┐рдП, рд╣рдорд╛рд░рд╛ рдбреЗрдЯрд╛ рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рд╣реИ, рд╣рдо рдЗрд╕реЗ рджреЛ рднрд╛рдЧреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░реЗрдВрдЧреЗ: рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛ рдФрд░ рдкрд░реАрдХреНрд╖рдг рдореЙрдбрд▓ рдХреЗ рд▓рд┐рдПред рд▓реЗрдХрд┐рди рдпрд╣ рд╕рдм рдкрд╛рда рд╣реИ, рдХреБрдЫ рдХрд░рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИред

рдбрд╛рдЯрд╛ рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ


рдЯреЗрдХреНрд╕реНрдЯ рд╕реЗ рдиреНрдпреВрд▓рд╛рдЗрди рд╡рд░реНрдг рдирд┐рдХрд╛рд▓реЗрдВред

 def delete_new_line_symbols(text): text = text.replace('\n', ' ') return text 

 df['comment'] = df['comment'].apply(delete_new_line_symbols) df.head() 

рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░ рд╣реЛрддрд╛ рд╣реИ, рд╣рдореЗрдВ рдЙрдиреНрд╣реЗрдВ рдкреВрд░реНрдгрд╛рдВрдХ рдореЗрдВ рдЕрдиреБрд╡рд╛рдж рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдЕрдЧрд▓рд╛, рдЗрд╕реЗ рдПрдХ рдЕрд▓рдЧ рдЪрд░ рдореЗрдВ рд╕рд╣реЗрдЬреЗрдВред

 target = np.array(df['toxic'].astype('uint8')) target[:5] 

рдЕрдм рд╣рдо рдЯреЛрдХрдирд░ рдХреНрд▓рд╛рд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЯреЗрдХреНрд╕реНрдЯ рдХреЛ рдереЛрдбрд╝рд╛ рдкреНрд░реЛрд╕реЗрд╕ рдХрд░реЗрдВрдЧреЗред рдЗрд╕рдХреА рдПрдХ рдкреНрд░рддрд┐ рд▓рд┐рдЦрддреЗ рд╣реИрдВред

 tokenizer = Tokenizer(num_words=30000, filters='!"#$%&()*+,-./:;<=>?@[\\]^_`{|}~\t\n', lower=True, split=' ', char_level=False) 

рдЬрд▓реНрджреА рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ

  • num_words - рдирд┐рд╢реНрдЪрд┐рдд рд╢рдмреНрджреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ (рд╕рдмрд╕реЗ рд╕рд╛рдорд╛рдиреНрдп)

  • рдлрд╝рд┐рд▓реНрдЯрд░ - рд╣рдЯрд╛рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рд╡рд░реНрдгреЛрдВ рдХрд╛ рдПрдХ рдХреНрд░рдо

  • рдирд┐рдЪрд▓рд╛ - рдПрдХ рдмреВрд▓рд┐рдпрди рдкреИрд░рд╛рдореАрдЯрд░ рдЬреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдкрд╛рда рд▓реЛрдЕрд░рдХреЗрд╕ рд╣реЛрдЧрд╛

  • рд╕реНрдкреНрд▓рд┐рдЯ - рд╕реНрдкреНрд▓рд┐рдЯ рдСрдлрд░ рдХрд╛ рдореБрдЦреНрдп рдкреНрд░рддреАрдХ

  • char_level - рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдХрд┐рд╕реА рдПрдХрд▓ рд╡рд░реНрдг рдХреЛ рдПрдХ рд╢рдмреНрдж рдорд╛рдирд╛ рдЬрд╛рдПрдЧрд╛

рдФрд░ рдЕрдм рд╣рдо рдХрдХреНрд╖рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкрд╛рда рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░реЗрдВрдЧреЗред

 tokenizer.fit_on_texts(df['comment']) matrix = tokenizer.texts_to_matrix(df['comment'], mode='count') matrix.shape 

рд╣рдореЗрдВ 14k рдирдореВрдирд╛ рдкрдВрдХреНрддрд┐рдпрд╛рдБ рдФрд░ 30k рдлрд╝реАрдЪрд░ рдХреЙрд▓рдо рдорд┐рд▓реЗред



рдореИрдВ рджреЛ рдкрд░рддреЛрдВ рд╕реЗ рдПрдХ рдореЙрдбрд▓ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░ рд░рд╣рд╛ рд╣реВрдВ: рдШрдиреЗ рдФрд░ рдбреНрд░реЙрдкрдЖрдЙрдЯред

 def get_model(): model = Sequential() model.add(Dense(32, activation='relu')) model.add(Dropout(0.3)) model.add(Dense(16, activation='relu')) model.add(Dropout(0.3)) model.add(Dense(16, activation='relu')) model.add(Dense(1, activation='sigmoid')) model.compile(optimizer=RMSprop(lr=0.0001), loss='binary_crossentropy', metrics=['accuracy']) return model 

рд╣рдо рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреЛ рд╕рд╛рдорд╛рдиреНрдп рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдбреЗрдЯрд╛ рдХреЛ рджреЛ рднрд╛рдЧреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдЬреИрд╕рд╛ рдХрд┐ рд╕рд╣рдорддрд┐ (рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдФрд░ рдкрд░реАрдХреНрд╖рдг)ред

 X = normalize(matrix) y = target X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2) X_train.shape, y_train.shape 

рдореЙрдбрд▓ рдкреНрд░рд╢рд┐рдХреНрд╖рдг


 model = get_model() history = model.fit(X_train, y_train, epochs=150, batch_size=500, validation_data=(X_test, y_test)) history 

рдореИрдВ рдЕрдВрддрд┐рдо рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рдореЗрдВ рд╕реАрдЦрдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рджрд┐рдЦрд╛рдКрдВрдЧрд╛ред



рд╕реАрдЦрдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд╛ рджреГрд╢реНрдп


 history = history.history fig = plt.figure(figsize=(20, 10)) ax1 = fig.add_subplot(221) ax2 = fig.add_subplot(223) x = range(150) ax1.plot(x, history['acc'], 'b-', label='Accuracy') ax1.plot(x, history['val_acc'], 'r-', label='Validation accuracy') ax1.legend(loc='lower right') ax2.plot(x, history['loss'], 'b-', label='Losses') ax2.plot(x, history['val_loss'], 'r-', label='Validation losses') ax2.legend(loc='upper right') 





рдирд┐рд╖реНрдХрд░реНрд╖


рдореЙрдбрд▓ 75 рд╡реЗрдВ рдпреБрдЧ рдХреЗ рдЖрд╕рдкрд╛рд╕ рдЖрдпрд╛ рдерд╛, рдФрд░ рдлрд┐рд░ рдпрд╣ рдмреБрд░реА рддрд░рд╣ рд╕реЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рддрд╛ рд╣реИред 0.85 рдХреА рд╕рдЯреАрдХрддрд╛ рдкрд░реЗрд╢рд╛рди рдирд╣реАрдВ рдХрд░рддреА рд╣реИред рдЖрдк рдкрд░рддреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛, рд╣рд╛рдЗрдкрд░рдкрд░рдореЗрдЯрд░реНрд╕ рдХреЗ рд╕рд╛рде рдордЬрд╝реЗ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдкрд░рд┐рдгрд╛рдо рдХреЛ рдмреЗрд╣рддрд░ рдмрдирд╛рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рд╣рдореЗрд╢рд╛ рджрд┐рд▓рдЪрд╕реНрдк рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдиреМрдХрд░реА рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реЛрддрд╛ рд╣реИред рдЕрдкрдиреЗ рд╡рд┐рдЪрд╛рд░реЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ рд▓рд┐рдЦреЗрдВ, рд╣рдо рджреЗрдЦреЗрдВрдЧреЗ рдХрд┐ рдЗрд╕ рд▓реЗрдЦ рд╕реЗ рдХрд┐рддрдиреА рдЯреЛрдкрд┐рдпрд╛рдБ рдорд┐рд▓реЗрдВрдЧреАред

Source: https://habr.com/ru/post/hi476188/


All Articles