Панацея искусственного интеллекта от Facebook: введение в модель нейронной сети StarSpace

искусственный интеллект Программа перевода самородков Нейронные сети Facebook

ИИ-панацея от Facebook: введение в модель нейронной сети StarSpace

StarSpace — это модель нейронной сети общего назначения для эффективного изучения вложений сущностей для решения различных задач:

  • Изучайте вложения на уровне слов, предложений или документов.
  • Поиск информации: сортировка коллекций сущностей или документов, например: ранжирование веб-документов.
  • Классификация текста или другие задачи в виде маркировки.
  • Метрическое обучение, обучение сходству, например, изучение сходства предложений или документов.
  • Рекомендации на основе контента или совместной фильтрации, например рекомендации музыки и видео.
  • Встраивание графов, например, для завершения мультиреляционных графов, таких как Freebase.
  • Классификация, ранжирование или поиск изображений (например, с использованием существующих функций ResNet).

В общем случае он учится представлять разные типы объектов в общем векторном пространстве вложения, Начните со звездочки ('*', подстановочный знак) и пробела в имени и сравните их друг с другом в этом пробеле. Он также учится сортировать набор сущностей/документов или объектов с учетом данных запроса, которые не обязательно относятся к одному и тому же типу элемента в наборе.

посмотриЭто эссечтобы узнать больше о том, как это работает.

последние новости

  • Использована новая лицензия и уведомления о патентах: StarSpace теперь распространяется под лицензией BSD. читатьфайл ЛИЦЕНЗИИифайл ПАТЕНТЫДоступна дополнительная информация.
  • Мы добавили поддержку вещественных входных данных и весов меток: читатьформат файлаиImageSpaceдля получения дополнительной информации о том, как использовать веса во входных данных и метках.

полагаться

StarSpace может быть построен на современных дистрибутивах Mac OS и Linux. Поскольку он использует функции C++11, он должен работать с компилятором с хорошей поддержкой C++11. включают:

  • gcc-4.6.3 или выше или clang-3.3 или выше

Компиляция будет производиться с помощью Makefile, поэтому вам нужен работающийmakeЗаказ.

Вам также необходимо установитьBoostбиблиотеку и запустите StarSpace, указав путь к библиотеке boost в make-файле. Проще говоря:

$wget https://dl.bintray.com/boostorg/release/1.63.0/source/boost_1_63_0.zip
$unzip boost_1_63_0.zip
$sudo mv boost_1_63_0 /usr/local/bin

Необязательный шаг: если вы хотите иметь возможность запускать модульные тесты в каталоге src, вам потребуетсяgoogle testи настройте «TEST_INCLUDES» в make-файле на его путь.

Построить StarSpace

Чтобы построить StarSpace, выполните по порядку:

git clone https://github.com/facebookresearch/Starspace.git
cd Starspace
make

формат документа

StarSpace использует следующие форматы для ввода файлов. Каждая строка служит примером ввода, и в простейшем случае ввод состоит из k слов, и каждая следующая метка также является отдельным словом:

word_1 word_2 ... word_k __label__1 ... __label__r

Этот формат описания такой же, какfastTextОпять же, по умолчанию метки — это слова с префиксом строки __label__ , перед которыми может стоять префикс-labelпараметры для установки.

Выполните эту команду, чтобы узнать это вложение:

$./starspace train -trainFile data.txt -model modelSaveFile

Здесь data.txt — это обучающий файл, содержащий текст в кодировке utf-8. По окончании оптимизации программа сохранит два файла: model и modelSaveFile.tsv. modelSaveFile.tsv — это файл стандартного формата TSV, содержащий векторы встраивания сущностей, по одному в строке. modelSaveFile — это двоичный файл, который содержит параметры модели, а также словарь, а также все гиперпараметры. Двоичный файл позже можно использовать для вычисления векторов для встраивания сущностей или для выполнения задач оценки.

В более общем случае каждая метка также будет содержать слова:

word_1 word_2 ... word_k <tab> label_1_word_1 label_1_word_2 ... <tab> label_r_word_1 ..

Встраивающие векторы изучат каждое слово и метку и сгруппируют похожие входные данные и метки вместе.

