멋진 커뮤니티 모듈

라쿠텐 MA

일본어 README(日本语dkument)

소개

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 라이브러리이므로 설치할 필요가 없습니다.

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.가 RakutenMA를 초기화와 객체 모델 인스턴스 (옵션) 지정을 phi그리고 c(모두 옵션) 인 SCW의 하이퍼 매개 변수 (기본값 : phi = 2048, c = 0.003906).
행동 양식 설명
tokenize(input) 토큰화 input(문자열)하고 토큰화된 결과([토큰, PoS 태그] 쌍)를 반환합니다.
train_one(sent) 현재 모델(필요한 경우)을 사용하여 The GIVEN 답변 sent([토큰, PoS 태그] 쌍)을 업데이트합니다. 반환 값 IS AN Object with Three Properties ans, sys, 및 updated, WHERE ansIS The GIVEN 답변(Same AS 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"})return 그렇지 않으면 함수 ff("A")반환합니다 .)"type1"[]
hash_func 기능 해싱에 사용할 해시 함수를 지정합니다. 기본값 = undefined(기능 해싱 없음) bit-bit 해시 공간이 있는 기능 해싱 함수는 를 호출하여 생성할 수 있습니다 RakutenMA.create_hash_func(bit).

이용약관

Apache License 버전 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 크롬(버전 35.0.1916.153 이상)
    • Firefox (ver. 16.0.2 이상)
    • 사파리 (ver. 6.1.5 이상)
    • Node.js (ver. 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)
여8 캐릭터 유니그램(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배열 에서 사용자 정의 기능 함수를 지정 하면 함수가 두 개의 인수 _t와 함께 호출됩니다 i. 여기서 _t는 위치를 가져와 해당 위치 j의 문자 객체를 반환 하는 함수 이고 i는 현재 위치입니다. 두 가지 속성으로 c하고 t있는 각각의 문자 및 문자 유형이다. 그 함수의 반환 값은 기능의 값으로 사용됩니다. (예를 들어, 함수를 지정하면 , 다음은 현재 위치의 문자 형식을 반환하는 것을이다 기본적으로 템플릿과 동일합니다 .)f(_t, i)returns _t(i).t;c0

PoS tag list in Chinese

꼬리표 설명
기원 후 부사
같이 측면 입자
학사 ba3 (ba-construction)
참조 알 맞는 접속사
CD 기수
CS 종속의 결합
12월 de5(보완자/노멀라이저)
de5 (유전적/연관적)
DER de5(결과)
개발자 de5 (매너)
DT 결정자
기타
FW 외국어
아이제이 감탄사
제이제이 기타 명사 수식어
LB bei4(긴 bei-construction에서)
LC 로컬라이저
미디엄 측정 단어
MSP 기타 입자
NN 기타 명사
NN-짧은 기타 명사(약어)
NR 고유 명사
NR-짧음 고유명사(약어)
NT 임시 명사
NT-SHORT 임시 명사(약어)
외경 서수
의성
NS 전치사
PN 대명사
PU 구두
SB bei4(줄여서 bei 건설)
SP 문장 끝 입자
URL URL
버지니아 술어 형용사
VC 접합부
VE you3 (주동사)
VV 기타 동사
NS 기타

PoS tag list in Japanese and correspondence to BCCWJ tags

꼬리표 원래 JA 이름 영어
아크 형용사 일반 형용사 공통
A-dp 형용사 - 자립하지 않음 형용사 의존
연결 단어 접속사
NS 동의어 대명사
이자형 영어 영어 단어
NS 부사 부사
IC 감동 동사 - 일반 감탄사-공통
Jc 모양 단어 - 일반 형용사 명사-공통
제이타리 모양 단어 타리 형용사 명사 타리
J-xs 모양 단어 - 보조 동사 줄기 형용사 명사-AuxVerb 어간
으아아아 보조금 마크-AA 보조 기호-AA
보조금 사인 일반 보조 기호-공통
M-CP 보조금 마크 닫은 괄호 보조 기호 열기 괄호
대걸레 괄호 안의 보조금 마크 오픈 보조 기호 - 닫기 괄호
MP 보조금 표시 기간 보조 기호 - 기간
명사 명사
N-NC 명사 - 보통 명사 명사-일반명사
N-pn 명사 고유 명사 명사-고유 명사
N-xs 명사 보조 동사 줄기 명사-AuxVerb 어간
영형 その他 기타
NS 공동 단어 접두사
P-Fj 보조 부사 입자 부사
P-jj 보조어-준주사 보조어 입자 구
보조어-대소문자 보조어 입자 케이스 마킹
P-rj 보조어 - 보조어 입자 결합
P-sj 보조어 - 보조어 입자 결합
접미사 형용사 접미사 - 형용사
Qj 접미사 모양의 단어 접미사 - 형용사 명사
Qn 접미사 명사 접미사-명사
Qv 접미사 - 구두 접미사 - 동사
NS 결합된 단어 형용사
Sc 마크 장군 기호 공통
마크 텍스트 서명 편지
URL URL
Vc 동사 일반 동사 공통
V-dp 동사-독립 가능성 동사 의존
공백 공백
NS 조동사 보조 동사

감사의 말

개발자들은 이 프로젝트에 기여한 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 Proc., 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 프로젝트 판권 소유 / Rakuten, Inc.Rakuten Institute of Technology 후원 .