멋진 커뮤니티 모듈

라쿠텐 MA

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

소개

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

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

  • 순수 JavaScript 구현. 최신 브라우저와 node.js에서 모두 작동합니다.
  • 언어 독립적 인 문자 태깅 모델 구현 중국어 / 일본어에 대한 단어 분할 및 PoS 태그를 출력합니다.
  • 온라인 학습을 통한 모델의 증분 업데이트를 지원합니다 (Soft Confidence Weighted, Wang et al. ICML 2012).
  • 사용자 정의 가능한 기능 세트.
  • 컴팩트 모델 표현을 위해 기능 해싱, 양자화 및 정리를 지원합니다.
  • 일반 말뭉치 (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)

<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.jsonmodel_ja.json) 을 사용할 때는 15 비트 기능 해싱 함수 ( ) 를 사용해야 합니다.
  4. 사용하여 rma.tokenize(input)입력 내용을 분석 할 수 있습니다.

Training your own analysis model from scratch

  1. 훈련 말뭉치를 준비하십시오 (문장이 올바른 [토큰, PoS 태그]의 배열 인 훈련 문장 세트).
  2. 를 사용하여 RakutenMA 인스턴스를 초기화합니다 new RakutenMA().
  3. 지정 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. 훈련 데이터를 준비합니다 ( "재 훈련"하려는 내용과 정도에 따라 몇 개의 문장이 될 수 있습니다.)
  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(선택 사항)는 The RakutenMA를 초기화하는 Object Model 인스턴스를 지정합니다. phi그리고 c(둘 다 선택 사항) SCW의 하이퍼 매개 변수 (기본값 : phi = 2048, c = 0.003906)입니다.
행동 양식 기술
tokenize(input) 토큰 화 input(문자열)하고 토큰 화 된 결과 ([토큰, PoS 태그] 쌍)를 반환합니다.
train_one(sent) 업데이트 현재 모델 (필요한 경우) 주어진 해답 사용 sent([토큰을,는 POS 태그] 쌍). 반환 값의 세 속성이있는 개체입니다 ans, sys그리고 updated, ans주어진 대답 (동일 AS IS sent), sysIS 시스템의하여 (구) 모델을 사용하여 출력, 그리고 updated바이너리 (참 / 거짓) 플래그 (때문에 모델이 업데이트되었는지 여부를 의미이다 sys달랐다 ans) 여부.
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"})반환 그렇지 않은 경우 함수 ff("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. Rakuten MA가 다음 환경에서 실행되는 것을 확인했습니다.
    • Internet Explorer 8 (버전 8.0.7601.17414 이상)
    • Google Chrome (버전 35.0.1916.153 이상)
    • Firefox (ver. 16.0.2 이상)
    • Safari (버전 6.1.5 이상)
    • Node.js (버전 0.10.13 이상)

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

  • A. 예, 이용 약관을 준수하는 한 가능합니다. 자세한 내용은 위의 "이용 약관"을 참조하십시오.

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)와 기능 해싱 기능 ( hash_func)을 사용하고 있는지 확인하십시오. rma.hash_func = RakutenMA.create_hash_func(15);번들 모델 ( model_zh.jsonmodel_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 문자 유형 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. 문자 객체는 객체가 현재 위치를입니다 두 개의 속성이 c있으며 t각각 문자 및 문자 유형입니다. 해당 함수의 반환 값은 특성 값으로 사용됩니다 (예를 들어 함수 f(_t, i)which 를 지정 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-SHORT 기타 명사 (약어)
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 Auxiliary-Adverbial 입자 부사
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 후원 .