Обработка естественного языка: краткий ликбез для разработчиков

27 комментариев
Обработка естественного языка: краткий ликбез для разработчиков

Java-разработчик Павел Вейник предлагает краткий ликбез по одной из категорий искусственного интеллекта (ИИ) — обработке естественного языка — с примерами того, как её можно превратить в бизнес.

Читать далее

Иллюстрация: futurism.com.

За последние две недели я получил в разных видах пять предложений поучаствовать в проектах, связанных с прикладной лингвистикой, которой занимаюсь уже довольно давно.

Понятно, что такой ажиотаж связан с сегодняшним бумом искусственного интеллекта (ИИ) — он происходит и в Калифорнии, и у нас, и по всему миру. Раскручивается очередной маховик: многие ИТ-компании ещёне вполне понимают, что будут делать, но уже вполне уверенно заявляют, что занимаются искусственным интеллектом.

Так что такое ИИ и причём тут обработка текста?

Тут уместно повторить мою любимую ремарку насчёт ИИ, которую я уже озвучивал: никто не понимает, что это на самом деле. Под этой вывеской подаётся любой чуть-чуть более умный алгоритм: всё, что сложнее обычной сортировки, — однозначно ИИ. Если же компания собирается создать или создаёт какие-то алгоритмы, которые ещё не изобретены, то это уж на 100% ИИ.

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

В последние десятилетия исследования в области обработки текста широко шагают по планете. Как правило, это одни и те же эксперименты, которые повторяются разными университетами по всему миру — американскими, европейскими, бразильскими, австралийскими. Сделано немало вещей с тем или иным уровнем качества — и они уже становятся общедоступными. Написано немало открытого кода на всех языках программирования, больше всего, по-моему, на Java.

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

Предлагаю небольшой обзор существующих инструментов и способов ими пользоваться.

«Бессердечная» классификация: методы обработки текста

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

1. Статистические методы обработки текста

Эти методы основаны на подсчёте количества слов в текстах. Как правило, они достаточно просты и не требуют глубоких теоретических знаний в лингвистике, иногда — требуют глубоких математических знаний. Истоки этих методов лежат в математике, в вычислительной геометрии: текст представляется вектором, длина вектора — количество слов. Поскольку вся эта математика спрятана внутри алгоритмов, а алгоритмы — внутри библиотек, то тем, кто использует эти библиотеки, нет нужды разбираться в математике.

Примеры статистических методов

Классификация текста (самое простое применение). К какой теме относится этот текст? Как он окрашен с точки зрения эмоций — позитивно, негативно, нейтрально?

Для этого есть десятки алгоритмов на самых разных языках программирования. Точность зависит от количества тем, которые нужно классифицировать. Чем больше тем, тем меньше точность: сложнее обучить алгоритм.

Определение языка текста. Определяя язык текста, можно оперировать не словами, а наборами символов, — сравнивать частоту каждого набора символов. Точность метода может достигать 99,9%. Это огромная, прямо-таки катастрофически гигантская точность для обработки текста.

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

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

Задачи, которые могут решаться с помощью статистических методов

Плагиат. Эти алгоритмы использует «Яндекс», чтобы определить, уникален текст или нет. Они широко используются в SЕО. Любознательный читатель может погуглить «метод шинглов».

Выявление тенденций. Если в новостях выявляется большое количество текстов по такой-то теме, то в эту сторону идёт какая-то тенденция.

Резюме. В целом статистические методы:

  • весьма громоздкие;
  • опираются на очень большой опыт и разработки математиков;
  • не учитывают особенности самих текстов (редко учитывают);
  • дают неплохие результаты;
  • могут дать не просто ответ, а ещё и некое число, которое является мерой уверенности алгоритма в этом ответе (скажем, 75%). Если оперировать этой уверенностью и самими результатами, можно достиг очень хороших результатов в практических задачах.

2. Точные методы обработки текста

Если речь идёт об извлечении информации из текста, «понимании текста», это точные методы. Их точность при этом весьма условна: в какой-то степени они точные, в какой-то — нет. Точные алгоритмы могут «сказать», упоминается ли в тексте какое-то имя, действие или нет.

Особенность статистических методов в том, что мы почти никогда не можем понять причину, по которой алгоритм сделал тот или иной вывод. Человеку придётся просто поверить алгоритму на слово. С точным методом мы можем понять причину гораздо чаще: есть конкретное правило, которое работает в конкретном случае и позволяет сделать такой вывод. Или алгоритм всё показал правильно, или он всё показал неправильно.

Есть приёмы, которые возводят статистический метод почти на уровень точного метода.

Примеры точных методов

