Документация OpenNMT на русском языке!

Всем привет! На этой странице я будут выкладывать частичные переводы документации проекта 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