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

Rakuten MA

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

前書き

楽天MA(形態素アナライザー)は、純粋にJavaScriptで書かれた中国語と日本語の形態素アナライザー(単語セグメンテーション+ PoSタガー)です。

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

npmパッケージとして楽天MAを使用することもできます。

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"));例: 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. バンドルモデル( model_zh.jsonおよびmodel_ja.json )を使用する場合は、15ビットの機能ハッシュ関数( rma.hash_func = RakutenMA.create_hash_func(15); )を使用することを忘れないでください。
  4. rma.tokenize(input)を分析するには、 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独自のモデルを訓練する方法を示す例を参照する(日本語)を。

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

モデルサイズは、機能ハッシュを適用した後でも、クライアント側の配布で問題になる可能性があります。トレーニングされたモデルを削減するために、機能量子化(詳細については[Hagiwara and Sekine COLING 2014]を参照)を適用するスクリプトscripts/minify.jsを含めましたサイズ。

node scripts/minify.js [input_model_file] [output_model_file]を実行して、モデルファイルの縮小版を作成できます。トレーニング済みモデルの「sigma」部分も削除されることにnode scripts/minify.js [input_model_file] [output_model_file]してください 。つまり、再実行できなくなります-縮小モデルをトレーニングします。必要に応じて、モデルを再トレーニングしてから縮小します。

APIドキュメント

コンストラクタ説明
RakutenMA(model, phi, c) 新しい楽天間インスタンスを作成します。 model (オプション)は、楽天インスタンスを初期化するモデルオブジェクトを指定します。 phic (両方ともオプション)は、SCWのハイパーパラメータです(デフォルト: phi = 2048c = 0.003906 )。
方法説明
tokenize(input) input (文字列)をトークン化し、トークン化した結果([トークン、PoSタグ]のペア)を返します。
train_one(sent) sentた特定の回答([トークン、PoSタグ]のペア)を使用して現在のモデルを(必要に応じて)更新します。戻り値は、 anssysupdated 3つのプロパティを持つオブジェクトですansは特定の回答です( sentと同じ) 、 sysは(古い)モデルを使用したシステム出力であり、 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)を呼び出して、文字を見て文字型関数を作成することもできますchardicでupし、その値を返します(たとえば、 RakutenMA.create_ctype_chardic_func({"A": "type1"})は関数f返し、 f("A")"type1"を返し、それ以外の場合は[]返します)。
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の論文[Hagiwara and Sekine 2014]を引用してください。

FAQ(よくある質問)

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

  • A. We confirmed that Rakuten MA runs in the following environments
    • 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以上)

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 文字型ユニグラム(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)を指定した場合f(_t, i) returns _t(i).t; 、現在の位置の文字タイプをreturns _t(i).t; 。これは基本的にテンプレートc0と同じです。)

PoS tag list in Chinese

鬼ごっこ説明
広告副詞
なのでアスペクト粒子
BA ba3(ba構築中)
CC 連携の調整
CD 基数
CS 劣後結合
12月 de5(コンプリメンタイザー/ノミナライザー)
de5(Genitive / Associative)
DER de5(結果)
DEV de5(マナー)
DT 決定子
その他
FW 外国語
IJ 間投詞
JJ その他の名詞修飾子
ポンド bei4(長いbei構成)
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 その他の動詞
バツその他

PoS tag list in Japanese and correspondence to BCCWJ tags

鬼ごっこ元のJA名英語
交流形容詞-一般形容詞共通
A-dp 形容詞非独立形容詞依存
C 言葉を選ぶ結合
D シノニム代名詞
E 英語英語の単語
F 副詞副詞
IC 一般的な言葉を動かす間投詞-共通
Jc 一般的な単語を形作る形容詞名詞共通
Jタリ単語を形作る形容詞の名詞
J-xs 単語補助動詞の語幹を形作る形容詞Noun-AuxVerb語幹
M-aa 補助金記号-AA 補助サイン-AA
マク補助金シンボル一般補助記号-共通
M-cp 補助金の記号-括弧は閉じています補助記号-開き括弧
モップ補助金記号開きブラケット補助記号-閉じ括弧
Mp 補助金期間補助サイン期間
Nn 名詞-名詞名詞-名詞
N-nc 名詞-共通名詞名詞-共通名詞
N-pn 名詞固有の名詞名詞・固有名詞
N-xs 名詞補助動詞 Noun-AuxVerb語幹
O その他その他
P 共同演説接頭辞
P-fj 補助語助詞副詞
P-jj 補助語粒子フレーズ
Pk 補助語パーティクルケースのマーキング
P-rj 補助語粒子結合
P-sj 補助語粒子結合
カー接尾辞-形容詞接尾辞-形容詞
Qj 接尾語形の単語接尾辞-形容詞名詞
Qn サフィックス名詞接尾辞-名詞
Qv サフィックス動詞サフィックス動詞
R 接続詞形容詞
Sc 記号一般サインコモン
Sl シンボルテキストサインレター
U URL URL
VC 動詞一般動詞共通
V-dp 動詞非独立動詞依存
W ブランク空白
バツ助動詞 AuxVerb

謝辞

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

参考文献

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

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

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

Naiwen Xue、Fei Xia、Fu-dong Chiou、Marta Palmer。ペン中国のツリーバンク:大規模なコーパスの句構造の注釈。自然言語工学、11(2):207–238、2005。[ PDF ] [ サイト ]


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