Потрясающий модуль сообщества

Ракутен МА

Японский README (日本语ドキュメント)

Введение

Rakuten MA (морфологический анализатор) — это морфологический анализатор (сегментатор слов + PoS Tagger) для китайского и японского языков, написанный исключительно на JavaScript.

Rakuten MA имеет следующие уникальные особенности:

  • Реализация на чистом JavaScript. Работает как в современных браузерах, так и в node.js.
  • Реализует независимую от языка модель маркировки символов.Выводит сегментацию слов и теги PoS для китайского/японского языка.
  • Поддерживает постепенное обновление моделей посредством онлайн-обучения (Soft Confidence Weighted, Wang et al. ICML 2012).
  • Настраиваемый набор функций.
  • Поддерживает хеширование, квантование и сокращение признаков для компактного представления модели.
  • В комплекте с китайскими и японскими моделями, обученными на основе общих корпусов (CTB [Xue et al. 2005] и BCCWJ [Maekawa 2008]) и корпусов электронной коммерции.

Демо

Вы можете попробовать Rakuten MA на демо-странице (загрузка этой страницы может занять некоторое время).

Применение

Download & Install

Поскольку Rakuten MA — это библиотека JavaScript, установка не требуется. Клонируйте репозиторий git как

1
git clone https://github.com/rakuten-nlp/rakutenma.git

или загрузите zip-архив отсюда: https://github.com/rakuten-nlp/rakutenma/archive/master.zip

Если у вас установлен Node.js, вы можете запустить демо-версию, выполнив

1
node demo.js

что идентично примеру использования ниже.

npm package

Вы также можете использовать Rakuten MA в качестве пакета npm. Его можно установить следующим образом:

1
npm install rakutenma

Файлы моделей можно найти в папке node_modules/rakutenma/.

Usage Example (on Node.js)

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52
// RakutenMA demo // Load necessary libraries var RakutenMA = require('./rakutenma'); var fs = require('fs'); // Initialize a RakutenMA instance // with an empty model and the default ja feature set var rma = new RakutenMA(); rma.featset = RakutenMA.default_featset_ja; // Let's analyze a sample sentence (from http://tatoeba.org/jpn/sentences/show/103809) // With a disastrous result, since the model is empty! console.log(rma.tokenize("彼は新しい仕事できっと成功するだろう。")); // Feed the model with ten sample sentences from tatoeba.com var tatoeba = JSON.parse(fs.readFileSync("tatoeba.json")); for (var i = 0; i < 10; i ++) { rma.train_one(tatoeba[i]); } // Now what does the result look like? console.log(rma.tokenize("彼は新しい仕事できっと成功するだろう。")); // Initialize a RakutenMA instance with a pre-trained model var model = JSON.parse(fs.readFileSync("model_ja.json")); rma = new RakutenMA(model, 1024, 0.007812); // Specify hyperparameter for SCW (for demonstration purpose) rma.featset = RakutenMA.default_featset_ja; // Set the feature hash function (15bit) rma.hash_func = RakutenMA.create_hash_func(15); // Tokenize one sample sentence console.log(rma.tokenize("うらにわにはにわにわとりがいる")); // Re-train the model feeding the right answer (pairs of [token, PoS tag]) var res = rma.train_one( [["うらにわ","N-nc"], ["に","P-k"], ["は","P-rj"], ["にわ","N-n"], ["にわとり","N-nc"], ["が","P-k"], ["いる","V-c"]]); // The result of train_one contains: // sys: the system output (using the current model) // ans: answer fed by the user // update: whether the model was updated console.log(res); // Now what does the result look like? console.log(rma.tokenize("うらにわにはにわにわとりがいる"));

Usage Example (on browsers)

Включите следующий фрагмент кода в <head>свой HTML.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
<script type="text/javascript" src="rakutenma.js" charset="UTF-8"></script> <script type="text/javascript" src="model_ja.js" charset="UTF-8"></script> <script type="text/javascript" src="hanzenkaku.js" charset="UTF-8"></script> <script type="text/javascript" charset="UTF-8"> function Segment() { rma = new RakutenMA(model); rma.featset = RakutenMA.default_featset_ja; rma.hash_func = RakutenMA.create_hash_func(15); var textarea = document.getElementById("input"); var result = document.getElementById("output"); var tokens = rma.tokenize(HanZenKaku.hs2fs(HanZenKaku.hw2fw(HanZenKaku.h2z(textarea.value)))); result.style.display = 'block'; result.innerHTML = RakutenMA.tokens2string(tokens); } </script>

Анализ и результат выглядят так:

1 2 3
<textarea id="input" cols="80" rows="5"></textarea> <input type="submit" value="Analyze" onclick="Segment()"> <div id="output"></div>

