Нейронные сети и машинное обучение

Dev

Первый Участник
Регистрация
09.02.2017
Сообщения
3 281
Пол
мужской
Решил я тут на досуге, заняться передовой темой!
Пока, задача стоит так... Есть помойка из документов. Формат определен: MS Word, MS Excel. Все в формате XML.
Количество документов = 10 000- 15 000.
Надо написать и обучить нейронную сеть, распознавать тип документа, и выставить в озере данных ТЭГи. Типы строго определены: договор, сводка, ежедневная отчетность, привязка к сущностям реального мира.!
Язык программирования C#. Хранилище документов в BLOB на SAP Adaptive Server Interprise!
Для начала два ролика взятые за основу... Очень классные и простые! Рассказано на простых примерах, доступным языком!



Здесь буду пытаться постигать данные предметной области, приводить сырцы, и делится своими впечатлениями!


2963
 
Последнее редактирование модератором:
Регистрация
24.05.2019
Сообщения
53
Пол
мужской
Ролик еще не смотрел, но сразу вопрос - зачем в такой задаче НС, в чем преимущество? Или просто попробовать?
Недавно делал парсинг обычных (и кривых) XML на c#. Нормальный через XDocument, кривые, которые не хотели приводится к XDocument, через XmlTextReader.
С xlsx и docx я бы работал через соответствующие классы типа стандартного Microsoft.Office.Interop.Excel или через какие-нибудь готовые парсеры, которых уже не мало наклепали.
Например:
,
Можно подобрать что-нибудь подходящее.
Или в твоей задаче главная проблема - классификация документов? Like '%договор%' не прокатит? :01::90:

В общем, тема интересная, пиши. Может и в моей работе НС пригодятся.
Я с НС когда-то в универе работал в матлабе, простенькие обучал, для элементарной арифметики, классификации по данным ЭКГ и др.
 
Последнее редактирование:

Dev

Первый Участник
Регистрация
09.02.2017
Сообщения
3 281
Пол
мужской
Или в твоей задаче главная проблема - классификация документов? Like '%договор%' не прокатит? :01::90:
Прокатит! Но две проблемы.
1. LIKE с первым "%" "убивает" индекс, и ты улетаешь в Table Scan. :02: Что уже не гуд.
2. а где храниться "договор"? В теле документа данного "слова" может и не быть... Отдельно? Тогда встает вопрос кто и как делает эту TAG-ировку. Но об этом чуть позже!

Или просто попробовать?
И это тоже!
но сразу вопрос - зачем в такой задаче НС, в чем преимущество?
Что имеем сейчас. Есть хранилище данных. Файлы хранятся в BLOB. Так же к каждому файлу есть набор ТAGs.
Кладет "баба Маша" договор (.docx) в хранилище и приписывает еще ярлыки (TAG). Например.
Договор номер 123 от 09.09.09 г о оказании услуг по покраске забора с компанией " ООО рога и копыта".
В тагах, она должна сделать примерно следующее...
1. Договор
2. 123
3. 09.09.09
4. покраска
5. забор
6 "рога и копыта".

Далее уже поиск осуществляется по даным тегам. В том числе и через LIKE.
Но "баба Маша", как правило, умнее калькулятора в руках ничего не держала! И Тэги указывает на основании треска в пятке ее левой ноги.
Но самое интересное, что "Баба Маша" работая все время с договорами, слово "договор" в тегах вообще не пишет! :02: Для нее это обыденность и она на это просто не обращает внимание!
И заставить "Бабу Машу" правильно заполнять тэги - это из цикла фэнтази. А у меня таких "баб Маш" штук 100, и все работают со своими данными. А общее количество уже перевалило за 20 млн документов и 2 ТБ неструктурированных (верней плохо структурированных) данных!
Основная цель НС определить эти тэги, без участия "Баб Маш". Хотя бы на уровне классификации документа!
Тоесть что это... Договор, финансовый отчет, сводка о обработке транспорта за сутки, отчет о проделано работе, акт выполненных работ, товаросопроводительный документ, номинация, расчетный листок, приказ, объяснительная записка, итд!
То есть даже наведения порядка по тегу класификация документа, уже
 
