Доброго времени суток!
Задача следующая: есть словесные выражения и их нужно проклассифицировать. =) Например, могу предоставить векторы обучающей выборки:
INPUT: "директор отдела сетевых технологий"; OUTPUT: "CLASS1"
INPUT: "директор отдела баз данных"; OUTPUT: "CLASS1"
INPUT: "директор компьютерного отдела"; OUTPUT: "CLASS1"
INPUT: "директор финансового отдела"; OUTPUT: "CLASS2"
INPUT: "директор предприятия"; OUTPUT: "CLASS2"
Т.е., имеется CLASS1, в который входят IT-директора и есть CLASS2, в который входят директора, не относящиеся к IT. Это только пример, в реальной задачи классов больше.
Для решения это задачи сначала я создал таблицу примерно след. вида:
"%директ%", "CLASS1", 8.0
"%директ%", "CLASS2", 8.0
"%сетев%", "CLASS2", 2.0
"%техн%", "CLASS2", 2.0
...
"%финанс%", "CLASS1", 2.0
"%предпр%", "CLASS1", 1.0
Т.е. из "обучающей выборки" я выделил масок со словоформами, и, при успешном наложении маски на слово, я брал данные из третьего столбца и суммировал ... В итоге ответ на решение задачи выдаётся по тому классу, где значение суммы больше.
При выставлении коэффициентов вручную, правильнось решения была где-то 85% (конечно же его можно и увеличить, но заниматься этим вручную - просто убийство).
Потом у меня возникла идея использовать однослойную нейросетку для классификации таких словестных выражений. Т.е. кол-во нейронов входного слоя равно кол-ву уникальных записей в первом столбце вышеописанной таблицы. Кол-во нейронов выходного слоя равну кол-ву классов.
В результате обучения по бэкпропу, на малой (экспериментальной) обучающей выборки выяснилась одна неприятная деталь: коэффициенты, которые выставляются на нейронах выходного слоя (для однослойной сетки), пропрорционально не соответствуют тем (вообще не похожи), что выставлялись в третьем слолбце вышеописанной таблицы (этот неприятный момент не ликвидировался даже когда я изменил сигмоидальную активационную функцию на линейную). В результате, из-за этого момента сеть показала нехорошие результаты функционирования на данных, которые не входили в обучающую выборку. На реальной задаче, я сетку пока не тестил, но, думаю, точность решения будет не выше 90-92%%.
Вопросы:
1.) Какую топологию сетки использовать (ассоциативную память или сетки прямого распространения)?
2.) Какую архитектуру сетки использовать (кол-во нейронов, активац. функцию и т.д. ...)?
3.) Какой алгоритм обучения использовать?
4.) В каком виде подавать входные данные? (оставить так - ввиде масок, или стоит побольше внимания уделить морфологии - отлавливание окончаний и т.п.)
5.) К примеру, возникла след. проблема. К примеру, есть словестные выражения: "программист ИТ-отдела директора" и "директор ИТ-отдела с программистами" =) Т.е. если использовать подход с масками, то получаться конфликтующие паттерны. Как решить проблему?
Заранее спасибо.