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

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.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?

  • 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)
Би 2 Персонаж биграм (с + 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

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

PoS tag list in Japanese and correspondence to BCCWJ tags

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

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


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