по Русс делос Сантос
Некоторые приложения машинного обучения, такие как обработка изображений и аудио, уже с самого начала анализируют векторизованные данные. Эти конкретные данные имеют значения (величина и направление), которые уже могут предоставить значимую информацию для алгоритма, например уровень шума аудиосигнала или значение и положение пикселя в изображении, что упрощает вычисление.
Однако с текстами, особенно с человеческим языком, дело обстоит иначе. Модели машинного обучения не могут работать напрямую с необработанными текстами! Теперь эта проблема ставит другую дилемму - как мы можем преобразовать тексты в значимые числа или векторы, чтобы они были полезны для конвейеров машинного обучения? Простое преобразование необработанных текстов, например, в двоичное, десятичное или шестнадцатеричное представление, определенно не даст нам функционального представления слов, поскольку эти значения не могут фиксировать информацию о значении, контексте, корреляции между такими словами, как «король» и « королева или кошка и собака. Эту проблему может решить применение модели, которая представляет набор документов в виде векторов в общем векторном пространстве.
Модель векторного пространства - это многомерное представление слов в непрерывном векторном пространстве. Слова, тесно или семантически связанные друг с другом, имеют тенденцию быть ближе друг к другу в модели.
Есть две модели, которые можно использовать для «преобразования» слов в векторы:
- Модель на основе подсчета - модель вычислений, основанная на частоте встречаемости слов в документе.
- Прогнозирующая модель - модель, которая направлена на предсказание контекста или целевого слова на основе соседних терминов.
Давайте сначала займемся векторизацией, используя модели на основе подсчета, называемые мешком слов (BoW) и термином "частота документа с обратной частотой" (TF-IDF).
Модель "мешок слов"
Модель мешка слов (BoW) - это метод векторизации, который использует количество вхождений слов в документе или корпусе, который по сути определяется как набор данных известных слов. В качестве примера возьмем комплект документов, представленных ниже.
- "Я король."
- «Царство процветает».
- «Она королева».
- «Королевская королева красива».
Корпус теперь можно составить, перечислив все уникальные слова в этом наборе документов. Как правило, первое слово, которое нужно прочитать, - это первое слово, которое будет указано в корпусе. Важно отметить, что BoW не заботится о порядке слов. Таким образом, наш корпус теперь будет:
Наконец, чтобы преобразовать образец текста в вектор с помощью BoW, каждое вхождение корпуса слов в образец текста подсчитывается и выводится как массив целочисленных счетчиков с размером, таким же, как корпус. Например, образец текста «Король и королева правят королевством» будет иметь векторное представление:
[ 0, 0, 3, 1, 1, 0, 0, 0, 0, 0, 0 ]
как показано в подсчете слов ниже:
Частота термина - обратная частота документа
TF-IDF, расширенный вариант BoW, принимает во внимание важность слов, исходя из их редкости в документе. Однако вместо векторов с дискретными счетчиками, таких как BoW, преобразованный вектор теперь содержит непрерывное значение. Эту идею лучше всего объяснить с помощью следующих уравнений:
tf weight - это нормализованный подсчет слов. Нормализация в основном означает, что она получает относительное количество слов, чтобы избежать предвзятости в отношении более длинных документов. Он выводится из уравнения:
Итак, предположим, что у нас есть документ длиной 150 слов и целевым термином «собака». Если слово «собака» встречается в документе 5 раз, вес слова «собака» будет следующим:
idf weight измеряет значимость слова в корпусе, присваивая часто встречающимся словам низкий вес, и наоборот, для редко встречающихся слов. Он использует логарифмическую функцию с формулой:
Возвращаясь к примеру, если бы термин «собака» появился в 10 000 документов из 1 миллиона документов набора данных, вес idf был бы следующим:
Наконец, вес tfidf t термина "собака" равен
.
Реализация
Используемая платформа: .NET 4.7.2, Accord.NET v3.8
Чтобы понять, как слова преобразуются в векторы с использованием описанных выше концепций, я попытался реализовать BoW + tfiDF с помощью C #. В частности, я использовал Accord.NET Framework, поскольку он позволяет упростить реализацию теории.
После погружения в кодирование я установил пакеты, необходимые для реализации. Я импортировал соответствующие пространства имен, вызвав директиву using. Для Accord.NET, особенно для пространства имен Accord.MachineLearning, я использовал диспетчер пакетов NuGet. В общем, окончательные включенные пространства имен будут выглядеть следующим образом:
Я создал простой набор документов, как показано ниже.
По теории, у меня должен быть мешок слов всего корпуса. Поэтому слова были «токенизированы» и сохранены в массиве строк с неровными краями с именем document_words с использованием метода Tokenize (). Отдельные слова я получил из корпуса.
Затем я попытался выучить приведенные выше слова, создав экземпляр tfidf с помощью new TFIDF (), как показано ниже. Чтобы инициализировать математику, о которой говорилось ранее, я выбрал TermFrequency.Default и InverseDocumentFrequency.Default.
Затем я вызвал метод Learn () и поместил document_words в качестве его параметра, чтобы преобразовать корпус в значения tfidf. Это также удалит повторяющиеся слова, поскольку нам нужен только один экземпляр каждого слова в словаре.
Наконец-то у нас есть вектор, содержащий 11 значений:
[tfidf_1, tfidf_2, tfidf_3, ……. , tfidf_11]
После процесса я протестировал его с текстами (показанными ниже), которые отличались от набора данных, который мы только что изучили.
Преобразование новых текстов в tfidf на основе ранее изученного набора данных довольно просто с помощью Accord.NET. Во-первых, я токенизировал слова, аналогичные предыдущему процессу, и использовал их в качестве параметра для вызова метода Transform ().
Вывод значений test_weights даст нам векторное представление тестовых предложений.
Изучение того, как преобразовывать слова в векторы, может стать хорошей отправной точкой для обработки естественного языка, как это было со мной в этом проекте. Выбор довольно простого математического преобразования, такого как BoW + tfidf, может дать вам представление о том, как слова соотносятся друг с другом в тексте и в самом корпусе. Вы можете использовать больше на этом этапе, наконец, загрузив данные в конвейер машинного обучения для задач классификации или прогнозирования.
Ссылки:
А. Поливяный, Д. Курокпка, «Количественная оценка расширенной тематической модели векторного пространства».
Получите RAX EDITOR прямо сейчас! Это бесплатное программное обеспечение для роботизированной автоматизации процессов (RPA): Скачать бесплатно здесь