Filter by دسته‌ها
chatGTP
ابزارهای هوش مصنوعی
اخبار
گزارش
تیتر یک
چندرسانه ای
آموزش علوم داده
اینفوگرافیک
پادکست
ویدیو
دانش روز
آموزش‌های پایه‌ای هوش مصنوعی
اصول هوش مصنوعی
یادگیری بدون نظارت
یادگیری تقویتی
یادگیری عمیق
یادگیری نیمه نظارتی
آموزش‌های پیشرفته هوش مصنوعی
بینایی ماشین
پردازش زبان طبیعی
پردازش گفتار
چالش‌های عملیاتی
داده کاوی و بیگ دیتا
رایانش ابری و HPC
سیستم‌‌های امبدد
علوم شناختی
دیتاست
رویدادها
جیتکس
کاربردهای هوش مصنوعی
کتابخانه
اشخاص
شرکت‌های هوش مصنوعی
محصولات و مدل‌های هوش مصنوعی
مفاهیم
کسب‌و‌کار
تحلیل بازارهای هوش مصنوعی
کارآفرینی
هوش مصنوعی در ایران
هوش مصنوعی در جهان
مقاله
 تشخیص کنایه در عناوین خبری با cAInvas

تشخیص کنایه در عناوین خبری با cAInvas

زمان مطالعه: 3 دقیقه

کنایه که در لغت به معنای «پوشیده سخن گفتن» است، در اصطلاح به ترکیب یا جمله‌ای اطلاق می‌شود که مراد گوینده معنای ظاهری آن نباشد. این عنصر می‌تواند بار معنایی جمله را دستخوش تغییر قرار دهد. بنابراین، تشخیص کنایه به بخش مهمی از تحلیل احساسات تبدیل شده است. بخش عمده‌ای از مجموعه‌داده‌های موجود از توئیت‌های کاربران شبکه اجتماعی توئیتر گردآوری شده است. این اقدام می‌تواند به داده‌های نویزی با برچسب‌های نادرست ختم شود. درکِ محتوای مکالمات، نقشی حیاتی در برچسب‌زنی متن دارد. در مقاله حاضر، از مجموعه‌‌داده‌ای متشکل از عناوین خبری استفاده خواهیم کرد. این مجموعه‌داده قابل‌اطمینان است زیرا عناوین خبری نوشته شده به دست متخصصان حوزه رسانه نوشته شده است. می‌توان از آن منبع برای برچسب زدن به نمونه‌های مجموعه‌داده استفاده کرد.

پیاده‌سازی ایده در cAInvas – به این لینک مراجعه کنید.

مجموعه‌داده

On Kaggle – ریشاب میسرا

این مجموعه‌داده از دو وب‌سایت خبری گردآوری شده است. Onion در نظر دارد تا نسخه‌های کنایه‌آمیزِ رخدادهای فعلی را ایجاد کند. عناوین خبری نیز از بخش‌ «خلاصه اخبار» و «تصاویر خبری» جمع‌آوری شده‌اند. همچنین، عناوین خبری واقعی (بدون کنایه) از Huffpost گردآوری شده است.

داده
شِمایی از مجموعه‌داده
توزیع مقادیر دسته
توزیع مقادیر دسته

همانطور که در تصویر بالا مشخص است این مجموعه‌داده از توازن خوبی برخوردار است.

پردازش داده

برای پردازش داده متن و تشخیص کنایه عنوان خبری باید تغییرتی داشته باشد.برای مثال، باید عناصر HTML و URL حذف شوند. در وهله بعد، همه کاراکترهایی که در زمره‌ی حروف الفبا جای ندارند، حذف شوند. توابع به صورت زیر تعریف شده‌اند:

# Remove html tags
def removeHTML(sentence):
    regex = re.compile('<.*?>')
    return re.sub(regex, ' ', sentence)

# Remove URLs
def removeURL(sentence):
    regex = re.compile('http[s]?://\S+')
    return re.sub(regex, ' ', sentence)

# remove numbers, punctuation and any special characters (keep only alphabets)
def onlyAlphabets(sentence):
    regex = re.compile('[^a-zA-Z]')
    return re.sub(regex, ' ', sentence)

