2016-06-19 3 views
2

Я хотел реализовать LDA с tensorflow как на практике, и я думаю, что версия tensorflow может иметь преимущества ниже:Преимущества для реализации LDA (скрытое распределения Дирихле) с tensorflow

  • Fast. Если я могу использовать встроенные операционные системы, чтобы выразить процесс выборки.
  • Легко распараллеливать. Многие операционные системы были реализованы с оптимизацией для распараллеливания, поэтому этот lda должен быть легко запущен на gpus или распределенных кластерах.
  • Более короткий и чистый код. Как и многие другие модели, особенно NN, построение таких моделей с использованием тензорного потока связано с меньшим количеством кода.

Хотя после того, как я осмотрел несколько реализаций питона ЛДА (например, https://github.com/ariddell/lda/), я понятия не имею, что можно использовать ОПС tensorflow, какого рода графа должна быть построена и то, что оптимизатор я должен выбрать. Поскольку процесс выборки гиббсов выглядит как все об элементарном обновлении doc-тем, матриц слов-слов и таблицы подсчета тем. Итак, что может сделать тензорный поток, чтобы упростить и оптимизировать этот процесс?

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

ответ

2

Существует много ответных ответов на этот вопрос по более широкому вопросу о том, как probabilistic programming извлекает выгоду из систем deep probabilistic programming.

Я могу дать один заостренный ответ для выделения скрытого распределения Дирихле (LDA) в TensorFlow. Ключевым преимуществом является признание того, что LDA - всего лишь модель. Учитывая эту модель и набор данных, представленный как матрица по одному за один раз (например, через tf.SparseTensor), TensorFlow позволяет не только выполнять масштабируемый вывод, но и очень гибкий вывод. Конкретные операционные системы для использования в TF зависят от конкретного алгоритма. Вы можете написать сэмплер Gibbs или скопировать алгоритм вариационного логического восхождения - как высокоэффективный для LDA (можно использовать руководство tf.assign ops для обучаемых переменных). CAVI является вычислительным и оперативным с точки зрения памяти, scaling to millions of documents и может использоваться с эффективными данными, такими как tf.data.

С TensorFlow вы также можете использовать общие методы, такие как вариационный вывод черного ящика, которые чрезвычайно универсальны и не требуют ручного управления tf.assign. После того, как вы написали его, чтобы хорошо работать с вашей проблемой, вы можете расширить LDA многими способами, например, с неконъюгированными приоритетами, иерархическими приоритетами и глубокими параметрами сети (возможно с tf.layers). Для общих методов требуются такие инструменты, как оптимизаторы TensorFlow и автоматическая дифференциация TensorFlow для оптимизации на основе градиента. Они недоступны в Python, если вы не используете инструменты трассировки, такие как autograd.

-1

Я запустил эти две модели, поэтому я думаю, что у меня есть некоторые идеи из практики. Выходы LDA - это распределение тем и распределение слов, входы которых являются словами в документах. Вывод Word2Vec является векторным выражением предложения. В вашей прикладной сцене ваша цель - рекомендовать аналогичную тему, а не аналогичный смысл предложения. Например, «я нахожу очень милую кошку». «Кошка моего дяди жирная, и я кормлю ее продуктами, я доволен». эти два предложения имеют разные значения, но эти предложения включают одну и ту же тему-кошку. Надеюсь, это будет полезно.

+0

Выход LDA - это распределение слов по темам, а вывод Word2Vec - это векторное выражение фразы (не предложение) –

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