по Русс делос Сантос

Некоторые приложения машинного обучения, такие как обработка изображений и аудио, уже с самого начала анализируют векторизованные данные. Эти конкретные данные имеют значения (величина и направление), которые уже могут предоставить значимую информацию для алгоритма, например уровень шума аудиосигнала или значение и положение пикселя в изображении, что упрощает вычисление.

Однако с текстами, особенно с человеческим языком, дело обстоит иначе. Модели машинного обучения не могут работать напрямую с необработанными текстами! Теперь эта проблема ставит другую дилемму - как мы можем преобразовать тексты в значимые числа или векторы, чтобы они были полезны для конвейеров машинного обучения? Простое преобразование необработанных текстов, например, в двоичное, десятичное или шестнадцатеричное представление, определенно не даст нам функционального представления слов, поскольку эти значения не могут фиксировать информацию о значении, контексте, корреляции между такими словами, как «король» и « королева или кошка и собака. Эту проблему может решить применение модели, которая представляет набор документов в виде векторов в общем векторном пространстве.

Модель векторного пространства - это многомерное представление слов в непрерывном векторном пространстве. Слова, тесно или семантически связанные друг с другом, имеют тенденцию быть ближе друг к другу в модели.

Есть две модели, которые можно использовать для «преобразования» слов в векторы:

  1. Модель на основе подсчета - модель вычислений, основанная на частоте встречаемости слов в документе.
  2. Прогнозирующая модель - модель, которая направлена ​​на предсказание контекста или целевого слова на основе соседних терминов.

Давайте сначала займемся векторизацией, используя модели на основе подсчета, называемые мешком слов (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): Скачать бесплатно здесь