Я смущен о том, как функции vw извлекают. Рассмотрим проблему классификации текста, где я хочу использовать символьные ngrams как функции. В простейшем случае, который иллюстрирует мой вопрос, входная строка - «aa», и я использую только 1-граммовые функции. Таким образом, пример должен состоять из одного элемента «A», который имеет счетчик 2, следующим образом:Vowpal Wabbit feature extract
$ echo "1 |X a:2" | vw --noconstant --invert_hash f && grep '^X^' f
Num weight bits = 18
learning rate = 0.5
initial_t = 0
power_t = 0.5
using no cache
Reading datafile =
num sources = 1
average since example example current current current
loss last counter weight label predict features
1.000000 1.000000 1 1.0 1.0000 0.0000 1
finished run
number of examples per pass = 1
passes used = 1
weighted example sum = 1
weighted label sum = 1
average loss = 1
best constant = 1
total feature number = 1
X^a:108118:0.196698
Однако, если я передать строку символов «AA» в VW (введение пространства между символами) , оч.сл. сообщает 2 особенности:
$ echo "1 |X a a" | vw --noconstant --invert_hash f && grep '^X^' f
Num weight bits = 18
learning rate = 0.5
initial_t = 0
power_t = 0.5
using no cache
Reading datafile =
num sources = 1
average since example example current current current
loss last counter weight label predict features
1.000000 1.000000 1 1.0 1.0000 0.0000 2
finished run
number of examples per pass = 1
passes used = 1
weighted example sum = 1
weighted label sum = 1
average loss = 1
best constant = 1
total feature number = 2
X^a:108118:0.375311
фактическая модель содержит только одну функцию (как я бы ожидать), но его вес (0,375311) отличается, чем в первой модели (0.196698).
При обучении реальным наборам данных с n-граммами более высокого порядка могут наблюдаться существенные различия в средних потерях в зависимости от того, какой формат ввода используется. Я посмотрел исходный код в parser.cc и дал больше времени, я мог бы, возможно, выяснить, что происходит; но если кто-то может объяснить объяснение несоответствия между двумя описанными выше случаями (это ошибка?) и/или указать мне на соответствующие части источника, я был бы признателен за помощь.
Я раньше не использовал '--sort_features', и я бы не ожидал, что он приведет к поведению в ваших примерах. В записи справки говорится: «Включите это, чтобы игнорировать порядок, в котором определены функции, что приведет к меньшему размеру кеша». Но почему порядок, в котором функции определены, в первую очередь? Возможно, это ключ к моему первоначальному вопросу. – Ken
У меня нет подсказки. Я поднял этот вопрос на официальной странице https://github.com/JohnLangford/vowpal_wabbit/issues/425 – truf
Если вы не отслеживаете обсуждение с автором - его ответ: _it по сути является вычислительной проблемой. Мы могли бы попытаться объединить все функции в уникальный набор, или мы могли бы оставить дубликаты в системе. Выполнение второго, похоже, на самом деле происходит быстрее, потому что большинство наборов функций не имеют внутри-примерных конфликтов ._ – truf