Using bundled models to analyze Chinese/Japanese sentences

  1. Загрузите существующую модель, например, model = JSON.parse(fs.readFileSync("model_file"));then rma = new RakutenMA(model);илиrma.set_model(model);
  2. Укажите featsetв зависимости от вашего языка (например, rma.featset = RakutenMA.default_featset_zh;для китайского и rma.featset = RakutenMA.default_featset_ja;японского).
  3. Не забудьте использовать 15-битную функцию хеширования функций ( rma.hash_func = RakutenMA.create_hash_func(15);) при использовании объединенных моделей ( model_zh.jsonи model_ja.json).
  4. Используйте rma.tokenize(input)для анализа вашего ввода.

Training your own analysis model from scratch

  1. Подготовьте свой обучающий корпус (набор обучающих предложений, где предложение представляет собой просто массив правильных [токенов, тегов PoS]).
  2. Инициализируйте экземпляр RakutenMA с помощью new RakutenMA().
  3. Укажите featset. (и, дополнительно, ctype_func, hash_funcи т. д.)
  4. Подавайте обучающие предложения одно за другим (от первого до последнего) в train_one(sent)метод.
  5. Обычно SCW сходится достаточно после одного epoch(одного прохода по всему обучающему корпусу), но вы можете повторить шаг 4., чтобы добиться еще большей производительности.

См. scripts/train_zh.js(для китайского языка) и scripts/train_ja.js(для японского языка), чтобы увидеть пример, показывающий, как обучать собственную модель.

Re-training an existing model (domain adaptation, fixing errors, etc.)

  1. Загрузите существующую модель и инициализируйте экземпляр RakutenMA (см. выше «Использование связанных моделей для анализа китайских/японских предложений»).
  2. Подготовьте данные для обучения (это может быть всего пара предложений, в зависимости от того, что и насколько вы хотите «перетренировать»).
  3. Подавайте в метод обучающие предложения одно за другим train_one(sent).

Reducing the model size

Размер модели по-прежнему может быть проблемой для распределения на стороне клиента даже после применения хеширования признаков scripts/minify.js.

Вы можете запустить его node scripts/minify.js [input_model_file] [output_model_file], чтобы создать мини-версию файла модели. Помните: он также удаляет «сигма» часть обученной модели, а это означает, что вы больше не сможете повторно обучать мини-модель. При необходимости повторите обучение сначала модель, затем минимизируйте ее.

API-документация

Конструктор Описание
RakutenMA(model, phi, c) Создает новый экземпляр RakutenMA. model(необязательно) указывает объект модели для инициализации экземпляра RakutenMA phiи c(оба необязательных) являются гиперпараметрами SCW (по умолчанию: phi = 2048, c = 0.003906).
Методы Описание
tokenize(input) Токенизирует input(строка) и возвращает токенизированный результат (пары [токен, тег PoS]).
train_one(sent) Обновляет текущую модель (при необходимости), используя заданный ответ sent(пары [токен, PoS-тег]).Возвращаемое значение представляет собой объект с тремя свойствами ans, sys, и updated, где ansзаданный ответ (то же, что и sent), sysявляется выводом системы с использованием (старая) модель и updatedпредставляет собой двоичный флаг (True/False), означающий, была ли модель обновлена ​​(поскольку sysотличалась от ans) или нет.
set_model(model) Устанавливает модель экземпляра Rakuten MA на model.
set_tag_scheme(scheme) Устанавливает схему тегов с последовательной маркировкой. В настоящее время поддерживаются "IOB2"и "SBIEO". Указание других схем тегов вызывает исключение.
Характеристики Описание
featset Указывает массив шаблонов объектов (строка), используемых для анализа. Вы можете использовать RakutenMA.default_featset_jaи RakutenMA.default_featset_zhв качестве наборов функций по умолчанию для японского и китайского языков соответственно. Подробную информацию о шаблонах объектов см. ниже («Поддерживаемые шаблоны объектов»).
ctype_func Указывает функцию, используемую для преобразования символа в его тип символа. RakutenMA.ctype_ja_default_funcЭто функция типа символа по умолчанию, используемая для японского языка. Альтернативно вы можете вызвать функцию RakutenMA.create_ctype_chardic_func(chardic)создания типа символа, которая принимает символ для его поиска chardicи возврата его значения. (Для например, RakutenMA.create_ctype_chardic_func({"A": "type1"})возвращает функцию f, где f("A")возвращает "type1"и []иначе.)
hash_func Указывает хеш-функцию, используемую для хеширования объекта. По умолчанию = undefined(без хеширования объекта). Функцию хеширования объекта с bit-битным хеш-пространством можно создать, вызвав RakutenMA.create_hash_func(bit).

Условия и положения

Распространение, модификация и академическое/коммерческое использование Rakuten MA разрешено при условии, что вы соответствуете лицензии Apache версии 2.0 http://www.apache.org/licenses/LICENSE-2.0.html .

