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

楽天MA

日本語のREADME (日本<0xE8><0xAF><0xAF><0xAF>ドキュメント)

前書き

Rakuten MA(形態素解析)は、JavaScriptのみで記述された中国語と日本語向けの形態素解析(ワードセグメンター+PoS Tagger)です。

楽天MAには次のような独自の特徴があります

  • 純粋な JavaScript の実装 最新のブラウザと node.js の両方で動作します。
  • 言語に依存しない文字タグ付けモデルを実装し、中国語/日本語の単語分割と PoS タグを出力します。
  • オンライン学習によるモデルの増分更新をサポートします (Soft Confidence Weighted, Wang et al. ICML 2012)。
  • カスタマイズ可能な機能セット。
  • コンパクトなモデル表現のための特徴ハッシュ、量子化、プルーニングをサポートします。
  • 一般コーパス (CTB [Xue et al. 2005] および BCCWJ [Maekawa 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)

次のコード スニペットを<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. 、既存のモデルをロード例えば、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. rma.hash_func = RakutenMA.create_hash_func(15);バンドルモデル (model_zh.jsonおよびmodel_ja.json)を使用する場合は、15 ビットの特徴ハッシュ関数 ( )を使用することを忘れないでください
  4. rma.tokenize(input)入力を分析するために使用します。

Training your own analysis model from scratch

  1. トレーニング コーパス (センテンスが正しい [トークン、PoS タグ] の単なる配列であるトレーニング センテンスのセット) を準備します。
  2. で楽天MAインスタンスを初期化しますnew RakutenMA()
  3. 指定featset。(必要に応じて、ctype_funchash_func、など)
  4. トレーニング センテンスを 1 つずつ (最初から最後まで)train_one(sent)メソッドにフィードします
  5. 通常、SCW は 1 回epoch(トレーニング コーパス全体を 1 回通過する) 後に十分に収束しますが、ステップ 4 を繰り返して、さらに優れたパフォーマンスを達成することができます。

参照してください。scripts/train_zh.js(中国の場合)とscripts/train_ja.js、独自のモデルを訓練する方法を示す例を参照する(日本語)。

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

  1. 既存のモデルを読み込んでRakutenMAインスタンスを初期化する(上記「バンドルモデルを使用した中国語・日本語文の分析」を参照)
  2. トレーニング データを準備します (「再トレーニング」したい内容と量に応じて、これは数文程度になる可能性があります)。
  3. トレーニング文を 1 つずつtrain_one(sent)メソッドにフィードします

Reducing the model size

特徴ハッシュを適用した後でも、モデル サイズはクライアント側の配布でまだ問題になる可能性があるscripts/minify.jsため、トレーニング済みモデル サイズを縮小するために、特徴量子化を適用するスクリプト(詳細については [萩原と関根 COLING 2014] を参照)を含めました

これ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(文字列)と戻る([トークン、陽タグ]対)の結果をトークン化。
train_one(sent) アップデートザ・電流モデル(必要な場合)使用して、指定された応答sent([トークン、PoSとタグ]ペア)。戻り値には3つのプロパティを持つオブジェクトですanssysupdatedans与えられた答え(同じAS IS sent)、sysISシステムは (古い) モデルを使用して出力しupdated、モデルが更新された ( とsys異なるため) かどうかを示すバイナリ (True/False) フラグansです。
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)て、文字を調べてchardicその値を返す文字型関数を作成することもできます. (Forたとえば、RakutenMA.create_ctype_chardic_func({"A": "type1"})戻りそれ以外の関数ff("A")返します。)"type1"[]
hash_func フィーチャ ハッシュに使用するハッシュ関数を指定します。デフォルト = undefined(フィーチャ ハッシュなし)bitを呼び出すことで-bit ハッシュ スペースを持つフィーチャ ハッシュ関数を作成できますRakutenMA.create_hash_func(bit)

規約と条件

Apache ライセンス バージョン 2.0 http://www.apache.org/licenses/LICENSE-2.0.html に準拠することを条件として、楽天 MA の配布、変更、および学術/商用利用が許可されます

研究目的でRakuten MAを使用している場合は、Rakuten MAの論文を引用してください[Hagiwara and Sekine 2014]

FAQ(よくある質問)

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

  • A.楽天MAは以下の環境で動作することを確認しています。
    • Internet Explorer 8 (ver. 8.0.7601.17414 以上)
    • Google Chrome (ver. 35.0.1916.153 以上)
    • Firefox(ver.16.0.2以上)
    • サファリ(ver.6.1.5以上)
    • Node.js(ver.0.10.13以上)

Q.商用利用は可能ですか?

  • A. はい、利用規約を守っていただければ可能です 詳細は上記「利用規約」をご覧ください。

Q.バグ・解析ミス等を発見したのですが、どこに報告すればよいですか?

  • 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 までお問い合わせください。

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

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

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

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

Q. ブラウザ用に同じモデルファイルをJSON形式で使用できますか?

  • A. はい、いいえ。モデルの内部データ構造は同じですが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 文字種ユニグラム(t-3)
