Textocat API — это облачный SaaS анализа текстов. Качественное извлечение полезной информации из текстов — сложная задача и требует серьезной экспертизы. Миссия команды Textocat — сделать процесс обработки текстов настолько легким для использования, чтобы его мог включить в свой арсенал любой современный разработчик. Используя Textocat, вы можете быстро прототипировать приложения на основе текстовой аналитики и превращать их в свой бизнес. В данной публикации мы покажем, насколько легко интегрировать в любое приложение возможности Textocat API по распознаванию упоминаний сущностей (объектов) и поиску документов на русском языке.

Возможности Textocat API Beta


В начале апреля мы запустили бета-тестирование Textocat API. В этой версии мы предлагаем разработчикам бесплатно использовать часть функционала сервиса со следующими возможностями:
  • распознавание упоминаний сущностей (entity recognition) в коллекциях документов на русском языке;
  • хранение обработанных коллекций;
  • полнотекстовый поиск с учетом выделенных типов сущностей.


пример распознавания упоминаний сущностей


Распознавание упоминаний сущностей

Задача распознавания упоминаний сущностей, в том числе именованных сущностей (named entity recognition, NER), состоит в том, что бы выделить и классифицировать определенные фрагменты текста на заранее известные типы. Например, текущая версия Textocat поддерживает семь типов:
  • PERSON (люди),
  • ORGANIZATION (организации),
  • GPE (геополитические сущности),
  • LOCATION (географические объекты),
  • FACILITY (объекты инфраструктуры),
  • TIME (временные единицы)
  • и MONEY (денежные единицы).


Почему качественное решение этой задачи сложно? Ведь можно просто взять словари, методы из университетского курса по теории алгоритмов и получить такой же результат? Дело в том, что естественный язык, в особенности русский, богат различными нюансами:
  1. Флективность: для аккуратного сопоставления с учетом возможных форм слова и окончаний вам нужен хороший морфологический анализатор.
  2. Лексическая многозначность: как отличить упоминания банка «Россия» (ORGANIZATION) и России как страны (GPE)?
  3. Многозначность имени: как отличить упоминания Сергея Иванова, руководителя Администрации Президента Российской Федерации, от упоминаний его полного тезки — председателя государственного комитета Республики Татарстан по туризму?

В ядре нашего подхода на основе машинного обучения — собственные технологии сбора данных для аннотирования от асессоров по принципу краудсорсинга и собственные разработки по улучшению актуальных методов применения вероятностных графических моделей для этих задач. Аккуратность такого решения будет на порядок выше прямолинейного подхода на основе ключевых слов. Кроме того, все реализованные технологии Textocat масштабируются по числу машин без переписывания исходного кода.

Ознакомиться с тем, как работает технология Textocat для этой задачи на разных текстах, даже не начав программировать, можно на странице нашего интерактивного демо. Отметим, что текущие результаты — это далеко не предел возможностей, и качество распознавания будет значительно улучшено уже в ближайшее время. Сейчас технология показывает свои наилучшие результаты на новостных текстах.

Выгрузка документов и поиск

После обработки документы становятся доступны для выгрузки (и только клиенту с данным токеном авторизации). Textocat API также позволяет пользователю искать среди всех загруженных документов, поддерживая полнотекстовые запросы по ключевым словам (например, «тинькофф банк»). Кроме того, Textocat API предоставляет расширенный синтаксис запросов, накладывающих ограничение на тип аннотации, в которых должны встречаться ключевые слова. Например, запрос «ORGANIZATION: форд» дает возможность искать документы, в которых ключевое слово «форд» упоминается в контексте организации («Форд Моторс»), отделяя упоминания имени известного американского промышленника Генри Форда. В полной версии сервиса доступна функция отслеживания в документах конкретных объектов из словаря или базы знаний клиента (entity linking или named entity disambiguation).

Принципы работы с API


Textocat API — это классический RESTful API, то есть работа с сервисом производится через стандартные запросы по протоколу HTTP. JSON — пока единственный поддерживаемый формат для входных и выходных данных в Textocat API. Для удобства работы со многими документами Textocat API позволяет собирать документы в пакеты (batches) и отправлять их на обработку. В принципе, это позволяет разбить большую коллекцию на пакеты и отправлять их на обработку параллельно (premium feature). Время обработки пакетов зависит от их размеров и текущей нагрузки, создаваемой всеми пользователями. Поэтому на клиента возложена необходимость периодически проверять статус пакета, отправляя соответствующий запрос. Как только пакет документов будет обработан, он сохраняется в системе в структурированном виде и будет храниться в течение всего периода подписки клиента. С этого момента клиент имеет возможность выгрузить обработанные документы. Textocat API позволяет фильтровать и сортировать выдаваемые документы через описанные средства поиска.

Получить ключ к API