Для изучения вложений в более общем случае, когда каждая метка состоит из слов, необходимо указать-fileFormatФлаг «labelDoc» выглядит следующим образом:

$./starspace train -trainFile data.txt -model modelSaveFile -fileFormat labelDoc

Мы также можем передать параметр-useWeightУстановите значение true (по умолчанию — false), чтобы расширить формат файла для поддержки вещественных весов (во входных данных и пространствах меток). если-useWeightПри значении true мы поддерживаем определение весов в следующем формате.

word_1:wt_1 word_2:wt_2 ... word_k:wt_k __label__1:lwt_1 ...    __label__r:lwt_r

Например,

dog:0.1 cat:0.5 ...

Любые слова и теги, которые не имеют веса, по умолчанию имеют вес 1.

режим тренировки

StarSpace поддерживает следующие режимы обучения (по умолчанию первый):

  • trainMode = 0:
    • Каждый экземпляр включает в себя входные данные и метки.
    • Если формат файла «fastText», метки будут иметь определенные отдельные функции или слова (например, с префиксом __label__, см. выше).формат файлаодин период.
    • Пример:Задачи классификации, см. пример TagSpace ниже.
    • Если формат файла «labelDoc», то метки представляют собой пакеты функций, один из которых выбран (см. выше).формат файлаодин период).
    • Пример:Задачи извлечения/поиска, каждый пример состоит из запроса, за которым следует набор связанных документов.
  • trainMode = 1:
    • Каждый пример содержит набор меток. Во время обучения одна метка в наборе случайным образом выбирается в качестве количества меток, а остальные метки используются в качестве входных данных.
    • Пример:Рекомендации на основе контента или совместной фильтрации, см. пример PageSpace ниже.
  • trainMode = 2:
    • Каждый пример содержит набор меток. Во время обучения в качестве входных данных случайным образом выбирается метка из ансамбля, а остальные метки в ансамбле становятся меткой.
    • Пример:Изучите сопоставление объекта с набором объектов, к которым он принадлежит, например, от предложений (внутри документов) к документам.
  • trainMode = 3:
    • Каждый пример содержит набор меток. Во время обучения две метки в наборе выбираются случайным образом в качестве количества входных данных и меток.
    • Пример:Изучите попарное сходство из коллекций похожих объектов, например сходство предложений.
  • trainMode = 4:
    • Каждый пример содержит две метки. Во время обучения первая метка в ансамбле будет выбрана в качестве входного объема, а вторая метка будет выбрана в качестве объема метки.
    • Пример:Учитесь на графах множественных отношений.
  • trainMode = 5:
    • Каждый пример содержит только входные величины. Во время обучения он создает несколько обучающих примеров: каждый признак из ввода выбирается как количество меток, выбираются другие признаки (на расстоянии ws (Примечание переводчика: размер контекстного окна для обучения на уровне слов, необязательный входной параметр)) в качестве входных признаков.
    • Пример:Изучение встраивания слов без присмотра.

Типичный вариант использования

Слово TagSpace, встраивание тега

использовать:Изучите сопоставление коротких текстов с соответствующими хэштегами, например, вэта статьяописание в . Это типичное приложение для классификации.

Модель:Изучая вложения обоих, изученное отображение переходит от набора слов к набору меток. Например, ввод «В ресторане отличная еда #restaurant #yum» будет переведен на изображение ниже. (Узлы в графе — это сущности, вложения которых необходимо изучить, а ребра в графе — это отношения между сущностями.

word-tag

Формат входного файла:

restaurant has great food #yum #restaurant

Заказ:

$./starspace train -trainFile input.txt -model tagspace -label '#'

Пример скрипта:

Мы применяем эту модель кНабор данных классификации тем новостей AGПроблема классификации текста. В этой задаче наши ярлыки являются категориями новостных статей, и мы используем метрику hit@1 для измерения точности классификации.этот пример скриптаЗагрузите данные и запустите модель StarSpace в каталоге примеров:

$bash examples/classification_ag_news.sh

Встраивание пользователей и страниц PageSpace

