Введение
В этом практическом занятии мы изучим, как работать с текстовыми данными с использованием scikit - learn, популярной библиотеки машинного обучения для Python. Мы узнаем, как загружать текстовые данные, предобрабатывать их, извлекать признаки, обучать модель и оценивать ее производительность.
Советы по работе с ВМ
После запуска виртуальной машины нажмите в левом верхнем углу, чтобы переключиться на вкладку Notebook и получить доступ к Jupyter Notebook для практики.
Иногда вам может потребоваться подождать несколько секунд, пока Jupyter Notebook не загрузится полностью. Валидация операций не может быть автоматизирована из - за ограничений Jupyter Notebook.
Если вы сталкиваетесь с проблемами во время обучения, не стесняйтесь обращаться к Labby. Оставьте отзыв после занятия, и мы оперативно решим проблему для вас.
Загрузка текстовых данных
Во - первых, нам нужно загрузить текстовые данные, с которыми мы будем работать. Мы будем использовать датасет 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 предоставляет мощные инструменты и алгоритмы, которые облегчают этот процесс.