Для повторения шагов, описанных далее, вам понадобится ключ авторизации (auth_token) для доступа к API. Получить ключ можно бесплатно, пройдя простую регистрацию на нашем сайте. Если у вас возникают какие-либо проблемы с регистрацией или использованием сервиса, пожалуйста, воспользуйтесь нашей базой знаний.

Онлайн-документация


Интерактивная онлайн-документация Textocat API позволяет познакомиться с основными командами и параметрами для вызова функционала сервиса. Далее опишем цикл обработки простого пакета, состоящего из одного тестового документа, который можно повторить прямо в онлайн-документации.
Пошаговая инструкция использования онлайн-документации
  1. Открываем страницу онлайн-документации Textocat API. Для начала работы с ней необходимо вставить токен авторизации в соответствующее поле (auth_token).
  2. Начинаем с функции отправки пакета для выделения упоминаний сущностей. Кликаем на ссылку /entity/queue.

  3. В раскрывшейся форме необходимо заполнить поле body — массив документов для добавления в формате JSON. Проще всего это сделать кликнув на пример JSON справа под надписью «Model Schema» и заполнив поле text в JSON текстом тестового документа. Кликнув рядом на ссылку «Model», вы получите описание основных полей документа, обрабатываемых Textocat API.

  4. Нажимаем кнопку отправки запроса «Try it out». В случае успешной обработки запроса, форма выводит сообщение с кодом HTTP-статуса 202 и сгенерированный идентификатор для обрабатываемого пакета (см. поле «batchId» в ответном JSON). Этот идентификатор необходимо запомнить. В случае ошибки необходимо сопоставить код ошибки (например, 406) с описанием из таблицы «Response Messages» и устранить проблемы в запросе.
  5. Проверяем статус отправленного пакета (/entity/request), введя в поле batch_id идентификатор пакета, который мы запомнили на предыдущем шаге. Сервис возвратит код 200 и ответ FINISHED в поле «status», если все документы из пакета обработаны и готовы к выгрузке, или IN_PROGRESS, если пакет все еще анализируется.

  6. Если пакет обработан, мы можем перейти к его выгрузке (/entity/retrieve), указав тот же идентификатор пакета в поле batch_id и отправляем запрос. Для поиска по всем документам пользователя (/entity/search) заполняется поле search_query в синтаксисе поисковых запросов Textocat.

  7. В обоих случаях в качестве ответа сервис вернет JSON в рамках модели, состоящей из метаданных пакета, документа и выделенных сущностей. Подробное описание полей в ответе можно получить кликнув по ссылке «Model» под надписью «Response Class».



Работа с Textocat API в командной строке


Покажем, как можно работать с нашим сервисом прямо из командной строки с помощью curl, стандартной утилиты под Unix.
Инструкция для вызова Textocat API из командной строки
  1. Подготовим тестовый документ example.json с простым пакетом, состоящим из трех небольших документов:
    [
      {
        "text": "Председатель совета директоров ОАО «МДМ Банк» Олег Вьюгин — о том, чему приведет обмен санкциями между Россией и Западом в следующем году. Беседовала Светлана Сухова.",
        "tag": "doc1"
      },
    {
    "text": "Не перепутает Генри Форда и компанию «Форд» в документах",
    "tag": "doc2"
    },
    {
    "text": "Штаб-квартира компании Форд Моторс располагается в городе Дирборн.",
    "tag": "doc3"
    }
    ]
    

  2. Отправим текст Textocat API для распознавания упоминания сущностей, выполнив команду в консоли:
    curl -X POST http://api.textocat.com/entity/queue?auth_token=<YOUR_AUTH_TOKEN> -H "Content-Type: application/json" --data @example.json
    

    В ответ должны получить подобный ответ, содержащий идентификатор данного пакета batchId:
    {
      "batchId": "931da87a-fe98-4639-8cf6-570b5a3fc347",
      "status": "IN_PROGRESS"
    }
    

  3. Проверим статус пакета, передав batchId в качестве параметра:
    curl http://api.textocat.com/entity/request?auth_token=<YOUR_AUTH_TOKEN>&batch_id=931da87a-fe98-4639-8cf6-570b5a3fc347
    

    Так как пакет очень маленький и должен обработаться мгновенно, в этот раз ответ сервера будет:
    {
      "batchId": "931da87a-fe98-4639-8cf6-570b5a3fc347",
      "status": "FINISHED"
    }
    

    Значит, пакет готов для выгрузки или поиска.
  4. Выполним поиск по загруженным документом нашего пользователя, передавая параметр поискового запроса search_query со значением «ORGANIZATION: форд»:
    curl -G --data-urlencode 'search_query=ORGANIZATION:форд' --data 'auth_token=<YOUR_AUTH_TOKEN>' http://api.textocat.com/entity/search
    

    От сервера придет следующий ответ:
    {
      "searchQuery": "ORGANIZATION:форд",
      "documents": [{
        "status": "SUCCESS",
        "tag": "doc2",
        "entities": [{
          "span": "Генри Форда",
          "category": "PERSON",
          "beginOffset": 14,
          "endOffset": 25
        }, {
          "span": "компанию «Форд»",
          "category": "ORGANIZATION",
          "beginOffset": 28,
          "endOffset": 43
        }]
      }, {
        "status": "SUCCESS",
        "tag": "doc3",
        "entities": [{
          "span": "компании Форд Моторс",
          "category": "ORGANIZATION",
          "beginOffset": 14,
          "endOffset": 34
        }, {
          "span": "городе Дирборн",
          "category": "GPE",
          "beginOffset": 51,
          "endOffset": 65
        }, {
          "span": "Штаб-квартира компании Форд Моторс",
          "category": "FACILITY",
          "beginOffset": 0,
          "endOffset": 34
        }]
      }]
    }
    

    Таким образом, из обработанных пакетов Textocat API вернул только документы (см. массив documents), упоминающие слово «форд» в указанном лексическом значении, ранжируя их по релевантности.