کد: توابع پردازش متن

به محض اِتمام عمل پردازش، جمله پیش از آنکه به واژگان ریشه تجزیه شود، به صورت حروف کوچک نوشته می‌شود. بنابراین، واژگانی که اَشکال متفاوتی از واژگان یکسان هستند، به راحتی مورد شناسایی قرار می‌گیرند (مثال: خوردن، خورد، می‌خورد). از ماژول nltk.stem برای یافتن ریشه کلمات استفاده می‌شود. کلمات توقف حذف نمی‌شوند زیرا می‌توانند به ارائه بافت جمله به صورت کل کمک کنند.

sno = nltk.stem.SnowballStemmer('english')    # Initializing stemmer
wordcloud = [[], []]
all_sentences = []    # All cleaned sentences


for x in range(len(df['headline'].values)):
    headline = df['headline'].values[x]
    sarcasm = df['is_sarcastic'].values[x]

    cleaned_sentence = []
    sentence = removeURL(headline) 
    sentence = removeHTML(sentence)
    sentence = onlyAlphabets(sentence)
    sentence = sentence.lower()   

    for word in sentence.split():
        #if word not in stop:
            stemmed = sno.stem(word)
            cleaned_sentence.append(stemmed)
            
            wordcloud[sarcasm].append(word)
            

    all_sentences.append(' '.join(cleaned_sentence))

# add as column in dataframe
X = all_sentences
y = df['is_sarcastic']

کد: پردازش متن

واژگان متعلق به هر یک از دسته‌ها با استفاده از WordCloud به صورت جداگانه‌ ذخیره می‌شوند تا عمل مصورسازی صورت گیرد.

WordCloud
WordCloud: بدون کنایه
WordCloud: کنایه‌آمیز
WordCloud: کنایه‌آمیز

اندازه واژه با فراوانیِ آن در مجموعه‌داده همخوانی دارد. نمی‌توان بر پایه این تصاویر استنباط کرد.

تفکیک آموزش – اعتبارسنجی

تقسیم مجموعه‌داده به مجموعه‌های آموزش و اعتبارسنجی با نسبت 20-80.

# Splitting into train and val set -- 80-20 split

Xtrain, Xval, ytrain, yval = train_test_split(X, y, test_size = 0.2)

کد: Train-val split

میبینیم که مجموعه آموزش 22895 نمونه و مجموعه اعتبارسنجی 5724 نمونه دارد.

نشانه‌گذاری

از عمل نشانه‌گذاریِ ماژول keras.preprocessing.text برای تبدیل متن به توالی اعداد صحیح استفاده می‌شود. این اعداد به عنوان ورودی در اختیار مدل قرار می‌گیرند. برای اینکه طول حداکثر 200 به دست آید، این اعداد چمد صفر نیز دارند.

# Tokenization
vocab = 1500
mlen = 200
 
tokenizer = Tokenizer(num_words = vocab, oov_token = '<UNK>')
tokenizer.fit_on_texts(Xtrain)
 
Xtrain = tokenizer.texts_to_sequences(Xtrain)
Xtrain = pad_sequences(Xtrain, maxlen=mlen)

Xval = tokenizer.texts_to_sequences(Xval)
Xval = pad_sequences(Xval, maxlen=mlen)

کد: Tokenization (نشانه‌گذاری)

مدل

برای تشخیص کنایه مدلی که باید آموزش داده شود، از یک لایه تعبیه Embedding layer تشکیل شده که نمونه‌های ورودی را به آرایه‌هایی با اندازه ثابت تبدیل می‌کند. یک شبکه حافظه طولانی کوتاه‌مدت و سه لایه متراکم نیز به کار برده می‌شوند. دو مورد اول با فعال‌سازی ReLU و مورد آخر با فعال‌سازی Sigmoid شناخته می‌شود. این مدل با استفاده از تابع زیان آنتروپی متقاطع دودویی کامپایل می‌گردد زیرا فقط دو دسته (صفر و یک) وجود دارد. ابزار بهینه‌سازی Adam مورد استفاده قرار گرفته و دقت مدل به طور پیوسته بررسی می‌شود. عمل بازخوانی Early Stopping در ماژول keras.callbacks متریکی برای تعداد دوره‌های مشخص دارد. اگر این متریک (ابزار سنجش) بهبود نیابد، آموزش متوقف می‌شود. بر اساس پارامتر restore_best_weights، مدلی که کمترین زیان اعتبارسنجی را دارد، به متغیر مدل بازگردانیده می‌شود.

