Данный notebook содержит примеры команд и скриптов, с помощью которых можно собрать словари со-встречаемостей. Все необходимые для запуска файлы находятся в https://github.com/bigartm/bigartm-book/tree/master/junk/cooc_dictionary. Просьба прочитать для начала разделы в документации по сборке файлов со-встречаемостей:
Предположим, мы склонировали репозиторий и находимся в дирректории с файлами (важно использовать последнюю версию master, иначе если использовать слишком старую версию, результаты могут быть другими). Посмотрим, что у нас есть:
ls -l
-rwxrwxrwx 1 root root 91 Jul 8 22:15 clean.sh
-rwxrwxrwx 1 root root 42383 Jul 8 22:32 cooc_df_
-rwxrwxrwx 1 root root 42383 Jul 8 22:32 cooc_tf_
-rwxrwxrwx 1 root root 163798 Jul 8 22:19 dictionary.txt
-rwxrwxrwx 1 root root 32617 Jul 8 22:34 example_of_gathering.ipynb
-rwxrwxrwx 1 root root 2557 Jul 8 22:19 get_vocab.ipynb
-rwxrwxrwx 1 root root 199 Jul 8 22:32 launch.sh
-rwxrwxrwx 1 root root 46099 Jul 8 22:32 ppmi_df_
-rwxrwxrwx 1 root root 54793 Jul 8 22:32 ppmi_tf_
-rwxrwxrwx 1 root root 64380 Jul 8 22:19 vocab.txt
-rwxrwxrwx 1 root root 95266 May 10 20:22 vw.txt
vw.txt
$-$ коллекция в Vowpal Wabbit формате, в этом файле каждая документ записан в отдельной строке, первый токен в строке - название документа, далее в произвольных местах могут находиться токены, начинающиеся с символа '|', они обозначают модальность. Все последующие токены в документе (которые не начинаются с '|') относятся к этой модальности. Дефолтная модальность обозначается |@default_class. Если в документе не была указана модальность, то считается, что токены относятся к дефолтной модальности;vocab.txt
$-$ словарь валидных токенов, со-встречаемости которых будут подсчитаны. Пока что со-встречаемости считаются только внутри модальностей, то есть если 2 токена из разных модальностей, такие со-встречаемости учитываться не будут. Если токен не принадлежит дефолтной модальности (т.е. @default_class), его модальность необходимо указать в vocab.txt
. Стоит обратить внимание, что в vocab модальность указывется без символа '|', к примеру, @default_class;get_vocab.ipynb
позволяет получить vocab.txt
по vw.txt
, в него записываются все уникальные токены коллекции (за исключением токенов модальностей). Обратите внимание, ноутбук пишет vocab.txt
и dictionary.txt
в папку batches
;dictionary.txt
$-$ artm dictionary, собранный по vw.txt
, побочный результат работы get_vocab.ipynb
, в принципе может пригодиться для дальнейших экспериментов с коллекцией;clean.sh
производит очистку текущей дирректории от промежуточных файлов (необязателен, но с ним удобнее);cooc_tf_
, cooc_df_
, ppmi_tf_
, ppmi_df_
$-$ файлы со-встречаемостей и посчитанные по ним PPMI, результат работы алгоритма;launch.sh
$-$ скрипт для запуска утилиты подсчёта со-встречаемостей и PPMI.Заглянем внутрь launch.sh
:
#! /bin/bash
bigartm -c vw.txt -v vocab.txt --cooc-window 10 --cooc-min-tf 5 --write-cooc-tf cooc_tf_
--cooc-min-df 5 --write-cooc-df cooc_df_ --write-ppmi-tf ppmi_tf_ --write-ppmi-df
ppmi_df_
Что данные ключи значат, по порядку:
-c
$-$ прочитать коллекцию;-v
$-$ прочитать vocab;--cooc-window
$-$ задать ширину окна (со-встречаемость токенов учитывается только внутри некоторого окна);--cooc-min-tf
$-$ задать минимальное значение cooc TF (значение ниже данного порога не будут писаться в выходной файл);--cooc-min-df
$-$ аналогично предыдущему, только для cooc DF;--write-cooc-tf
$-$ записать файл с cooc TF по заданному пути, далее указывается путь;--write-cooc-df
, --write-ppmi-tf
, --write-ppmi-df
$-$ аналогично для файлов cooc DF, PPMI TF, PPMI DF.Сейчас те, кто не прочитал документацию, могут не понять, что такое cooc TF, какие-то PPMI, дублируем:
По сути cooc TF означает сколько раз пара встретилась в коллекции внутри окна заданной ширины, а cooc DF $-$ в скольких документах она встретилась хотя бы раз в окне.
В данном примере коллекция взята довольно маленькая $-$ просто, чтоб показать, как всё работает. Конечно, по таким маленьким коллекциях оценивать близость пар слов - не самая лучшая идея, их надо оценивать на больших коллекциях типа Википедии, на которых дисперсия оценки вероятностей относительно маленькая.