素晴らしいコミュニティモジュール

Rakuten MA

日本語のREADME(日本語)

はじめに

Rakuten MA(形態素解析)は、純粋にJavaScriptで書かれた中国語と日本語の形態素解析(単語分割+ PoS Tagger)です。

楽天MAには次のユニークな機能があります。

  • 純粋なJavaScript実装:最新のブラウザーとnode.jsの両方で動作します。
  • 言語に依存しない文字タグ付けモデルを実装し、中国語/日本語の単語分割とPoSタグを出力します。
  • Supports incremental update of models by online learning (Soft Confidence Weighted 、Wang et al。ICML 2012)。
  • カスタマイズ可能な機能セット。
  • コンパクトなモデル表現のためのSupports feature hashing 、量子化、およびプルーニングをSupports feature hashing
  • 一般コーパス(CTB [Xue et al。2005]およびBCCWJ [前川2008])およびEコマースコーパスから訓練された中国および日本モデルにバンドルされています。

デモ

デモページで楽天MAを試すことができます(このページの読み込みには時間がかかる場合があります)。

使用法

Download & Install

楽天MAはJavaScriptライブラリであるため、インストールの必要はありません。

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

また、楽天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)

HTMLの<head>に次のコードスニペットを含めます。

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応じてfeatset指定します(例: rma.featset = RakutenMA.default_featset_zh;中国語およびrma.featset = RakutenMA.default_featset_ja;日本語)。
  3. バンドルされたモデル( model_zh.jsonおよびmodel_ja.json )を使用する場合は、15ビットの機能ハッシュ関数( rma.hash_func = RakutenMA.create_hash_func(15); )を使用することを忘れないでください。
  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タグ]のPrepare your training corpus (a set of training sentences where a sentence is just an array of correct [token )。
  2. new RakutenMA() MAインスタンスを初期化します。
  3. featset指定します(オプションでctype_funchash_funcなど)。
  4. トレーニング文を1つずつ(最初から最後まで) train_one(sent)メソッドにフィードします。
  5. 通常、SCWは1 epoch (トレーニングコーパス全体を1回通過)後に十分に収束しますが、ステップ4を繰り返してパフォーマンスをさらに向上させることができます。

参照scripts/train_zh.js (中国人用)およびscripts/train_ja.js独自のモデルをトレーニングする方法を示しAN参照例に(日本語)を。

Re-training an existing model (domain adaptation, fixing errors, etc.)

  1. 既存のモデルをロードし、楽天MAインスタンスを初期化します(上記の「バンドルされたモデルを使用した中国語/日本語の文の分析」を参照)。
  2. Prepare your training data (this could be as few as a couple of sentences 、「再トレーニング」する対象と量に応じPrepare your training data (this could be as few as a couple of sentences程度です。)
  3. トレーニング文を1つずつtrain_one(sent)メソッドに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] ファイルを覚えている縮小さモデルバージョンAのメイクに:.またモデルの「シグマ」パートは、あなたはもはや再することができることを意味しない、訓練を受けたITを削除します-縮小したモデルをトレーニングします。必要に応じて、最初にモデルを再トレーニングしてから、モデルを縮小します。

APIドキュメント

コンストラクター説明
RakutenMA(model, phi, c) 新しい新しいインスタンスRakutenMA作成model 。初期化RakutenMAとオブジェクトモデルインスタンスに(オプション)を指定しphiおよびc (デフォルト(両方ともオプション)SCWのハイパーパラメータであるphi = 2048c = 0.003906 )。
方法説明
tokenize(input) input (文字列)をトークン化し、トークン化された結果([トークン、PoSタグ]ペア)を返します。
train_one(sent) アップデートザ・電流モデル(必要な場合)を使用して、与えられた回答sent ([トークン、PoSとタグ]ペア)。戻り値には3つのプロパティを持つオブジェクトですanssys 、およびupdatedans与えられた答え(同じASのIS sentsysは(古い)モデルを使用したシステム出力であり、 updatedはモデルが更新されたか( sysansと異なるため)かどうかを意味するバイナリ(True / False)フラグです。
set_model(model) 楽天MAインスタンスのモデルをmodel設定します。
set_tag_scheme(scheme) 現在、 "IOB2""SBIEO"がサポートされていますが、他のタグスキームを指定すると例外が発生します。
物性説明
featset 分析に使用する機能テンプレートの配列(文字列)を指定します。日本語と中国語のデフォルト機能セットとして、それぞれRakutenMA.default_featset_jaRakutenMA.default_featset_zhを使用できます。機能テンプレートの詳細については、以下を参照してください(「サポートされる機能テンプレート」) 。
ctype_func 文字をその文字タイプに変換するために使用する関数を指定しますRakutenMA.ctype_ja_default_funcは日本語で使用されるデフォルトの文字タイプ関数です代わりに、 RakutenMA.create_ctype_chardic_func(chardic)を呼び出して文字をRakutenMA.create_ctype_chardic_func(chardic)する文字タイプ関数を作成することもできますchardicで最大値を返します(たとえば、 RakutenMA.create_ctype_chardic_func({"A": "type1"})は、 f("A")"type1"を返し、それ以外の場合は[]返す関数f返します。
hash_func 機能ハッシュに使用するハッシュ関数を指定しますデフォルト= undefined (機能ハッシュなし) bitビットハッシュスペースを持つ機能ハッシュ関数は、 RakutenMA.create_hash_func(bit)呼び出すことで作成できます。

利用規約

Apache Licenseバージョン2.0 http://www.apache.org/licenses/LICENSE-2.0.htmlに準拠している場合、楽天MAの配布、変更、および学術的/商業的使用が許可されます

研究のために楽天MAを使用している場合は、楽天MAに関する論文を引用してください[H原および関根2014]

FAQ(よくある質問)

Q.サポートされているブラウザーとNode.jsバージョンは何ですか?

  • A. We confirmed that Rakuten MA runs in the following environments
    • Internet Explorer 8(ver。8.0.7601.17414以降)
    • Google Chrome(ver。35.0.1916.153以降)
    • Firefox(ver。16.0.2以降)
    • Safari(バージョン6.1.5以降)
    • Node.js(ver。0.10.13以降)

Q.商用利用は許可されていますか?

  • A. Yes 、利用規約に従う限り、詳細については上記の「利用規約」をご覧ください。

Q.バグや分析エラーなどを見つけました。どこに報告すればよいですか?

  • A. Github issues https://github.com/rakuten-nlp/rakutenma/issuesで課題を作成してください
  • Alternatively 、コードを変更するとプルリクエストを作成できます。楽天MAには、Jasmine http://jasmine.github.io/を使用したテストスイートがあります。すべてのテストに合格することを確認してください( jasmine-node spec実行後にエラーが発生しない)プルリクエストを送信する前に、(必要に応じて)独自に作成します。
  • Finally 、質問がまだ解決しない場合は、prj-rakutenma [at] mail.rakuten.comまでご連絡ください。

Q.トークン化の結果が奇妙に見えます(具体的には、文はPoSタグのない個々の文字に分割されます)

  • A. featset使用したものと同じ機能セット( featset )および機能ハッシュ関数( hash_func )を使用しているかどうかを確認します。使用する場合は、15ビットの機能ハッシュ関数( rma.hash_func = RakutenMA.create_hash_func(15); )バンドルされたモデル( model_zh.jsonおよびmodel_ja.json )。

Q.中国語ではどのスクリプト(簡体字/繁体字)がサポートされていますか?

  • A.現在、簡体字中国語のみがサポートされています。

Q.ブラウザに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 キャラクターユニグラム(c-3)
w8 キャラクターユニグラム(c-2)
w9 文字ユニグラム(c-1)
w0 文字ユニグラム(c0)
w1 文字ユニグラム(c + 1)
w2 文字ユニグラム(c + 2)
w3 文字ユニグラム(c + 3)
c7 文字タイプunigram(t-3)
c8 文字タイプunigram(t-2)
c9 文字タイプunigram(t-1)
c0 文字タイプunigram(t0)
c1 文字タイプunigram(t + 1)
c2 文字タイプunigram(t + 2)
c3 文字タイプunigram(t + 3)
b7 キャラクターバイグラム(c-3 c-2)
b8 キャラクターバイグラム(c-2 c-1)
b9 キャラクターバイグラム(c-1 c0)
b1 キャラクターバイグラム(c0 c + 1)
b2 キャラクターバイグラム(c + 1 c + 2)
b3 キャラクターバイグラム(c + 2 c + 3)
d7 文字型バイグラム(t-3 t-2)
d8 文字型バイグラム(t-2 t-1)
d9 文字型バイグラム(t-1 t0)
d1 文字型バイグラム(t0 t + 1)
d2 文字型バイグラム(t + 1 t + 2)
d3 文字型バイグラム(t + 2 t + 3)
その他 featset配列でカスタマイズされた機能関数を指定すると、関数は2つの引数_tおよびiで呼び出されます。ここで、 _tは位置jを取り、その位置にある文字オブジェクトを返し、 iは現在の位置です。文字オブジェクトは、それぞれ文字と文字タイプである2つのプロパティctを持つオブジェクトです。その関数の戻り値は特徴値として使用されます(たとえば、関数f(_t, i)を指定した場合returns _t(i).t;を返すと、現在の位置の文字タイプをreturns _t(i).t; 。これは基本的にテンプレートc0と同じです。

PoS tag list in Chinese

タグ付け説明
AD 副詞
AS アスペクト粒子
BA ba3(ba-construction)
CC 調整接続詞
CD 基数
CS 従属接続詞
12月 de5(補数/名詞化器)
DEG de5(属格/連想)
DER de5(結果)
DEV de5(マナー)
DT 決定要因
ETC その他
FW 外国語
IJ 間投詞
JJ その他の名詞修飾語
LB bei4(長いbei-constructionで)
LC ローカライザー
M 単語を測定
MSP その他の粒子
NN その他の名詞
NN-SHORT その他の名詞(略)
NR 固有名詞
NR-SHORT 固有名詞(略)
NT 時名詞
NT-SHORT 一時名詞(略)
OD 序数
オンオノマトペ
P 前置詞
PN 代名詞
PU 句読点
SB bei4(短いbei-construction)
SP 文末の助詞
URL URL
VA 述語形容詞
VC コピュラ
VE you3(メイン動詞)
VV その他の動詞
X その他

PoS tag list in Japanese and correspondence to BCCWJ tags

タグ付け元のJA名英語
Ac 形容詞一般形容詞共通
A-dp 形容詞形容詞依存
C 副詞接続詞
D 代名詞代名詞
E 英語のスラング英語の単語
F 副詞副詞
Ic 動詞一般間投共通
Jc 一般的な形状形容詞名詞共通
J-タリシェイプワードタリ形容詞名詞
J-XS 形容詞-助動詞形容詞名詞助動詞語幹
M-aa 付与Mark-AA 補助記号AA
マックグラントマークジェネラル補助記号-共通
M-cp 補助記号の閉じ括弧補助符号の開き括弧
M-op 補助金マークブラケットオープン補助記号-閉じ括弧
Mp 補助金マーク期間補助記号の期間
Nn 名詞・名詞名詞・名詞
N-nc 名詞-普通名詞名詞共通名詞
N-pn 名詞固有名詞名詞-固有名詞
N-xs 名詞補助語幹名詞助動詞ステム
O その他その他
P 接続詞プレフィックス
P-fj 助詞助詞
P-jj 粒子準粒子粒子フレーズ
Pk 粒子-ケース粒子パーティクルケースマーキング
P-rj 粒子-部門の粒子粒子結合
P-sj 粒子シリアル粒子粒子接続詞
Qa 接続詞形容詞接尾辞
Qj 終わりの言葉-形の言葉接尾辞形容詞
Qn おわりに-名詞接尾辞-名詞
Qv 接続詞接尾辞
R 接続詞形容詞
Sc マーク・ジェネラルサインコモン
Sl マークテキストサインレター
うん URL URL
Vc 動詞一般動詞共通
V-dp 動詞-非自己サポート動詞依存
W 空白空白
X 助動詞 AuxVerb

謝辞

開発者は、このプロジェクトへの貢献について、関根at、丸本S子、吉本洋一、新里恵二、八重ashi慶太、増子Soに感謝します。

参照資料

H原正人、関根S、オンライン学習に基づく軽量のクライアント側中国語/日本語形態素解析COLING 2014デモセッション、39〜43ページ、2014年。[ PDF ]

前川喜久夫。ことのは-BCCWJコーパスの編集。日本語の研究、4(1):82–95、2008.(英語の情報はこちらにあります 。)[ サイト ]

Jialei Wang、Peilin Zhao、およびSteven C. Hoi。正確なソフト信頼加重学習。Proc。Of ICML 2012、pages 121–128、2012. [ PDF ]

Naiwen Xue、Fei Xia、Fu-dong Chiou、およびMarta Palmer。The Penn Chinese treebank:大規模コーパスのフレーズ構造アノテーション。Natural Language Engineering、11(2):207–238、2005. [ PDF ] [ サイト ]


©2014、2015 Rakuten NLP Project.All Rights Reserved。/ 楽天株式会社および楽天技術研究所がスポンサー。