Если вы используете Rakuten MA в исследовательских целях, процитируйте нашу статью о Rakuten MA [Hagiwara and Sekine 2014].

FAQ (часто задаваемые вопросы)

Вопрос. Какие браузеры и версии Node.js поддерживаются?

  • О. Мы подтвердили, что Rakuten MA работает в следующих средах:
    • Internet Explorer 8 (версия 8.0.7601.17414 или более поздняя версия)
    • Google Chrome (версия 35.0.1916.153 или выше)
    • Firefox (версия 16.0.2 или выше)
    • Safari (версия 6.1.5 или выше)
    • Node.js (версия 0.10.13 или выше)

В. Разрешено ли коммерческое использование?

  • О. Да, если вы соблюдаете положения и условия. Подробности см. в разделе «Правила и условия» выше.

В. Я обнаружил ошибку/ошибку анализа/и т. д. Куда мне сообщить?

  • A. Создайте проблему на странице Github Issues https://github.com/rakuten-nlp/rakutenma/issues .
  • Alternatively, вы можете создать запрос на включение, если измените код. У Rakuten MA есть набор тестов с использованием Jasmine http://jasmine.github.io/ . Убедитесь, что все тесты пройдены (без ошибок после запуска jasmine-node spec), и напишите свой собственный ( при необходимости) перед отправкой запроса на включение.
  • Finally, если ваш вопрос все еще не решен, свяжитесь с нами по адресу prj-rakutenma [at] mail.rakuten.com.

Вопрос. Результаты токенизации выглядят странно (в частности, предложение разбито на отдельные символы без тегов PoS).

  • A. Проверьте, используете ли вы тот же набор функций ( featset) и функцию хеширования функций ( hash_func), которые использовались для обучения. Не забудьте использовать 15-битную функцию хеширования функций ( rma.hash_func = RakutenMA.create_hash_func(15);) при использовании связанных моделей ( model_zh.jsonи model_ja.json).

Вопрос. Какие шрифты (упрощенные/традиционные) поддерживаются для китайского языка?

  • О. В настоящее время поддерживается только упрощенный китайский язык.

Вопрос. Можем ли мы использовать один и тот же файл модели в формате JSON для браузеров?

  • О. Да и нет. Хотя внутренняя структура данных моделей одинакова, вам необходимо добавить присвоение (например, var model = [JSON representation];), чтобы ссылаться на нее в браузерах. См. разницу между model_zh.json(для Node.js) и model_zh.js(для браузеров). Существует мини-скрипт scripts/convert_for_browser.js, который сделает это за вас. Мы рекомендуем вам поработать с Node.js для обучения моделей и т. д., а затем преобразовать его для использования в браузере.

Приложение

Supported feature templates

Шаблон объекта Описание
w7 Символьная униграмма (c-3)
w8 Символьная униграмма (c-2)
w9 Символьная униграмма (c-1)
ш0 Символьная униграмма (c0)
w1 Символьная униграмма (c+1)
w2 Символьная униграмма (c+2)
w3 Символьная униграмма (c+3)
с7 Тип символа униграмма (t-3)
с8 Тип символа униграмма (t-2)
с9 Тип символа униграмма (t-1)
с0 Тип символа униграмма (t0)
с1 Тип символа униграмма (t+1)
с2 Тип символа униграмма (t+2)
с3 Тип символа униграмма (t+3)
b7 Символьная биграмма (c-3 c-2)
б8 Символьная биграмма (c-2 c-1)
б9 Символьная биграмма (c-1 c0)
б1 Символьная биграмма (c0 c+1)
Би 2 Символьная биграмма (c+1 c+2)
б3 Символьная биграмма (c+2 c+3)
d7 Тип символа биграмма (т-3 т-2)
d8 Тип символа биграмма (t-2 t-1)
d9 Тип символа биграмма (t-1 t0)
d1 Тип символа биграмма (t0 t+1)
d2 Тип символа биграмма (t+1 t+2)
д3 Тип символа биграмма (t+2 t+3)
другие Если вы укажете в массиве настраиваемую функциональную функцию featset, функция будет вызываться с двумя аргументами _tи i, где _t— функция, которая принимает позицию jи возвращает символьный объект в этой позиции, а i— текущая позиция. с двумя свойствами cи tкоторые являются символом и типом символа соответственно. Возвращаемое значение этой функции используется в качестве значения функции. (Например, если вы указываете функцию f(_t, i)которая returns _t(i).t;, то она возвращает тип символа текущей позиции, который по сути то же самое, что и шаблон c0.)

PoS tag list in Chinese