c8 文字種ユニグラム(t-2)
c9 文字種ユニグラム(t-1)
c0 文字種ユニグラム(t0)
c1 文字種ユニグラム(t+1)
c2 文字種ユニグラム(t+2)
c3 文字種ユニグラム(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つの引数で呼び出されます_ti、ここで_tは位置を取り、その位置jにある文字オブジェクトを返す関数でiあり、現在の位置です。文字オブジェクトはオブジェクトですそれぞれ文字と文字タイプの2 つのプロパティを持ちctその関数の戻り値が特徴値として使用されます (たとえば、関数f(_t, i)whichを指定するreturns _t(i).t;と、現在の位置の文字タイプが返されます。つまり、基本的にテンプレートと同じc0です。)

PoS tag list in Chinese

鬼ごっこ 説明
広告 副詞
なので アスペクト粒子
ba3 (ba-construction)
CC 等位接続詞
CD 基数
CS 従属接続詞
12月 de5 (補文標識/名詞化)
DEG de5(属格・連想)
DER de5 (結果)
開発者 de5(マナー)
DT 決定詞
その他
FW 外国語
IJ 間投詞
JJ その他の名詞修飾語
ポンド bei4 (ロング ベイ コンストラクション)
LC ローカライザー
M 単語を測定
MSP その他の粒子
その他の名詞
NNショート その他の名詞(略称)
NR 固有名詞
NR-ショート 固有名詞(略称)
NT 時制名詞
NT-SHORT 時間名詞(略称)
外径 序数
オン 擬音語
P 前置詞
PN 代名詞
PU 句読点
SB bei4 (略して bei-construction)
SP 文末の助詞
URL URL
VA 述語形容詞
VC コピュラ
VE you3(主動詞)
VV その他の動詞
バツ その他

PoS tag list in Japanese and correspondence to BCCWJ tags

鬼ごっこ 元のJA名 英語
交流 形容詞一般 形容詞-共通
A-dp 形容詞 - 自立しない 形容詞依存
C 言葉をつなぐ 接続詞
D シノニム 代名詞
E 英語 英単語
F 副詞 副詞
IC 触れる動詞-一般 間投詞 - 共通
Jc 形の言葉-一般 形容動詞 - 共通
ジェイタリ シェイプワード・タリ 形容動詞
J-xs 形の言葉 - 助動詞の語幹 形容動詞の語幹
まぁぁ 補助金マーク-AA 補助記号-AA
マック 補助金標識一般 補助記号 - 共通
M-cp 補助金マークの閉じ括弧 補助記号-開き括弧
モップ 括弧内はオープンマークの補助金 補助記号 - 閉じ括弧
mp 助成対象期間 補助記号 - 期間
名詞-名詞 名詞-名詞
N-nc 名詞-普通名詞 名詞-普通名詞
N-pn 固有名詞 固有名詞
N-xs 名詞助動詞の語幹 名詞-AuxVerb 語幹
その他 その他
P 連語 プレフィックス
P-fj 補助-副詞 粒子-副詞
P-jj 助動詞準主観助詞 句動詞
PK 粒子-ケース粒子 パーティクル ケース マーキング
P-rj 助動詞 - 助動詞 粒子結合
P-sj 助動詞 - 助動詞 粒子接続詞
接尾辞 - 形容詞 接尾辞 - 形容詞
Qj 接尾辞の形をした言葉 接尾辞 - 形容動詞
Qn 接尾辞 接尾辞-名詞
Qv 接尾辞 接尾辞動詞
R 結合語 副詞形容詞
Sc マークジェネラル サインコモン
SL マークテキスト サインレター
URL URL
Vc 動詞一般 動詞共通
V-dp 動詞独立可能性 動詞依存
ブランク 空白
バツ 助動詞 補助動詞

謝辞

開発者は、関根聡、丸本聡子、吉本洋一、新里圭司、八重eg Kei啓太、増子宗のこのプロジェクトへの貢献に感謝します。

参考文献

萩原聖人および関根聡. オンライン学習に基づく軽量クライアント側中国語/日本語形態素解析. COLING 2014 デモ セッション、ページ 39-43、2014. [ PDF ]

前川喜久雄. ことの葉-BCCWJ コーパスの編集 (日本語). にほんごの研究 (日本語の研究), 4(1):82–95, 2008. (英語の情報はここにある.) [サイト]

Jialei Wang、Peilin Zhao、Steven C. Hoi. Exact soft 信頼性加重学習. In Proc. of ICML 2012, pages 121–128, 2012. [ PDF ]

Naiwen Xue, Fei Xia, Fu-dong Chiou, and Marta Palmer. The Penn Chinese treebank: Phrase structure annotation of a large corpus. Natural Language Engineering, 11(2):207–238, 2005. [ PDF ] [サイト]


©2014、2015楽天NLPプロジェクト。すべての権利を保有。/主催楽天株式会社楽天技術研究所