Введение
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 как
1git clone https://github.com/rakuten-nlp/rakutenma.git
или загрузите zip-архив отсюда: https://github.com/rakuten-nlp/rakutenma/archive/master.zip
Если у вас установлен Node.js, вы можете запустить демо-версию, выполнив
1node demo.js
что идентично примеру использования ниже.
npm package
Вы также можете использовать Rakuten MA в качестве пакета npm. Его можно установить следующим образом:
1npm 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
- Загрузите существующую модель, например,
model = JSON.parse(fs.readFileSync("model_file"));thenrma = new RakutenMA(model);илиrma.set_model(model); - Укажите
featsetв зависимости от вашего языка (например,rma.featset = RakutenMA.default_featset_zh;для китайского иrma.featset = RakutenMA.default_featset_ja;японского). - Не забудьте использовать 15-битную функцию хеширования функций (
rma.hash_func = RakutenMA.create_hash_func(15);) при использовании объединенных моделей (model_zh.jsonиmodel_ja.json). - Используйте
rma.tokenize(input)для анализа вашего ввода.
Training your own analysis model from scratch
- Подготовьте свой обучающий корпус (набор обучающих предложений, где предложение представляет собой просто массив правильных [токенов, тегов PoS]).
- Инициализируйте экземпляр RakutenMA с помощью
new RakutenMA(). - Укажите
featset. (и, дополнительно,ctype_func,hash_funcи т. д.) - Подавайте обучающие предложения одно за другим (от первого до последнего) в
train_one(sent)метод. - Обычно SCW сходится достаточно после одного
epoch(одного прохода по всему обучающему корпусу), но вы можете повторить шаг 4., чтобы добиться еще большей производительности.
См. scripts/train_zh.js(для китайского языка) и scripts/train_ja.js(для японского языка), чтобы увидеть пример, показывающий, как обучать собственную модель.
Re-training an existing model (domain adaptation, fixing errors, etc.)
- Загрузите существующую модель и инициализируйте экземпляр RakutenMA (см. выше «Использование связанных моделей для анализа китайских/японских предложений»).
- Подготовьте данные для обучения (это может быть всего пара предложений, в зависимости от того, что и насколько вы хотите «перетренировать»).
- Подавайте в метод обучающие предложения одно за другим
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. и Технологического института Ракутен .