Ярлык Описание
ОБЪЯВЛЕНИЕ Наречие
КАК Аспектные частицы
бакалавр ba3 (в конструкции ba)
СС Координационный союз
CD количественное числительное
CS Подчинительный союз
Декабрь de5 (дополнитель/номинализатор)
ДЭГ de5 (Родительный/ассоциативный падеж)
РЭД de5 (Результат)
РАЗРАБОТЧИК de5 (Манера)
ДТ Определитель
И Т. Д Другие
ФВ Иностранное слово
ij Междометие
Джей-Джей Другое существительное-модификатор
ФУНТ bei4 (в длинной конструкции bei)
ЛК Локализатор
М Измерить слово
MSP Другие частицы
НН Другое существительное
NN-КОРОТКИЙ Другое существительное (сокр.)
NR Имя собственное
NR-КОРОТКИЙ Имя собственное (сокр.)
НТ Временное существительное
NT-КОРОТКИЙ Временное существительное (сокр.)
ОД Порядковый номер
НА Звукоподражание
п Предлог
ПН Местоимение
ПУ Пунктуация
СБ bei4 (сокращенно bei-конструкция)
СП Частица, завершающая предложение
URL-адрес URL-адрес
Вирджиния Предикативное прилагательное
ВК связка
ВЕ you3 (Основной глагол)
ВВ Другой глагол
Икс Другие

PoS tag list in Japanese and correspondence to BCCWJ tags

Ярлык Оригинальное имя JA Английский
переменный ток общее прилагательное Прилагательное-Общее
А-дп прилагательное - несамостоятельный возможный Зависимый от прилагательного
С подбирать слова Соединение
Д местоимение Местоимение
Э Английский Английское слово
Ф наречие Наречие
IC движущийся общий глагол Междометие-Общее
Джей Си Форма слова-общее Прилагательное Существительное-Общее
Дж-тари Форма слова-タリ Прилагательное Существительное-Тари
J-xs Формировать слово-вспомогательную основу слова Основа прилагательного существительного-AuxVerb
М-аа Марка субсидии-АА Вспомогательный знак-АА
Мак Общая отметка субсидии Вспомогательный знак-Общий
М-КП Дополнительная отметка-закрытые скобки Вспомогательный знак-открывающая скобка
М-оп Знак субсидии – открытые скобки Вспомогательный знак-закрывающая скобка
член парламента Марк-период субсидии Вспомогательный знак-Период
Нн существительное - существительное Существительное-Существительное
Н-нк существительное - нарицательное существительное Существительное-нарицательное существительное
Н-пн существительное – имя собственное Существительное-Имя собственное
N-xs существительное-вспомогательная основа Основа существительного-AuxVerb
О そのего Другие
п разъем Префикс
П-фдж частица-наречие Частица-наречие
Пи-джей Частица - частица квазитела Частица-фраза
ПК Частица-корпус частица Маркировка корпусов частиц
Пи-рдж частица - частица Связывание частиц
П-сж Частица – соединяющая частица Частица-Соединительная
Ка суффикс-прилагательное Суффикс-прилагательное
QJ суффикс – форма слова Суффикс-прилагательное существительное
Кн суффикс - существительное Суффикс-существительное
Вопрос суффикс-глагол Суффикс-глагол
р соединенные слова Адноминальное прилагательное
наук Общие обозначения Знак-Общий
СЛ текст токена Знак-Письмо
ты URL-адрес URL-адрес
ВК глагол-общее Глагол-общий
В-дп Глагол – несамостоятельный возможно Зависимый от глагола
Вт пустой Пробелы
Икс вспомогательный глагол AuxVerb

Благодарности

Разработчики хотели бы поблагодарить Сатоши Секинэ, Сатоко Марумото, Ёичи Ёсимото, Кейджи Синдзато, Кейту Яэгаси и Со Масуко за их вклад в этот проект.

Рекомендации

Масато Хагивара и Сатоши Секине. Легкий клиентский китайско-японский морфологический анализатор на основе онлайн-обучения. Демонстрационная сессия COLING 2014, страницы 39–43, 2014 г. [ PDF ]

Кикуо Маэкава, Составление корпуса Kotonoha-BCCWJ (на японском языке), Nihongo no kenkyu (Исследования на японском языке), 4(1):82–95, 2008. (Некоторые сведения на английском языке можно найти здесь .) [ Сайт ]

Цзялей Ван, Пейлин Чжао и Стивен С. Хой. Точное мягкое обучение, взвешенное по доверию. В материалах ICML 2012, стр. 121–128, 2012. [ PDF ]

Найвэнь Сюэ, Фей Ся, Фу-донг Чиу и Марта Палмер. Китайский древовидный банк Пенсильвании: аннотация структуры фраз большого корпуса. Natural Language Engineering, 11(2):207–238, 2005. [ PDF ] [ Сайт ]


© Проект Rakuten NLP, 2014, 2015. Все права защищены. / При поддержке Rakuten, Inc. и Технологического института Ракутен .