использовать:В Facebook пользователи могут следить (следить) за интересующими их публичными страницами. Когда пользователь просматривает страницу, он может получать весь контент, размещенный на странице на Facebook. Мы хотим изучить встраивание страниц на основе данных о том, что нравится пользователям, и использовать их, чтобы рекомендовать новые страницы, которые могут заинтересовать пользователей (вероятно, подпишутся). Это использование может быть обобщено для других проблем рекомендаций: например, изучение вложений на основе прошлых записей о фильмах, рекомендации фильмов пользователям, изучение вложений на основе ресторанов, которые вошли в систему пользователями в прошлом, рекомендации ресторанов пользователям и т. д.

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

user-page

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

формат входного файла:

page_1 page_2 ... page_M

В процессе обучения на каждом шаге для каждого экземпляра (пользователя) в качестве объема метки выбирается случайная страница, а в качестве входного объема выбираются оставшиеся страницы. Этого можно добиться, установив флаг -trainMode в 1.

Заказ:

$./starspace train -trainFile input.txt -model pagespace -label 'page' -trainMode 1

Рекомендации по документации DocSpace

использовать:Мы хотим создавать встроенные и рекомендуемые веб-документы для пользователей на основе их исторических предпочтений и данных о кликах.

Модель:Каждый файл представлен набором файлов. Каждый пользователь представлен в виде документа (коллекции), который ему понравился или на который он нажимал в прошлом. Во время обучения случайный файл выбирается в качестве объема метки на каждом шаге, а остальные файлы выбираются в качестве входного объема.

user-doc

формат входного файла:

roger federer loses <tab> venus williams wins <tab> world series ended
i love cats <tab> funny lolcat links <tab> how to be a petsitter  

Каждая строка — это пользователь, а каждый документ (документы, разделенные тегами) — его любимый документ. Итак, первому пользователю нравится спорт, а второму интересна эта ситуация.

Заказ:

./starspace train -trainFile input.txt -model docspace -trainMode 1 -fileFormat labelDoc

Предсказание ссылок в базе знаний GraphSpace

использовать:учитьсяFreebaseСопоставление между сущностями и отношениями в . В freebase данные вводятся в формате.

(head_entity, relation_type, tail_entity)

Выполнение прогнозирования ссылок может форматировать данные для заполнения неполных троек.

(head_entity, relation_type, ?) or (?, relation_type, tail_entity)

Модель:Мы изучаем вложения для всех типов сущностей и отношений. Для каждого realtion_type мы изучаем два встраивания: одно для прогнозирования tail_entity с учетом head_entity и одно для прогнозирования head_entity с учетом tail_entity.

multi-rel

Пример скрипта:

этот пример скриптабудет изздесьЗагрузите данные Freebase15k и запустите на них модель StarSpace:

$bash examples/multi_relation_example.sh

SentenceSpace изучает встраивание предложений

использовать:Изучите сопоставление между предложениями. Учитывая вложение предложения, можно найти семантически похожие или связанные предложения.

Модель:Каждый пример представляет собой набор семантически связанных предложений. Случайным образом примените trainMode 3, чтобы выбрать два: одно в качестве входных данных, одно в качестве метки, остальные предложения выбираются как случайное отрицание. Простой способ получить семантически связанные предложения без маркировки — считать все предложения в одном документе связанными, а затем тренироваться на этих документах.

sentences

Пример скрипта:

этот пример скриптаЗагрузите некоторые данные, где каждый пример представляет собой набор утверждений с одной и той же страницы Википедии, и запустите на них модель StarSpace:

$bash examples/wikipedia_sentence_matching.sh

чтобы работатьЭто эссеПолный эксперимент с проблемой сопоставления предложений из Википедии представлен в , пожалуйста, используйтеэтот скрипт(Предупреждение: загрузка данных и обучение модели занимает много времени):

$bash examples/wikipedia_sentence_matching_full.sh

ArticleSpace изучает вложения предложений и статей

использовать:Изучите сопоставление между предложениями и артиклями. Учитывая вложение предложения, можно найти связанные статьи.

Модель:Каждый пример представляет собой предложение, содержащее несколько артиклей. Во время обучения в качестве входных данных используются случайно выбранные предложения, затем оставшиеся предложения в статье становятся метками, а другие статьи могут использоваться в качестве случайных отрицаний. (режим поезда 2).

Пример скрипта:

этот пример скриптаСкачаем данные, каждый пример которых является статьей из Википедии, и запустим на них модель StarSpace:

$bash examples/wikipedia_article_search.sh

чтобы работатьЭто эссеПолный эксперимент с проблемой сопоставления предложений из Википедии представлен в , пожалуйста, используйтеэтот скрипт(подсказка: для загрузки данных и обучения модели потребуется некоторое время):

$bash examples/wikipedia_article_search_full.sh

ImageSpace изучает вложения изображений и меток

С последним обновлением StarSpace также можно использовать для изучения встраивания изображений и других объектов. Например, изображения могут быть представлены с использованием функций ResNet (последний уровень предварительно обученной модели ResNet) и встроены в другие объекты (слова, хэштеги и т. д.). Как и другие сущности в StarSpace, изображения могут быть на входах или метках, в зависимости от задачи.

Здесь мы даем использованиеCIFAR-10пример, чтобы проиллюстрировать, как мы можем проводить обучение изображения с другими объектами (в данном случае классом изображения): мы обучаем модельResNeXtОн достигает точности 96,34% в тестовом наборе данных на CIFAR-10 и использует последний уровень ResNet в качестве функции для каждого изображения. Мы используем StarSpace для встраивания 10 классов изображений вместе с функциями изображений в одно и то же пространство. Для примера класса 1 последнего слоя (0,8, 0,5,..., 1,2) преобразуем в следующий формат:

d1:0.8  d2:0.5   ...    d1024:1.2   __label__1

После преобразования обучающих и тестовых случаев CIFAR-10 в вышеуказанный формат мы запускаемэтот пример скрипта:

$bash examples/image_feature_example_cifar10.sh

Точность 96,56% достигается в среднем каждые 5 раз.

Полная документация по параметрам

    运行 "starspace train ..." 或 "starspace test ..."

    以下参数是训练时必须的:
      -trainFile       训练文件路径。
      -model           模型文件输出路径。

    以下参数是训练时必须的:
      -testFile        测试文件路径。
      -model           模型文件路径。

    以下是字典相关的可选参数:
      -minCount        单词量的最少个数,默认为 1。
      -minCountLabel   标签量的最少个数,默认为 1。
      -ngrams          单词元数的最大长度,默认为 1。
      -bucket          buckets 的数量,默认为 2000000。
      -label           标签量前缀,默认为 __label__,可参加文件格式一节。

    以下参数是训练时可选的:
      -initModel       如果非空,则在 -initModel 中加载先前训练过的模型并进行训练。
      -trainMode       选择 [0, 1, 2, 3, 4, 5] 中的一个值,参见训练模式一节,默认为 0。
      -fileFormat      当前支持‘fastText’和‘labelDoc’,参见文件格式一节,默认为 fastText。
      -saveEveryEpoch  在每次迭代后保存中间模型,默认为 false。
      -saveTempModel   在每次迭代之后用包括迭代词的的唯一名字保存中间模型,默认为 false。
      -lr              学习速度,默认为 0.01。
      -dim             嵌入矢量的大小,默认为 10。
      -epoch           迭代次数,默认为 5。
      -maxTrainTime    最长训练时间(秒),默认为 8640000。
      -negSearchLimit  抽样中的拒绝上限,默认为 50。
      -maxNegSamples   一批更新中的拒绝上限,默认为 10。
      -loss            loss 函数,可能是 hinge 或 softmax 中的一个,默认为 hinge。
      -margin          hinge loss 的边缘参数。只在 loss 为 hinge 时有意义,默认为0.05。
      -similarity      选择 [cosine, dot] 中的一个,用于在 hinge loss 选定相似度函数。
                       只在 loss 为 hinge 时有意义,默认为 cosine。
      -adagrad         是否在训练中使用 adagrad,默认为 1。
      -shareEmb        是否对LHS和RHS使用相同的嵌入矩阵,默认为 1。
      -ws              在 trainMode 5 时有效,单词级别训练的上下文窗口大小,默认为 5。
      -dropoutLHS      LHS特征的放弃概率,默认为 0。
      -dropoutRHS      RHS特征的放弃概率,默认为 0。
      -initRandSd      嵌入的初始值是从正态分布随机生成的,其中均值为 0,标准差为 initRandSd,默认为 0.001。

    以下参数是测试时可选的:
      -basedoc         一组标签的文件路径与真实标签进行比较。 -fileFormat='labelDoc' 时需要。
                       在 -fileFormat ='fastText' 且 不提供 -basedoc 的情况下,我们将会对真正的标签与字典中的所有其他标签进行比较。
      -predictionFile  保存预测的文件路径。如果不为空,则将保存每个示例的前K个预测。
      -K               如果 -predictionFile 参数非空,为每个实例进行的顶层的 K 预测将被保存。

    以下参数是可选的:
      -normalizeText   是否为输入文件运行基本的文本预处理,默认为 0,不进行预处理。
      -useWeight       输入文件是否自带权重,默认为 0,不自带权重。
      -verbose         消息输出详细程度,默认为 0,普通输出。
      -debug           是否使用调试模式,默认为 0,关闭调试模式。
      -thread          线程数量,默认为 10。

