Как использовать классификацию текстов, если источником обучения являются текстовые файлы в категоризованных папках?

Вопрос или проблема

У меня есть 200 уникальных файлов *.txt для каждой папки:

введите описание изображения здесь

Каждый файл содержит первоначальный текст иска, разделенный по юридическим областям (папкам) общественной защиты.

Я хотел бы создать обучающие данные для прогнозирования новых исков по их юридической области.

В прошлом году я попытался использовать PHP-ML, но он потребляет слишком много памяти, поэтому я хотел бы перейти на Python.

Я начал писать код, загружая каждый текстовый файл в структуру, похожую на json, но не знаю, какие следующие шаги:

import pandas as pd
from sklearn.feature_extraction.text import CountVectorizer,TfidfVectorizer
from sklearn.base import TransformerMixin
from sklearn.pipeline import Pipeline
import os

path="C:\wamp64\www\machine_learning\webroot\iniciais\\"

files = {}

for directory in os.listdir(path):
    if os.path.isdir(path+directory):
        files[directory] = [];
        full_path = path+directory
        for filename in os.listdir(full_path):
                full_filename = path+directory+"\\"+filename
                if full_filename.endswith(".txt"):
                    with open(full_filename, 'r', encoding='cp437') as f:
                        files[directory].append(f.readlines())

Заранее спасибо

Предположим, что ваши папки — это ваши классы, вы можете сопоставить любой документ с соответствующим тегом.
Тогда для каждого документа:
1.- Нормализуйте текст, т.е. удалите стоп-слова (если это имеет смысл), стеммируйте и/или лемматизируйте его (если это не имеет смысла).
2.- Векторизуйте документы, вы можете выбрать TFIDF, BOW, word embeddings и т.д.
3.- В зависимости от ваших документов обучите MLP (в случае BOW) или LSTM в случае word embeddings.

Когда у вас появляется новый документ, вам нужно повторить процедуру, используя словарь, который вы создали для обучающего набора.

У меня был похожий случай, и мне было достаточно использовать BOW с многослойным перцептроном, точность была выше 95%, но документы различались для каждой категории, и я удалил наиболее частые слова, потому что они были слишком общими.

Еще одно решение — провести тематическое моделирование документов, связывая эти темы с категорией, а затем обучить простой классификатор (MLP или SVM будут работать)

Функция sklearn.datasets.load_files библиотеки Scikit-learn предназначена для “Загрузки текстовых файлов с категориями в качестве имен подпапок”.

Ответ или решение

Для решения задачи классификации текстов на основе файлов *.txt, размещенных в категориях (папках), вы можете воспользоваться библиотеками Python, такими как scikit-learn и pandas. Следующий процесс включает в себя шаги по загрузке, предобработке данных, векторизации и обучению модели.

Шаги для классификации текстов

  1. Импорт библиотек: Начнем с импорта необходимых библиотек.
import os
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.pipeline import Pipeline
from sklearn.naive_bayes import MultinomialNB
from sklearn import metrics
  1. Загрузка данных: Используем функцию os.listdir() для чтения файлов и создания датафрейма.
path = "C:\\wamp64\\www\\machine_learning\\webroot\\iniciais\\"

data = []
labels = []

for directory in os.listdir(path):
    if os.path.isdir(os.path.join(path, directory)):
        for filename in os.listdir(os.path.join(path, directory)):
            if filename.endswith('.txt'):
                with open(os.path.join(path, directory, filename), 'r', encoding='cp437') as f:
                    text = f.read()
                    data.append(text)
                    labels.append(directory)  # Название папки будет меткой
  1. Создание датафрейма:
df = pd.DataFrame({'text': data, 'label': labels})
  1. Предобработка текста:

    • Вы можете использовать TfidfVectorizer для векторизации текстов, который также включает в себя удаление стоп-слов и нормализацию.
  2. Разделение данных: Разделим данные на обучающий и тестовый наборы.

X_train, X_test, y_train, y_test = train_test_split(df['text'], df['label'], test_size=0.2, random_state=42)
  1. Создание и обучение модели: Используем Pipeline для упрощения процесса векторизации и обучения модели.
model = Pipeline([
    ('tfidf', TfidfVectorizer()),
    ('clf', MultinomialNB())  # Вы можете попробовать другие классификаторы, такие как SVM или Decision Trees
])

model.fit(X_train, y_train)
  1. Оценка модели: Проверим точность модели с помощью тестового набора.
y_pred = model.predict(X_test)
print(metrics.classification_report(y_test, y_pred))
print("Accuracy:", metrics.accuracy_score(y_test, y_pred))

Применение модели к новым данным

Для прогнозирования новой юридической документации вам нужно будет выполнить те же самые шаги предобработки и векторизации, которые вы применяли к обучающему набору данных. Это позволит использовать этот модельный подход для классификации новых текстов.

Резюме

Используя этот подход, можно эффективно классифицировать тексты на основе предобработки, векторизации и алгоритмов машинного обучения. Если у вас есть дополнительные требования или спецификации, такие как необходимость в использовании глубокого обучения, возможно, стоит рассмотреть библиотеку TensorFlow или PyTorch для более сложных моделей, таких как LSTM или CNN.

Оцените материал
Добавить комментарий

Капча загружается...