Разбиение текста на предложения. Самый простой пример (его можно также считать переходным звеном от статистических методов к точным). Существует алгоритм, который использует лингвистические правила и обучающие множества, чтоб разделить текст на предложения. Для скептиков хочу сказать: задача далеко не так проста, как кажется, решить её со 100-процентной точностью не удалось пока никому.

Извлечение объектов из текста. Мы можем искать некий именованный объект — название компании, человека, места и пр. Если мы ищем одну из 5 допустимых аббревиатур или названий, то всё просто. Если речь идёт о поиске именованных объектов, которых нет в словаре (или в словаре есть десятки тысяч похожих названий), задача становится намного более сложной.

Есть несколько очень хороших алгоритмов такого рода на разных языках.

Синтаксический анализ текста и на его основе некоторое «понимание» предложения. Это самый громоздкий (в разработке и в рантайме) и самый сложный способ точного анализа.

Из школы, наверное, многие помнят, что такое синтаксический анализ, когда от каждого слова идёт стрелочка к зависимому слову, и всё предложение можно представить в виде дерева.

Синтаксический анализ — крайне тяжёлая операция с точки зрения использования разработчиками: чаще всего требуется глубокое понимание самого алгоритма и способов его реализации, а также знание самого языка, на котором написан текст.

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

2 типа синтаксических анализаторов:

  1. Сделаны на основе самообучения. Такие алгоритмы пытаются анализировать все предложение целиком. Для них характерно довольно плохое качество анализа.  
     
  2. Составляются вручную. Они могут не проанализировать какие-то куски предложения, зато то, что они проанализировали, с большой долей вероятности является правильным. Обычно анализаторы русского языка выстроены именно таким образом.

Каким образом можно использовать синтаксический анализ? Сначала мы выделяем предложение, затем ищем в нём какие-то именованные объекты, потом через это предложение «прогоняем» алгоритмы синтаксического анализа — и получаем путь от одного объекта к другому объекту в виде части синтаксического дерева (дерева разбора). Путь может быть как очень сложным, так и простым.

Если он очень простой, то из него можно извлечь какой-то смысл. Например: первый объект — человек  с таким-то именем (Иванов), второй объект — компания с таким-то названием (Wargaming), связка-путь — «был уволен». В тексте идёт речь о том, что Иванова уволили из Wargaming. Если при этом в базе данных есть информация про эти два объекта, то можно получить какие-то дополнительные данные.

Фото: Marcus dePaula via Unsplash.com

Какие методы разработчики используют чаще?

Чаще всего используются статистические алгоритмы, потому что разработчикам с их «техническим складом ума» и математически-алгоритмическим прошлым проще освоить именно их, а не влезать в особенности языка и структуры и правил. Поэтому наиболее распространенными являются именно статистические методы.

Почему 100-процентное качество — это недостижимый идеал?

В моём понимании текст — это гигантская куча исключений. Что это значит? Каждое правило — это какое-то исключение из более общего правила. Для каждого правила есть сотни исключений, а для каждого исключения тоже есть сотни исключений. Вывод из этого: у вас никогда не будет качества обработки текста, равного 100%. Никогда. Нужно с этим жить.

Причём если 20-30-40% качества можно получить за условных три дня работы над своим алгоритмом, то каждый следующий процент качества даётся дороже. Последние проценты — 96-99.99% — даются очень дорого. Кучка исключений, с которыми вы работаете, становится всё больше, у вас может просто не хватить объёма выборки, времени, других ресурсов. Всё равно найдется что-то, что подпортит вам 100-процентное качество, и вы никогда не предскажете это заранее.

Язык синонимичен и многозначен. К примеру, вам будет очень сложно отличить, это один и тот же Иванов упоминается в трех статьях или трое разных. Вторая сторона многозначности: в одной статье будет указан «Иванов И.И.», в другой «господин Иванов», в третьей просто «И.И.». Таких вариаций очень много. Чтобы разрешить эти неоднозначности или синонимичности, нужно прилагать усилия.

Основные принципы работы алгоритма с текстом

Я намаялся в своё время с синтаксическими анализаторами и математикой. В итоге у меня выработался подход, который я применяю при обработке текстов и в других сложных задачах. Его основные принципы таковы.

Принцип N1: простота

Это принцип простоты: облегчаем, удешевляем, ускоряем.

Главное правило: если простой алгоритм работает, то он лучше того алгоритма, который даёт несколько лишних процентов качества, но сложнее на 20 порядков.

Усилия на разработку сложного алгоритма могут оказаться дороже, чем сама выгода. Сложные алгоритмы необходимы только там, где нет более простых способов.

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

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

