Бинаризация в обработке естественного языка

Бинаризация - это процесс преобразования красочных характеристик объекта в числовые векторы, чаще всего в двоичные векторы, для создания хороших примеров для алгоритмов классификатора.

Если нам нужно преобразовать предложение «Кошка съела собаку» в двоичную форму, мы могли бы начать с присвоения каждому слову идентификатора (например, cat-1, ate-2, the-3, dog-4), а затем просто заменить слово на это идентификатор, задающий вектор <3,1,2,3,4>.

Учитывая эти идентификаторы, мы также могли бы создать двоичный вектор, задав каждому слову четыре возможных слота и установив слот, соответствующий определенному слову, с помощью одного, давая вектору <0,0,1,0,1,0,0,0 , 0,1,0,0,0,0,0,1>. Последний метод, насколько мне известно, обычно называют методом «мешка слов».

Теперь мой вопрос, что это лучший способ бинаризации , когда речь идет , чтобы описать возможности обработки естественного языка в целом, а также переход на основе синтаксического анализа зависимостей (с алгоритмом Nivres) , в частности?

В этом контексте мы хотим кодировать не все предложение, а текущее состояние синтаксического анализа, например, верхнее слово в стеке и первое слово во входной очереди. Поскольку порядок очень важен, это исключает метод «мешка слов».

С лучше , я имею в виду метод , который делает данные наиболее понятными для классификатора, не используя ненужную память. Например, я не хочу, чтобы биграмма слова использовала 400 миллионов функций для 20000 уникальных слов, если только 2% биграмм действительно существуют.

Поскольку ответ также зависит от конкретного классификатора, меня больше всего интересуют модели максимальной энтропии (liblinear), вспомогательные векторные машины (libsvm) и перцептроны, но также приветствуются ответы, применимые к другим моделям.

Ответов (3)

Решение

На самом деле это действительно сложный вопрос. Первое, что вам нужно сделать - это лемматизировать ваши входные токены (ваши слова). Если вы сделаете это, вы резко уменьшите количество типов, и синтаксический анализ станет намного проще. Однако для лемматизации токена требуется много работы. Теперь, в компьютерном языке, эта задача значительно упрощается, поскольку в большинстве языков ключевые слова или имена переменных разделяются четко определенным набором символов, например, пробелами, точкой или чем-то еще.

Второе важное решение - это то, что вы собираетесь делать с данными постфактум. Метод "мешок слов" в представленной вами двоичной форме игнорирует порядок слов, что совершенно нормально, если вы выполняете резюмирование текста или, возможно, поиск в стиле Google, где вам все равно, где слова появляются, пока они появляются. С другой стороны, если вы создаете что-то вроде компилятора или парсера, порядок очень важен. Вы можете использовать подход вектора лексемы (как во втором абзаце) или расширить подход мешка слов таким образом, чтобы каждая ненулевая запись в векторе мешка слов содержала позицию линейного индекса лексемы во фразе.

Наконец, если вы собираетесь строить деревья синтаксического анализа , есть очевидные причины, по которым вы захотите использовать подход с вектором лексемы, так как поддерживать идентификаторы подфразов для каждого слова в сумке - большая проблема. -слова вектор, но очень легко сделать "подвекторы" в векторе-токене. Фактически, Эрик Брилл использовал последовательность идентификаторов токенов для своего теггера части речи , что очень удобно .

Не возражаете, если я спрошу, над какой конкретной задачей вы работаете?

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

Бинаризация - это процесс преобразования красочных характеристик объекта в векторы чисел, чаще всего в двоичные векторы, для создания хороших примеров для алгоритмов классификатора.

Я в основном сталкивался с числовыми функциями, которые принимают значения между 0 и 1 (не двоичными, как вы описываете), представляющими релевантность конкретной функции в векторе (между 0% и 100%, где 1 представляет 100%). Типичным примером для этого являются векторы tf-idf : в векторе, представляющем документ (или предложение), у вас есть значение для каждого термина во всем словаре, которое указывает на релевантность этого термина для представленного документа.

Как уже сказал Майк в своем ответе , это сложная проблема в широком диапазоне. В дополнении к его указателям, вы можете найти его полезно взглянуть на некоторые информационно - поисковые методы , таких как векторная модель , векторное пространство классификацию и скрытой семантической индексация в качестве исходных точек. Кроме того, область устранения неоднозначности смысла слова много занимается проблемами представления признаков в НЛП.