المزيد من مشاريع التعلم العميق......مشاريع التعلم العميق

مشروع 8: تصنيف الجنسيات باستخدام التعلم العميق

في هذا المقال، سوف أطلعكم على كيفية تصنيف جنسيات الأشخاص باستخدام أسمائهم. سوف تفكر في كيفية تصنيف الجنسيات باستخدام الأسماء فقط. هناك الكثير حول كيفية اللعب بالأسماء.

تصنيف الجنسيات

لنبدأ بمهمة التعلم العميق هذه لتصنيف الجنسيات عن طريق استيراد الحزم الضرورية. سأصنف الجنسيات بناءً على الأسماء على أنها هندية أو غير هندية. لذلك، دعنا نستورد بعض الحزم ونبدأ بالمهمة:

from tensorflow import keras
import tensorflow as tf
import pandas as pd
import os
import re

الآن، دعنا نستورد مجموعات البيانات. يمكن تنزيل مجموعات البيانات التي أستخدمها هنا في هذه المقالة بسهولة من هنا. الآن بعد استيراد مجموعات البيانات، سأقوم بإعداد دالتين مساعدتين لتنظيف البيانات ومعالجة البيانات:

male_data = pd.read_csv(male.csv)
female_data = pd.read_csv(femaile.csv)
repl_list = ['s/o','d/o','w/o','/','&',',','-']
def clean_data(name):	

	name = str(name).lower()	
	name = (''.join(i for i in name if ord(i)<128)).strip()	
	for repl in repl_list:	
		name = name.replace(repl," ")	
	if '@' in name:	
		pos = name.find('@')	
		name = name[:pos].strip()	
	name = name.split(" ")	
	name = " ".join([each.strip() for each in name])	
	return name	

	
def remove_records(merged_data):	
	merged_data['delete'] = 0	
	merged_data.loc[merged_data['name'].str.find('with') != -1,
'delete'] = 1		
	merged_data.loc[merged_data['count_words']>=5,'delete']=1	
	merged_data.loc[merged_data['count_words']==0,'delete']=1	
	merged_data.loc[merged_data['name'].str.contains(r'\d') == True,
'delete']=1	
	cleaned_data = merged_data[merged_data.delete==0]	
	return cleaned_data	
merged_data = pd.concat((male_data,female_data),axis=0)
merged_data['name'] = merged_data['name'].apply(clean_data)	

merged_data['count_words'] = merged_data['name'].str.split().apply(len)	

	
cleaned_data = remove_records(merged_data)	
indian_cleaned_data = cleaned_data[['name','count_words']].drop_duplicates(
subset='name',keep='first')	
indian_cleaned_data['label'] = 'indian'
len(indian_cleaned_data)	


13754

بعد تحميل وإزالة الإدخالات الخاطئة في البيانات، حصلنا على عدد قليل من السجلات تقريبا 13000.

بالنسبة للأسماء غير الهندية، هناك حزمة أنيقة تسمى Faker. هذا يولد أسماء من مناطق مختلفة:

from faker import Faker
fake = Faker(‘en_US’)
fake.name()

 

‘Brian Evans’

لقد أنشأنا نفس عدد الأسماء تقريبًا كما لدينا في مجموعة البيانات الهندية. ثم أزلنا عينات أطول من 5 كلمات. احتوت مجموعة البيانات الهندية على الكثير من الأسماء بأسماء أولى فقط. لذلك نحن بحاجة إلى جعل التوزيع العام لغير الهند متشابهًا أيضًا.

non_indian_data.head()

انتهى بنا المطاف بحوالي 14000 اسم غير هندي و13000 اسم هندي. لنقم الآن ببناء شبكة عصبية لتصنيف الجنسيات باستخدام الأسماء:

from keras.utils import to_categorical
from keras.models import Sequential
from keras.layers import Dense
from keras.layers import LSTM
from keras.preprocessing import sequence
from keras.preprocessing.text import Tokenizer
from keras.layers.embeddings import Embedding
from keras.utils import to_categorical
import numpy as np
from sklearn.preprocessing import LabelEncoder
from keras.callbacks import Callback
np.random.seed(42)
def char_encoded_representation(data,tokenizer,vocab_size,max_len):
  char_index_sentences = tokenizer.texts_to_sequences(data)
  sequences = [to_categorical(x, num_classes=vocab_size) for x in   char_index_sentences]
  X = sequence.pad_sequences(sequences, maxlen=max_len)
  return X


def build_model(hidden_units,max_len,vocab_size):
  model = Sequential()
  model.add(LSTM(hidden_units,input_shape=(max_len,vocab_size)))
  model.add(Dense(1, activation=’sigmoid’))
  model.compile(loss=’binary_crossentropy’, optimizer=’adam’,   metrics=[‘accuracy’])
  print(model.summary())
  return model
model = build_model(100,max_len,vocab_size)
model.fit(X_train, y_train, epochs=20, batch_size=64,callbacks=myCallback(X_test,y_test))

هذه هي الطريقة التي يمكننا بها تصنيف الجنسيات بسهولة باستخدام التعلم العميق. لم أقم بتضمين الكود الكامل والاستكشاف هنا، يمكنك إلقاء نظرة على الكود الكامل من هنا.

بواسطة
thecleverprogrammer
المصدر
Deep Learning Projects with Python

د. علاء طعيمة

كلية علوم الحاسوب وتكنولوجيا المعلومات / جامعة القادسية / العراق

مقالات ذات صلة

تعليق واحد

اترك تعليقاً

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *

زر الذهاب إلى الأعلى