Java SDK


Наконец, приведем пример выделения упоминаний сущностей с использованием официального Textocat Java SDK, который значительно упрощает логику работы с сервисом при реализации приложений на JVM-совместимых языках.

final EntityRecognition entityRecognition = TextocatFactory.getEntityRecognitionInstance("<AUTH_TOKEN>");
final FutureCallback<AnnotatedBatch> outputCallback = // a callback for dealing with annotated documents ...
        FutureCallback<BatchMetadata> inputCallback = new FutureCallback<BatchMetadata>() {
            public void onSuccess(BatchMetadata batchMetadata) {
               entityRecognition.retrieve(outputCallback, batchMetadata);
            }
            public void onFailure(Throwable throwable) {}
        };
entityRecognition.submit(new Batch(documents), inputCallback);


EntityRecognition — это основной интерфейс обращения к функционалу распознавания упоминаний сущностей в Textocat API. Все вызовы асинхронны, поэтому клиентский код обработчиков ответов к EntityRecognition необходимо оборачивать в FutureCallback из библиотеки Google Guava. В примере отправляется пакет документов (entityRecognition.submit) и выгружаются документы с готовыми аннотациями упоминаний сущностей (entityRecognition.retrieve). Вместо последнего можно было бы использовать метод entityRecognition.search для поиска по всем загруженным документам пользователя.

Приложения


Указанные возможности Textocat API могут использоваться в разных сферах бизнес-аналитики. Примеры некоторых интересных приложений вы можете найти среди проектов хакатона Text Analytics HackDay, который мы проводили в Казани в партнерстве с Казанским федеральным университетом. Отдельно остановимся на следующих двух кейсах.

Поиск в корпоративном документообороте

Современные BI-платформы предоставляют функции поиска по таким внутренним ресурсам компании, как системы документооборота, файловые хранилища, CRM, ERP, базы знаний в отделах технической поддержки, call-центрах, корпоративных почтах и форумах. Textocat API извлекает из текста значения величин, объекты, местоположения и временные единицы. Результаты выдаются в структурированном формате, удобном для загрузки в любое современное хранилище. Кроме того, мы предоставляем возможности полнотекстового поиска с учетом извлеченной семантики. Учет категорий имен и ключевых слов позволяет выполнять точное и качественное ранжирование результатов поиска. Попутно решается ряд низкоуровневых задач, с которыми часто сталкиваются разработчики собственных поисковых решений для русского языка, применяющие средства известных open source библиотек поиска (например, Apache Solr или Elastic Search) — это качественные токенизация, разбиение на предложения, лемматизация и т.п.

Инструмент для маркетинга

В бизнесе часто возникает потребность в анализе внешних источников и сбора фактов, мнений, отзывов о компании, продуктах, конкурентах, контрагентах, партнерах, объектах поглощения, отдельных персонах и т.п. Это позволяет принимать своевременные решения в маркетинге и корректировать планы продаж. Источниками текстов могут выступать официальные пресс-релизы, новости, сообщения в социальных сетях, отзывы и комментарии на сайтах. Данные об искомых объектах (например, названия и адреса сайтов) могут загружаться из CRM или внешних баз данных (например, реестр ФНС России). Используя возможности Textocat API, разработчики могут создавать сервисы, позволяющие получать полную картину (360-degree view) упоминаний интересующего объекта.

Анонс


В ближайших публикациях мы:
  1. приведем подробный обзор основных кейсов и историй успеха применения текстовой аналитики на рынках США, Европы и России;
  2. представим TextoKit — наш стек базовых функций обработки текста на русском языке, реализованный для платформы Apache UIMA и который мы открываем с исходным кодом под свободной лицензией для сообщества разработчиков.

Подпишитесь на наш блог и расскажите коллегам. Будет интересно!

