BPE: как текст делят на кусочки
BPE — сокращение от английского byte pair encoding, что значит «попарное слияние байтов». Так называют способ собирать кусочки текста: самые частые пары соседних символов склеивают в один кусочек.
Зачем это нужно
Если за единицу взять слово, незнакомые слова остаются проблемой: модель не знает, что с ними делать. BPE даёт набор кусочков, из которых можно собрать любое слово, даже не встреченное при обучении.
Как это работает
Разберём название. Byte — это байт, единица хранения текста в компьютере; pair — пара; encoding — кодирование. Сначала BPE придумали для сжатия файлов: алгоритм находил самую частую пару рядом стоящих байтов и заменял её одним новым байтом, отчего файл становился короче.
Sennrich и соавторы приспособили этот приём к тексту: те же действия делают не с байтами, а с символами и их частями. Работу BPE делят на две части: обучение и кодирование.
Обучение. Текст сначала режут на отдельные символы. Потом много раз повторяют один шаг: считают, какая пара соседних символов встречается чаще всего, и склеивают эту пару в один новый символ. Так из букв постепенно собираются части слов. Шаг повторяют k раз; k — это число склеек и единственная настройка алгоритма. Запас кусочков состоит из исходных символов плюс k новых. Склеивают только внутри слов, через пробел алгоритм не перескакивает.
Кодирование. Новый текст режут теми же склейками и в том же порядке, в котором они появились. Частота пар в новом тексте уже не важна.
На практике BPE применяют к байтам текста в кодировке UTF-8. Байтов всего 256, поэтому незнакомых кусочков не бывает.
Пример
Корпус «set new new renew reset renew». Чаще всего рядом стоят буквы n и e — 4 раза (в new дважды и в renew дважды). Их склеивают в ne. Дальше чаще всего рядом стоят ne и w, тоже 4 раза; их склеивают в new.
Что запомнить
- BPE сам находит часто встречающиеся пары символов и склеивает их в кусочки.
- Число склеек k задаёт размер словаря; склейки не переходят границу слова.
- Готовыми склейками можно разрезать любое слово, даже незнакомое.
Где читать дальше
- Jurafsky & Martin, SLP3, гл. 2, раздел 2.4
- Sennrich, Haddow, Birch, Neural Machine Translation of Rare Words with Subword Units, раздел 3.2