Принцип N2: прозрачность

Любое решение, принятое алгоритмом, должно быть понятно, объяснимо, аргументировано.

Если вы не понимаете, почему алгоритм принял то или иное решение в данном случае, лучше найдите алгоритм, который сможет вам это объяснить. Иначе вы будете вынуждены балансировать между разными наборами ошибок, потому что текст - это набор исключений.

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

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

Как достичь простоты и прозрачности: «примочки» и как можно более мелкие компоненты  

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

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

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

2. «Костыли». Если какой-то класс ошибок нельзя устранить с помощью простого алгоритма, всегда можно написать примочку, которая будет исправлять выводы алгоритма. Программисты меня сейчас осудят за использование костыля, но это намного лучше, чем усложнять сам алгоритм в несколько раз.

Основные препятствия: учёные vs бизнесмены

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

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

Это отдельное препятствие на пути использования обработки текста — но, разумеется, не главное. А главное препятствие в том, что обработка текста довольно часто требует больших вложений.

Как делать деньги на обработке текста: бренды, тренды, боты

Из того, что делал лично я

На одном хакатоне года четыре назад я делал алгоритм, который определяет эмоциональную окраску текста (является ли он положительным, нейтральным, отрицательным). Это очень просто.

В стартап-акселераторе в Дубае я участвовал в разработке приложения, которое анализировало отзывы о брендах и самостоятельно реагировало на отрицательные. Конечно, с участием человека, но все было глубоко автоматизировано: несколько человек могли отслеживать отзывы по огромному числу брендов. Бизнес-ценность задачи очевидна, но из-за некоторых организационных моментов мы тогда недоделали это приложение.

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

И еще несколько вещей, о которых я не могу упоминать.

Из общемировой практики

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

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

Здесь мы плавно подходим к теме больших данных (big data). Понятно, что текстов может быть очень-очень много, тогда это действительно становится big data. Вполне можно сказать, что тот самый учёный с биржи использовал именно такой подход. Где граница между обработкой текста и big data, я не знаю.

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

Синтез текста

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

Поглощения ИИ-стартапов как способ быть в тренде

Покупка корпорацией Microsoft мессенджера Wand Labs, где работает 7 человек, не говорит о том, что ребята придумали нечто грандиозное в области обработки естественного языка.

Да, стартап крутой, он сумел себя продать. Но что там ребята сделали, делают или обещают сделать — неизвестно.

Корпорации вкладываются в горячие тренды, надеясь, что где-то вылупится единорог и даст новое дыхание большой структуре. Это способ для «старой» забронзовевшей компании с её бюрократическими стандартами сделать глоток молодого задора. Тут же как в «Зазеркалье»: чтобы оставаться на месте, нужно бежать, а чтобы продвинуться вперёд, нужно бежать в два раза быстрей.

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

Есть ещё и такое явление: стартаперы, которые обладают связями в мире инвесторов, делают очень крутые сайты и прекрасно презентуют себя с точки зрения глубокой обработки текста, но на деле не могут показать ничего. Инвесторы в них иногда вкладываются.

Однако есть и суперпозитивные примеры. Уже лет 15 компания ABBYY разрабатывает супер-пупер систему обработки текста, мне регулярно попадаются крутейшие статьи про неё. Она на порядок превосходит всё, что я знаю. Когда они выстрелят и чем — мне неизвестно. Хочется верить, что это будет нечто интересное.

Отдельно хочется упомянуть команду Invention Machine, которая занимается именно синтаксическим анализом и была куплена американской корпорацией IHS. Они связали свои алгоритмы с ТРИЗ и получают очень интересные результаты.

Ссылки

Ссылок по этой теме можно привести превеликое множество. Библиотек много, теоретических работ ещё больше, поэтому приведу лишь моих сегодняшних фаворитов, не претендуя на полноту или объективность. Список маленький и очень ёмкий.

  • http://cogcomp.cs.illinois.edu/page/software/ — прекрасный и простой набор инструментов от Иллинойсского университета. Потыкайте, посмотрите демо.
     
  • http://nlp.stanford.edu/software/ ​— мой предыдущий лидер, тоже набор инструментов от ещё более именитого университета — Стенфордского. Классные вещи они там делают!
     
  • https://gate.ac.uk/ — и классика: GATE (General Architecture for Text Engineering). Старый громоздкий обросший кучей фичей фреймворк, требует времени чтобы разобраться.
     
  • https://github.com/veinikp/senta ​— и для любопытных, которые хотят скачать и запустить что-нибудь без больших проблем. Это эмоциональный анализ твитов — проектик, который мы набросали со студентами на хакатоне в январе 2013 года. Разумеется, на Java. Ценен тем, что тут есть хорошая обученная моделька для классификации с помощью Stanford Classifer. И не только моделька, но и параметры для её генерации, и пример запуска. Данные я подготовил очень просто: выбрал из Twitter пару десятков миллионов твитов со смайликами :) и (: и назначил первых положительными, вторых — отрицательными. Потом убрал смайлики и прогнал обучение. Работает хорошо, фразу «Надо было маму слушать» распознает как отрицательную, обсценную лексику тоже понимает. Поддержкой проекта я не занимался, просто залил на github специально для этой статьи. Если кто-то захочет поддерживать его — забирайте и наслаждайтесь.

