Как вы указали, похоже, что мы можем разделить эту проблему на два отдельных шага.
- Сгруппировать похожие сообщения и
- Пометить каждую группу.
Шаг 1:
Хотя я не слишком знаком с Tensorflow JS, я не думаю, что использовать машинное обучение (ML) - это излишне. для решения этой проблемы, особенно для шага 1.
На самом деле, этот тип проблемы является отличным кандидатом на конкретную c форму ML, известную как неконтролируемое обучение, и, в частности, Кластеризация . В Необучаемом обучении мы ищем «ранее неизвестные шаблоны в наших данных без ранее существовавших меток».
См .: https://en.wikipedia.org/wiki/Unsupervised_learning
В этом контексте это означает, что мы не знаем, будут ли «Сообщение об ошибке 1» и «Сообщение об ошибке 2» принадлежать к одной и той же группе, прежде чем мы применим наш алгоритм кластеризации. Используя ваш пример, мы можем обоснованно подозревать, что сообщения:
“Forbidden: User session aad3-1v299-4400 has expired"
“Forbidden: User session jj41-1d333-bbaa has expired"
будут принадлежать к той же группе, но алгоритм кластеризации не знает об этом при запуске.
Мы можем сопоставить это с формой Контролируемое обучение , известной как Классификация , где мы заранее знаем, что группа ожидает форму
* 1037. *
Тогда уже существующие метки в данных означают, что такие сообщения, как
“Forbidden: User session aad3-1v299-4400 has expired"
“Forbidden: User session jj41-1d333-bbaa has expired"
, относятся к ожидаемой группе чуть выше. По сути, мы даем модели ML кучу примеров того, как выглядит эта группа, и затем входящие сообщения, которые кажутся похожими, будут классифицированы в эту группу.
Из вашего описания звучит так, что для шага 1 вы хотите выполнить сопоставление строк (например, Левенштейна), чтобы сравнить все примеры сообщений, а затем применить алгоритм кластеризации к этим результатам. Затем, после того как у вас есть группы (кластеры) сообщений, шаг 2 включает в себя поиск соответствующей метки для каждой группы.
Шаг 2:
Согласился, что поиск соответствующей метки для каждая группа, вероятно, сложнее здесь. Один из подходов, который может быть полезен, - это подсчитать, сколько раз слово или фраза встречается в группе или кластере, и, если они не удовлетворяют некоторому заранее заданному порогу, использовать заполнитель, как у вас в метке примера. Например, слова «Запрещено», «Пользователь», «Сессия» и «Истек срок действия» будут общими для группы, тогда как перечисленные буквенные цифры c ID уникальны для отдельных сообщений. Если порогом является то, что слово или фраза должны отображаться как минимум в двух сообщениях, только идентификаторы будут заменены местозаполнителем.
При таком подходе вы, по сути, ищете слова или фразы, которые являются необычными для группы, и не предоставляют полезную информацию для формирования соответствующей метки. В некотором смысле, это противоположно концепции, используемой во многих поисковых системах, которая стремится выяснить, насколько часто или важно слово или фраза для документа (см. https://en.wikipedia.org/wiki/Tf%E2%80%93idf).