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

Rakuten MA

日本のREADME(日本语モジュール)

前書き

楽天MA(形態分析)は、純粋にJavaScriptで書かれた中国語と日本語の形態分析(ワードセグメンター+ PoSタガー)です。

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

  • 純粋なJavaScriptの実装。最新のブラウザーとnode.jsの両方で機能します。
  • 言語に依存しない文字タグ付けモデルを実装します。中国語/日本語の単語セグメンテーションとPoSタグを出力します。
  • Supports incremental update of models by online learning (Soft Confidence Weighted 、Wangetal。ICML2012)。
  • カスタマイズ可能な機能セット。
  • コンパクトなモデル表現のためのSupports feature hashing 、量子化、およびプルーニングをSupports feature hashing
  • 一般的なコーパス(CTB [Xueetal。2005]およびBCCWJ [Maekawa 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)

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関連リンク言語に応じて(例えば、 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()して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. 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. train_one(sent)メソッドにトレーニングセンテンスを1つずつフィードします。

Reducing the model size

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

node scripts/minify.js [input_model_file] [output_model_file]を実行して、モデルファイルの縮小バージョンを作成できます。 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 (文字列)をトークン化し、トークン化された結果([token、PoS tag]ペア)を返します。
train_one(sent) sentた指定された回答([トークン、PoSタグ]ペア)を使用して、現在のモデルを(必要に応じて)更新します。戻り値は、 anssys 、およびupdated 3つのプロパティを持つオブジェクトです。ここで、 ansは指定された回答( sentsentと同じ)です。 、 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)を呼び出して、文字をRakutenMA.create_ctype_chardic_func(chardic)して表示する文字タイプ関数を作成することもできます。アップにchardic 、その値を返す。(例えば、 RakutenMA.create_ctype_chardic_func({"A": "type1"})関数が返すfここでf("A")戻る"type1"[]そうでなければ)。
hash_funcフィーチャハッシュに使用するハッシュ関数を指定します。デフォルト= undefined (フィーチャハッシュなし) RakutenMA.create_hash_func(bit)呼び出すことにより、 bitビットハッシュスペースを持つフィーチャハッシュ関数を作成できます。

規約と条件

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

楽天MAを研究目的で使用している場合は、楽天MAに関する論文[萩原と関根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(ver。35.0.1916.153以降)
    • Firefox(ver。16.0.2以降)
    • Safari(ver。6.1.5以降)
    • Node.js(ver。0.10.13以降)

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

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

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

  • A.Githubの問題https://github.com/rakuten-nlp/rakutenma/issuesで問題を作成してください
  • Alternatively 、コードを変更してプルリクエストを作成することもできます。RakutenMAには、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)を指定した場合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-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その他の動詞
バツその他

PoS tag list in Japanese and correspondence to BCCWJ tags

鬼ごっこ元のJA名英語
交流形容詞-一般形容詞-共通
A-dp注射剤-独立可能形容詞依存
C言葉をつなぐ結合
Dシノニム代名詞
E英語英語の単語
F副詞副詞
IC触れる動詞-一般インタージェクション-共通
Jc形の言葉-一般AdjectivalNoun-共通
Jタリシェイプワード-タリ形容詞名詞-タリ
J-xs形の言葉-補助動詞の語幹AdjectivalNoun-AuxVerbステム
M-aaグラントマーク-AA補助記号-AA
マック補助金サイン-一般補助記号-共通
M-cp補助金マーク-閉じた括弧補助記号-括弧を開く
モップ補助金マーク-括弧を開く補助記号-括弧を閉じる
Mp補助金のサイン期間補助記号-期間
Nn名詞-名詞名詞-名詞
N-nc名詞-一般的な名詞名詞-一般的な名詞
N-pn名詞-適切な名詞名詞-適切な名詞
N-xs名詞-補助語の語幹名詞-AuxVerbステム
Oその他その他
P共同の言葉プレフィックス
P-fj粒子-副詞粒子-副詞
P-jj補助語-準主観的粒子-Phrasal
パックパーティクルケースパーティクル粒子ケースマーキング
P-rj補助語粒子結合
P-sj補助語-補助語粒子結合
Qa接尾辞-形容詞接尾辞-形容詞
Qj接尾辞の形をした言葉接尾辞-形容詞名詞
Qn接尾辞-名詞接尾辞-名詞
Qvサフィックス-動詞接尾辞-動詞
R結合された言葉名目上の形容詞
Scマーク-一般サインコモン
Slマークテキストサインレター
U URL URL
Vc動詞-一般動詞-共通
V-dp動詞-独立の可能性動詞依存
Wブランクホワイトスペース
バツ助動詞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プロジェクト。無断複写・転載を禁じます。/楽天株式会社楽天工科大学主催。