Я использую Google Word2vec, и мне интересно, как получить главные слова, которые предсказываются моделью скипграмм, которая обучается с использованием иерархического softmax, учитывая входное слово?
Например, при использовании отрицательной выборки можно просто умножить вложение входного слова (из входной матрицы) на каждый из векторов в выходной матрице и взять один с верхним значением. Однако в иерархическом softmax существует несколько выходных векторов, которые соответствуют каждому входному слову, благодаря использованию дерева Хаффмана.
Как мы вычисляем значение правдоподобия / вероятность выходного слова, заданного входным словом в этом случае?
Я не видел никакого способа сделать это, и учитывая то, как работают выходы иерархического софта (HS), очевидно, что нет правильного способа превратить уровни активации выходных узлов в точную оценку вероятности для каждого слова. Обратите внимание, что:
predict_output_word()
метод, который (вроде как) имитирует прогноз с отрицательной выборкой, даже не пытается обработать режим HS
во время обучения ни HS, ни режимы отрицательной выборки не делают точных предсказаний — они просто подталкивают результаты, чтобы они были больше похожи на то, что потребовалось бы для текущего примера обучения
Насколько вы могли бы рассчитать все активация выходного узла для заданного контекста, затем проверка уникальных значений узлов кодовой точки HS каждого слова на предмет их близости к «предсказанию», вы можете потенциально синтезировать относительные оценки для каждого слова — некоторая мера того, насколько эти значения находятся от «определенный» вывод этого слова. Но неясно, может ли отклонение каждого узла вносить свой вклад в этот показатель, и как этот показатель может указывать на интерпретируемое сходство.
Могут также возникнуть проблемы из-за того, что коды HS назначаются строго по частоте слова, поэтому «соседнее» слово, разделяющее в основном то же кодирование, может сильно отличаться семантически. (В исходном коде word2vec.c были некоторые намеки на то, что было бы потенциально полезно назначить HS-кодировки, кластеризовав связанные слова, чтобы иметь похожие кодировки, а не по строгой частоте, но с тех пор я видел мало практики в этом.)
Я бы предложил придерживаться отрицательной выборки, если интерпретируемые прогнозы важны. (Но также помните, что word2vec в основном не используется для предсказаний, он просто использует обучение при попытках предсказания, чтобы загрузить векторное расположение, которое оказывается полезным для других задач.)
Других решений пока нет …