Посоветуйте технологии для Data Mining pet-проекта

Підписуйтеся на Telegram-канал «DOU #tech», щоб не пропустити нові технічні статті

Здравствуйте. Я хочу написать pet-проект с использованием технологий Data Mining, но видимо немного отстал от жизни в этой области. В общем, прошу совета, какие технологии лучше для этого использовать.

Итак, моя задача:
1) Есть набор из нескольких миллионов текстовых файлов на русском, английском и украинском языках, в которых содержится набор признаков в виде обычного текстового описания. Я нашел решение для английского, но для русского и украинского ничего нет.
2) Оригинальные данные будут лежать на сервере в виде текстовых файлов, в бд будут храниться уже подготовленные данные — ид, набор признаков и ссылка на оригинальный файл.
3) Данные будут обрабатываться несколькими Data Mining алгоритмами (построение дерева решений (CART или C4.5), классификации (kNN), кластеризации и т.д.). Результаты будут передаваться в Web UI или через REST API конечному пользователю.

Стоит выбор:
1) СУБД: думаю использовать PostgreSQL или MySQL. Еще можно попробовать Mongo DB, но у меня все данные структурированные, поэтому не уверен что нужна NoSQL база данных.
2) Технология для поиска признаков в тексте. Не нашел ничего подходящего для русского и украинского, похоже придется парсить по ключевым словам, а потом проверять качество вручную.
3) Собственно Data Mining решение. Нашел несколько библиотек, например:
github.com/haifengl/smile
github.com/apache/mahout
www.cs.waikato.ac.nz/ml/weka
orange.biolab.si
Но в интернете очень мало описания их возможностей чтобы сделать выбор. В противовес, раздумываю над тем, чтобы использовать сервис www.h2o.ai , но смущает его чрезмерная сложность.
Кроме того, хотелось бы использовать один язык для всего бекенда, а не один модуль на Java, другой на Python и т.д.

👍ПодобаєтьсяСподобалось0
До обраногоВ обраному0
LinkedIn
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter

ну про текст майнинг я мало шо знаю, но там если семантику не подключать, все довольно просто — стеммингуешь каждый док исходя из языка, херячишь каждый док в мешок слов, строишь корпус, документ-терм матрицу, исходя из частоты убираешь «стопслова» или редкий мусор. С очищенной матрицей там работаешь потом. Шо хошь то и делаешь. Использовал бы www.h2o.ai и R ( cran.r-project.org/web/packages/h2o/h2o.pdf ). Втупую гоняешь скрипты на R. Про «парсинг» ниче не понял. Спарки в топку, если твой прикол — реально супер крутая математика (точно не кнн :) и не деревья, не лес, не бустинг и т.д. ), а не крутая обработка большого количества данных.

У меня не SEO, поэтому с обработкой текста все будет попроще. Насчет супер крутой математики пока не уверен, сначала хочу попробовать что-то по простым алгоритмам, но чтобы потом не было глобальной проблемы добавить функционал.

R евангелист снова на ДОУ!)))

мне R наоборот нравится, просто парень всегда на доу активно все агитирует R))

Я чётко не понял шо это за признаки нужно парсить. Но как вариант можно попробовать Weka пакет, там есть имплементации многих алгоритмов. Для анализа украинского языка можно посмотреть в сторону библиотек OpenOffice.

1) я бы взял PostgreSQL. У MongoDB раньше было настолько много недостатков и оголтелого пиара, что даже не хочется узнавать, исправили они их или нет.
2) неясно, что такое для вас «признаки» в этой задаче, и как вы собираетесь их парсить «по ключевым словам»
3) Mahout сильно проигрывает по скорости альтернативам в случае, если вы можете эти данные обрабатывать на одном компьютере. В остальном неясно, какие у вас еще требования к продукту. Просто библиотека? В рамках каких языков? Что вы уже знаете? Что готовы дополнительно выучить? Какие нужны алгоритмы кроме CART и (kNN)?

2) Это числа и повторяющиеся фразы в тексте, которые можно впоследствии легко закодировать числами.
3) Что я хочу сделать: Построить модели поведения системы, в результате чего можно будет по набору признаков предсказать итоговый результат или задав результат и часть набора признаков получить оставшуюся часть набора. Сам анализ можно периодически проводить вручную, как только накопится достаточный объем необработанных данных. Пользователь будет иметь возможность задать наборы признаков по готовой модели и просматривать результат в удобном ему виде.
Обязательно нужны деревья решений и несколько алгоритмов классификации и кластеризации, точнее сказать тяжело поскольку мне надо еще поэксперментировать с этими данными чтобы понять какой алгоритм будет лучше. Сейчас я использую вот этот софт basegroup.ru/deductor/description , но хочу реализовать необходимую часть у себя в программе.
По поводу того, должна это быть просто библиотека или целый программный комплекс я, честно говоря, еще не уверен. Знаю Java и немного C#, но как я понимаю, большая часть ПО подразумевает использование Scala или Python. R в расчет не беру, т.к. хочется весь бекенд написать на одном языке.

2) все равно не ясно, но похоже, что вы представляете, как это сделать

3) из своего опыта не подскажу, я простые алгоритмы сам реализовывал, последний раз на Octave

Из обзорного чтения знаю, что в Python очень популярна scikit-learn: вот CART вот kNN.

Насчет weka (java): продукт очень давний, по идее должен быть хорошо отлажен. Насколько я помню, он не использует native библиотек, поэтому должен уступать в производительности вычислений альтернативам, но в вашем случае это наверное не критично.

самое модное это апач спарк, писать или на скала или на пиг-латин, смотря какие задачи. попробуйте учесть что миллион файлов по 100кб это какоето немерянное число часов для считывания их с жесткого диска.

Не понимаю, что запредельного в чтении 100Гб с диска. Современный десктоп справляется за приемлемое время. Может я что-то упускаю из вида?

а если файл 1 мб ? время чтения нада умножить гдето на 3 или на 5 так как будет еще обработка текста и потом запись результатов в базу.

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

Ну погоняй скриптами.
Только помни, что 1 млн файлов это не 1 млн строк в базе данных.
Это 1 млн * 100 000 байт / 10 символов в среднем слово (среднее слово 8 символов + знаки припинания) = 10+ млрд запросов к базе на чтение и запись.

У тебя не raw data. Читай внимательнее условия задачи

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

Да, так и есть. Лично для моего проекта часа 2 стоит переиндексировать 1 млн тестовых файлов.
Проблема в вычитке маленьких файлов с диска, ОСи для этого не заточены. После того как я их заархивировал и начал читать архивами, чуток стало лучше. Но всеравно дело не такое уж быстрое. Клиент читает файлы, переводит в правильную кодировку, передает их по сети, потом отрабатывает стеммер и наконец ложится все в базу. Сама база может индексировать около 60 мб/сек чистого текста, но так как оверхед то время смотреть выше.

я делал проект на спарке — чтение с файла в пару миллионов строк, обработка каждой и т.д. Файл около 4 гига, ссд диск в макбук аир со скоростью чтения гдето 500 или 600 мб в секунду, с миллионом строк я так ни разу и не дождался окончания. пришлось создать файлик на 100к записей и тестировать все на нем. Потом запускал это на кластере из 16 машин, там заняло около 20 минут. в самом начале я тоже думал — та что там 4 гига считать с ссд диска, но потом пришлось признать что обработка биг даты на одном компе занимат очень много времени и для этого и придумали разные хадупы, спарки и т.д.

Підписатись на коментарі