Как сделать умный фильтр текста по смыслу?

Задача:
- Есть парсер (на PHP) постов ВК по теме сдачи квартир. Надо определить - написал текст Агент или Собственник.

Как решена задача на данный момент (топорно):
- С помощью масок из стоп-слов. Находится в тексте стоп-слово (прим: агентство) - значит агент.

В чем проблема:
- Естественно такой подход очень топорный и иногда неправильно фильтрует посты.

Вопрос:
- Где найти информацию с примерами по реализации подобных скриптов? Мне просто хотя бы концепцию понять как это сделать максимально практично.

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

Самому ничего нарыть не получилось в инете. Заранее спасибо за любую информацию по этой теме!
  • Вопрос задан
  • 950 просмотров
Пригласить эксперта
Ответы на вопрос 6
@vshvydky
Идея анализа слов хороша, но добавь к ней анализ страницы. У агента будет точно не одна объява о продаже на стене своей страницы, значит он точно не твой таргет, тогда и минусуй.
Ответ написан
@Nwton
1) Просматриваете сотню объявлений
2) Анализируете каждое и выясняете, что именно помогло вам определить тип объявления и качество
3) Пишете скрипт, который анализирует нужные детали
4) Тестируете скрипт на паре сотен разных объявлений. Смотрите как именно бот анализирует данные, следите за каждым этапом и дорабатываете алгоритм

Это про общий подход к созданию таких штук.
Ответ написан
latteo
@latteo
Его и по телефону не всегда отличишь, если агент косит под собственника.

Для ручной фильтрации использую:
- анализ телефона, как правило у агенств множество квартир. А у собственника 90% одна объява, 10% могут быть объявления 2-3 квартир + могут попадаться объявы по продаже мелких вещей.
- анализ картинки: агенствам лень заморачиваться и картинки могут идти на несколько объяв, но увы парсить гугл это долго.
- общий фон текста + интуиция. Вот тут машина пока бессильна, хотя можете попробовать анализом нескольких тысяч текстов выявить закономерности через сервисы типа https://habrahabr.ru/post/243705/

PS: в современном мире агенства - это зло в виде лишнего посредника с огромными запросами и минимальной функцией свести 2х людей без малейших проверок кто эти люди.
Ответ написан
Arseny_Info
@Arseny_Info
R&D engineer
1) Токенизация и лемматизация текста
2) Bag of words или TF/IDF векторизация
3) Доп.фичи про уникальность телефона / адреса.
4) Простая линейная модель поверх этих векторов.

Тому, кто хоть раз работал с такими задачами, дел на 1-2 вечера.
Ответ написан
Abyasov
@Abyasov
За любую движуху, кроме голодовки :)
Похоже, вам нужно смотреть в сторону машинного обучения. В двух словах здесь не опишешь, рекомендую почитать материалы на эту тему. Но я бы пошел таким путем:

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

2) Для обучения модели потребуется выборка объявлений в которых точно известно кто его разместил. Это самое важное место. И самое сложное. Подозреваю, что выборка будет маленькая, в таком случае это наложит ограничения на выбор модели (будете работать с теми же деревьями и бустингом над ними).

3) Обучающую выборку надо будет предварительно обработать: категориальные признаки (всякие идентификаторы, категории, темы) заменить на наборы бинарных (one hot encoding), числовые - нормировать, выборку сбалансировать.

4) Выбираете метрику по которой будите оценивать качество работы алгоритма (точность, полнота, F-мера или ROC-AUC или еще что-то). Это отдельная большая тема и выбор будет зависеть от вашей бизнес-модели.

5) Собираете несколько моделей, выбираете наиболее перспективные. А потом подбираете гипер-параметры в этих моделях. Возможно, захотите комбинировать несколько моделей, но тут нужно быть осторожным с производительностью и переобучением.

6) Прикручиваете полученную модель к своему сервису.

7) Находите новые признаки, обучающие данные, идеи и улучшаете модель. Здесь предела совершенству нет ))

А то что есть у вас сейчас, скорее всего без потерь можно будет описать обычным деревом решений. Так что хуже стать не должно.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы