멋진 커뮤니티 모듈

Rakuten MA

일본어 읽어보기 (日本語 ド キ ュ ン ン ト)

소개

Rakuten MA (morphological analyzer)는 순수하게 JavaScript로 작성된 중국어와 일본어를위한 형태소 분석기 (word segmentor + PoS Tagger)입니다.

Rakuten MA에는 다음과 같은 고유 한 기능이 있습니다.

  • 순수한 JavaScript 구현 최신 브라우저와 node.js에서 모두 작동합니다.
  • 언어 독립적 인 문자 태깅 모델을 구현하고 중국어 / 일본어 용 단어 분할 및 PoS 태그를 출력합니다.
  • Supports incremental update of models by online learning (Soft Confidence Weighted , Wang 등 ICML 2012).
  • 사용자 정의 가능한 기능 세트.
  • 컴팩트 한 모델 표현을 위해 Supports feature hashing , 양자화 및 잘라내 Supports feature hashing .
  • 일반 코포 라 (CTB [Xue et al. 2005] 및 BCCWJ [Maekawa 2008])와 전자 상거래 코퍼 라에서 훈련 된 중국 및 일본 모델이 번들로 제공됩니다.

데모

데모 페이지 에서 Rakuten MA를 사용해 볼 수 있습니다 (이 페이지를로드하는 데 시간이 걸릴 수 있습니다).

용법

Download & Install

Rakuten 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

Rakuten 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.jsonmodel_ja.json )을 사용할 때는 15 비트 기능 해싱 함수 ( rma.hash_func = RakutenMA.create_hash_func(15); )를 model_ja.json 합니다.
  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 tag] 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 지정 featset (선택적으로 ctype_func , hash_func 등).
  4. 훈련 문장을 하나씩 (첫 번째에서 마지막까지) train_one(sent) 방법으로 공급하십시오.
  5. 일반적으로 SCW는 하나의 epoch (하나는 전체 훈련 코퍼스를 통과) 후에 충분히 수렴되지만 더 나은 성능을 달성하기 위해 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) 방법으로 전달하십시오.

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 인스턴스 초기화하는 모델 객체를 지정 phic SCW의 하이퍼 매개 변수 (모두 선택)을하고 있습니다 (기본값 : phi = 2048 , c = 0.003906 ).
행동 양식 기술
tokenize(input) input (문자열)을 토큰 화하고 토큰 화 된 결과 ([토큰, PoS 태그] 쌍)를 반환합니다.
train_one(sent) 전류 모델 (필요한 경우) 주어진 응답하여 갱신 sent ([토큰 포스 태그] 쌍). 리턴 값은 세 가지 특성을 갖는 목적 ans , sysupdated , ans 주어진 대답 (과 동일 sent ) , sys 는 (이전) 모델을 사용한 시스템 출력이고 updated 는 모델이 업데이트되었는지 ( sysans 와 다르기 때문에) 업데이트되었는지 여부를 나타내는 이진 (True / False) 플래그입니다.
set_model(model) Rakuten 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 그 값을 반환한다. (예를 들어, RakutenMA.create_ctype_chardic_func({"A": "type1"}) 함수 리턴 f 여기서 f("A") 를 반환 "type1"[] 그렇지).
hash_func 기능 해싱에 사용할 해시 함수를 지정합니다 기본값 = undefined (기능 해싱 없음) bit 비트 해시 공간이있는 기능 해싱 함수는 RakutenMA.create_hash_func(bit) 호출하여 만들 수 있습니다.

이용 약관

Apache 라이센스 버전 2.0 http://www.apache.org/licenses/LICENSE-2.0.html 을 준수하는 경우 Rakuten MA의 배포, 수정 및 학술 / 상업적 사용이 허용됩니다.

연구 목적으로 Rakuten MA를 사용하는 경우 Rakuten 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 이상)
    • 구글 크롬 (ver. 35.0.1916.153 이상)
    • Firefox (ver. 16.0.2 이상)
    • 사파리 (버전 6.1.5 이상)
    • Node.js (ver. 0.10.13 이상)

Q. 상업적 사용이 허용됩니까?

  • A. Yes , 이용 약관을 준수하는 한 자세한 내용은 위의 "약관"을 참조하십시오.

Q. 버그 / 분석 오류 등을 발견했습니다. 어디에보고해야합니까?

  • A. Github 이슈 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 사용 된 동일한 기능 세트 ( featset ) 및 기능 해싱 기능 ( hash_func )을 사용하고 있는지 확인하십시오 .15 비트 기능 해싱 기능 ( rma.hash_func = RakutenMA.create_hash_func(15); )을 rma.hash_func = RakutenMA.create_hash_func(15); 번들 모델 ( model_zh.jsonmodel_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

기능 템플릿 기술
7 주차 캐릭터 유니 그램 (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 캐릭터 Bigram (C0 C + 1)
b2 캐릭터 빅람 (C + 1 C + 2)
b3 캐릭터 빅람 (C + 2 C + 3)
d7 문자 유형 bigram (t-3 t-2)
d8 문자 유형 bigram (t-2 t-1)
d9 문자 유형 bigram (t-1 t0)
d1 문자 유형 bigram (t0 t + 1)
d2 문자 유형 bigram (t + 1 t + 2)
d3 문자 유형 bigram (t + 2 t + 3)
다른 사람 featset 배열에 사용자 정의 된 기능 함수를 지정하면 함수는 두 개의 인수 _ti 로 호출됩니다. 여기서 _t 는 위치 j 를 가져와 해당 위치에서 문자 객체를 반환하는 함수이며 i 는 현재 위치입니다. 문자 객체는 각각 문자 및 문자 유형 인 속성 ct 두 속성을 갖는 객체입니다. 해당 함수의 반환 값이 기능 값으로 사용됩니다 (예를 들어, 함수 f(_t, i) returns _t(i).t; 를 반환하면 현재 위치의 문자 유형을 반환하며 기본적으로 템플릿 c0 과 동일합니다.)

PoS tag list in Chinese

꼬리표 기술
기원 후 부사
같이 애스펙트 파티클
학사 ba3 (ba 구성)
CC 알 맞는 접속사
CD 기수
CS 종속의 결합
12 월 de5 (보상기 / 공칭 기)
학위 de5 (생성 / 연관)
DER de5 (결과)
장치 de5 (매너)
DT 결정자
기타 기타
FW 외국어
IJ 감탄사
JJ 다른 명사 수정 자
LB bei4 (긴 bei 구성)
LC 지역 화기
미디엄 단어 측정
MSP 다른 입자
NN 다른 명사
NN-SHORT 다른 명사 (abbrev.)
NR 고유 명사
NR- 짧은 적절한 명사 (abbrev.)
NT 시간 명사
NT- 쇼트 시간 명사 (abbrev.)
OD 서수
의 위에 의성
전치사
PN 대명사
PU 구두
SB bei4 (짧은 bei 구성)
SP 문장 최종 입자
URL URL
VA 예측 형용사
VC 접합부
VE you3 (주동사)
VV 다른 동사
엑스 기타

PoS tag list in Japanese and correspondence to BCCWJ tags

꼬리표 원래 JA 이름 영어
Ac 형용사 형용사-공통
A-dp 형용사 비 독립 형용사 의존
단어 선택 접속사
동의어 대명사
이자형 영어 영어 단어
에프 부사 부사
IC 일반적인 단어 이동 감찰 공통
Jc 일반적인 단어 모양 형용사 명사
J 타리 모양 단어 형용사 명사
J-xs 단어 보조 동사 줄기 모양 형용사 명사
M-aa 보조금 기호 -AA 보조 부호 AA
보조금 기호-일반 보조 기호-공통
M-CP 보조금 기호-괄호 닫힘 보조 사인 오픈 괄호
닦다 보조금 기호 열기 괄호 보조 부호-닫는 괄호
Mp 보조금 기호 기간 보조 사인 기간
Nn 명사 명사 명사
N-NC 명사-공통 명사 명사-공통 명사
N-pn 명사 고유 명사 명사-적절한 명사
N-xs 명사 보조 동사 줄기 명사 -AuxVerb 줄기
영형 そ の 他 기타
공동 연설 접두사
P-fj 보조 단어 입자-부사
P-jj 보조 단어 입자 프라 살
Pk 보조 단어 입자 사례 표시
P-rj 보조 단어 입자 바인딩
P-SJ 보조 단어 입자 결합
Qa 접미사 형용사 접미사 형용사
Qj 접미사 모양의 단어 접미사-형용사 명사
Qn 접미사 명사 접미사
Qv 접미사 동사 접미사 동사
아르 자형 결점 대명사 형용사
Sc 기호-일반 사인 공통
SL 기호 텍스트 사인 레터
URL URL
Vc 동사 일반 동사 공통
V-dp 동사-비 독립 동사에 따라
공백 공백
엑스 조동사 보조 동사

감사의 말

개발자들은이 프로젝트에 기여한 Satoshi Sekine, Satoko Marumoto, Yoichi Yoshimoto, Keiji Shinzato, Keita Yaegashi 및 Soh Masuko에게 감사의 말씀을 전합니다.

참고 문헌

Masato Hagiwara 및 Satoshi Sekine. 온라인 학습을 기반으로 한 경량 클라이언트 측 중국어 / 일본어 형태 분석기 COLING 2014 데모 세션, 2014-39-43 페이지 [ PDF ]

Kikuo Maekawa. Kotonoha-BCCWJ 말뭉치 (일본어), Nihongo no kenkyu (일본어 연구), 4 (1) : 82-95, 2008. (일부 영어 정보는 여기 에서 찾을 수 있습니다 .) [ 사이트 ]

Jialei Wang, Peilin Zhao 및 Steven C. Hoi 소프트 신뢰 가중 학습 정확한 ICML 2012, 121–128, 2012 페이지 [ PDF ]

Naiwen Xue, Fei Xia, Fu-dong Chiou 및 Marta Palmer Penn Chinese treebank : 큰 말뭉치의 어구 구조 주석 Natural Language Engineering, 11 (2) : 207–238, 2005. [ PDF ] [ Site ]


© 2014, 2015 Rakuten NLP Project. All Rights Reserved./ Rakuten, Inc.Rakuten Institute of Technology에서 후원합니다.