Работа с текстовыми данными

Machine LearningMachine LearningBeginner
Практиковаться сейчас

This tutorial is from open-source community. Access the source code

💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал

Введение

В этом практическом занятии мы изучим, как работать с текстовыми данными с использованием scikit - learn, популярной библиотеки машинного обучения для Python. Мы узнаем, как загружать текстовые данные, предобрабатывать их, извлекать признаки, обучать модель и оценивать ее производительность.

Советы по работе с ВМ

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

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

Если вы сталкиваетесь с проблемами во время обучения, не стесняйтесь обращаться к Labby. Оставьте отзыв после занятия, и мы оперативно решим проблему для вас.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL sklearn(("Sklearn")) -.-> sklearn/UtilitiesandDatasetsGroup(["Utilities and Datasets"]) ml(("Machine Learning")) -.-> ml/FrameworkandSoftwareGroup(["Framework and Software"]) sklearn(("Sklearn")) -.-> sklearn/CoreModelsandAlgorithmsGroup(["Core Models and Algorithms"]) sklearn(("Sklearn")) -.-> sklearn/DataPreprocessingandFeatureEngineeringGroup(["Data Preprocessing and Feature Engineering"]) sklearn/CoreModelsandAlgorithmsGroup -.-> sklearn/naive_bayes("Naive Bayes") sklearn/DataPreprocessingandFeatureEngineeringGroup -.-> sklearn/feature_extraction("Feature Extraction") sklearn/UtilitiesandDatasetsGroup -.-> sklearn/datasets("Datasets") ml/FrameworkandSoftwareGroup -.-> ml/sklearn("scikit-learn") subgraph Lab Skills sklearn/naive_bayes -.-> lab-71103{{"Работа с текстовыми данными"}} sklearn/feature_extraction -.-> lab-71103{{"Работа с текстовыми данными"}} sklearn/datasets -.-> lab-71103{{"Работа с текстовыми данными"}} ml/sklearn -.-> lab-71103{{"Работа с текстовыми данными"}} end

Загрузка текстовых данных

Во - первых, нам нужно загрузить текстовые данные, с которыми мы будем работать. Мы будем использовать датасет 20 Newsgroups, который содержит новостные статьи по двадцати различным темам. Чтобы загрузить датасет, мы можем использовать функцию fetch_20newsgroups из scikit - learn.

from sklearn.datasets import fetch_20newsgroups

## Load the dataset
categories = ['alt.atheism','soc.religion.christian', 'comp.graphics','sci.med']
twenty_train = fetch_20newsgroups(subset='train', categories=categories, shuffle=True, random_state=42)

Теперь мы загрузили данные, и можем изучить их структуру и содержание.

Предварительная обработка текстовых данных

Прежде чем использовать текстовые данные для машинного обучения, их необходимо предварительно обработать. Это включает несколько шагов, таких как удаление знаков препинания, перевод всего текста в нижний регистр и токенизация текста на отдельные слова. Мы можем выполнить эти шаги предварительной обработки с использованием CountVectorizer и TfidfTransformer из scikit - learn.

from sklearn.feature_extraction.text import CountVectorizer, TfidfTransformer

## Preprocess the text data
count_vect = CountVectorizer()
X_train_counts = count_vect.fit_transform(twenty_train.data)

tfidf_transformer = TfidfTransformer()
X_train_tfidf = tfidf_transformer.fit_transform(X_train_counts)

Теперь наша текстовая информация предварительно обработана и готова к извлечению признаков.

Извлечение признаков

Чтобы представить текстовые данные в виде векторов признаков, мы можем использовать представление "сумок слов" (bags of words). В этом представлении каждому слову в наборе обучающих данных присваивается фиксированный целый идентификатор, и подсчитывается количество вхождений каждого слова в каждом документе. Мы можем извлечь эти векторы признаков с использованием CountVectorizer из scikit - learn.

from sklearn.feature_extraction.text import CountVectorizer

## Extract feature vectors
count_vect = CountVectorizer()
X_train_counts = count_vect.fit_transform(twenty_train.data)

Теперь мы извлекли векторы признаков, и можем использовать их для обучения нашей модели.

Обучение модели

Теперь, когда у нас есть векторы признаков, мы можем обучить модель для классификации текстовых данных. В этом примере мы будем использовать алгоритм Multinomial Naive Bayes, который является популярным алгоритмом для классификации текста.

from sklearn.naive_bayes import MultinomialNB

## Train the model
clf = MultinomialNB().fit(X_train_tfidf, twenty_train.target)

Теперь наша модель обучена и готова к предсказанию.

Оценка модели

Чтобы оценить производительность нашей модели, мы можем использовать отдельный тестовый набор данных. Мы можем загрузить тестовый набор данных с использованием того же процесса, что и для тренировочного набора.

twenty_test = fetch_20newsgroups(subset='test', categories=categories, shuffle=True, random_state=42)

Теперь мы можем предобработать тестовый набор и извлечь векторы признаков.

X_test_counts = count_vect.transform(twenty_test.data)
X_test_tfidf = tfidf_transformer.transform(X_test_counts)

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

predicted = clf.predict(X_test_tfidf)
accuracy = np.mean(predicted == twenty_test.target)

Резюме

В этом практическом занятии мы научились работать с текстовыми данными с использованием scikit - learn. Мы загрузили текстовые данные, предобработали их, извлекли векторы признаков, обучили модель и оценили ее производительность. Работа с текстовыми данными может быть трудной, но scikit - learn предоставляет мощные инструменты и алгоритмы, которые облегчают этот процесс.