Привет, Хабр! Сегодня будет продолжение темы Кластеризация и классификация больших Текстовых данных с помощью машинного обучения на Java. Данная статья является продолжением первой статьи.  Статья будет содержать Теорию, и реализацию алгоритмов который я применял.  Метод токенизация ‒ процесс сегментации текста на слова или предложения. Электронный текст представляет собой линейную последовательность символов (символов, слов или фраз). Естественно, прежде чем приступить к реальной обработке текста, текст должен быть разделен на лингвистические единицы, такие как слова, знаки препинания, числа, цифры и т. д. Этот процесс называется токенизация. В английском языке слова часто отделены друг от друга пробелами (пробелами), но не все пробелы равны. Токенизация ‒ это своего рода предварительная обработка; идентификация базовых единиц, подлежащих обработке. Без этих четко разделенных базовых единиц, невозможно провести какой-либо анализ или генерацию. Идентификация единиц, которые не нуждаются в дальнейшей декомпозиции для последующей обработки, является чрезвычайно важной. Ошибки, сделанные на этом этапе, вызовут больше ошибок на более поздних этапах обработки текста. Поиск значимых токенов зависит от способности распознавать шаблоны, отображающие значительную коллокацию. Сегментация на значимые токены опирается на своего рода распознавание шаблонов. Токенизация слов может показаться простой в языках, где слова разделяются специальным символом «пробела». Однако не каждый язык разделяют слова пробелами (например, китайский, японский, тайский), и при ближайшем рассмотрении станет ясно, что одного пробела недостаточно даже для английского языка. Однако ошибки, сделанные на этом этапе, распространятся на более поздние фазы и вызовут проблемы. Для решения этой проблемы в дополнение к стандартным токенизаторам был разработан ряд передовых методов, направленных на решение конкретных задач в области токенизация. Проблемой для токенизация является текст, извлеченный автоматически из PDF-файлов, базы данных или других источников, которые могут содержать неточно составленные токены, орфографические ошибки и неожиданные символы. Для избежанья таких ошибок можно использовать морфологический анализ текста, который может определить неправильные слова. Но использовать данные метод зависит от источника данных.  Первым шагом в большинстве приложений обработки текста является сегментация текста на слова. Во всех современных языках, использующих латинскую, кириллическую или греческую письменность, таких как английский и другие европейские языки, где токены слов разделены пробелом. Таким образом, для таких языков, которые называются сегментированными языками, идентификация границ токенов является несколько тривиальной задачей, поскольку большинство токенов связаны явными разделителями, такими как пробелы и пунктуация. Для таких случаев можно использовать алгоритм, который будет просто разделят токены основываясь на пробелах между объектами в документе. Так как более сложная обработка требует больше времени. Большинство существующих токенизаторов сигнализируют о границах токенов пробелами. Таким образом, если такой токенизатор находит два токена непосредственно рядом друг с другом, когда за словом следует запятая, он вставляет пробел между ними. В данной работе используется именно данный метод токенизации, так как обрабатываются данные на английском языке.  В английском и других индоевропейских языках точка непосредственно прикреплена к предыдущему слову, обычно это отдельный знак, который сигнализирует о конце предложения. Однако, если точка следует за аббревиатурой, он является неотъемлемой частью этой аббревиатуры и должен быть обозначен вместе с ней. К сожалению, общепризнанных стандартов для многих аббревиатур и сокращений не существует. Наиболее широко распространенным подходом к обработке аббревиатур является ведение списка известных аббревиатур. Таким образом, в ходе лексического анализа слова, которые заканчивается точкой, то его можно сравнить с подобным списком, если токен находится там, он размечается как один токен, иначе точка помечается как отдельный знак. Естественно, точность такого подхода зависит от того, насколько хорошо список аббревиатур адаптирован к обрабатываемому тексту. В тексте почти наверняка будут аббревиатуры, которые не включены в перечень. Кроме того, сокращения в списке могут совпадать с общими словами и вызывать ошибочную токенизацию. Важным аспектом всех задач машинного обучения, связанных с обработкой документов, является список «стоп-слов», также известный как «стоп-лист». Текстовые документы содержат огромную долю таких данных, которые не являются полезными для обработки. Поэтому желательно разработать какой-то автоматический метод идентификации таких данных и удаления их из набора данных до его обработки. Такие данные известны как стоп-слова. Стоп-слова были впервые введены в 1958 году Г.П. Луном. Стоп-слова ‒ это слова, которые чаще всего встречаются в документе и содержат небольшую информацию, которая обычно не требуется для машинного обучение. Например, в английском языке есть несколько слов, например, около, над, после, снова, против, всех, я, в, и, являются, как, в, быть, было, может, вообще, никак, течение, и т. д. они чаще всего встречаются в тексте, но содержат скудную информацию. Удаление стоп-слов не только уменьшает векторное пространство, но и повышает производительность за счет увеличения скорости выполнения, вычислений, а также точности. Например, если ваш поисковый запрос ищет в поисковой системе введенную информацию «как разработать приложение для андроид», то поисковая система будет пытаться найти веб-страницы, содержащие термины “как”, “разработать”, “ андроид”, “приложение”. Поисковая система находит больше страниц, содержащих термины «как” и “кому”, чем страниц, содержащих информацию о разработке приложений, поскольку термины “как” и „кому“ наиболее часто используются в английском языке. Таким образом, если эти два термина игнорируются, поисковая система может сосредоточиться на получении страниц, содержащих ключевые слова: “разработка”, “ андроид”, “приложение”, что приведет к появлению страниц, которые действительно представляют интерес. Эти слова удаляются на этапе предварительной обработки процесса классификации текста, что помогает уменьшить размер текста. Стоп-слова также могут быть удалены вручную, но это трудоемкий процесс, который пропорционален размеру входных данных. Есть два факта в области поиска информации. Во-первых, относительно небольшое количество слов составляет очень значительную часть всего текста. Такие слова, как » это", «и», «к», можно найти практически в каждом предложении документов написанные на английском языке. Во-вторых, эти слова имеют низкую дискриминационную ценность, и информация, содержащаяся в этих словах, незначительна. Эти слова также известны как шумовые слова или негативный словарь, которые часто появляются в документах и не несут полезной информации для обработки данных. Поэтому такие типы плохих слов приводят к деградации неточностей. 
Свойства стоп-слов можно резюмировать следующим образом:

 Лемматизация является важным шагом предварительной обработки для многих приложений интеллектуального анализа текста. Алгоритм также используется в обработке естественного языка и во многих других областях, которые имеют дело с лингвистикой. Алгоритм улучшает процесс создания общих ключевых слов для поисковых систем или меток для концептуальных карт, увеличивая точность метода машинного обучение. Лемматизация ‒ это морфологическое преобразование, которое изменяет слово в базовую или словарную форму слова, известную как Лемма. Лемма соответствует форме единственного числа в случае существительного, форме инфинитива в случае глагола и положительной форме в случае прилагательного или наречия. Это процесс нормализации, в котором различные морфологические варианты слова отображаются в одну и ту же базовую лемму, чтобы их можно было анализировать как один элемент (термин или понятие). Например, суффиксы слов working, works, work при стеммитизации и лемматизации получить нормализованную форму work, стоящую за инфинитивом: work; в этом случае как нормализованная форма слова, так и корень слова равны. Иногда нормализованная форма может отличаться от корня слова. Например, слова computers, computing, computer были бы связаны с вычислением, но их нормализованная форма является инфинитивом глагола: compute, а корни слов были бы различными что привело бы к увеличению слов для обработки. За счет сокращения общего числа отдельных терминов лемматизация уменьшает сложность анализируемого текста и, следовательно, приносит важные преимущества нижестоящим компонентам обработки текста. Например, при включении в информационно-поисковую систему лемматизация может помочь улучшить общий поиск, так как запрос сможет сопоставлять больше документов, когда варианты как в запросе, так и в документах морфологически нормированы. Аналогичным образом, системы понимания естественного языка способны работать эффективно с лингвистически нормализованными терминами, а не индивидуально обрабатывать все поверхностные варианты слов. Частота термина – обратная частота документа (TF-IDF) является наиболее широко используемым алгоритмом для вычисления веса термина (ключевого слово в документе) в современных информационно-поисковых системах. Этот вес является статистической мерой, используемой для оценки того, насколько слово важно для документа в массиве документов или в корпусе. Значение увеличивается пропорционально количеству раз, когда слово появляется в документе, но компенсируется частотой слова в корпусе  Частота слов (TF), частота термина, также называемая локальным весом термина, который измеряет, как часто термин (слово) встречается в документе. Данное измерение проводится только для одного документа. Поскольку каждый документ отличается по длине (содержанию), возможно, что термин будет появляться гораздо большое количество раз в длинных документах, чем в более коротких. Таким образом, частота термина часто делится на длину документа как способ нормализации. В TF самый простой способ – это линейный подсчёт слов в документе. То есть величина количество термина t встречается в документе D:

