Классификация научных работ по названию.
Дорогие все, я работаю над проектом, в котором я должен классифицировать исследовательские работы в соответствующих областях, используя названия статей. Например, если где-то в названии присутствует фраза "компьютерная сеть", то этот документ должен быть помечен как относящийся к понятию "компьютерная сеть". У меня 3 миллиона названий научных работ. Поэтому я хочу знать, с чего мне начать. Я пытался использовать TF-IDF, но не смог получить реальные результаты. Кто-нибудь знает о библиотеке, чтобы легко выполнить эту задачу? Пожалуйста, предложите один. Я буду благодарен.
3 ответа
Если вы заранее не знаете категории, то это не классификация, а кластеризация. В основном вам нужно сделать следующее:
- Выберите алгоритм.
- Выберите и извлеките функции.
- Применить алгоритм к функциям.
Достаточно просто. Вам нужно только выбрать комбинацию алгоритма и функций, которая лучше всего подходит для вашего случая.
Говоря о кластеризации, есть несколько популярных вариантов. K-means считается одним из лучших и имеет огромное количество реализаций, даже в библиотеках, не специализирующихся на ML. Другой популярный выбор - алгоритм Expectation-Maximization (EM). Оба они, однако, требуют первоначального предположения о количестве классов. Если вы не можете предсказать количество классов даже приблизительно, другие алгоритмы - такие как иерархическая кластеризация или DBSCAN - могут работать лучше для вас (см. Обсуждение здесь).
Что касается функций, сами слова нормально работают для кластеризации по темам. Просто токенизируйте ваш текст, нормализуйте и векторизируйте слова (посмотрите, если вы не знаете, что все это значит).
Несколько полезных ссылок:
- Кластеризация текстовых документов с использованием k-средних
- Кластерный пакет НЛТК
- Статистическое машинное обучение для классификации текста с scikit-learn и NLTK
Примечание: все ссылки в этом ответе относятся к Python, так как он имеет действительно мощные и удобные инструменты для такого рода задач, но если у вас есть другой предпочтительный язык, вы, скорее всего, сможете найти аналогичные библиотеки для него.
Тот факт, что вы заранее не знаете количество категорий, вы можете использовать инструмент OntoGen. Этот инструмент в основном берет набор текстов, анализирует текст и пытается обнаружить кластеры документов. Это инструмент под полным контролем, поэтому вы должны немного руководить процессом, но он делает чудеса. Конечный продукт процесса - это онтология тем.
Я призываю вас попробовать.
Для Python я бы порекомендовал NLTK (Natural Language Toolkit), так как он имеет несколько отличных инструментов для преобразования ваших необработанных документов в функции, которые вы можете использовать в алгоритме машинного обучения. Для начала вы можете попробовать простую модель частоты слов (мешок слов), а затем перейти к более сложным методам извлечения признаков (строковые ядра). Вы можете начать с использования SVM (Машины опорных векторов) для классификации данных с помощью LibSVM (лучший пакет SVM).