Регистрация
03.05.2019
Сообщения
708
Пол
мужской
а где храниться "договор"? В теле документа данного "слова" может и не быть... Отдельно?
Ага. В расширенных атрибутах.
И прямо на локальной машине можно спокойно эти метки ставить.
 
Регистрация
24.05.2019
Сообщения
53
Пол
мужской
Прокатит! Но две проблемы.
1. LIKE с первым "%" "убивает" индекс, и ты улетаешь в Table Scan. :02: Что уже не гуд.
2. а где храниться "договор"? В теле документа данного "слова" может и не быть... Отдельно? Тогда встает вопрос кто и как делает эту TAG-ировку. Но об этом чуть позже!
Я в курсе, что Like в БД - это зло :01:... Но тут ведь задача как я понимаю вытаскивать из БД документы и на шарпе их парсить.
(С BLOB не работал, с документами типа данных XML, лежащими прямо в БД - работал недавно. Применил к ним уже готовый шарповый код парсинга из файла, немного подправив.)

Думаю, надо в первую очередь смотреть заголовки документов, у каждого типа должны быть какие-то общие признаки. Если в них есть неопределенность - смотрим тело.
К примеру, в договорах, актах ключевые слова в заголовке обычно есть. Но эти же слова могут встречаться одновременно, и они же и еще другие "ключи" - в теле.
Вот тут как раз НС наверное и могут пригодится. Обучать надо наверное на группах "ключей", типа: "акт выполненных работ", "договор о" и т.п. Причем наверное с признаком места в тексте.
Вариантов сочетания этих ключей много, обычную логику на развилках написать действительно может быть сложно.
Интересная задача.

Что имеем сейчас. Есть хранилище данных. Файлы хранятся в BLOB. Так же к каждому файлу есть набор ТAGs.
Кладет "баба Маша" договор (.docx) в хранилище и приписывает еще ярлыки (TAG). Например.
Договор номер 123 от 09.09.09 г о оказании услуг по покраске забора с компанией " ООО рога и копыта".
В тагах, она должна сделать примерно следующее...
1. Договор
2. 123
3. 09.09.09
4. покраска
5. забор
6 "рога и копыта".

Далее уже поиск осуществляется по даным тегам. В том числе и через LIKE.
Но "баба Маша", как правило, умнее калькулятора в руках ничего не держала! И Тэги указывает на основании треска в пятке ее левой ноги.
Но самое интересное, что "Баба Маша" работая все время с договорами, слово "договор" в тегах вообще не пишет! :02: Для нее это обыденность и она на это просто не обращает внимание!
И заставить "Бабу Машу" правильно заполнять тэги - это из цикла фэнтази. А у меня таких "баб Маш" штук 100, и все работают со своими данными. А общее количество уже перевалило за 20 млн документов и 2 ТБ неструктурированных (верней плохо структурированных) данных!
Основная цель НС определить эти тэги, без участия "Баб Маш". Хотя бы на уровне классификации документа!
Тоесть что это... Договор, финансовый отчет, сводка о обработке транспорта за сутки, отчет о проделано работе, акт выполненных работ, товаросопроводительный документ, номинация, расчетный листок, приказ, объяснительная записка, итд!
То есть даже наведения порядка по тегу класификация документа, уже
"Бабы маши" вообще главная проблема программистов :52:
Но благодаря ним у нас всегда много работы :02:

По-хорошему, уже на стадии ввода данных "баб Маш" надо проверять, контролировать и ограничивать самодеятельность. Но если уже 2Тб наплодили- то поздно "пить Боржом", надо парсить.
 

Dev

Первый Участник
Регистрация
09.02.2017
Сообщения
3 281
Пол
мужской
Но тут ведь задача как я понимаю вытаскивать из БД документы и на шарпе их парсить.
Нет... вытащить конкретный документ это не проблема. Отобразить тоже.
Вся проблема в поиске... Вытащить всю помойку в 2 Тб на клиент, а потом парсить ища нужный... как то не гуд!
Цель, грубо, за "бабу машу" проставить тэги что у вновь созданных документов, как и у тех которые в помойке!
Пока остановились только на классификации документа... Хотя эта проблема решается одним обязательным полем с прибинденым справочником!
Но хотелось бы на основе НС или даже нескольких НС создать именно систему приведения наших документов (неструктурированных) к некой структуре. верней связать документы с сущностями которые структурировано хоронятся в БД.
 
