멋진 커뮤니티 모듈

Rakuten MA

일본어 README (日本语 ド キ ュ メ ン ト)

소개

Rakuten MA (모폴로지 분석기)는 순수하게 JavaScript로 작성된 중국어 및 일본어 용 형태소 분석기 (단어 분할기 + PoS Tagger)입니다.

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

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

데모

데모 페이지 에서 Rakuten MA를 체험 할 수 있습니다. (이 페이지를로드하는 데 시간이 걸릴 수 있습니다.)

용법

Download & Install

Rakuten 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

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")); then 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 태그] 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] 을 실행하여 모델 파일의 축소 된 버전을 만들 수 있습니다. 기억하세요 : node scripts/minify.js [input_model_file] [output_model_file] 된 모델의 "sigma"부분도 삭제하므로 더 이상 다시 사용할 수 없습니다. -축소 된 모델을 학습시키고 필요한 경우 먼저 모델을 다시 학습 한 다음 축소합니다.

API 문서

건설자 기술
RakutenMA(model, phi, c) 새로운 RakutenMA 인스턴스를 생성합니다. model (선택 사항)은 RakutenMA 인스턴스를 초기화 할 모델 객체를 지정합니다. phic (둘 다 선택 사항)는 SCW의 하이퍼 매개 변수입니다 (기본값 : phi = 2048 , c = 0.003906 ).
행동 양식 기술
tokenize(input) input (문자열)을 토큰 화하고 토큰 화 된 결과 ([token, PoS tag] 쌍)를 반환합니다.
train_one(sent) sent 된 주어진 응답 ([token, PoS tag] 쌍)을 사용하여 현재 모델을 업데이트합니다 (필요한 경우). 반환 값은 세 가지 속성 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 (기능 해싱 없음) RakutenMA.create_hash_func(bit) 호출하여 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 이상)
    • Google Chrome (ver. 35.0.1916.153 이상)
    • Firefox (ver. 16.0.2 이상)
    • Safari (버전 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

기능 템플릿 기술
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 문자 유형 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 문자 유형 바이그램 (t + 2 t + 3)
기타 featset 배열에 사용자 정의 된 기능 함수를 지정하면 함수는 두 개의 인수 _ti 하여 호출됩니다. 여기서 _t 는 위치 j 를 취하고 해당 위치에서 문자 객체를 반환하는 함수이며 i 는 현재 위치입니다. 문자 객체는 각각 문자 및 문자 유형 인 두 개의 속성 ct 가있는 객체입니다. 해당 함수의 반환 값이 특성 값으로 사용됩니다 (예 : 함수 f(_t, i) 를 지정하면 returns _t(i).t; 를 반환하면 기본적으로 c0 템플릿과 동일한 현재 위치의 문자 유형을 반환합니다.)

PoS tag list in Chinese

꼬리표 기술
기원 후 부사
같이 Aspect 입자
BA ba3 (ba-construction)
CC 알 맞는 접속사
CD 추기경 번호
CS 종속의 결합
DEC de5 (보완 자 / 명 사자)
DEG de5 (Genitive / Associative)
DER de5 (결과)
DEV de5 (매너)
DT 결정자
기타 기타
FW 외국어
IJ 감탄사
JJ 기타 명사 수정 자
LB bei4 (긴 bei 구조)
LC 로컬 라이저
미디엄 단어 측정
MSP 기타 입자
NN 기타 명사
NN- 짧은 기타 명사 (약어)
NR 고유 명사
NR- 짧은 고유 명사 (약어)
NT 임시 명사
NT- 짧은 임시 명사 (약어)
OD 서수
의 위에 의성
전치사
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 이름 영어
Ac 형용사-일반 형용사-공통
A-dp 형용사 독립 가능 형용사 의존
연결 단어 접속사
동의어 대명사
이자형 영어 영어 단어
에프 부사 부사
IC 감동 동사-일반 감탄사 공통
Jc 단어 일반 모양 형용사 명사 공통
J-tari 모양 단어-타리 형용사 명사-타리
J-XS 모양 단어-보조 동사 어간 형용사 명사 -AuxVerb 어간
M-aa 마크 AA 부여 보조 기호 -AA
Mc 보조금 표시 일반 보조 기호 공통
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 동사 독립 가능성 동사 의존
W 공백 공백
엑스 조동사 AuxVerb

감사의 말

개발자들은이 프로젝트에 기여한 Satoshi Sekine, Satoko Marumoto, Yoshimoto Yoichi, 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. The Penn Chinese treebank : 큰 말뭉치의 구문 구조 주석. Natural Language Engineering, 11 (2) : 207–238, 2005. [ PDF ] [ 사이트 ]


© 2014, 2015 Rakuten NLP Project. All Rights Reserved. / Rakuten, Inc.Rakuten Institute of Technology 후원.