• Можно ли решить с помощью нейронной сети?

    Irokez
    @Irokez
    Любую задачу в принципе можно свести к нейронной сети, но в вашем случае, запаритесь ее обучать, к тому же нужны данные для обучения, т.е. неск. сотен (тысяч) объявлений, в которых цена, площать и т.п помечены.

    Сводим задачу к классификации группы чисел, т.е. подразумеваем, что все группы чисел в тексте будут иметь один из следующих классов: цена, площадь, этаж.

    Для начала нужен хороший токенизатор: пишете скрипт, который разбивает текст объявления на слова, при этом стараемся чтобы числа были в одной группе. Например: «продаю 3-х комнатную квартиру за 5000 руб.» => («продаю», «3», "-", «х», «комнатную», «квартиру», «за», «5000», «руб», ".").

    Затем создаете простой интерфейс для аннотации текста. Т.е. берем, скажем 1% от всех объявлений и от руки отмечаем, где цена, где площадь. Результат будет примерно таков: {«продаю» => '', «3» => ROOM, "-" => '', «х» => '', «комнатную» => '', «квартиру» => '', «за» => '', «5000» => PRICE, «руб» => '', "." => ''}. Это будут данные для обучения.

    Теперь создаем нейронную сеть. Возьмем многослойный персептрон с 3-мя слоями: входной уровень — наши данные, скрытый уровень и выходной уровень — сигналы классов. В выходном уровне будет кол-во узлов по кол-ву классов, т.е. 3 (цена, площадь, кол-во комнат). Можно добавить 4-й узел для отсутствия класса. Входной слой содержит узлы характеристик данных. В качестве характеристик можно взять N-слов до числа и N-слов после. Число N можно варьировать (скажем, от 1 до 10 т.е. 10 разных сетей). В итоге будет громадный входной слой с кол-вом узлов NxM, где M — это наш словарь, т.е. все встречающиеся в объявлениях слова. Входные данные будут такие: (0, 0, 0,… 1, 0, 0, ....) — для каждой из N групп, т.е. 1 будет обозначать что слово присутствует в окне. Выходные данные будут (1, 0, 0) для цены, (0, 1, 0) для площади, (0, 0, 1) для кол-ва комнат. В скрытом слое ставим кол-во узлов наугад… ну, скажем, пусть, будет N.

    Проводим обучение на 1% размеченных данных пока не сойдется обучение. Можно варьировать число N и смотреть какой вариант дает лучший результат. Потом пытаемся разметить оставшиеся данные с полученной сетью.

    Не уверен, что это оптимальный вариант :)
    Ответ написан
    1 комментарий