Регистрация
24.05.2019
Сообщения
53
Пол
мужской
Вся проблема в поиске... Вытащить всю помойку в 2 Тб на клиент, а потом парсить ища нужный... как то не гуд!
Не, ну конечно не всё на клиент тащить. По одному парсить и выставлять тэги или поля в связанной таблице. Затем уже по ним поиск делать.
Но хотелось бы на основе НС или даже нескольких НС создать именно систему приведения наших документов (неструктурированных) к некой структуре. верней связать документы с сущностями которые структурировано хоронятся в БД.
Я так и понял.
ИМХО, с НС можно поступить по-разному. Классически, как с распознаванием образов, скармливать им целиком бинарники или текстовые доки. Обучение проводить на выборках. сформированных вручную, штук по 100 каждого типа должно наверное хватить.
Второй вариант - как я описал выше - на ключевых словах и фразах. Сети тогда будут проще, обучаться быстрее. Но как лучше - не знаю, может еще варианты есть.
Я бы начал с изучения аналогичных работ по классификации текстовых док-тов с помощью НС.

Пример:
Смущает лучший результат в 83%. Но тут задача сложнее, менее четкая, вручную результат - еще хуже. С документами должно получится лучше.
 
Последнее редактирование:

Dev

Первый Участник
Регистрация
09.02.2017
Сообщения
3 281
Пол
мужской
Не, ну конечно не всё на клиент тащить. По одному парсить и выставлять тэги или поля в связанной таблице. Затем уже по ним поиск делать.
да... Только вот этим парсингом и должна НС заниматься!

ИМХО, с НС можно поступить по-разному. Классически, как с распознаванием образов, скармливать им целиком бинарники или текстовые доки. Обучение проводить на выборках. сформированных вручную, штук по 100 каждого типа должно наверное хватить.
Второй вариант - как я описал выше - на ключевых словах и фразах. Сети тогда будут проще, обучаться быстрее. Но как лучше - не знаю, может еще варианты есть.
Я бы начал с изучения аналогичных работ по классификации текстовых док-тов с помощью НС.
вот тут тоже интересно... Чтоб сеть была универсально, работать надо с бинарниками...
теперь прикол... допустим максимальный размер документа 100 кб. То есть это уже размер инпут слоя 100 000 нейронов. Пускай промежуточный (скрытый слой) еще 1 000 нейронов.
то есть как минимум по двум слоям получаем 100 млн связей. Как бы обучать такую сеть я буду до "ишачей пасхи"...
Другой вариант это брать нутро, текст и составлять словарь по словам. и кормить НС именно векторами из этого словаря... Но это тоже, тот еще геморой с составлением словаря
Короче надо пробывать, играться с количеством слоев смотреть как себя НС будет вести...
 
Регистрация
03.05.2019
Сообщения
708
Пол
мужской
Вся проблема в поиске... Вытащить всю помойку в 2 Тб на клиент, а потом парсить ища нужный... как то не гуд!
Штатные balooctl для индексирования с последующим baloosearch спасут Отца Русской демократии.
В нормальных системах с этим никаких проблем нет.
 
Регистрация
24.05.2019
Сообщения
53
Пол
мужской
Штатные balooctl для индексирования с последующим baloosearch спасут Отца Русской демократии.
В нормальных системах с этим никаких проблем нет.
Это шо за зверь?
вот тут тоже интересно... Чтоб сеть была универсально, работать надо с бинарниками...
теперь прикол... допустим максимальный размер документа 100 кб. То есть это уже размер инпут слоя 100 000 нейронов. Пускай промежуточный (скрытый слой) еще 1 000 нейронов.
то есть как минимум по двум слоям получаем 100 млн связей. Как бы обучать такую сеть я буду до "ишачей пасхи"...
Угу, есть такая "перспективка". Может не бинарник, а какой-нить md5-хэш или аналог уже к тексту применять? Мы так делали со строками из нескольких полей, для проверки изменений - весьма успешно сработало. Насчет целых документов конечно не знаю. Да и будет ли выборка репрезентативной - тоже не знаю. Но нейронов понадобиться гораздо меньше, это точно.
Другой вариант это брать нутро, текст и составлять словарь по словам. и кормить НС именно векторами из этого словаря... Но это тоже, тот еще геморой с составлением словаря
Короче надо пробывать, играться с количеством слоев смотреть как себя НС будет вести...
Да, геморно. Но если у тебя типов документов и ключевых слов и фраз не много - я думаю это лучший вариант.
Не совсем универсально, но под эту задачу сеть должна не очень большая получиться, и обучение в разумные сроки на не слишком большом кол-ве примеров.
 
