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

Rakuten MA

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

введение

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

Ракутен М.А. обладает следующими уникальными особенностями:

  • Чистая реализация JavaScript. Работает как на современных браузерах, так и на node.js.
  • Реализует независимую от языка модель маркировки символов, выводит сегментацию слов и теги PoS для китайского / японского языков.
  • Supports incremental update of models by online learning (Soft Confidence Weighted , Wang et al. ICML 2012).
  • Настраиваемый набор функций.
  • Supports feature hashing , квантования и сокращения для представления компактной модели.
  • В комплекте с китайскими и японскими моделями, обученными из общих корпораций (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. Load an existing model , например, 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. Prepare your training corpus (a set of training sentences where a sentence is just an array of correct [token , тегов 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. Prepare your training data (this could be as few as a couple of sentences , в зависимости от того, что и сколько вы хотите «переобучить».)
  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] чтобы создать уменьшенную версию файла модели. Помните: он также удаляет часть «sigma» обученной модели, что означает, что вы больше не можете повторно - обучить минимизированную модель. При необходимости сначала переобучите модель, а затем минимизируйте ее.

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

конструктор описание
RakutenMA(model, phi, c) Создает новый экземпляр RakutenMA. model (необязательно) указывает объект модели для инициализации экземпляра RakutenMA с помощью. phi и c (оба необязательных) являются гиперпараметрами SCW (по умолчанию: phi = 2048 , c = 0.003906 ).
методы описание
tokenize(input) Токенизирует input (строку) и возвращает токенизированный результат (пары [token, PoS tag]).
train_one(sent) Обновляет текущую модель (при необходимости), используя данный sent ответ (пары [token, PoS tag]). Возвращаемое значение - это объект с тремя свойствами 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 в качестве наборов RakutenMA.default_featset_zh по умолчанию для японского и китайского 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 License версии 2.0 http://www.apache.org/licenses/LICENSE-2.0.html .

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

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

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

  • A. We confirmed that Rakuten MA runs in the following environments :
    • 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. Yes , если вы следуете правилам и условиям. Подробности см. В разделе «Условия и положения» выше.

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

  • О. Пожалуйста, создайте проблему на Github. 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.

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

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

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

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

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

  • A. Yes and no. Although internal data structure of models is the same , вам нужно добавить присваивание (например, var model = [JSON representation]; ), чтобы ссылаться на него в браузерах. См. Разницу между model_zh.json ( для Node.js) и model_zh.js (для браузеров). Есть мини-скрипт scripts/convert_for_browser.js который делает это для вас. Мы рекомендуем вам поработать с Node.js для обучения модели и т. д., а затем конвертировать его для использования браузером ,

аппендикс

Supported feature templates

Шаблон функции описание
W7 Unigram персонажа (с-3)
W8 Unigram персонажа (с-2)
w9 Unigram персонажа (с-1)
w0 Unigram персонажа (c0)
w1 Unigram персонажа (c + 1)
w2 Unigram персонажа (c + 2)
w3 Unigram персонажа (с + 3)
c7 Тип персонажа униграмма (т-3)
с8 Тип персонажа униграмма (т-2)
с9 Тип персонажа униграмма (т-1)
c0 Тип персонажа униграмма (t0)
c1 Тип персонажа униграмма (т + 1)
c2 Тип персонажа униграмма (т + 2)
c3 Тип персонажа униграмма (т + 3)
b7 Персонаж биграм (с-3 с-2)
b8 Персонаж биграм (с-2 с-1)
b9 Персонаж биграм (с-1 с0)
b1 Персонаж биграм (c0 c + 1)
b2 Персонаж биграм (с + 1, с + 2)
b3 Персонаж биграм (с + 2 с + 3)
d7 Тип персонажа биграм (т-3, т-2)
d8 Тип персонажа биграмм (т-2, т-1)
d9 Тип персонажа биграмм (т-1 т0)
d1 Тип персонажа биграмм (t0 t + 1)
d2 Тип персонажа биграмм (т + 1 т + 2)
d3 Тип персонажа биграмм (т + 2 т + 3)
другие Если вы укажете настраиваемую функцию featset массиве featset , функция будет вызываться с двумя аргументами _t и i , где _t - это функция, которая занимает позицию j и возвращает объект символа в этой позиции, а i - текущую позицию. Символьный объект - это объект с двумя свойствами c и t которые являются символами и типами символов, соответственно. Возвращаемое значение этой функции используется в качестве значения функции. (Например, если вы указываете функцию f(_t, i) которая returns _t(i).t; затем он возвращает тип символа текущей позиции, который в основном совпадает с шаблоном c0 .)

PoS tag list in Chinese

тег описание
нашей эры наречие
AS Аспект Частица
BA ba3 (в ба-конструкции)
CC Координационное соединение
CD Кардинальный номер
CS Подчиняющее соединение
декабрь de5 (Комплементизатор / Номинализатор)
DEG de5 (родительный / ассоциативный)
DER de5 (результативный)
DEV de5 (Манер)
DT детерминанта
ETC другие
FW Иностранное слово
И.Я. междометие
JJ Другое существительное-модификатор
LB bei4 (в длинном bei-строительстве)
LC локализатор
M Мера слова
MSP Другая частица
Н.Н. Другое существительное
NN-SHORT Другое существительное (сокращ.)
NR Собственное существительное
NR-SHORT Собственное существительное (сокращ.)
NT Временное существительное
NT-SHORT Временное существительное (сокращ.)
О.Д. Порядковый номер
ON звукоподражание
P препозиция
PN местоимение
PU пунктуация
SB bei4 (вкратце, bei-конструкция)
SP Финальная часть предложения
URL URL
В.А. Предикативное прилагательное
VC амбоцептор
В.Е. you3 (основной глагол)
В.В. Другой глагол
X другие

PoS tag list in Japanese and correspondence to BCCWJ tags

тег Оригинальное имя JA английский
переменный ток Прилагательное - Общие Прилагательное-Общие
A-дп Прилагательное - без опоры на собственные силы можно Прилагательное-зависимых
С Подобрать слова конъюнкция
D синоним местоимение
Е радиоактивной английский язык Английское слово
F наречие наречие
ИС Движущиеся слова-генерал Междометие-Общие
Jc Форма слово-генерал Прилагательное существительное-общее
J-тари Форма слова Прилагательное Существительное-Тари
J-XS Форма слова вспомогательного глагола основы Прилагательное существительное-AuxVerb ствол
М-аа Символ субсидии -AA Вспомогательный знак-АА
Mc Субсидия символ генерала Вспомогательный знак-Common
М-ф Субсидия символ-скобка закрыта Вспомогательный знак-открывающая скобка
M-оп Субсидируемый символ - открытая скобка Вспомогательный знак-закрывающая скобка
член парламента Субсидия символ-период Вспомогательный знак-Период
Nn Существительное - существительное Существительное-Существительное
N-н.д. Существительное-нарицательное Существительное-Нарицательное
N-рп Существительное-внутреннее существительное Существительное-Правильное Существительное
N-XS Существительные вспомогательные слова Существительное AuxVerb ствол
О そ の 他 другие
P Совместная речь префикс
Р-ц Вспомогательное слово Частица-Обстоятельство
Р-JJ Вспомогательное слово Частица-Фразовый
Pk Вспомогательное слово Маркировка по частям
Р-т Вспомогательное слово Частица-Binding
Р-SJ Вспомогательное слово Частица-Конъюнктивный
контроль качества Суффикс - прилагательные Суффикс-Прилагательное
Qj Слово в форме суффикса Суффикс-прилагательное существительное
Qn Суффикс - существительное Суффикс-Существительное
Qv Суффикс - глагол Суффикс-Verb
R сиамские слово Адноминальное прилагательное
Южная Каролина Марк - общий Sign-Common
Sl Марк - Текст Вход Письмо
U URL URL
Vc Глагол - Общие Глагол-Общие
V-дп Глагол - Non-я может Глагол-зависимых
W пустой Пробелы
X Вспомогательный глагол AuxVerb

Подтверждения

Разработчики хотели бы поблагодарить Satoshi Sekine, Satoko Marumoto, Yoichi Yoshimoto, Keiji Shinzato, Keita Yaegashi и Soh Masuko за их вклад в этот проект.

ссылки

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

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

Jialei Wang, Peilin Zhao и Steven C. Hoi. Точное мягкое, взвешенное по доверию обучение. В сборнике ICML 2012, страницы 121–128, 2012. [ PDF ]

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


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