Вопрос

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

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

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

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

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

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

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

Это было полезно?

Решение

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

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

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

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

Другие советы

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top