Примечание: мы используем тот жеfastTextРеализация той же словесной n-граммы в . Когда для "-ngrams" установлено значение больше 1, для n-грамм используется хеш-карта размера, указанного параметром "-bucket"; когда для "-ngrams" установлено значение 1, хэш-карта не используется, и Словарь содержит все слова в рамках ограничений minCount и minCountLabel.

Utility Functions

Мы также предоставляем некоторые полезные функции для StarSpace:

Показать прогнозы для запроса

Простой способ проверить качество обученной модели встраивания — проверить прогнозы по мере ввода ввода. Чтобы построить и использовать служебную функцию, выполните следующие команды:

make query_predict
./query_predict <model> k [basedocs]

в<model>Указывает обученную модель StarSpace, а необязательный K указывает, сколько лучших прогнозов (номер один) отображать. файл «basedocs», указывающий на файлы для сортировки, см. также одноименный параметр в главном StarSpace выше. Если «базовый класс» не указан, используется тег из словаря.

После загрузки модели она считывает строку сущностей (которая может быть словом или предложением/документом) и выводит прогноз.

запрос ближайшего соседа

Еще один простой способ проверить качество обученной модели встраивания — проверить ближайших соседей сущностей. Чтобы построить и использовать служебную функцию, выполните следующие команды:

make query_nn
./query_nn <model> [k]

в<model>Укажите обученную модель StarSpace, необязательный параметр K (значение по умолчанию — 5) указывает количество ближайших соседей для поиска.

После загрузки модели она считывает ряд объектов (которые могут быть словом или предложением/документом) и выводит ближайший объект в пространстве встраивания.

Распечатать Nграммы

Поскольку используемые в модели нграммы не сохраняются в формате tsv, мы также предоставляем отдельную функцию для вывода вложений нграмм в модель. Чтобы использовать его, выполните следующую команду:

make print_ngrams
./print_ngrams <model>

в<model>Обученная модель StarSpace с указанным параметром -ngrams > 1.

Печать предложения/встраивания документа

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

make embed_doc
./embed_doc <model> [filename]

в<model>Указана обученная модель StarSpace. Если указано имя файла, каждое предложение/документ считывается строка за строкой из файла, и векторное вложение выводится соответствующим образом. Если имя файла не указано, он считывает каждое предложение/документ со стандартного ввода.

Цитировать

Если вы используете StarSpace в своей работе, укажите этоДокументы arXiv:

@article{wu2017starspace,
  title={StarSpace: Embed All The Things!},
  author = {{Wu}, L. and {Fisch}, A. and {Chopra}, S. and {Adams}, K. and {Bordes}, A. and {Weston}, J.},
  journal={arXiv preprint arXiv:{1709.03856}},
  year={2017}
}

связаться с нами

  • Группа в фейсбуке:StarSpace Users
  • emails: ledell@fb.com, jase@fb.com

Программа перевода самородковэто сообщество, которое переводит высококачественные технические статьи из Интернета сНаггетсДелитесь статьями на английском языке на . Охват контентаAndroid,iOS,внешний интерфейс,задняя часть,блокчейн,продукт,дизайн,искусственный интеллектЕсли вы хотите видеть более качественные переводы, пожалуйста, продолжайте обращать вниманиеПрограмма перевода самородков,официальный Вейбо,Знай колонку.