Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
Этот текст имеет ряд нестандартно закодированных символов, но мы сделаем его еще хуже, заменив символ “." на "¸".
Для выделения символов, которые делят текст на предложения, мы разработали специальную формулу — для каждого символа вычисляется вероятность того, что именно он является разделителем.
В этой диаграмме отображены символы, которые имеют наибольшую вероятность того, что именно они используются для разделения предложений.
Конечно, наличия таких вероятностей не дает сам результат. Вам все еще необходимо понять, где предел, который делит эти символы на «разделители» и «остальные символы» предложений
Поскольку в версии Alpha 2 НЕ БУДЕТ реализована возможность семантического анализа, то это означает, что мы не сможет извлечь леммы, как эта:
am, are, is => be
Давайте тогда заменим ещё и все пробелы на слово «грязь» и проверим, как работают NLP библиотеки. Зачем создавать дополнительные неестественные трудности, а затем пытаться решить их?
Так что же это за формула, и почему она не является языковой моделью, от которых вы так стремитесь уйти?
Мне кажется, или во всех примерах «наиболее вероятные» разделители предложений на самом деле такими не являются?
Чем это проще обычного составления списка символов-разделителей?
Как это решает проблему контекста, когда символ может являться или не являться разделителем предложений (например, точка в аббревиатурах — С.С.С.Р.)?
Тогда это стемминг, а не лемматизация. Как этот стемминг будет реализован без статистической модели и без языкозависимых правил — тоже непонятно.
Как было сказано в статье, книга изначально была непригодной для обработки стандартными библиотеками. Там были использованы кавычки и еще несколько символов в нестандартной кодировке. Т.е. без дополнительных искажений использовать данную (и очень много других) книгу после OCR с указанными NLP библиотеки НЕЛЬЗЯ. Просто без изменений результат получается не таким очевидным и требует дополнительных пояснений. Так что введение доп. искаженного символа вызвано лишь ленью)
Вы правы в том, что любую формулу/эвристики можно назвать моделью. На самом деле невозможно обойтись без модели. Концептуальная разница между языково-независимым подходом и языково-зависимым в том, что первый строит модель текста непосредственно из самого входного текста. В то время как второй подход ожидает на вход текст + модель.
Как я уже сказал в Alpha1 мы еще не умеем делить символы на группы, т.е. мы выделяем подмножество «технических символов». Однако в unstable брачные уже есть код, который, имея эти данные, может разбить символы на группы и сказать, что символы "?!." делят текст на предложения, а остальные делят само предложение внутри. И, повторюсь, это мы делаем не зная какой язык во входном тексте.
Если OCR даёт неверную кодировку, то можно просто задать подходящий конвертер в юникод и дальше работать с нормализованным текстом. Складывается впечатление, что вы воюете с ветряными мельницами: вместо того, чтобы заниматься автоматическим переводом, семантическим поиском, автореферрированием и т.д. вы пытаетесь решить задачу, которая и без того уже неплохо решена на практике.
Модель — это любая система, которая каким-то образом отражает реальную исследуемую систему. Математическая модель — это, грубо говоря, некоторая параметрическая функция, формула. Эта формула может быть простой и топорной, как линейная регрессия, а может быть и невероятно гибкой и сложной, как полный байесовский классификатор. Но она всегда есть, вы в том числе сами про неё упоминаете. Если вы собираетесь с этим где-то защищаться, то ни в коем случае не говорите, что у вас нет модели. Вместо этого опишите свою формулу, её параметры и алгоритмы функционирования (обучения, применения, оценки, etc.).
Вы всё равно рассчитываете на какой-то класс языков, а не на все возможные. В некоторых языках нет разделителя между словами (хороший пример — немецкий с его слитными прилагательными), в других — практически всё зависит от контекста (китайский, например), в третьих вообще нет письменности. И главное, чем более общими будут ваши модели, тем медленнее и менее точно они будут работать. Как уже сказали ниже, there's no free lunch.
По поводу С.С.С.Р., то пока эта часть не решена, и она не может быть решена до тех пор, пока мы не доделаем семантический анализатор, который умеет понимать сущности такого порядка.
Не могли бы вы пояснить графики для примеров 1 и 2, почему там по оси-Y одни нули?
И ещё все примеры англоязычные, есть какой-нибудь минимальный пример разбиения текста на русском? Например, разбить саму приведенную статью на предложения.
Если коротко, то имея огромную кучу текстов, можно прикинуть с какой вероятностью каждое слово употребляется с другим словом. Это очень грубое объяснение, но оно, как мне кажется, точно отражает суть. В результате получается строить более-менее приличные переводы (привет Google Translate). Этот подход не приближает нас к пониманию текста, а лишь пытается найти похожие предложения и на их базе построить перевод.
Языковые модели не могут провести семантический анализ текста. Они избегают понимания текста на этапе синтаксического анализа. Модель языка может помочь разбить текст на предложения, провести извлечение сущностей (NER), feeling extraction. Тем не менее модель не может определить смысл текста, к примеру, не сможет составить приемлемое резюме текста.
Для выделения символов, которые делят текст на предложения, мы разработали специальную формулу — для каждого символа вычисляется вероятность того, что именно он является разделителем.
привязанность к кодировке
А это значит, что для понимания сообщения на каком-либо языке нам не нужно ничего, кроме самого сообщения. При условии, что это сообщение достаточно большое. Именно эта идея и положена в основу библиотеки под названием AIF. За деталями прошу пожаловать под кат.
Определение языковой модели было правильное: это P(words) и ничего более — даешь на вход набор токенов, получаешь его вероятность в данном языке. А вот дальше какая-то каша начинается. Перевод с помощью одних только языковых моделей не сделаешь (языковые модели там используются, чтобы выбирать более-менее человеческие предложения); не встречал, чтобы для задач NER или анализа тональности как-то языковые модели применялись, да и для токенизации тоже. Неправильно все статистические методы «языковой моделью» называть.
Вы, по сути, решаете другую задачу — не задачу разбиения текста на предложения, а задачу нахождения символов, которые могут использоваться для разбиения текста на предложения в данном наборе текстов. Т.е. вы можете найти, что "¸" выполняет функцию точки, но не можете определить, является ли этот символ концом предложения в данном конкретном случае — например, «Бондаренко Н. В.» — первая точка — не разделитель, вторая — возможно, разделитель. Так? Все делилки текста на предложения решают именно эту задачу, а не вашу. Это не значит, что они плохие. Это также не значит, что то, что вы делаете — бессмысленно (иногда задача определения набора разделителей и правда может стоять). Но это другая задача. «Традиционная» задача сегментации выглядит сложнее и полезнее.
Есть методы языко-независимого построения делилок текста на предложения — см., например, Punkt; реализация в NLTK, например, доступна. Идея Punkt в том, чтоб по набору «сырых» текстов определить аббривеатуры / сокращения, характерные для языка, т.к. для большинства практических задач именно это является главной сложностью, а не то, что набор возможных разделителей неизвестен. Правда, не сказал бы, что работает очень уж хорошо.
Так не бывает. Если не задавать никаких ограничений на набор допустимых решений, то получится мусор. См. No Free Lunch. Кроме самого сообщения нужно еще какое-то множество предположений о структуре этого сообщения, набор каких-то ограничений. Всегдя лучше, когда эти ограничения прописаны явно.
Дальше субъективно, обратная связь, как AIF2 выглядит со стороны. Сразу скажу — я не знаю, соответствует ли впечатление тому, что на самом деле. Но все же. Звучит «понимание» больно уж рекламно, причем рекламность рассчитана на людей, не имеющих знаний в области NLP. Библиотека, как я понял, пока умеет только находить возможные разделители слов и предложений для данного набора текстов по какому-то неописанному алгоритму (совет — в документации и вики описывать алгоритмы, а не детали установки java-пакетов). Что в некоторых синтетических специально подобранных примерах позволяет разбить текст на предложения лучше, чем это делают существующие делилки текста на предложения. Авторы используют термин «языковая модель» странным образом и не ссылаются на существующие unsupervised алгоритмы разбиения текста на предложения (обычно это знак того, что о них и не знают). Куча громких слов про семантику и понимание текста, про то, как все сейчас плохо, но никаких результатов, одни намерения. Ну и вербовка под все это дело новичков в NLP (которые под сомнение подходы ставить не будут?). Еще раз повторюсь — я без понятия, так ли все это на самом деле; код я не читал, в деталях не разбирался, но просто так это выглядит.
Новая языково-независимая NLP библиотека