# Build and train neural network
embedding_dim = 128
 
model = models.Sequential([
    layers.Embedding(vocab, embedding_dim, input_length = mlen),
    layers.LSTM(128, activation='tanh'),
    layers.Dense(32, activation = 'relu'),
    layers.Dense(16, activation = 'relu'),
    layers.Dense(1, activation = 'sigmoid')
])
 
cb = [callbacks.EarlyStopping(patience = 5, restore_best_weights = True)]

model.compile(optimizer = optimizers.Adam(0.01), loss = loss-es.BinaryCrossentropy(), metrics = ['accuracy'])
history = model.fit(Xtrain, ytrain, batch_size=64, epochs = 256, valida-tion_data=(Xval, yval), callbacks = cb)

کد: Model and training (مدل و آموزش)

پس از آموزش با نرخ یادگیری 01/0، مدل به دقت %5/83 در مجموعه آزمایشی دست یافت.

تشخیص کنایه
پیش‌بینی‌های مجموعه آزمایشی
بررسی اجمالی ماتریس درهم‌ریختگی برای درک بهتر نتایج

ماتریس درهم‌ریختگی متریک‌ها
ماتریس درهم‌ریختگی متریک‌ها (ابزارهای سنجش)
نمودار دقت
نمودار دقت
تشخیص کنایه
نمودار زیان

پیش‌بینی

انجام پیش‌بینی در نمونه‌های آزمایشی تصادفی

x = np.random.randint(0, Xval.shape[0] - 1)

headline = df['headline'].values[x]

print("Headline: ", headline)

cleaned_text = []

sentence = removeURL(headline) 
sentence = removeHTML(sentence)
sentence = onlyAlphabets(sentence)
sentence = sentence.lower()   

for word in sentence.split():
    #if word not in stop:
        stemmed = sno.stem(word)
        cleaned_text.append(stemmed)

cleaned_text = [' '.join(cleaned_text)]

print("Cleaned text: ", cleaned_text[0])

cleaned_text = tokenizer.texts_to_sequences(cleaned_text)
cleaned_text = pad_sequences(cleaned_text, maxlen=mlen)

category = df['is_sarcastic'].values[x]  

print("\nTrue category: ", class_names[category])

output = model.predict(cleaned_text)[0][0]

pred = (output>0.5).astype('int64')

print("\nPredicted category: ", class_names[pred], "(", output, "-->", pred, ")")

کد: Prediction on test samples (پیش‌بینی در نمونه‌های آزمایشی)

تشخیص کنایه
Sample prediction on a random test sample

deepC

چارچوب استنباط، کامپایلر و کتابخانه deepC با این هدف طراحی شده‌اند که شبکه های عصبی یادگیری عمیق به اجرا درآیند. در همین راستا، ویژگی وسیله‌های فرم-فکتور از قبیل ریزکنترل‌گرها، Efpga، CPU و سایر وسیله‌های تعبیه شده از قبیل raspberry-pi، odroid، Arduino، SparkFun Edge، RISC-V، تلفن‌ همراه و لپ‌تاپ مورد تاکید قرار می‌گیرد.

کامپایل کردن مدل با استفاده از deepC

تشخیص کنایه
کامپایل کردن deepC

برای تشخیص کنایه ، اجرا و ایجاد فایل .exe خودتان به پلتفرم cAInvas مراجعه کنید.

میانگین امتیاز / 5. تعداد ارا :

مطالب پیشنهادی مرتبط

اشتراک در
اطلاع از
0 نظرات
بازخورد (Feedback) های اینلاین
مشاهده همه دیدگاه ها
[wpforms id="48325"]