tf(t,D)=f_(t,D),

где  f_(t,D) – это линейный подсчет слов. 
Но также есть и другие формулы: 
 Булевы «частоты»: tf(t,D) = 1, Если t встречается в D и 0 в противном случае;
 Частота терминов, скорректированная на длину документа: 

tf(t,D)=f_(t,D)⁄(∑_(t^'∈D)▒f_(t^',D) )

Логарифмически масштабированная частота терминов: 

log⁡〖(1+f_(t,D))〗

Увеличенная частота для того чтобы предотвратить смещение в сторону более длинных документов, например, необработанная частота, деленная на необработанную частоту наиболее встречающегося термина в документе:

tf(t,D)=0.5+0.5*f_(t,D)/(max⁡{f_(t^',D):t'∈D})

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

idf(t,D)=log⁡N/|{d∈D:t∈d}| 

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

tfidf(t,D)=tf(t,D)*idf(t,D)
 Aylien API Text Analysis ‒ это пакет API обработки естественного языка и машинного обучения для анализа и извлечения различных видов информации из текстового контента.
Aylien API предоставляет различные функции классификации текста, сентимент анализа, извлечения сущностей и суммирования, которые позволяют извлекать информацию из текстового контента. В данной работе используется функции классификации ‒ Классификация по таксономии.  Классификация по таксономии имеет две формы классификации контента, одна из которых основана на предметных кодах IPTC, специально используемых для новостных и медиа-клиентов, а вторая ‒ гибкая функция тегов IAB-QAG, основанная на семантической классификации. Контекстная таксономия IAB-QAG была разработана IAB (Бюро интерактивной рекламы) совместно с экспертами по таксономии из академических кругов, для определения категорий контента, по крайней мере, на двух разных уровнях, что делает классификацию контента намного более последовательной. Первый уровень ‒ это категория широкого уровня, а второй ‒ более подробное описание структуры корневого типа (рис. 6).
Для использование данной API, нужно получить ключ и ид на официально сайте. Далее используя эти данные можно использовать код Java для вызова методов POST и GET. При применении алгоритмов, описанных выше, есть альтернативы и готовых библиотек. Просто нужно будет поискать. Если вам понравилась статья, или есть идеи или вопросы, прошу оставлять комментарии. Третья часть будет абстрактная, в основном будет обсуждаться архитектура системы. Описание алгоритма, что и в каком порядке использовался. 

Дополнительно будет результаты каждого после применение каждого алгоритма а так же конечный результат данной работы.  Java Developer