Регистрация
03.05.2019
Сообщения
708
Пол
мужской
Это шо за зверь?
Штатный KDEшный фреймворк для индексирования и поиска файлов.
Разумеется сам по себе он ничего не сделает, но файлы должным образом проиндексирует, что потом значительно облегчит работу с ними.
 

Dev

Первый Участник
Регистрация
09.02.2017
Сообщения
3 281
Пол
мужской
Штатный KDEшный фреймворк для индексирования и поиска файлов.
и по каким атрибутам от сделает индексацию?
неужели если ему подсунуть два файла docx, он определит для каждого что логический тип документа, например договор и служебная записка?
Обычную индексацию по расширению, датам создания/изменения итд... Это фигня... такое я сделаю как два пальца об асфальт. И даже по расшерению определю тип, и если это mp3, то проиндексирую еще и по битрэйту! :02:
 
Регистрация
03.05.2019
Сообщения
708
Пол
мужской
и по каким атрибутам от сделает индексацию?
В том числе и по содержимому.
А дальше по ключевым словам выдаст все файлы, где они встречаются. При этом может исключить файлы, где встречаются другие ключевые слова.
 

Dev

Первый Участник
Регистрация
09.02.2017
Сообщения
3 281
Пол
мужской
В том числе и по содержимому.
и каков размер такого индекса по содержимому?

А дальше по ключевым словам выдаст все файлы, где они встречаются.
тоже проблема... поисковые слова могут не находится в содержимом.
 
Регистрация
13.03.2017
Сообщения
4 352
Пол
мужской
... Даааа робяты! ... До реальных "нейронных сетей" ... вам ещё кашлять и кашлять!!! :12:
... Железяку тексты сортИровать без тегов не могёте. ... :12:
... "ИСКУССТВЕННЫЙ ИНТЕЛЛЕКТ" ГРОЗИТ ЦИВИЛИЗАЦИИ ... это крандец !!!!!
-------------------------------------------------------
... Арифмометр Чарлза Беббиджа ... ДУМАТЬ НЕ СМОЖЕТ!!!!! ...
 

Dev

Первый Участник
Регистрация
09.02.2017
Сообщения
3 281
Пол
мужской
... Даааа робяты! ... До реальных "нейронных сетей" ... вам ещё кашлять и кашлять!!! :12:
Вам может быть и да... Какзнаток, расскажите нам какую активакционную функцию лучше использовать для решения подобных задач?
Не стесняйтесь только!

... Железяку тексты сортИровать без тегов не могёте. ... :12:
Я стесняюсь спросить о гуру нейронных сетей и машинного обучения а причем здесь сортировка текста и каким макаром тут теги?
Если вы балбес в теме то проходите мимо! Ваше мнение не интересно!
Но у вас есть шанс ответить на два вопроса выше!
 

Dev

Первый Участник
Регистрация
09.02.2017
Сообщения
3 281
Пол
мужской
Ограничен размером файла в файловой системе.
То есть весь словарь туда спокойно влезет.
дело не в словаре а в размере индекса. Просто что то мне подсказывает что такой индекс по содержанию, может превысить размер самого хранилища.

И самое главное, как можно обратится к этому индексу? Это просто файл где есть сопоставления слова и файла где оно встречается?
 

Dev

Первый Участник
Регистрация
09.02.2017
Сообщения
3 281
Пол
мужской
Продолжу... Готовые ФреймВорки юзать не буду... Будем клепать свое и с нуля!

НС - имеет структуру направленного графа. Следовательно должны описать 2 класса. Сам нейрон и Связь.
Так же нам понадобится Энумераторы, лучше коллекции этих двух объектов.
Я всегда в C# юзаю стандартную CollectionBase.

По свойствам и методам напишу чуть позже!
 
Сверху Снизу