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