Комментарии (66)


  1. begemot_sun
    05.05.2015 14:44
    +2

    Подскажите, под капотом у вас Томита-парсер или своя разработка?


    1. Aldvin
      05.05.2015 15:45
      +5

      Под капотом у нас своя разработка, где функционал Томиты пока не понадобился, у нас другой подход. Томита — отличный CFG-парсер, но лицензия не совсем commercial-friendly.


  1. Remper
    05.05.2015 14:46

    «собственные технологии» и «собственные разработки» неплохо было бы увидеть в опубликованных статьях в журналах и на конференциях) Было бы очень интересно почитать.
    Стек для Apache UIMA обязательно публикуйте!


    1. nzhiltsov Автор
      05.05.2015 15:24
      +1

      привет, мы рады, что наш проект находит такой отклик! Выходные данные научных публикаций, уже вышедших в печать, можно найти у нас в профилях на LinkedIn (см. раздел «Команда» на сайте textocat.com), ну а дальше Google Scholar в помощь:)


    1. nzhiltsov Автор
      05.05.2015 15:25
      +2

      TextoKit обязательно опубликуем и надеемся на помощь community в его развитии! Также планируем в будущих публикациях описать Apache UIMA и примеры того, как писать аннотаторы для этой технологии.


  1. PavelPV
    05.05.2015 14:51

    Будут ли распознаны все четыре даты в фразе: «Конференция пройдёт 7,8,9 и 11 мая» или, как у всех, ограничитесь 11 мая?


    1. nzhiltsov Автор
      05.05.2015 15:27
      +1

      Сейчас 100% гарантии не дадим:) но в принципе это возможно: зависит от контекста и корпуса, на котором обучается система.


  1. stavinsky
    05.05.2015 14:51
    +1

    Очень хочется увидеть реальный пример использования.


    1. Voenniy
      05.05.2015 15:16
      +5

      Бегать по соцсетям и следить за отношением пользователей к фирме «Рога и копыта», или к персонажу «Остап Бендер».
      Потом на основании данных строить красивые графики и показывать их специальным людям.


      1. nzhiltsov Автор
        05.05.2015 15:34
        +1

        И добавить нечего:) Примеры таких сервисов: YouScan, Крибрум, SemanticForce и т.д.


    1. nzhiltsov Автор
      05.05.2015 15:33
      +3

      Первый кейс, который легко объясним, — это поиск по документам. Абсолютно классический. Далее, возможность искать сущности в документах, а не просто ключевые слова. Применения этих возможностей можно найти хоть в Веб поиске, хоть в поиске по документам организации.

      Более нетривиальные примеры мы обязательно приведем в ближайшей публикации. В основном, будем ориентироваться на примеры из американского рынка. В качестве «затравочки» позвольте привести ссылку на замечательный пост наших друзей из Orb Intelligence, который несколько приоткрывает интересные бизнес возможности.


  1. vedenin1980
    05.05.2015 14:53

    Интересный сервис, но есть два ключевых вопроса:
    1) ограничения на кол-во. запросов в месяц в бесплатной версии?
    2) насколько долго планируется предоставлять бесплатный сервис? То есть «бесплатность» временная и в будущем планируется перейти на полностью платные планы или сервис будет доступен бесплатно долго?


    1. nzhiltsov Автор
      05.05.2015 16:20
      +2

      Спасибо за мнение!

      1) В отличие от модели Mashape (хотя мы есть и там) у нас ограничение по объему отправленных данных, а не по обращениям. Сейчас это 100 Мб/мес. (после чего счетчик пользователя обнуляется). Правда, стоит иметь в виду, что есть ограничение на параллельную загрузку. В бесплатном варианте — это только одно соединение. То есть при попытке с одним и тем же токеном авторизации заливать данные в несколько запросов одновременно, сервис вернет сообщение об ошибке.

      2) Мы планируем оставить бесплатный вариант навсегда (возможно, будут уточняться какие-то ограничения). Как люди из академии, мы видим в этом возможность для студентов и людей из исследовательской среды использовать наш сервис как baseline, тестировать свои подходы и двигать науку!

      Сейчас бета-тестирование проходит при поддержке компании Селектел (наш стартап — лауреат программы «Легкий старт»), за что мы им очень благодарны.


  1. akrot
    05.05.2015 14:54

    А какие задачи Вы решаете/решали с помощью Ваших инструментов? В чем value proposition?


    1. nzhiltsov Автор
      05.05.2015 15:49
      +2

      Если выделить самые интересные проекты, то это извлечение бизнес-событий (т.н. триггеров) и извлечение проблем для компании HP.

      В целом, Textocat решает проблему высоких затрат на разработку и сопровождение программного обеспечения для анализа неструктурированных текстовых данных. Мы видим ценность нашего сервиса в следующих аспектах:

      Нашим клиентам не надо:

      • искать высокооплачиваемых специалистов (data scientists) для реализации аналогичных функций — нашу технологию внедрит средний программист с з/п в 2-3 раза меньше
      • покупать дорогостоящее ПО и собственные серверы
      • платить за дорогие лицензии на аналогичное ПО и убеждаться потом, что их проект «не полетел».


      Таким образом,
      • Textocat снижает издержки на разработку ПО для анализа текстов
      • Textocat снижает издержки на инфраструктуру (оплата серверов)
      • Textocat предлагает гибкую тарификацию в зависимости от объема обработанных данных: прототипируйте, проверяйте свои идеи и пусть ваши затраты растут с ростом вашего бизнеса.


      1. akrot
        05.05.2015 15:52
        +1

        Спасибо, очень интересно!

        А можно подробнее узнать про «извлечение бизнес-событий (т.н. триггеров) и извлечение проблем для компании HP. »?


        1. Aldvin
          05.05.2015 16:34
          +2

          Приветствую! Особо много не расскажешь, так как NDA. В открытом доступе на сайте HP Labs можно найти два относительно старых тех. отчета: www.hpl.hp.com/techreports/2012/HPL-2012-211.pdf, www.hpl.hp.com/techreports/2013/HPL-2013-14.pdf. Но это, скорее, про полезный опыт — Textocat'а тогда не было даже в задумках :)


  1. becks
    05.05.2015 15:33
    +2

    Молодцы, сам занимаюсь похожими задачами (мы используем Томиту, раньше было RCO).
    Попробовал вашу демку, к сожалению, ошибок в распознавании очень много, правда у кого их нет.
    Всяческих вам успехов.


    1. nzhiltsov Автор
      05.05.2015 15:38
      +2

      Спасибо! Мы будем улучшать, и, конечно, видим как. В остальном, будем рады сотрудничать и в коммерческом аспекте, и в смысле развития open source стека.


  1. ServPonomarev
    05.05.2015 16:19
    +1

    В такой фразе: «Кроме того, там указывается, что 19 ноября „Газпром“ подал еще два иска» газпром как организация не узнался… В целом вполне впечатляюще, хотя есть вопросы к эвристикам.

    Например, «Нафтогаз Украины» определился как Геополитическое (Украина), а что написано в кавычках как название — проигнорировано. Нафтогаз ещё несколько раз встречается по тексту далее — из чего я делаю вывод, что документ парсится пофразно, а не в целом. Многая полезная статистика содержится именно при парсинге документа в целом — например, выделение несловарных именованных сущностей.


    1. Aldvin
      05.05.2015 16:50
      +3

      Спасибо за интерес. Мы постепенно улучшаем качество распознавания. Чем больше таких комментариев => тем быстрее :)


      1. alexeibs
        05.05.2015 17:47
        +2

        Даты распознаются не всегда. Вот, к примеру, два предложения:
        1) Это время настало весной текущего года.
        2) Так что мероприятие было решено перенести на весну 2015-го.

        В первом дата нашлась, а во втором — нет. Хотя во втором предложении информации больше в том смысле, что не требуется знание контекста — текущего года.


        1. Aldvin
          05.05.2015 19:06

          Спасибо, «до-обучим» =)


  1. bask
    05.05.2015 17:54
    +1

    «в среду» всегда будет распознаваться как временная единица? Как насчёт физических сред?


    1. Aldvin
      05.05.2015 18:23
      +2

      Да, на данный момент в интерпретации этого выражения возможен перекос в сторону временной единицы, так как текущая версия не ориентирована на предметные области текстов, где часто употребляются другие значения «среды».


  1. excoder
    06.05.2015 01:05
    +2

    Отличная работа! Интересно, какая скорость для именованных сущностей, в Мб/сек UTF-8 текста? Да, я понимаю, что она будет зависеть от плотности объектов в тексте :) Тогда для конкретики можно уточнить, что это «типичные новостные тексты», где плотность вряд ли будет выше 0.3.


    1. Aldvin
      06.05.2015 01:22
      +2

      Вы, наверное, имеет в виду ещё на каждое ядро? При такой постановке, скажем так, до мегабайта в секунду текущая версия ещё не дотягивает.
      Но уже работает горизонтальная и вертикальная масштабируемость, так что будет спрос — увеличим :)
      Было бы интересно узнать, какую пропускную способность вы считаете приемлемой в контексте какой-то своей задачи?


      1. excoder
        06.05.2015 20:01
        +1

        Мб в секунду на ядро – это отличный показатель! А сколько всего типов объектов? По пропускной способности – я скорее сравниваю с тем, что сам когда-то строил. Там получалось 4 Мб в секунду на ядро с 12 типами объектов и их плотностью 0.3 (насыщенный объектами новостной текст). Задача была из серии digital asset management и трекинг упоминаний в интернете, перелопачивать надо было много и недорого.


        1. excoder
          06.05.2015 20:05
          +1

          4 Мб в секунду – это на ноутбуке core i5. И это уже вполне дёшево.
          Нижняя граница была установлена в 1 Мб/сек.


  1. vanxant
    06.05.2015 06:24
    +1

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


    1. nzhiltsov Автор
      06.05.2015 12:42
      +2

      Спасибо за мнение. Наши соображения:

      • речь идет об индексации не всех документов компании (конечно, не стоит рисковать закрытой налоговой отчетностью или чем-то подобным)
      • компании уже много что хранят в облаке: возьмите примеры клиентов Box, DropBox, Google Docs
      • мы не храним исходные тексты, а, по сути, только поисковый индекс + дополнительные метаданные
      • при востребованности мы добавим возможности передачи данных по HTTPS, шифрованному хранению метаданных
      • наконец, если вашу компанию совсем не устраивает SaaS, мы предлагаем on-premise решение — копию сервиса, разворачиваемую на инфраструктуре клиента.


  1. Xom
    06.05.2015 13:04

    Что то пока не очень у вас с определением сущностей yadi.sk/i/Zo-9dlytgSA2F. И как будет работать кореференция (что «предприятие Сфера» и «компания Сфера» одно и то же никак не указано)?.. Анафора похоже тоже не реализована пока («эта фирма»)? А так — успехов. Применения, правда, не так много где можно найти. Поиск по ключевым работает при поиске фирм и людей — по их именам. Даты тоже не сложно найти… по дате


    1. Aldvin
      06.05.2015 14:51
      +3

      Спасибо за найденные ошибки. Мы знаем, что качество совсем не 100%. Мы его постепенно подтягиваем, в приоритете те профили документов (предметные области), которые наиболее востребованы.

      У нас реализован функционал Entity Linking'а — привязывания распознанных упоминаний людей/организаций к БД/справочникам клиента. Этого функционала нет на демо, он доступен в платной версии.

      А так — успехов.
      Благодарим!


      1. Xom
        06.05.2015 21:00
        -2

        Вам надо реализовывать тогда анафору. А это не так просто как именованные сущности определять. И надо переходить на более сложные предметные сущности, например, «все сообщения об отгрузке угля с шахт Донбаса за 2014 год». Причем поиск должен быть не только по словам Донбас шахта уголь и 2014, а и с анафорой, и корреференцией, синонимией и т.п., но при этом БЕЗ лишних (ошибочных) сообщений. И с обозначением дублей информации (в прошлом году и в 2014 — это одно и тоже). Вот тогда у вас будет полезный и интересный продукт, на который будут подписываться. Но пока это никому не подсилу. Так что вам еще раз успехов )


        1. nzhiltsov Автор
          06.05.2015 22:09
          +2

          Вот тогда у вас будет полезный и интересный продукт, на который будут подписываться. Но пока это никому не подсилу. Так что вам еще раз успехов )


          Жирик


          1. Xom
            07.05.2015 10:13
            -2

            Вы извиняетесь перед собой? У вас пока ничего не работает толком, что я и показал ранее. Именованные сущности и даты вылавливаются более простыми методами и бесплатно. Самокритичная шутка получилась.


            1. Xom
              07.05.2015 11:18
              -3

              минусовать на пару с другом у себя в блоге — это вообще по детски ))


              1. vedenin1980
                07.05.2015 11:38
                +1

                Минусы поставил я, хотя не имею никакого отношения к автору, так как вы именно придираетесь: авторы не говорили что их продукт идеален, вам лично ничего не обещали, не нравится — не пользуйтесь, те кто будут покупать сервис сами разберутся насколько он им полезен, знаете как сделать лучше — сделайте. Зачем нам читать столько неконструктивной критики от вас?


                1. Xom
                  07.05.2015 11:41
                  -1

                  Критика помогает сделать продукт лучше, а не витать в облаках. Где тут придирки? Только факты. Анафоры нет, корефференции толком нет. Как можно выявить факты про фирму, если анафора (ссылка на нее местоимением) не работает? Если продукт не идеален, зачем его выводить на суд божий? Да еще предлагать воспользоваться за деньги! Бред. Передавайте привет авторам блога.


                  1. vedenin1980
                    07.05.2015 12:00

                    Ещё раз, если посмотрите мое сообщение в этой теме, вы увидите что я не имею отношения к авторам.

                    Вам надо реализовывать тогда анафору… Но пока это никому не подсилу.

                    Вам не кажется странным там настойчиво требовать от молодого стартапа того что ещё никто, как вы сами признаете, не смог сделать?

                    Если продукт не идеален, зачем его выводить на суд божий?

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

                    Критика помогает сделать продукт лучше, а не витать в облаках.

                    Далеко не всякая, критика «вот если бы вы написали сильный ИИ я бы воспользовался вашим продуктов, а сейчас даже не показывайте никому» — скорее разработчикам мешает.


                    1. Xom
                      07.05.2015 12:05

                      «Но пока это никому не подсилу» — это я писал не про анафору, а про уголь. Анафора решается в простейшем случае, который a привел («эту фирму»). Критика никогда не мешает, тем более когда идет речь далеко не о задаче уровня ИИ. Есть такое понятие «достигнутый технический уровень». Если вы предлагаете продукт, он должен быть не ниже уже достигнутого уровня в бесплатных продуктах (например, «флексивность» — не проблема уже давно, стеминга, лемматизаторов бесплатных в сети куча). Получается, проект не достоен даже критики, если так рассуждать.


                      1. vedenin1980
                        07.05.2015 12:11

                        ниже уже достигнутого уровня в бесплатных продуктах

                        О, кстати, вы можете привести бесплатные продукты имеющие сходную функциональность при работе с русским языком (условно-бесплатный продукт Яндекса не будет считать)? Это не сарказм, мне действительно интересны все подобные аналоги, так как как раз требуется подобная функциональность.


                        1. nzhiltsov Автор
                          07.05.2015 12:29
                          +1

                          Есть хорошие академические проекты типа проекта наших коллег из ИСП РАН — Texterra. Участники нашего хакатона использовали Texterra API бесплатно. Но насколько они открыты в каждом отдельном случае лучше связаться и уточнить у авторов.

                          Вообще, рекомендую ресурс NLPub наших коллег из Екатеринбурга. Там много разной информации по теме.


                          1. Xom
                            07.05.2015 12:42
                            -1

                            NLPpub, конечно, знаем. Но там нет готовых подобных продуктов. Там только инструменты. Текстерра больше не поддерживается, к сожалению.

                            Судя по ссылке на хакатон, команде texocat вполне подсилу сделать коммерческий продукт. По моему просто поторопились с выходом. Или хотя бы написали — АЛЬФА-ВЕРСИЯ. ПРЕДЛАГАЕМ ПОТЕСТИРОВАТЬ И НАЙТИ ОШИБКИ. Другое бы отношение было бы. И самим на «придирки» не реагировать «жириком» тогда.

                            Тем кто знаком с работой по этой теме в Яндексе, понятно, что задача ОЧЕНЬ не простая… Поэтому заячвка должна быть серьезной.


                            1. nzhiltsov Автор
                              07.05.2015 13:10
                              +1

                              Александр, давайте договоримся: вы не будете учить делать бизнес нас, а мы вас. У нас для этого есть менторы. Хотя прокачаться по теме agile development & lean startup, наверно, вам бы стоило. Но у меня нет цели заниматься вашим образованием.

                              По поводу заявок оставьте это, пожалуйста, вашим коллегам по проекту, которые заявляют, что «МЫ НАУЧИЛИ КОМПЬЮТЕР ПОНИМАТЬ ВАС». Серьезно? Если я попрошу демо в подтверждение, вы справитесь? Или попросите пару лет на R&D?

                              И будьте повежливее, пожалуйста: ваше мнение — это ваше мнение, а не последняя инстанция. Давайте строить сообщество единомышленников, а не троллей, упражняющихся в «подколках». Если вы не готовы, то вам здесь не место.


                              1. Xom
                                07.05.2015 13:16
                                -1

                                Учить меня не надо, я сам могу поучить указанным темам (опыта раза побольше в бизнесе). И я предельно вежлив, в отличие от вас — ссылка на Жирика чья тут? Да, у моих коллег, кстати, есть работающий продукт по указанной теме. Но это не тема вашего блога.


                              1. Xom
                                07.05.2015 13:49
                                -1

                                «ваше мнение — это ваше мнение, а не последняя инстанция» — я где то утверждал, что это последняя инстанция? Вам надо научиться реагировать иначе на критику — улучшениями продукта, а не минусованием. «Если вы не готовы, то вам здесь не место» ))


                        1. Xom
                          07.05.2015 12:33
                          -1

                          Так она мне самому требуется, но лень собирать. А тут такая заявка! Но на проверку — не работает без ошибок. Вот поэтому и обидно. А так — томита. Но его надо настраивать под задачу.


                      1. vedenin1980
                        07.05.2015 12:30

                        Анафора решается в простейшем случае, который a привел («эту фирму»).

                        Кстати, даже в этом случае не все в русском языке просто и легко:
                        — Общество слепых и Газпром договорились о сотрудничестве. Эта организация (скорее тут речь об Общество слепых, так как организация и корпорация не полные синонимы)
                        — ООО «Мартешка-Плаза» и Газпром… Она (тут действует правило склонения по родам)

                        — ООО «Мартешка-Плаза» и Роснефть… Эта фирма (называть корпорацию Роснефть фирмой не очень корректно, значит анафора скорее относится к первому)


                        1. Xom
                          07.05.2015 12:35

                          Если бы хотя бы без этих сложных случаев кто сделал анафору… Хотя тут просто стилистическая ошибка — после сочинительного подлежащего (через и) анафора в единственном числе. Тут обе фирмы подходят.


          1. excoder
            07.05.2015 18:34
            +1

            Насчёт анафоры тут двояко. Допустим, что мы выделяем объекты точностью 90% и полнотой 60%. Теперь добавим распознавание анафоры с точностью 85%, то есть в 15% случаев это будет не та анафора. Заложившись на неё в выделении объектов, мы можем даже ухудшить точность при некотором рости полноты. Если заказчику авторов нужно точнее, нежели полнее (подозреваю), то не надо анафору.


            1. vedenin1980
              07.05.2015 19:18

              Плюс не забываем о производительности: выделение анафоры, синонимов и т.п. вещей во-первых сама по себе не очень быстрая операция, во-вторых, резко усложняет распараллеливание обработки текста, одно дело когда можно просто разделить на предложения и параллельно их обработать, другое когда нужно работать с текстом целиком. В некоторых случаях лучше меньше полноты, но быстрее.


    1. excoder
      06.05.2015 20:30
      +2

      Ну вы придрались :) Простой и хорошей стратегией будет просто контекстуализировать алгоритм уже прочитанным потоком. Тогда и компания эта подцепится. Думаю что авторы тут уже всё знают и скоро добавят логичные элементы.


      1. Xom
        06.05.2015 20:51
        -4

        Если авторы уже знают — надо бы сначала доделать, чтобы не портить впечатление. Если это продукт «за деньги», то таких ошибок вообще не должно быть.


    1. nzhiltsov Автор
      08.05.2015 11:40

      Добавили реализацию анафоры как идею на feedback.textocat.com. Голосуйте!


      1. Xom
        08.05.2015 14:16

        Проголосовал.
        yadi.sk/i/DxWNlgDsgWFec — Форда пропустил. Почему?


        1. nzhiltsov Автор
          08.05.2015 14:25

          Спасибо. Стохастика! Будем разбираться. В целом готовящаяся версия должна значительно лучше работать. Подключаем новые терминологические ресурсы и переобучим модель.


  1. akirsanov
    07.05.2015 14:47
    +2

    Хотелось бы отметить моменты:

    1. Слабая документация, отсутствие примеров на разных языках.
    2. Неумение распознавать адреса «ул. Гагарина => PERSON=Гагарина»
    3. Только глобальный поиск. Хотелось бы формировать некое подобие таска при queue, и указывать его в поиске, дабы разделять задачи.

    В остальном желаю вам развития, ниша выбрана очень правильная, главное не забрасывайте. Попробую применить ваш платный сервис для следующей задачи, как раз возникли требования извлекать из текста ORGANIZATION / PERSON, и тут вы так вовремя!


    1. nzhiltsov Автор
      08.05.2015 11:50

      На форуме добавлены идеи выделением адресов и поиском по отдельным коллекциям пользователя. Голосуйте!


  1. nzhiltsov Автор
    07.05.2015 15:09
    +1

    Спасибо, со всем согласны. Будем работать!


  1. excoder
    07.05.2015 18:35
    +2

    Забыл вопрос авторам. Вы не замеряли полноту-точность выделятеля объектов?


    1. Aldvin
      07.05.2015 23:55
      +2

      Конечно, замеряли. Приблизительно (F1-мера) 0.70 по организациям, 0.75 по людям и геополитическим (GPE) объектам. При кросс-валидации, как true positive засчитываются только полные совпадения (вся именная группа), рассматриваются как именованные, так и нарицательные упоминания.
      Естественно, все будет зависеть от предметной области, стиля. жанра и т.п. Я показал про новостные тексты с разной степенью замусоренности и отклонений внутри.


  1. Durham
    08.05.2015 15:48

    Ввел кусок отзыва: "… Купили с женой телефон. Недостатки: Задняя крышка после различных потрясений стала отпадать переодически. Слегка напрягает все это нас 5 ноября 2014 года.". Дата распознавалась хорошо, но с удивлением узнал, что «Задняя крышка» — это человек, а «нас» — организация.

    В общем, неплохо, но до качества того же Alchemi на английском, еще далеко.


    1. nzhiltsov Автор
      08.05.2015 18:49

      Это более-менее легко объяснимо: как было сказано, наилучшие результаты показываются на новостных текстах. Лексика и аграмматичность отзывов и постов в социальных сетях — это отдельная история. Будем улучшать технологию и для таких текстов, конечно, тоже.


    1. nzhiltsov Автор
      08.05.2015 18:50

      кстати, у вас интересный блог: подписался. Ну а первый текст даже какое-то ощущение де жа вю вызвал:)


    1. nzhiltsov Автор
      08.05.2015 18:53

      За Alchemy API, конечно, внимательно следим. Они наша ролевая модель. Хотя со временем предложим своим клиентам и другие продукты, о которых Alchemy, похоже, не задумывается:)