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

楽天MA

日本語README(日本语ドキュメント)

序章

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

楽天MAには、次のような独自の機能があります。

  • 純粋なJavaScriptの実装。最新のブラウザーとnode.jsの両方で機能します。
  • 言語に依存しない文字タグ付けモデルを実装します。中国語/日本語の単語セグメンテーションとPoSタグを出力します。
  • オンライン学習によるモデルの増分更新をサポートします(Soft Confidence Weighted、Wangetal。ICML2012)。
  • カスタマイズ可能な機能セット。
  • コンパクトなモデル表現のための機能ハッシュ、量子化、およびプルーニングをサポートします。
  • 一般コーパス(CTB [Xueetal。2005]およびBCCWJ [前川2008])およびEコマースコーパスからトレーニングされた中国および日本のモデルがバンドルされています。

デモ

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

使用法

Download & Install

楽天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

楽天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. を使用してRakutenMAインスタンスを初期化します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。トレーニングされたモデルサイズを縮小するために、特徴量子化を適用するスクリプト(詳細は[Hagiwara and Sekine COLING 2014]を参照)を含めました

これnode scripts/minify.js [input_model_file] [output_model_file]実行して、モデルファイルの縮小バージョンを作成できます。 注意:トレーニング済みモデルの「シグマ」部分も削除されるため、縮小モデルを再トレーニングできなくなります。必要に応じて、再トレーニングしてください。最初にモデルを縮小し、次にそれを縮小します。

APIドキュメント

コンストラクタ 説明
RakutenMA(model, phi, c) 。RakutenMAを作成します。新しい新しいインスタンスmodel(オプション)は、RakutenMAを初期化したオブジェクトモデルインスタンスに指定します。phiまたc(両方ともオプション)は、SCWのハイパーパラメータです(デフォルト:phi = 2048c = 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_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"})関数戻り戻るそうでない場合に)。ff("A")"type1"[]
hash_func フィーチャーハッシュに使用するハッシュ関数を指定します。デフォルト= undefined(フィーチャーハッシュなし)。bitビットハッシュスペースを持つフィーチャーハッシュ関数は、を呼び出すことで作成できますRakutenMA.create_hash_func(bit)

規約と条件

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

楽天MAを研究目的で使用している場合は、楽天MAに関する論文[萩原と関根2014]を引用してください。

FAQ(よくある質問)

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

  • A.楽天MAは以下の環境で動作することを確認しました。
    • Internet Explorer 8(バージョン8.0.7601.17414以降)
    • Google Chrome(ver。35.0.1916.153以降)
    • Firefox(ver。16.0.2以降)
    • Safari(ver。6.1.5以降)
    • Node.js(ver。0.10.13以降)

Q.商用利用はできますか?

  • A.はい、利用規約に従えば可能です。詳細については、上記の「利用規約」をご覧ください。

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

  • A.Githubの問題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)と機能ハッシュ関数(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つのプロパティがcありtます。その関数の戻り値が機能値として使用されます(たとえば、関数f(_t, i)whichを指定するreturns _t(i).t;と、現在の位置の文字タイプが返されます。基本的にテンプレートと同じc0です。)

PoS tag list in Chinese

鬼ごっこ 説明
広告 副詞
なので アスペクト助詞
BA ba3(ba構築中)
CC 調整接続詞
CD 基数
CS 関係詞
12月 de5(補文標識/ノミナライザー)
de5(属格/連想)
DER de5(結果)
DEV de5(マナー)
DT 限定詞
NS その他
FW 外国語
IJ 間投詞
JJ その他の名詞修飾語
ポンド bei4(長いbei-construction)
LC ローカライザー
NS 助数詞
MSP その他の粒子
NN その他の名詞
NN-SHORT その他の名詞(略語)
NR 固有名詞
NR-SHORT 固有名詞(略語)
NT 時間名詞
NT-SHORT 時間名詞(略語)
OD 序数
オン オノマトペ
NS 前置詞
PN 代名詞
PU 句読点
SB bei4(略してbei-construction)
SP 文-最終粒子
URL URL
VA 形容詞
VC コピュラ
VE you3(主動詞)
VV その他の動詞
NS その他

PoS tag list in Japanese and correspondence to BCCWJ tags

鬼ごっこ 元のJA名 英語
交流 形容詞-一般 形容詞-一般
A-dp 形容詞-自立しない 形容詞依存
NS 言葉をつなぐ 接続詞
NS シノニム 代名詞
E 英語 英語の単語
NS 副詞 副詞
IC 動詞に触れる-一般 感動詞-一般的
Jc 形の言葉-一般 形容動詞-共通
Jタリ 形の言葉-タリ 形容動詞-タリ
J-xs 形の単語-助動詞の語幹 形容動詞-AuxVerb語幹
M-aa 補助金マーク-AA 補助記号-AA
マック 補助金サイン-一般 補助記号-共通
M-cp 補助金マーク-閉じ括弧 補助記号-開き括弧
モップ 補助金マーク-括弧内に開く 補助記号-括弧を閉じる
Mp 補助金マーク期間 補助記号-期間
Nn 名詞-名詞 名詞-名詞
N-nc 名詞-固有名詞 名詞-固有名詞
N-pn 名詞-固有名詞 名詞-固有名詞
N-xs 名詞-助動詞の語幹 名詞-AuxVerbステム
O その他
NS 共同の言葉 プレフィックス
P-fj 補助-副詞 助詞-副詞
P-jj 助動詞-準主観的助動詞 助詞句動詞
パック 助動詞-ケース助動詞 粒子ケースマーキング
P-rj 助動詞-助動詞 粒子結合
P-sj 助動詞-助動詞 粒子結合
Qa 接尾辞-形容詞 接尾辞-形容詞
Qj 接尾辞の形をした単語 接尾辞-形容動詞
Qn 接尾辞-名詞 接尾辞-名詞
Qv 接尾辞-口頭 接尾辞-動詞
NS 結合された単語 連体詞
Sc マーク-一般 サインコモン
Sl マークテキスト サインレター
U URL URL
Vc 動詞-一般 動詞-共通
V-dp 動詞-独立の可能性 動詞依存
W 空欄 空白
NS 助動詞 AuxVerb

謝辞

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

参考文献

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

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

Jialei Wang、Peilin Zhao、およびSteven C.Hoi。正確なソフト信頼度加重学習。ICML2012のProc。、121〜128ページ、2012年。[ PDF ]

Naiwen Xue、Fei Xia、Fu-dong Chiou、およびMarta Palmer。ペンシルベニア大学のツリーバンク:大きなコーパスの句構造注釈。NaturalLanguageEngineering、11(2):207–238、2005。[ PDF ] [サイト]


©2014、2015楽天NLPプロジェクト。無断複写・転載を禁じます。/楽天株式会社楽天技術研究所主催