Замечательный модуль сообщества

Ракутен М.А.

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"));затем 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. (А OPTIONALLY, 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который применяет квантование функций (подробности см. В [Hagiwara and Sekine COLING 2014]), чтобы уменьшить размер обученной модели.

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

Документация по API

Конструктор Описание
RakutenMA(model, phi, c) . Создает RakutenMA новый новый экземпляр model(необязательно) указывает на объект экземпляра модели с Инициализировать RakutenMA. phiИ c(необязательными) являются Hyper Параметры ВПЗ ( по умолчанию: phi = 2048, c = 0.003906).
Методы Описание
tokenize(input) Токенизирует input(строку) и возвращает токенизированный результат (пары [токен, тег PoS]).
train_one(sent) Обновления Текущая модель (при необходимости) , используя полученный ответ sent([токенов, плазменном Tag] пары). Возвращаемого значения объект с тремя свойствами ans, sysи updated, где ansЗаданный ответ (то же самое sent), sysIS Система выводит с использованием (старой) модели и 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-bit хэш-пространством может быть создана путем вызова RakutenMA.create_hash_func(bit).

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

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

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

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

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

  • A. Мы подтвердили, что 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. Да, если вы соблюдаете условия и положения. Подробности см. В разделе «Условия и положения» выше.

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

  • 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).

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

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

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

  • A. Да и нет. Хотя внутренняя структура данных моделей одинакова, вам необходимо добавить присвоение (например, 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)
w0 Юниграмма (c0)
w1 Униграмма символа (c + 1)
w2 Униграмма символа (c + 2)
w3 Униграмма символа (c + 3)
c7 Юниграмма символьного типа (т-3)
c8 Юниграмма символьного типа (т-2)
c9 Юниграмма символьного типа (т-1)
c0 Юниграмма символьного типа (t0)
c1 Юниграмма символьного типа (t + 1)
c2 Юниграмма символьного типа (t + 2)
c3 Юниграмма символьного типа (t + 3)
b7 Символьная биграмма (c-3 c-2)
b8 Символьная биграмма (c-2 c-1)
b9 Символьная биграмма (c-1 c0)
b1 Биграмма символов (c0 c + 1)
Би 2 Биграмма символов (c + 1 c + 2)
b3 Биграмма символов (c + 2 c + 3)
d7 Биграмма символьного типа (т-3 т-2)
d8 Биграмма символьного типа (т-2 т-1)
d9 Биграмма символьного типа (t-1 t0)
d1 Биграмма символьного типа (t0 t + 1)
d2 Биграмма символьного типа (t + 1 t + 2)
d3 Биграмма символьного типа (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

Ярлык Описание
ОБЪЯВЛЕНИЕ Наречие
В КАЧЕСТВЕ Аспект Частица
BA ba3 (в конструкции ba)
CC Координационное соединение
CD количественное числительное
CS Подчинительный союз
DEC de5 (Комплементатор / Номинализатор)
ГРАДУС de5 (Родительный падеж / ассоциативный)
DER de5 (Результат)
DEV de5 (Манера)
DT Определитель
ТАК ДАЛЕЕ Другие
FW Иностранное слово
IJ Междометие
JJ Другое существительное-модификатор
ФУНТ bei4 (в длинной конструкции bei)
LC Локализатор
M Измерьте слово
MSP Другая частица
NN Другое существительное
NN-КОРОТКИЙ Другое существительное (сокращ.)
NR Имя собственное
NR-КОРОТКИЙ Имя собственное (сокращ.)
NT Временное существительное
NT-КОРОТКИЙ Временное существительное (аббревиатура)
OD Порядковый номер
НА Звукоподражание
п Предлог
PN Местоимение
ПУ Пунктуация
SB bei4 (сокращенно bei-конструкция)
SP Заключительная часть предложения
URL URL
VA Предикативное прилагательное
ВК Копула
VE you3 (Главный глагол)
ВВ Другой глагол
Икс Другие

PoS tag list in Japanese and correspondence to BCCWJ tags

Ярлык Оригинальное название JA английский
Ac Прилагательное-общее Прилагательное-общее
A-dp Прилагательные-не самонадеянный Прилагательно-зависимый
C Соединяющие слова Соединение
D синоним Местоимение
E английский Английское слово
F наречие Наречие
IC Прикосновение к глаголам-General Междометие-Общее
Jc Формы слов-общие Прилагательное существительное-общее
Дж-тари Форма слова- タ リ Прилагательное Существительное-Тари
J-xs Форма слова - вспомогательная основа глагола Прилагательное существительное-Aux основа глагола
М-аа Марка субсидии-AA Вспомогательный знак-АА
Mc Общий знак субсидии Вспомогательный знак-Общий
M-cp Субсидия - закрывающая скобка Вспомогательный знак - открывающая скобка
M-op Отметка о субсидии в скобках Вспомогательный знак-закрывающая скобка
Mp Марочный период субсидии Вспомогательный знак-точка
Nn Существительное Существительное-существительное
N-NC Существительное-нарицательное Существительное-нарицательное существительное
Н-пн Существительное-собственное существительное Существительное-существительное собственное
N-xs Основа существительного-вспомогательного глагола Основа существительного-Aux
О そ の 他 Другие
п Совместные слова Приставка
P-fj Вспомогательно-нареч. Частица-наречия
P-jj Вспомогательные слова - квазисубъективные вспомогательные слова Частично-Фразовый
Pk Вспомогательные слова - вспомогательные слова в регистре Маркировка твердых частиц
P-rj Вспомогательные слова - Вспомогательные слова Связывание частиц
P-sj Вспомогательные слова - Вспомогательные слова Частица-Конъюнктив
Qa Суффикс-прилагательное Суффикс-прилагательное
Qj Слова в форме суффикса Суффикс-прилагательное существительное
Qn Суффикс-существительное Суффикс-существительное
Qv Суффиксно-вербальный Суффикс-глагол
р Сочлененные слова Adnominal прилагательное
Sc Марк-генерал Знак-Общий
Sl Отметить текст Подписать письмо
U URL URL
Vc Глагол-общий Глагол-Общий
V-dp Глаголы-возможность независимости Глагол-зависимый
W пустой Пробел
Икс Вспомогательный глагол AuxVerb

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

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

использованная литература

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

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

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

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


© Проект Rakuten NLP, 2015. Все права защищены. / При поддержке Rakuten, Inc. и Rakuten Institute of Technology .