Всем привет! На этой странице я будут выкладывать частичные переводы документации проекта OpenNMT — нейросети для машинного перевода с языка на язык. Начну с главы Tokenization.
Разбиение на лексемы
OpenNMT из коробки предоставляет утилиты токенизации для быстрой обработки новых наборов данных для обучения. Цель токенизации — преобразовать необработанные предложения в последовательности токенов. В этом процессе две основные операции выполняются последовательно:
- нормализация — применяет единообразные преобразования к исходным последовательностям для идентификации и защиты специальных последовательностей (например, url), нормализации символов (например, все типы кавычек, варианты Unicode) или даже для нормализации некоторых вариантов (например, дат) в уникальное представление упрощённое для процесса перевода.
- токенизация — преобразует фактическое нормализованное предложение в последовательность разделённых пробелами токенов вместе с возможными особенностями (регистр).
Нормализация
Нормализация выполняется инструментом командной строки, который должен работать в режиме «конвейера»: предложения из стандартного ввода нормализуются и выводятся на стандартный вывод. Например, следующий скрипт на python нормализует представление юникода (используя представление NFC), превращает французские кавычки «» в английские кавычки “” и защищает последовательности «хэштегов»:
#!/usr/bin/python
# -*- coding: utf-8 -*-
import unicodedata
import re
import sys
for line in sys.stdin:
line = line.strip()
line = unicodedata.normalize('NFC', line.encode('utf8'))
line = line.replace(u"«", u"“").replace(u"»", u"”")
line = line.encode('utf8').sub(r'(^|[^S\w])#([A-Za-z0-9_]+)', '\\1⦅#\\2⦆')
print(line)
Скрипт нормализации вызывается как часть токенизации с добавлением опции -normalize_cmd «normalize.py».
Токенизация
Чтобы токенизировать корпус:
perl tools\tokenizer.perl OPTIONS < file > file.tok
Чтобы посмотреть доступные режимы токенизации используйте опцию -h.
Детокенизация
Чтобы привести текст обратно к привычному для человека виду используйте:
perl tools\detokenize.perl OPTIONS < file.tok > file.detok