Вопрос или проблема
У меня есть 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
. Следующий процесс включает в себя шаги по загрузке, предобработке данных, векторизации и обучению модели.
Шаги для классификации текстов
- Импорт библиотек: Начнем с импорта необходимых библиотек.
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
- Загрузка данных: Используем функцию
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) # Название папки будет меткой
- Создание датафрейма:
df = pd.DataFrame({'text': data, 'label': labels})
-
Предобработка текста:
- Вы можете использовать
TfidfVectorizer
для векторизации текстов, который также включает в себя удаление стоп-слов и нормализацию.
- Вы можете использовать
-
Разделение данных: Разделим данные на обучающий и тестовый наборы.
X_train, X_test, y_train, y_test = train_test_split(df['text'], df['label'], test_size=0.2, random_state=42)
- Создание и обучение модели: Используем
Pipeline
для упрощения процесса векторизации и обучения модели.
model = Pipeline([
('tfidf', TfidfVectorizer()),
('clf', MultinomialNB()) # Вы можете попробовать другие классификаторы, такие как SVM или Decision Trees
])
model.fit(X_train, y_train)
- Оценка модели: Проверим точность модели с помощью тестового набора.
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.