Форум программистов, компьютерный форум, киберфорум
Python: Научные вычисления
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.52/21: Рейтинг темы: голосов - 21, средняя оценка - 4.52
 Аватар для monahoff
40 / 40 / 23
Регистрация: 26.01.2012
Сообщений: 317

Классификация текстов

02.03.2019, 18:03. Показов 4007. Ответов 4

Студворк — интернет-сервис помощи студентам
Привет всем!
Заинтересовался темой обработки текстов, а в частности классификацией/кластеризацией.
В большинстве примеров решения подобных задач на вход классификатора (в реальном времени) подают какой-то стек текстов, обучают модель и затем подсовывают новый документ, чтобы предсказать к какой группе отнести текст/найти процент сходства.

Перед постановкой вопроса попробую описать свою задачу:
Есть набор текстов (допустим худ. литература), этих текстов достаточно много. По факту, этот материал можно использовать для модели "с учителем".
Сама задача состоит в определении принадлежности новых документов к худ. литературе. (применять собираюсь sklearn)

Как я понимаю, можно поступить как минимум двумя способами:

Способ 1
Тупо кластеризовать какой-то значительный объем новых документов, чтобы (допустим с помощью k-means) выделить группы схожих текстов и потом уже в ручном режиме посмотреть эти кластеры, чтобы принять решение о группировке с уже имеющейся базой книг.

Способ 2
Обучить модель на уже имеющихся книгах и на основе этого принимать решение для каждого нового документа/группы
Как в таком случае обучить модель на большом объеме данных (более 1 млн. книг), сохранить конфигурацию этой модели и потом применять для новых документов?

Что посоветуете? Может кто-то уже решал подобные задачи?
Заранее спасибо!
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
02.03.2019, 18:03
Ответы с готовыми решениями:

Классификация текстов
Привет всем, подскажите пожалуйста, как и с чего начать для построения классификатора текста, то есть я я хочу разделить на два класса,...

Мультиклассовая классификация в xgboost
Добрый день! Нужно построить модель с помощью мультиклассовой классификации в xgboost. В наборе данных имеется 4 класса. По итогу...

Классификация элементов последовательности на N классов
У меня есть задача классификации элементов на N классов. Проблема в том, что, строго говоря, эти классы нейросеть должна сама обозначить. ...

4
578 / 411 / 69
Регистрация: 09.01.2018
Сообщений: 1,363
02.03.2019, 22:07
Цитата Сообщение от monahoff Посмотреть сообщение
стек текстов,
Хм, вы уверены, что именно "стек"? Или так, ради красивого словца?

Цитата Сообщение от monahoff Посмотреть сообщение
обучают модель и затем подсовывают новый документ, чтобы предсказать к какой группе отнести текст/найти процент сходства.
Да, именно так, оба приведенных вами "способа" вполне укладываются в эту схему.


Цитата Сообщение от monahoff Посмотреть сообщение
Сама задача состоит в определении принадлежности новых документов к худ. литературе. (применять собираюсь sklearn)
Уточняю. Определяем принадлежность к художественной литературе, а если не подтверждается - то к какой? Просто вот это "к какой" может быть разным, например - у вас есть "техническая", "юридическая", "медицинская" и пр, и разница между "художественной" и - например - "научно-популярной" может оказаться на много меньше, чем между разными образчиками "художественной"

Цитата Сообщение от monahoff Посмотреть сообщение
Как я понимаю, можно поступить как минимум двумя способами:
Оба варианта имеют право на жизнь. Классификацию применяют, когда есть размеченный набор учебных данных. Для разметки можно использовать китайцев :-). Я серьезно, в Китае есть фирмы, специализирующиеся на разметке наборов данных для последующего обучения по ним систем ML. И те наборы лиц, текстов, звуков и пр, на которых обучают сегодня нейросети именно так и созданы.
Кластеризация - помимо других прикладных задач - решает и задачу, "а что делать, если денег заплатить китайцам нет". Т.е. она в принципе может решить как-то задачу разметки. Понятно, что качество будет хуже, чем при ручной разметке, но зато дешевле и быстрее. Иногда этого достаточно. Ну и интерпретировать результат придется самому.

Оба подхода имеют право на существование. Что применять - выбирать вам. Примеры в сети имеются, можно погуглить. Но разделение на "художественную" и прочую литературу задача, конечно, надуманная и мало кому интересная. Гораздо чаще задачу используют,например, информационные агенства, которые уже давно научились автоматически относить текст к той или иной рубрике. При кажущейся несерьезности задача позволяет им (информагенствам) экономить существенные деньги на выполнении работы, которые ранее выполнялись целыми отделами людей. Ищите в этом направлении.
0
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
02.03.2019, 23:41
Лучший ответ Сообщение было отмечено monahoff как решение

Решение

Цитата Сообщение от passant Посмотреть сообщение
Сама задача состоит в определении принадлежности новых документов к худ. литературе
Оба подхода будут так или иначе ошибочно относить к художественным тексты других жанров\направлений. Так как граница очень тонкая, о чем вам уже написали.
Хороший датасет размеченных данных (для классификации) способен, конечно, сильно повысить точность.
Но вручную размечать довольно непросто.
Хотя, можно и нарыть какой-нить интернет ресурс с книгами и выпарсить его - при наличии уже готовой разметки\рубрикации на сайте получаем размеченный датасет...
Ну или все-таки нанять гастарбайтеров :-) как предложили выше.