Задавайте вопросы в комментариях. Если какие-то темы вызовут большой интерес, можно провести митапчик, на котором я подробнее опишу решение интересующих задач.

 

Публикация подготовлена при участии Натальи Провалинской

Хотите сообщить важную новость?

Пишите в наш Телеграм

Горячие события

GoWayFest 4.0 Online Edition Conference
11 июля — 12 июля

GoWayFest 4.0 Online Edition Conference

Минск

Читайте также

ABBYY впервые опубликовала на GitHub библиотеку разработок машинного обучения
ABBYY впервые опубликовала на GitHub библиотеку разработок машинного обучения

ABBYY впервые опубликовала на GitHub библиотеку разработок машинного обучения

Лаборатория Илона Маска начала продажи системы, которую считала опасной
Лаборатория Илона Маска начала продажи системы, которую считала опасной

Лаборатория Илона Маска начала продажи системы, которую считала опасной

2 комментария
Военно-воздушные силы США проведут сражение между человеком и AI
Военно-воздушные силы США проведут сражение между человеком и AI

Военно-воздушные силы США проведут сражение между человеком и AI

2 комментария
Исследование: искусственному интеллекту тоже нужен отдых
Исследование: искусственному интеллекту тоже нужен отдых

Исследование: искусственному интеллекту тоже нужен отдых

5 комментариев

Обсуждение

1

То есть вся эта шумиха вокруг ИИ - это просто шанс стартаперам урвать кусок денег от уставших уже от мобильных приложений инвесторов? Реального прорыва ждать не стоит. Такой вывод?

Pavel Veinik
Pavel Veinik CTO в SplitMetrics
2

реального прорыва ждать не стоит, спокойного и напряженного развития ждать стоит. Ну и всегда могут появится неизвестные товарищи, которые вдруг выскочат и устроят прорыв.

2

Спасибо, было интересно почитать :)

0

```
2 типа синтаксических анализаторов:

Сделаны на основе самообучения. Такие алгоритмы пытаются анализировать все предложение целиком. Для них характерно довольно плохое качество анализа.
```
честно?
https://research.googleblog.com/2016/05/announcing-syntaxnet-worlds-most.html
http://arxiv.org/pdf/1603.04351v2.pdf

Pavel Veinik
Pavel Veinik CTO в SplitMetrics
-1

Даже не знаю что ответить. Что вы пытаетесь сказать?

Pavel Veinik
Pavel Veinik CTO в SplitMetrics
0

С чем именно вы несогласны? Что у них хорошее качество, или что не все предложение целиком анализируют?
Может я и не прав, но, пожалуйста, как-то более аргументированно старайтесь высказываться.

0

С тем, что у них хорошее качество, я то как раз согласен. Я не согласен с Вашим утверждением, что у ML-алгоритмов парсинга качество плохое.---Вы ведь это утверждаете в приведённой цитате ("Для них характерно довольно плохое качество анализа.")?

По трудоёмкости парсинга тоже всё весьма спорно, у хорошего PDA трудоёмкость будет между линейной и квадратной. В MST подходе---O(m log(n)). По разработке, я более чем уверен, что Вы больше времени потратите на написание загрузки ресурсов, чем на имплементацию самого алгоритма.

"Они могут не проанализировать какие-то куски предложения." - с такой проблемой могут столкнуться и ML- и rule-based парсеры. И там, и там давно используются fallback правила. Что здесь значит "не проанализировать"?

