Рубрики
Без рубрики

Строительство классификатора – Часть I (Анализ живых твитнейных настроений)

В этой серии я покажу, как создать приложение для анализа настроений и выполнить анализ на любой хэхте … Помечено Python, машинное обучение.

В этой серии я покажу, как создать приложение для анализа настроений и выполнить анализ любого хэштега. Серия разделена на 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”