멋진 커뮤니티 모듈

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 등 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) 을 분석하려면 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 및 Sekine COLING 2014] 참조)를 적용하는 스크립트 scripts/minify.js 를 포함 시켰습니다. 크기.

IT는 귀하가 실행할 수 있습니다 node scripts/minify.js [input_model_file] [output_model_file] 파일을 기억 축소 된 모델 버전 (A)의 메이크업에 :. 또한 모델의 "시그마"일부는 당신이 더 이상 다시 할 수 있다는 의미가없는, 교육을받은 IT를 삭제 필요한 경우 먼저 모델을 다시 학습 한 다음 축소하십시오.

API 설명서

생성자 설명
RakutenMA(model, phi, c) .는 RakutenMA 새로운 새로운 인스턴스를 작성 model .가 RakutenMA 초기화와 객체 모델 인스턴스 (옵션)를 지정 phic (모두 선택)은 SCW의 하이퍼 매개 변수입니다 (기본적 phi = 2048 , c = 0.003906 ).
방법 설명
tokenize(input) input (문자열)을 토큰 화하고 토큰 화 된 결과 ([토큰, PoS 태그] 쌍)를 반환합니다.
train_one(sent) 업데이트 현재 모델 (필요한 경우), 지정된 응답하여 sent ([토큰을,는 POS 태그] 쌍). 반환 값의가의 세 가지 속성을 가진 객체입니다 ans , sysupdated , WHERE ans 주어진 대답은 (동일 AS에 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 이상)
    • Chrome (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 )을 사용 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 캐릭터 Bigram (C + 1C + 2)
b3 캐릭터 Bigram (C + 2C + 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 서수
ON 이종성
P 전치사
PN 대명사
PU 구두점
SB bei4 (짧은 bei 구성)
SP 문장 최종 입자
URL URL
VA 예측 형용사
VC 코 풀라
VE you3 (주동사)
VV 다른 동사
X 기타

PoS tag list in Japanese and correspondence to BCCWJ tags

태그 원래 JA 이름 영어
Ac 형용사 형용사-공통
A-dp 형용사 비 독립 형용사 의존
C 부사 연결
D 대명사 대명사
전자 영어 속어 영어 단어
F 부사 부사
IC 동사-일반 감찰 공통
Jc 일반적인 단어 모양 형용사 명사
J 타리 모양 단어-타리 형용사 명사
J-xs 단어 보조 동사 모양 형용사 -AuxVerb stem
M-aa 그랜트 마크 -AA 보조 부호 AA
그랜트 마크 장군 보조 기호-공통
M-CP 보조금 마크 폐쇄 브래킷 보조 사인 오픈 괄호
M-op 보조금 마크 브래킷 오픈 보조 부호-닫는 괄호
Mp 보조금 마크 기간 보조 사인 기간
Nn 명사 명사 명사
N-NC 명사-공통 명사 명사-공통 명사
N-pn 명사 적절한 명사 명사-적절한 명사
N-xs 명사 보조 줄기 명사 -AuxVerb 줄기
そ の 他 기타
P 연결 접두사
P-fj 입자 부사 입자-부사
P-jj 입자 준 입자 입자 프라 살
Pk 입자 케이스 입자 입자 사례 표시
P-rj 입자 입자 바인딩
P-SJ 입자-직렬 입자 입자 결합
Qa 결합 형용사 접미사 형용사
Qj 말 모양 단어 닫기 접미사-형용사 명사
Qn 결사-수녀 접미사
Qv 결사 언어 접미사 동사
R 연결 대명사 형용사
Sc 마크-일반 사인 공통
SL 마크 텍스트 사인 레터
U URL URL
Vc 동사-일반 동사 공통
V-dp 동사가 아닌 자립 가능 동사에 따라
공백 공백
X 보조 동사 보조 동사

감사의 말

개발자들은이 프로젝트에 기여한 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) : 2008 년 82 월 95 일. (일부 영어 정보는 여기를 참조하십시오 .) [ 사이트 ]

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 후원.