"Особенность статистических методов в том, что мы почти никогда не можем понять причину, по которой алгоритм сделал тот или иной вывод. Человеку придётся просто поверить алгоритму на слово." -- есть такие вещи как Lime (https://github.com/marcotcr/lime) и deepvis (https://github.com/yosinski/deep-visualization-toolbox) для помощи в интерпретации результатов классификации. При большом желании можете нейросеть в правила сконвертировать: http://papers.nips.cc/paper/546-interpretation-of-artificial-neural-networks-mapping-knowledge-based-neural-networks-into-rules.pdf

По нейросетям всё тоже довольно субъективно написано---Какие конкретно алгоритмы и для каких конкретно задач Вы имеете в виду, утверждая, что "всегда есть более специализированные алгоритмы, которые решают задачу намного лучше, чем сети"?

Pavel Veinik
Pavel Veinik CTO в SplitMetrics
0

спасибо

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

0

То что ликбез нужно проводить грамотно.

Pavel Veinik
Pavel Veinik CTO в SplitMetrics
1

Спасибо за совет. Может, проведете свой ликбез? Я с удовольствием научусь чему-то новому.

Максим  Гулевич
Максим Гулевич Дизайнер в EPAM
3

Сегодня еще раз убедился в том, насколько я тупой.

Pavel Veinik
Pavel Veinik CTO в SplitMetrics
1

у вас горизонт неизвестного большой :)

Максим  Гулевич
Максим Гулевич Дизайнер в EPAM
4

он у меня завален, Павел

2

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

Pavel Veinik
Pavel Veinik CTO в SplitMetrics
0

Ну извините, так редакторы поставили. И мне грустно, что вы в статье заметили только это.

4

Первый день в интернетах что ли? Я её вообще не читал :)
Решил посмотреть что там за обработка текстов, на Java! А там оказывается кривой сервлет, который дергает метод стэнфордской либы. Прорыв, не иначе.

0

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

Сеошники наверное помнят цепи Маркова - для каждого слова замеряем все возможные слова которые могут следовать сразу за ним, и вероятности этого. Обучается модель элементарно - пробегаем по текстам и вычисляем вероятности (слово1, слово2), потом берём random и можно генерировать сколько угодно уникальных бессмысленных текстов.

Чтобы сделать эту штуку разумной, надо искать паттерны, паттерны из паттернов и т.д. Само собой, тоже измеряя их вероятности.

Pavel Veinik
Pavel Veinik CTO в SplitMetrics
0

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

-1

Это же не проблема модели. Если у вас есть данные только о перемещениях по городу, то абсолютно любая модель покажет примерно то же самое.
Добавьте информацию о целях - и вероятностная отлично сработает. Задать список мест которые нужно посетить - и модель легко опишет множество неплохих маршрутов, учитывающих эти цели.

Pavel Veinik
Pavel Veinik CTO в SplitMetrics
0

Это как раз проблема модели. Она наблюдает и предполагает. А вот если смоделировать ваши цели, дела и влияющие факторы в виде правил или чего угодно - то это поднимет модель почти к 100% качества. Одно дело наблюдать и видеть, что каждое утро я в 80% случаях работаю за компом, другое дело понимать - у меня цель заработать 100000 деноминированных рублей, к примеру. И пока их нет - я работаю за компом в будние дни весь день.

Это совершенно разные уровни моделирования - моделирование причин, а не наблюдений.

0

Я склоняюсь к тому, что кроме прямых и обратных вероятностей не нужно вообще ничего. Добавляем в модель сущности и считаем вероятности, всё.

Вы сидите за компом - ок, пусть у нес есть история посещаемых сайтов.
Теперь мы задаём вопрос, обычным текстом: "пытается заработать денег?", и вероятностная модель даст ответ скажем 60% "да", если вы действительно работали.
Фишка в том что для этого не надо ничего специально программировать. Тот же самый код воспроизведёт например фильтры Prisma, если вместо текста подавать/выводить картинки. Тот же самый байес/марков только для картинок.

Когда я об этом думаю, математически всё описывается неплохо.

0

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

Pavel Veinik
Pavel Veinik CTO в SplitMetrics
0

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

0

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

Алексей Черкес
Алексей Черкес Ведущий инженер-программист в Sakrament-IT
1

Павел, здравствуйте!
Спасибо за познавательную статью, думаю она будет интересна многим читателям dev.by.
С моей точки зрения было бы также полезно, если бы вы привели ссылки на метериалы для входения в тему.
Чтобы вы порекомендовали новичкам для знакомства с темой NLP?
Я знаю на coursera был хороший курс Стэндфорда, может еще что-нибудь?

Pavel Veinik
Pavel Veinik CTO в SplitMetrics
0

спасибо, Алексей :)
Я попробую подобрать ссылочки хорошие, но рекомендовал бы начинать с той задачи, которая перед вами стоит или с того, что хочется попробовать в первую очередь.

0

Как думаете, не отберут ли боты хлеб у переводчиков и копирайтеров в ближайшие лет 10?

Спасибо! 

Получать рассылки dev.by про белорусское ИТ

Что-то пошло не так. Попробуйте позже