Вот у меня обученная по размеченным данным модель K-NN (ближайших соседей) определяла новые документы вот так:
Code
1
2
3
4
5
6
7
8
9
10
11
Blagov. Domashnii lechebnik.txt => медицина
Kapeliushnikov. Ekonomicheskaia teoriia prav sobstvennosti.txt => экономика
Dostoevskii. Igrok.txt => литература
Gegel. Fenomenologiia duha.txt => философия
Rybakov. Iazychestvo drevnei Rusi.txt => мифология
Sviatoi Vasilii Velikii.txt => религия
Erazm Rotterdamskii. Oruzhie khristianskogo voina.txt => религия
Bystrovskii. Novaia bibleiskaia entciclopediia.txt => религия
Mify narodov Azii i Afriki.txt => мифология
Bodriiiar. Sistema veshchei.txt => философия
Azimov. 3 zakona robotekhniki.txt => литература
Вроде все точно. За исключением того, что Novaia bibleiskaia entciclopediia.txt это на самом деле художественная книжка в стиле Нового завета.
Но если начать моей модели скармливать реально большое кол-во текстов для предсказания - думаю будет все гораздо хуже, так как обучающий датасет был игрушечным.

Цитата Сообщение от monahoff Посмотреть сообщение
обучить модель на большом объеме данных (более 1 млн. книг)
Вы себе уже представили сколько у вас уйдет времени на предварительную программную обработку текстов?
Это, кстати, самая важная задача в ML - подготовить данные.
В случае текстов обработка это создание bag of words: токенизация (вариантов как именно - масса), нормализация(канонизация токенов до нормальной словарной формы), удаление стоп-слов и прочего мусора, и, наконец, векторизация списков слов в вектора чиселок.
Для миллиона документов, где каждый это целая книга, это весьма долгоиграющий процесс.

А ведь вектор еще и в ОЗУ должен поместиться, чтобы модель смогла с ним работать. Хотя, какие-то модели в sklearn вроде позволяют работать с батчами данных (кроме алгоритмов которым нужна матрица попарных расстояний между объектами) - не пробовал пока.

Цитата Сообщение от monahoff Посмотреть сообщение
сохранить конфигурацию этой модели и потом применять для новых документов?
pickle или любой другой способ сериализации обученной модели и мешков слов.
1
 Аватар для monahoff
40 / 40 / 23
Регистрация: 26.01.2012
Сообщений: 317
02.03.2019, 23:52  [ТС]
Добавлено через 9 минут
Цитата Сообщение от Garry Galler Посмотреть сообщение
pickle или любой другой способ сериализации обученной модели и мешков слов
с этим понял!
Цитата Сообщение от Garry Galler Посмотреть сообщение
Вы себе уже представили сколько у вас уйдет времени на предварительную программную обработку текстов?
я хочу сделать выборочное обучение, то есть я определенно знаю книги по "темам" (размеченный датасет): про войну, романы, приключения..и хочу взять из каждой группы часть книг, весь лям потрошить не вижу смысла, только бы понять какой процент брать (хотя все это видимо чисто экспериментально)
0
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
03.03.2019, 00:04
Цитата Сообщение от monahoff Посмотреть сообщение
Только бы понять какой процент брать
Для классификации у вас должны быть размечены по условным жанрам все документы. Какой процент брать от всей вашей коллекции я вам сказать не могу, главное чтобы число книг в каждой подгруппе было равномерным, без перекосов. Попробуйте для начала на небольшой выборке, скажем в 1000 книг, где при наличии, к примеру 10 групп, в каждой будет по 100 представителей своего жанра. Если сможете написать правильный код для обработки этих данных - далее будет несложным построить модель и по большей выборке. Скормить готовый (и векторизованный) bag-of-words классификатору дело нехитрое и несколько строк. А вот создать его - совсем другой вопрос.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
03.03.2019, 00:04
Помогаю со студенческими работами здесь

Классификация текста к определенному классу SVM
Здравствуйте, есть у кого-нибудь пример классификации текста к определенному классу методом опорных векторов? Или хорошая, а главное...

VGG16. Классификация изображений (Cats vs. Dogs)
Всем доброго времени суток Мне для своего проекта нужно написать сверточную нейросеть. Решил для начала попробовать разные примеры....

Классификация периодов после изменения уровня данных
Проблема такая. Есть определенный индекс, его изменение было классифицировано как "Рост", "Без изменений",...

Семантический анализ текстов
Есть задача: для заданной уязвимости из БДУ ФСТЭК найти соответствующие ей угрозы из этой же БДУ. Вопрос в принципе изначально стоит,...

Строка: Произведите токенизацию строк, то есть разбиение текстов на слова.
Коллеги выручайте, застрял на совершенно простом задании, толкните простым понятным кодом. Задание такое: 1. Скачайте файл с...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru