Похоже, что вы пытаетесь ответить на несколько связанных вопросов:
- Как измерить сходство между документами A и B?(Обучение метрике)
- Как измерить, насколько необычен документ C по сравнению с некоторым набором документов?(Обнаружение аномалий)
- Как разбить коллекцию документов на группы похожих?(Кластеризация)
- Как предсказать, к какому классу относится документ?(Классификация)
Все эти проблемы обычно решаются в 2 этапа:
- Извлечение функций: Документ -> Представление (обычно числовой вектор)
- Применение модели: Представление -> Результат (обычно одно число)
Существует множество вариантов как для конструирования элементов, так и для моделирования.Вот лишь некоторые из них.
Извлечение признаков
- Мешок слов: Документ -> количество вхождений каждого отдельного слова (то есть частоты терминов).Это базовый вариант, но не единственный.
- Пакет с n-граммами (на уровне слов или на уровне символов): учитывается одновременное использование нескольких токенов.
- Пакет с словами + грамматические особенности (например, POS-теги)
- Мешок встраивания слов (изученный внешней моделью, например, word2vec).Вы можете использовать встраивание как последовательность или взять их средневзвешенное значение.
- Все, что вы можете придумать (например, правила, основанные на поиске в словаре) ...
Элементы могут быть предварительно обработаны для уменьшения относительного количества шума в них.Вот некоторые варианты предварительной обработки:
- деление на IDF, если у вас нет жесткого списка стоп-слов или вы полагаете, что слова могут быть более или менее "тупыми"
- нормализуеткаждый столбец (например, число слов) должен иметь нулевое среднее значение и единичную дисперсию
- , принимая журналы количества слов для уменьшения шума
- , нормализуя каждую строку, чтобы иметь норму L2, равную 1
Вы не можете заранее знать, какой вариант (ы) лучше всего подходит для вашего конкретного применения - вам нужно провести эксперименты.
Теперь вы можете построить модель ML .Каждая из 4 задач имеет свои хорошие решения.
Для классификации , наиболее изученной задачи, вы можете использовать несколько видов моделей, включая наивные байесовские, k-ближайшие соседи, логистическую регрессию, SVM, деревья решений и нейронные сети.Опять же, вы не можете знать заранее, что будет лучше.
Большинство этих моделей могут использовать практически любые функции.Однако KNN и основанный на ядре SVM требуют, чтобы ваши функции имели особую структуру: представления документов одного класса должны быть близки друг к другу в смысле евклидовой метрики расстояния.Иногда это может быть достигнуто простой линейной и / или логарифмической нормализацией (см. Выше).Более сложные случаи требуют нелинейных преобразований, которые в принципе могут быть изучены нейронными сетями.Изучение этих преобразований - это , что люди называют метрическим обучением , и в целом это проблема, которая еще не решена.
Самая обычная дистанционная метрика действительно евклидова,Однако возможны другие метрики расстояния (например, манхэттенское расстояние) или другие подходы, не основанные на векторных представлениях текстов.Например, вы можете попытаться вычислить расстояние Левенштейна между текстами, основываясь на количестве операций, необходимых для преобразования одного текста в другой.Или вы можете вычислить «расстояние перемещения слов» - сумму расстояний между парами слов с ближайшими вложениями.
Для кластеризация , основными опциями являются K-means и DBScan.Обе эти модели требуют, чтобы у вашего пространства функций было это евклидово свойство.
Для обнаружения аномалий вы можете использовать оценки плотности, которые производятся различными вероятностными алгоритмами: классификация (например, наивные байесовские или нейронные сети), кластеризация (например, смесь гауссовых моделей) или другие неконтролируемые методы (например, вероятностный PCA).Для текстов вы можете использовать последовательную языковую структуру, оценивая вероятности каждого слова на основе предыдущих слов (используя n-граммы или сверточные / рекуррентные нейронные сети) - это называется языковых моделей , и обычно этоболее эффективен, чем предположение о наивном байесовском подходе, которое игнорирует порядок слов.Несколько языковых моделей (по одной для каждого класса) могут быть объединены в один классификатор.
Какую бы проблему вы не решили, настоятельно рекомендуется иметь хороший набор тестов с известной « базовая правда »: какие документы близки друг к другу, относятся к одному классу или являются (не) обычными.С помощью этого набора вы можете оценить различные подходы к проектированию объектов и моделированию и выбрать лучший.
Если у вас нет ресурсов или желания проводить несколько экспериментов, я бы рекомендовал выбрать один из следующихподходы к оценке сходства между текстами:
- количество слов + нормализация idf + нормализация L2 (эквивалентная решению @mcoav) + евклидово расстояние
- означает вложение word2vec по всем словам в тексте(словарь встраивания может быть найден и загружен) + Евклидово расстояние
На основе одного из этих представлений вы можете построить модели для других задач - например, KNN для классификаций или k-средних для кластеризации.