2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему
 
 Задача классификации строк текстов на 3 класса
Сообщение17.02.2019, 17:58 


17/02/19
2
Всех приветствую! Так случилось, что мне нужно решить задачку из раздела NLP - прыгнув в море, не умея плавать.
Знаю, что эту конкретную мою задачу опытные аксакалы решают за 5 минут несколькими строками кода на Python3.
Как я уже сказал, плавать я не умею: я не сталкивался раньше ни с задачами машинного обучения, ни с самим Python. Поэтому очень прошу вашей помощи.
На просторах сети примеры решения задачи классификации текстов - описаны очень сложно, абстрактно и не понятно, особенно для новичка, задача решается гораздо проще.
Мне бы увидеть пример решения конкретного, а дальше я уже сам подобные задачи буду решать.

Итак, есть
1. обучаяющая выборка - csv файл со строками: id, text, label. id - номер строки, text - соотвественно текст не предобработанный, метка label - это номер одного из 3 классов.
2. тестовая выборка с полями id, text

Почитав теории, я понял, что скорее всего эту задачу можно решить используя преобразование word2vec и затем классификатор из sklearn. Но для меня это только абстрактные слова, далекие от понимания, как их реализовать в КОДЕ на python. Пожалуйста, помогите его написать. Очень прошу.

 Профиль  
                  
 
 Re: Задача классификации строк текстов на 3 класса
Сообщение17.02.2019, 19:30 


12/07/15
3316
г. Чехов
На голом Пайтоне такое не делают. Используют библиотеки. Вам для начала пойдет scikit-learn. Для этой конкретной задачи подходит классификатор SVM. Хм... Где-то у меня валяется на 90% готовый код, если память не изменяет...

 Профиль  
                  
 
 Re: Задача классификации строк текстов на 3 класса
Сообщение17.02.2019, 19:51 


17/02/19
2
Mihaylo в сообщении #1376673 писал(а):
На голом Пайтоне такое не делают. Используют библиотеки. Вам для начала пойдет scikit-learn. Для этой конкретной задачи подходит классификатор SVM. Хм... Где-то у меня валяется на 90% готовый код, если память не изменяет...


ооо, спасибо за ответ. было бы очень здорово, если бы нашли!

-- 17.02.2019, 21:29 --

Более точечный вопрос, который стоит наиболее остро: как классификатору при обучении SVM указать "правильный ответ" - то есть соотнести каждому тексту метку. И вообще дать ему понять, что каждая строка это есть новый "пример" для обучения.

 Профиль  
                  
 
 Re: Задача классификации строк текстов на 3 класса
Сообщение19.02.2019, 05:17 


12/07/15
3316
г. Чехов
Код ниже грузит некоторые готовые тексты из базы данных fetch_20newsgroups (Вам нужно переделать на чтение из файла .csv с помощью функции pd.read_csv()). Выход кода - по 10 самых важных слов в текстах о религии и в текстах о космосе. Эти важные слова - есть суть опорные вектора SVM, по которым собственно тексты классифицируются.

Также код выводит некоторую другую информацию в целях обучения начинающих машинообученцев.

Код:
#Определение опорных объектов

import pandas as pd
data = pd.read_csv('c:/Anaconda/share/svm-data.csv', names=['y','x1','x2'], index_col='y')
y=data.index
x=data.values

from sklearn.svm import SVC
clf = SVC(C=100000.0, kernel='linear', random_state=241)
clf.fit(x,y)
print(clf.support_)

#Настройка оптимизации
from sklearn import datasets
newsgroups = datasets.fetch_20newsgroups(subset='all', categories = ['alt.atheism', 'sci.space'])
data = newsgroups.data
y = newsgroups.target

#Векторизация текста
from sklearn.feature_extraction.text import TfidfVectorizer
vectorizer = TfidfVectorizer(data)
x = vectorizer.fit_transform(data)

#Подбор оптимального параметра С
from sklearn.model_selection import GridSearchCV
from sklearn.model_selection import KFold
from sklearn.svm import SVC
import numpy as np
grid = {'C': np.power(10.0, np.arange(-5, 6))}
cv = KFold(n_splits=5, shuffle=True, random_state=241)
clf = SVC(kernel='linear', random_state=241)
gs = GridSearchCV(clf, grid, scoring='accuracy', cv=cv)
gs.fit(x,y)
print(gs.best_params_)

clf = SVC(C=1, kernel='linear', random_state=241)
clf.fit(x,y)
W = np.sort(np.absolute(clf.coef_.toarray())) #отсортированные по модулю веса слов
indices = np.argsort(np.absolute(clf.coef_.toarray())) #отсортированные по модулю весов индексы слов
ten_indices = np.array(indices[0,-10:], dtype=int) #последние 10 индексов
list = [vectorizer.get_feature_names()[i] for i in ten_indices]
print(np.sort(list))


Честно говоря, не помню, что за цифры в файле svm-data.csv, но там одни цифры:
Код:
0.0, 0.7, 0.29
1.0, 0.23, 0.55
0.0, 0.72, 0.42
0.0, 0.98, 0.68
0.0, 0.48, 0.39
1.0, 0.34, 0.73
0.0, 0.44, 0.06
1.0, 0.4, 0.74
0.0, 0.18, 0.18
1.0, 0.53, 0.53

 Профиль  
                  
 
 Re: Задача классификации строк текстов на 3 класса
Сообщение19.02.2019, 17:06 


12/07/15
3316
г. Чехов
Это похоже отдельная задача. Далее переменные $x$ и $y$ переназначаются.

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 5 ] 

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group