Эффективная реализация BPE с использованием очереди приоритетов - PullRequest
0 голосов
/ 07 июня 2018

Я думаю, что это не строго BPE ( кодировка пары байтов ), но есть аналогичная идея, примененная к строкам.

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

  • 喜欢
  • 水果

Затем возьмите следующие данные:

我 喜欢 水果 (мне нравятся фрукты)

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

Мы можем разложить входную строку на несколько одиночных символов.

我 喜 欢 水 果

Затем найдите новую пару символов в [left, right] и объедините их.Если объединенное слово есть в словаре, мы можем заменить объединенное слово новым символом.

  • 我 喜
  • 喜欢 <- в dic </li>
  • 欢10
  • 水果 <- в dic </li>

Мы нашли два новых символа, поэтому вводимый текст становится

我 喜欢 水果

Мы должныитерации, пока мы не сможем найти любое комбинированное слово в словаре.В этом случае мы не можем найти новый символ в словаре.

  • 我 喜欢 水果
  • 喜欢 水果

Это наивно не сложно реализоватьно нам нужно сканировать два смежных слова много раз.Некоторые говорили, что мы можем эффективно реализовать BPE с очередью приоритетов.Я не знаком с алгоритмами сжатия.Буду признателен, если кто-нибудь скажет мне реализацию или полезную документацию.

В этом методе слова из словаря разбиваются на отдельные символы, поэтому мы можем избежать проблем с неизвестными словами.

BestС уважением,

Ссылка: Нейронный машинный перевод редких слов с единицами подслов Ему пришлось начинать с предварительно токенизированных слов из-за сложности вычислений.

1 Ответ

0 голосов
/ 07 июня 2018

Я бы предложил сохранить словарь как trie , используя поиск хеша на каждом уровне.Это заменяет ваши сканы поисками хеша, которые O(1).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...