2014-10-16 2 views
2

Я пытаюсь использовать vw для поиска слов или фраз, которые предсказывают, что кто-то откроет электронное письмо. Цель - 1, если они открыли письмо и 0 в противном случае. Мои данные выглядит следующим образом:Vowpal Wabbit varinfo и ngrams: несуществующие комбинации

1 |A this is a test 
0 |A this test is only temporary 
1 |A i bought a new polo shirt 
1 |A that was a great online sale 

Я положил его в файл с именем «test1.txt» и запустить следующий код, чтобы сделать ngrams из 2, а также выходную переменную информацию:

C:\~\vw>perl vw-varinfo.pl -V --ngram 2 test1.txt >> out.txt 

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

Выход:

FeatureName   HashVal MinVal MaxVal Weight RelScore 
A^a      239656  0.00  1.00 +0.1664 100.00% 
A^is      7514  0.00  1.00 +0.0772  46.38% 
A^test     12331  0.00  1.00 +0.0772  46.38% 
A^this     169573  0.00  1.00 +0.0772  46.38% 
A^bought    245782  0.00  1.00 +0.0650  39.06% 
A^i      245469  0.00  1.00 +0.0650  39.06% 
A^new     51974  0.00  1.00 +0.0650  39.06% 
A^polo     48680  0.00  1.00 +0.0650  39.06% 
A^shirt     73882  0.00  1.00 +0.0650  39.06% 
A^great     220692  0.00  1.00 +0.0610  36.64% 
A^online    147727  0.00  1.00 +0.0610  36.64% 
A^sale     242707  0.00  1.00 +0.0610  36.64% 
A^that     206586  0.00  1.00 +0.0610  36.64% 
A^was     223274  0.00  1.00 +0.0610  36.64% 
A^a^bought    216990  0.00  0.00 +0.0000  0.00% 
A^bought^great   7122  0.00  0.00 +0.0000  0.00% 
A^great^i    190625  0.00  0.00 +0.0000  0.00% 
A^i^is     76227  0.00  0.00 +0.0000  0.00% 
A^is^new    140536  0.00  0.00 +0.0000  0.00% 
A^new^online    69117  0.00  0.00 +0.0000  0.00% 
A^online^only   173498  0.00  0.00 +0.0000  0.00% 
A^only^polo    51059  0.00  0.00 +0.0000  0.00% 
A^polo^sale    131483  0.00  0.00 +0.0000  0.00% 
A^sale^shirt   191329  0.00  0.00 +0.0000  0.00% 
A^shirt^temporary  81555  0.00  0.00 +0.0000  0.00% 
A^temporary^test   90632  0.00  0.00 +0.0000  0.00% 
A^test^that    13689  0.00  0.00 +0.0000  0.00% 
A^that^this    127863  0.00  0.00 +0.0000  0.00% 
A^this^was    22011  0.00  0.00 +0.0000  0.00% 
Constant    116060  0.00  0.00 +0.1465  0.00% 
A^only     62951  0.00  1.00 -0.0490 -29.47% 
A^temporary    44641  0.00  1.00 -0.0490 -29.47% 

Например, ^bought^great фактически никогда не происходит ни в одном из исходных входных строк. Я делаю что-то неправильно?

ответ

3

Это ошибка в vw-varinfo.

Это можно проверить, запустив vw наедине с --invert_hash:

$ vw --ngram 2 test1.txt --invert_hash train.ih 

$ grep '^bought^great' train.ih 
# no output 

Быстрая частичная Обходной рассматривать все функции с весом 0,0, как весьма подозрительной, и, вероятно, поддельного. К сожалению, есть некоторые функции, которые отсутствуют, потому что vw-varinfo ничего не знает о --ngram.

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

Этот проект был приостановлен из-за более срочного материала. Надеюсь найти время, чтобы исправить это в этом году.

Несвязанный совет: поскольку вы выполняете двоичную классификацию, вы должны использовать метки в {-1, 1}, а не в {0,1}, и использовать --loss_function logistic для получения наилучших результатов.

+0

спасибо за информацию и отзыв! – screechOwl

+0

выглядит неважно, но наконечник очень ценен! –

Смежные вопросы