В этой серии я покажу, как создать приложение для анализа настроений и выполнить анализ любого хэштега. Серия разделена на 3 части
- Создание классификатора
- Создание бэкэнда
- Строительство Frontend
В финальном посте мы принесем все вместе, чтобы сделать приложение. Мы будем использовать такие инструменты НЛТК
, Докер
, TreamLit
, fastapi
И ссылка на код будет предоставлена.
Конечный продукт
Создание классификатора
Мы будем использовать предварительно обученную модель, которую я тренировал использовать Открытый источник
код. Это не сота (современная) модель, но для нашей задачи это должно быть в порядке.
Давайте начнем с создания каталога проекта.
mkdir sentwitter && cd sentwitter mkdir backend mkdir frontend
Загрузите обученную модель в Backend/модели
каталог
wget https://raw.githubusercontent.com/amalshaji/sentwitter/master/backend/models/sentiment_model.pickle mv sentiment_model.pickle /backend/models
Установите необходимые библиотеки
python3 -m pip install nltk python3 -m nltk.downloader punkt python3 -m nltk.downloader wordnet python3 -m nltk.downloader stopwords python3 -m nltk.downloader averaged_perceptron_tagger
Давайте напишем функцию для предварительного обрабатывания входа (Tweet)
# backend/classify.py import re, string from nltk.tag import pos_tag from nltk import WordNetLemmatizer from nltk.tokenize import word_tokenize def remove_noise(tweet_tokens, stop_words=()): cleaned_tokens = [] for token, tag in pos_tag(tweet_tokens): token = re.sub( "http[s]?://(?:[a-zA-Z]|[0-9]|[$-_@.&+#]|[!*\(\),]|" "(?:%[0-9a-fA-F][0-9a-fA-F]))+", "", token, ) token = re.sub("(@[A-Za-z0-9_]+)", "", token) # remove all the links and special characters if tag.startswith("NN"): pos = "n" elif tag.startswith("VB"): pos = "v" else: pos = "a" lemmatizer = WordNetLemmatizer() token = lemmatizer.lemmatize(token, pos) # pos tagging if ( len(token) > 0 and token not in string.punctuation and token.lower() not in stop_words ): cleaned_tokens.append(token.lower()) # remove stopwords and punctuations return cleaned_tokens
Напишите функцию помощника для загрузки модели.
# backend/utils.py import pickle def load_model(): f = open("./models/sentiment_model.pickle", "rb") classifier = pickle.load(f) f.close() return classifier
Проверьте классификатор
# backend/test.py from utils import load_model from classify import remove_noise from nltk.tokenize import word_tokenize model = load_model() while True: _input = input("Enter a sample sentence: ") custom_tokens = remove_noise(word_tokenize(_input)) result = model.classify(dict([token, True] for token in custom_tokens)) print(f"{_input}: {result}")
Вывод
❯ python .\test.py Enter a sample sentence: I am awesome I am awesome: Positive Enter a sample sentence: I hate you I hate you: Negative Enter a sample sentence: I have a gun I have a gun: Positive Enter a sample sentence: I like your hair I like your hair: Negative
Это не лучшая модель😂, пистолет, помеченный как Положительный
и волосы, как Отрицательный
Отказ Не стесняйтесь создавать свою собственную модель или попробуйте с тяжелыми, использующими трансформаторы ( обниматься ).
В следующем посте мы будем строить бэкэнду, чтобы служить прогнозы через API.
использованная литература
-
Открытый источник
Код, используемый для обучения модели, использовался давным-давно для проекта, я не могу найти источник. Так что, если вы сделаете, или вы являетесь автор, пожалуйста, прокомментируйте ссылку. - Статья Обложка Утренний
- Крышка серии Рави Шарма
Оригинал: “https://dev.to/amal/building-the-classifier-part-i-live-tweet-sentiment-analysis-405i”