Обнаружение сарказма с помощью машинного обучения
Сарказм был частью нашего языка на протяжении многих лет. Это означает быть противоположным тому, что вы имеете в виду, обычно с отличным тоном голоса в веселой игровой форме. Если вы думаете, что любой может понять сарказм, то вы ошибаетесь, потому что понимание сарказма зависит от ваших языковых навыков и вашего знания других людей. А как же компьютер? Можно ли обучить модель машинного обучения, которая может определять, является ли предложение саркастичным или нет? Да, это возможно! Так что, если вы хотите научиться распознавать сарказм с помощью машинного обучения, эта статья для вас. В этой статье я расскажу вам об обнаружении сарказма с помощью машинного обучения с использованием Python.
На протяжении многих лет сарказм был частью каждого человеческого языка. Сегодня он также используется в заголовках новостей и на различных других платформах социальных сетей, чтобы привлечь больше внимания. Обнаружение сарказма - это задача обработки естественного языка и двоичной классификации. Мы можем обучить модель машинного обучения определять, является ли предложение саркастическим, используя набор данных с саркастическими и несаркастическими предложениями, который я нашел на Kaggle.
Надеюсь, теперь вы поняли, что такое сарказм. В следующем разделе я проведу вас через задачу обнаружения сарказма с помощью машинного обучения с использованием языка программирования Python. Набор данных, который я использую для этой задачи, можно скачать здесь.
Обнаружение сарказма с использованием Python
Теперь давайте начнем с задачи обнаружения сарказма с помощью машинного обучения с использованием Python. Я начну эту задачу с импорта необходимых библиотек Python и набора данных:
import pandas as pd
import numpy as np
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.model_selection import train_test_split
from sklearn.naive_bayes import BernoulliNB
data = pd.read_json("Sarcasm.json", lines=True)
print(data.head())
article_link ... is_sarcastic
0 https://www.huffingtonpost.com/entry/versace-b... ... 0
1 https://www.huffingtonpost.com/entry/roseanne-... ... 0
2 https://local.theonion.com/mom-starting-to-fea... ... 1
3 https://politics.theonion.com/boehner-just-wan... ... 1
4 https://www.huffingtonpost.com/entry/jk-rowlin... ... 0
[5 rows x 3 columns]
«Is_sarcastic» столбец в этом наборе данных содержит ярлыки, которые мы должны предсказать для задачи обнаружения сарказма. Он содержит двоичные значения, такие как 1 и 0, где 1 означает саркастический, а 0 означает не саркастический. Поэтому для простоты я преобразовываю значения этого столбца как «саркастический» и «не саркастический» вместо 1 и 0:
data["is_sarcastic"] = data["is_sarcastic"].map({0: "Not Sarcasm", 1: "Sarcasm"})
print(data.head())
article_link ... is_sarcastic
0 https://www.huffingtonpost.com/entry/versace-b... ... Not Sarcasm
1 https://www.huffingtonpost.com/entry/roseanne-... ... Not Sarcasm
2 https://local.theonion.com/mom-starting-to-fea... ... Sarcasm
3 https://politics.theonion.com/boehner-just-wan... ... Sarcasm
4 https://www.huffingtonpost.com/entry/jk-rowlin... ... Not Sarcasm
[5 rows x 3 columns]
Теперь подготовим данные для обучения модели машинного обучения. Этот набор данных состоит из трех столбцов, из которых нам нужен только столбец «headline» в качестве функции и столбец «is_sarcastic» в качестве метки. Итак, давайте выберем эти столбцы и разделим данные на 20% тестовый набор и 80% обучающий набор:
data = data[["headline", "is_sarcastic"]]
x = np.array(data["headline"])
y = np.array(data["is_sarcastic"])
cv = CountVectorizer()
X = cv.fit_transform(x) # Fit the Data
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.20, random_state=42)
Теперь я буду использовать алгоритм Bernoulli Naive Bayes для обучения модели задаче обнаружения сарказма:
model = BernoulliNB()
model.fit(X_train, y_train)
print(model.score(X_test, y_test))
0.8448146761512542
Теперь давайте используем саркастический текст в качестве входных данных, чтобы проверить, обнаруживает ли наша модель машинного обучения сарказм или нет:
user = input("Enter a Text: ")
data = cv.transform([user]).toarray()
output = model.predict(data)
print(output)
Enter a Text: Cows lose their jobs as milk prices drop
['Sarcasm']
Вот как вы можете легко обучить модель машинного обучения задаче обнаружения сарказма.