Watlink

Материал из NLPub
Перейти к: навигация, поиск

Watlink — специализированный метод построения асимметричных семантических отношений между отдельными значениями слов.[1]

Связи между значениями слов.

Алгоритм

Разрешение многозначности в иерархическом контексте (выделен штрихом).

Вход: множество синсетов \mathcal{S}, множество упорядоченных пар слов R.

Алгоритм:

   for S \in \mathcal{S}
   
       \textrm{hctx}(S) \gets \{h : w \in \text{words}(S), (w, h) \in R\}
       
   for S \in \mathcal{S}
   
       for h \in \textrm{hctx}(S)
       
           \textrm{tf}(h, S) \gets \frac{|h' \in \textrm{hctx}(S) : h = h'|}{|\textrm{hctx}(S)|}
       
           \textrm{idf}(h, \mathcal{S}) \gets \log\frac{|\mathcal{S}|}{|S' \in \mathcal{S} : h \in \textrm{hctx}(S')|}
       
           \textrm{tf-idf}(h, S, \mathcal{S}) \gets \textrm{tf}(h, S) \times \textrm{idf}(h, \mathcal{S})
       
   for S \in \mathcal{S}
   
       for h \in \textrm{hctx}(S)
       
           \widehat{\textrm{hctx}}(S) \gets \{{\arg\max}_{S' \in \mathcal{S}, S \neq S', h' \in S', \text{words}(\{h'\})=\{h\}} \operatorname{sim}(\textrm{hctx}(S), S') : h \in \textrm{hctx}(S)\}

Выход: множество упорядоченных пар \cup_{S \in \mathcal{S}} S \times \textrm{hctx}(S).

Расширение

Расширение иерархического контекста.

В иерархические контексты можно добавить дополнительные слова при помощи поиска семантически близких слов и проверки с использованием матрицы линейного преобразования, полученной при помощи Hyperstar. Проверка основана на применении линейного преобразования и сопоставления расстояния полученного вектора с расстоянием до вышестоящего слова.[2]

Вход: иерархический контекст \mathrm{hctx}(S) синсета S, матрица линейного преобразования \Phi, n ближайших соседей, пороговое расстояние \delta.

Инициализация: получить векторное представление каждого слова \vec{v} и \vec{h}, входящих в R.

Алгоритм:

   \mathrm{hctx}(S) \gets \mathrm{hctx}(S) \cup \{(w, h') : (w, h) \in \mathrm{hctx}(S), h' \in \operatorname{NN}_n(\vec{h}), \|\vec{w}\Phi - \vec{h}\| < \delta\}

Выход: иерархический контекст \mathrm{hctx}(S).

Доступность

Эталонная реализация алгоритма Watlink доступна на GitHub на условиях лицензии MIT.

Установка

Реализация Watlink работает под управлением Linux. Понадобится интерпретатор Python 3.4, Bash, GNU AWK, GNU Make.

$ git clone https://github.com/dustalov/watlink.git

При невозможности использовать Git, можно скачать архив с исходниками с GitHub.

Использование

Из-за особенностей работы локалей, рекомендуется выполнять все команды в окружении с установленными переменными окружения LANG=en_US.UTF-8 и LC_COLLATE=C. Это сэкономит много времени и нервов.

Установка зависимостей

Watlink требует несколько внешних библиотек и утилит для работы. Их загрузка и сборка осуществляется автоматически при помощи специальной команды. Утилиты устанавливаются локально.

$ make deps

Поскольку Faiss требует наличие базовых подпрограмм линейной алгебры, то можно указать путь к библиотеке OpenBLAS с помощью переменной окружения BLASLDFLAGS=$HOME/anaconda3/pkgs/openblas-0.2.19-0/lib/libopenblas.so.0 при выполнении Make.

Загрузка исходных данных

Пример исходных данных может быть получен путём выполнения команды make в корневой директории Watlink.

$ make data-ru data-en

При загрузке части русскоязычных данных может возникнуть ошибка, связанная с отсутствием в свободном доступе Малого академического словаря, а также словарей РуТез и RuWordNet. Возникновение этих ошибок не препятствует выполнению команд в Makefile.

Выполнение алгоритма Watlink

Реализация алгоритма Watlink представлена в программе link.py. Программа работает в режиме командной строки и принимает следующие аргументы:

  • --synsets — путь к файлу с синсетами;
  • --isas — путь к файлу с отношениями между словами;
  • --weight — подход к взвешиванию контекстов: tf, idf, tfidf (по умолчанию);
  • -k — количество наиболее весомых слов в контексте (по умолчанию: 6).

Печать результата производится в поток стандартного вывода.

$ ./link.py --synsets=synsets.tsv --isas=isas.txt >linked.tsv

В программе использован параллелизм независимых задач с обработкой в нескольких процессах. Программа использует все доступные ядра ЦПУ для ускорения вычислений.

Форматы файлов

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

Получение размеченных пар слов

Для получения списка пар слов для оценки имеется программа linked-isas.awk, преобразующая результат работы Watlink в TSV-файл с двумя колонками: нижестоящее значение слова, вышестоящее значение слова.

$ ./linked-isas.awk linked.tsv >linked-isas.txt

Оценка качества

Метод оценки качества на основе поиска пути в графе золотого стандарта представлен в программе eval/pathwise.py. Программа работает в режиме командной строки и принимает следующие аргументы:

  • --gold — путь к файлу с парами значений слов в золотом стандарте;
  • --significance — определение статистической значимости результатов (выключено по умолчанию);
  • --alpha — уровень значимости при определении статистической значимости результатов (по умолчанию 0.01);
  • path — путь к файлу с результатами, можно указать несколько разных файлов.

Определение статистической значимости основано на вычислении меры качества для каждого слова и проверке критерия Уилкоксона для связных выборок.[3] Не рекомендуется включать опцию --significance без особой надобности: это существенно удлиняет процесс вычислений.

$ eval/pathwise.py --gold=data/ru/rwn-isas.txt linked1-isas.txt linked2-isas.txt linked3-isas.txt >pathwise-rwn.tsv

В программе использован параллелизм независимых задач с обработкой в нескольких процессах. Программа использует все доступные ядра ЦПУ для ускорения вычислений.

Формат файла с результатами оценки — TSV с заголовком, всего двенадцать колонок: путь к оцениваемому файлу, количество отношений в нём, количество верных отрицательных ответов, количество ложных положительных ответов, количество ложных отрицательных ответов, количество верных положительных ответов, точность, полнота, F1-мера, ноль или позиция по точности при оценке значимости, ноль или позиция по полноте при оценке значимости, ноль или позиция по F1-мере при оценке значимости.

При работе с результатами удобно использовать сортировку и разбиение по колонкам в терминале: sort -t $'\t' -g -k9r pathwise-rwn.tsv | column -t | less.

Цитирование

@inproceedings{Ustalov:17:dialogue,
  author    = {Ustalov, D.},
  title     = {{Expanding Hierarchical Contexts for Constructing a Semantic Word Network}},
  booktitle = {Computational Linguistics and Intellectual Technologies: Papers from the Annual conference ``Dialogue''. Volume 1 of 2. Computational Linguistics: Practical Applications},
  year      = {2017},
  pages     = {369--381},
  url       = {http://www.dialog-21.ru/media/3959/ustalovda.pdf},
  address   = {Moscow},
  publisher = {RSUH},
  issn      = {2221-7932},
  language  = {english},
}

Ссылки

См. также

Примечания

  1. Ustalov D. (2017), Expanding Hierarchical Contexts for Constructing a Semantic Word Network
  2. Fu R. et al. (2014), Learning Semantic Hierarchies via Word Embeddings
  3. Riedl M., Biemann C. (2016), Unsupervised Compound Splitting With Distributional Semantics Rivals Supervised Methods