멋진 커뮤니티 모듈

낙천 MA

일본어 README(일본어 README)

소개

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

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

  • 순수 JavaScript 구현으로 최신 브라우저와 node.js에서 모두 작동합니다.
  • 언어 독립적인 문자 태깅 모델을 구현하고 중국어/일본어에 대한 단어 분할 및 PoS 태그를 출력합니다.
  • 온라인 학습을 통해 모델의 증분 업데이트를 지원합니다(Soft Confidence Weighted, Wang et al. ICML 2012).
  • 사용자 정의 가능한 기능 세트.
  • 컴팩트한 모델 표현을 위해 기능 해싱, 양자화 및 가지치기를 지원합니다.
  • 일반 말뭉치(CTB [Xue et al. 2005] 및 BCCWJ [Maekawa 2008]) 및 전자상거래 말뭉치에서 훈련된 중국 및 일본 모델이 번들로 제공됩니다.

데모

데모 페이지 에서 라쿠텐 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"));then 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.json및 )을 사용할 때는 15비트 기능 해싱 함수( )를 사용해야 합니다 model_ja.json.
  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. epoch일반적으로 SCW는 한 번 (전체 훈련 자료를 한 번 통과한 후) 충분히 수렴 하지만 더 나은 성능을 얻으려면 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 및 Sekine COLING 2014] 참조)를 포함했습니다.

이를 실행하여 node scripts/minify.js [input_model_file] [output_model_file]모델 파일의 축소된 버전을 만들 수 있습니다. 기억하세요: 훈련된 모델의 "시그마" 부분도 삭제되므로 더 이상 축소된 모델을 재훈련할 수 없습니다. 필요한 경우 재훈련하세요. 먼저 모델을 만든 다음 축소하세요.

API 문서

건설자 설명
RakutenMA(model, phi, c) 새 RakutenMA 인스턴스를 생성합니다. model(선택 사항)은 RakutenMA 인스턴스를 초기화할 모델 개체를 지정합니다. phi( c둘 다 선택 사항)은 SCW의 하이퍼 매개 변수입니다(기본값: phi = 2048, c = 0.003906).
행동 양식 설명
tokenize(input) 토큰화 input(문자열)하고 토큰화된 결과([토큰, PoS 태그] 쌍)를 반환합니다.
train_one(sent) 주어진 답변([토큰, PoS 태그] 쌍)을 사용하여 현재 모델(필요한 경우)을 업데이트합니다 . 반환 값은 , sent의 세 가지 속성을 가진 객체입니다 . 여기서 주어진 답변( 과 동일 ) 은 다음 을 사용하는 시스템 출력입니다. (이전) 모델이며 모델이 업데이트되었는지( 와 다르기 때문에) 여부를 의미하는 이진(True/False) 플래그 입니다 .anssysupdatedanssentsysupdatedsysans
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 해시 공간이 있는 기능 해싱 함수는 를 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 및 Sekine 2014]에 대한 논문을 인용해 주세요.

FAQ(자주 묻는 질문)

Q. 지원되는 브라우저와 Node.js 버전은 무엇입니까?

  • A. Rakuten MA가 다음 환경에서 실행되는 것을 확인했습니다.
    • Internet Explorer 8(버전 8.0.7601.17414 이상)
    • 구글 크롬(버전 35.0.1916.153 이상)
    • Firefox (버전 16.0.2 이상)
    • 사파리 (ver. 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) 및 특성 해싱 함수( )를 사용하고 있는지 확인하십시오. 번들 모델( )을 사용할 때는 15비트 특성 해싱 함수( )를 사용하는 것을 잊지 마십시오.hash_funcrma.hash_func = RakutenMA.create_hash_func(15);model_zh.jsonmodel_ja.json

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 문자 유형 바이그램(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함수가 호출되며 , 여기서 는 위치를 가져와 해당 위치의 캐릭터 객체를 반환하는 함수이고 는 현재 위치입니다. 각각 문자형과 문자형 이라는 두 가지 속성을 가지고 있습니다 . 해당 함수의 반환 값이 특성 값으로 사용됩니다. (예를 들어 which 함수를 지정 하면 현재 위치의 문자형이 반환됩니다. 기본적으로 템플릿과 동일합니다 .)_ti_tjictf(_t, i)returns _t(i).t;c0

PoS tag list in Chinese

꼬리표 설명
기원 후 부사
처럼 측면 입자
학사 ba3 (ba-construction)
CC 알 맞는 접속사
CD 기수
CS 종속의 결합
12월 de5(보완자/명목화자)
DEG de5(속격/연관)
DER de5(결과)
개발 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
버지니아 예측 형용사
VC 접합부
VE you3 (주동사)
VV 다른 동사
엑스 기타

PoS tag list in Japanese and correspondence to BCCWJ tags

꼬리표 원래 JA 이름 영어
교류 형용사-일반 형용사-공통
A-dp 형용사 - 비자립 가능 형용사 의존적
단어를 집다 접속사
대명사 대명사
이자형 영어 영어 단어
에프 부사 부사
IC 이동 동사-일반 감탄사-공통
jc 모양 단어 일반 형용사 명사-공통
J-타리 모양 단어-타리 형용사 명사 - 타리
J-xs 모양 단어-보조 단어 어간 형용사 명사-Aux동사 어간
으-아아 보조금 마크-AA 보조 기호-AA
보조금 마크 일반 보조 기호-공통
M-cp 보조 표시 닫힘 브래킷 보조 기호-열림 괄호
대걸레 보조금 표시 - 여는 괄호 보조 기호-괄호 닫기
국회의원 보조금 표시기간 보조 표시 기간
명사 - 명사 명사-명사
N-NC 명사 - 보통명사 명사-공통명사
N-pn 명사 - 고유명사 명사-고유명사
N-xs 명사 보조 줄기 명사-Aux동사 어간
영형 その그 기타
커넥터 접두사
P-fj 입자-부사 입자 입자-부사
피제이 입자 - 준체입자 입자 구문
PK 입자-케이스 입자 입자 케이스 마킹
P-RJ 입자 - 입자 입자 결합
P-sj 입자 - 연결 입자 입자 결합
Qa 접미사-형용사 접미사-형용사
Qj 접미사 - 모양 단어 접미사-형용사
Qn 접미사 - 명사 접미사-명사
Qv 접미사-동사 접미사-동사
아르 자형 결합된 단어 관용형용사
SC 표기법 일반 부호-공통
SL 토큰 텍스트 서명 편지
URL URL
VC 동사 일반 동사-공통
V-dp 동사 - 비자립 가능 동사 의존적
공백 공백
엑스 조동사 Aux동사

감사의 말

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

참고자료

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

마에카와 키쿠오(Kikuo Maekawa) Kotonoha-BCCWJ 코퍼스 편집(일본어) Nihongo no kenkyo(일본어 연구), 4(1):82–95, 2008. (일부 영어 정보는 여기에서 찾을 수 있습니다 .) [ 사이트 ]

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

Naiwen Xue, Fei Xia, Fu-dong Chiou 및 Marta Palmer Penn 중국어 트리뱅크: 큰 말뭉치의 구문 구조 주석 자연 언어 공학, 11(2):207–238, 2005. [ PDF ] [ 사이트 ]


© 2014, 2015 라쿠텐 NLP 프로젝트. All Rights Reserved. / 후원: 라쿠텐, 주식회사라쿠텐 공업 대학교