Введение
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. и Технологического института Ракутен .