В отличие от английского языка, реализация анализа тональности на арабском языке отличается, арабский язык требует различных типов предварительной обработки и манипуляций, прежде чем приступить к применению модели тональности.
Итак, для английского языка и при подготовке ваших текстовых данных:
- мы сохраняем слова только из текста, то есть удаляем все цифры и символы.
- Затем мы записываем строчные буквы и разбиваем слова на упорядоченный список подстрок.
- мы удаляем стоп-слова, такие как «is», «the». . .и т. д.
- и, наконец, мы делаем слова для любых дополнительных букв в конце.
и мы можем передавать текстовые данные в любую используемую нами модель, например: ROBERTA,и получать результат «Отрицательный», «Положительный» или «Нейтральный». Чувства.
Однако это не относится к арабскому языку, в Интернете нет руководства по проведению анализа тональности с помощью арабского языка, и нет никакой модели, которая могла бы сделать эту работу за нас.
Даже когда дело доходит до предварительной обработки, арабский язык не похож на английский, как я уже упоминал ранее, в арабском есть что-то уникальное, называемое Ташкиль.
Нет простого способа продемонстрировать это для не говорящих по-арабски, но согласно Википедии:
Буквальное значение слова تَشْكِيل tashkīl — формирование. Поскольку обычный арабский текст не дает достаточно информации о правильном произношении, основная цель tashkīl (и ḥarakāt) – предоставить фонетическое руководство или фонетическое пособие; то есть показать правильное произношение. Он служит той же цели, что и фуригана (также называемая руби) в японском или пиньинь или чжуинь в мандаринском диалекте китайского языка для детей, которые учатся читать, или учащихся-иностранцев.
Мне потребовалось некоторое время, прежде чем я смог построить для нее свою модель обработки естественного языка, и я здесь, чтобы упростить вам задачу! , поэтому давайте импортируем все необходимые библиотеки:
import pandas as pd import numpy as np import re import string import warnings warnings.simplefilter(action='ignore',category=FutureWarning) from nltk.corpus import stopwords from nltk.stem import PorterStemmer #to stem words from transformers import AutoTokenizer, AutoModelForSequenceClassification from scipy.special import softmax
Для этого анализа тональности мы будем использовать модель под названием akhooli для определения тональности арабского языка, поэтому давайте настроим ее:
tokenizer = AutoTokenizer.from_pretrained('akhooli/xlm-r-large-arabic-sent') model = AutoModelForSequenceClassification.from_pretrained("akhooli/xlm-r-large-arabic-sent")
Далее мы создадим 3 переменные:
- список арабских и английских знаков препинания и символов.
- список арабских стоп-слов.
- и последнее, но не менее важное: то, ради чего мы сюда пришли, Ташкил.
# first we define a list of arabic and english punctiations that we want to get rid of in our text punctuations = '''`÷×؛<>_()*&^%][ـ،/:"؟.,'{}~¦+|!”…“–ـ''' + string.punctuation # Arabic stop words with nltk stop_words = stopwords.words('arabic') arabic_diacritics = re.compile(""" ّ | # Shadda َ | # Fatha ً | # Tanwin Fath ُ | # Damma ٌ | # Tanwin Damm ِ | # Kasra ٍ | # Tanwin Kasr ْ | # Sukun ـ # Tatwil/Kashida """, re.VERBOSE)
и мы создадим функцию Python специально для предварительной обработки текста: (я объясню код в комментариях :)).
def preprocess(text): #remove punctuations translator = str.maketrans('', '', punctuations) text = text.translate(translator) # remove Tashkeel text = re.sub(arabic_diacritics, '', text) text = re.sub('[A-Za-z0-9]',' ',text) #remove longation (longation basically is a form of arabic diacritics ) text = re.sub("[إأآا]", "ا", text) text = re.sub("ى", "ي", text) text = re.sub("ؤ", "ء", text) text = re.sub("ئ", "ء", text) text = re.sub("ة", "ه", text) text = re.sub("گ", "ك", text) #next creating a list of substrings text = ' '.join(word for word in text.split() if word not in stop_words) return text
эта Модель использует 3 основных ярлыка для классификации текста: «Нейтральный», «Отрицательный» и «Положительный», если мы не определим их, мы в основном получим числа вероятности, но мы хотим, чтобы все было идеально правильно: D, поэтому давайте определим их через простой список Python:
labels = ['Neutral','Negative','Positive'] #we need to keep this ordered !!!
И последнее но не менее важное! , давайте обработаем наш текст и загрузим его в модель, я проведу вас через комментарии Python:
String = 'أنت رائع ' #the text that we want to use #let's preprocess using the function we created earlier : s = preprocess(String) # next let's feed it to the model encoded_string = tokenizer(s1,return_tensors='pt') output = model(**encoded_string) scores = output[0][0].detach().numpy() scores = softmax(scores1) print(labels[scores.argmax()) # this should match the label with the maximum probability #giving us the right label for this text
Дааа! это было легко, не правда ли, ваша модель готова к работе.
Несколько способов, которыми вы можете реализовать это, — это твит, где вы можете получить твит на арабском языке и проверить его настроение.