CKIPトランス
このプロジェクトは、従来の中国の変圧器モデル(Albert、Bert、GPT2を含む)およびNLPツール(単語セグメンテーション、一部のスピーチタグ付け、名前付きエンティティ認識を含む)を提供します。
このプロジェクトは、伝統的な中国語(アルバート、バート、GPT2を含む)および自然言語処理ツール(単語動詞のマーキング、一部のスピーチマーキング、エンティティ認識を含む)のトランスモデルを提供します。
git
https://github.com/ckiplab/ckip-transformers
ピピ
https://pypi.org/project/ckip-transformers
ドキュメント
https://ckip-transformers.readthedocs.io
デモ
https://ckip.iis.sinica.edu.tw/service/transformers
貢献者
- CKIPのMu Yang(著者とメンテナー)。
- CKIP(メンテナー)のwei-yun ma。
関連パッケージ
- ckiptagger:bilstmを使用した代替の中国のNLPライブラリ。
- CKIP CorenLP Toolkit:NLPタスクとユーティリティを備えた中国のNLPライブラリ。
モデル
また、Huggingface Transformers Libraryを使用して、当社の既製のモデルを直接使用することもできます:https://huggingface.co/ckiplab/。
https://huggingface.co/ckiplab/で冒険モデルをダウンロードできます。
- 言語モデル
- アルバート・タイニー:
ckiplab/albert-tiny-chinese - アルバートベース:
ckiplab/albert-base-chinese - Bert Tiny:
ckiplab/bert-tiny-chinese - バートベース:
ckiplab/bert-base-chinese - gpt2 tiny:
ckiplab/gpt2-tiny-chinese - GPT2ベース:
ckiplab/gpt2-base-chinese
- NLPタスクモデル
- Albert Tiny - 単語セグメンテーション:
ckiplab/albert-tiny-chinese-ws - Albert Tiny - スピーチの一部のタグ付け:
ckiplab/albert-tiny-chinese-pos - Albert Tiny - 指名されたエンティティ認識:
ckiplab/albert-tiny-chinese-ner - アルバートベース - 単語セグメンテーション:
ckiplab/albert-base-chinese-ws - Albert Base - スピーチの一部のタグ付け:
ckiplab/albert-base-chinese-pos - Albert Base - 指名されたエンティティ認識:
ckiplab/albert-base-chinese-ner - Bert Tiny - 単語セグメンテーション:
ckiplab/bert-tiny-chinese-ws - Bert Tiny - スピーチの一部のタグ付け:
ckiplab/bert-tiny-chinese-pos - Bert Tiny - 指名されたエンティティ認識:
ckiplab/bert-tiny-chinese-ner - BERT BASE - ワードセグメンテーション:
ckiplab/bert-base-chinese-ws - BERT BASE - スピーチの一部のタグ付け:
ckiplab/bert-base-chinese-pos - BERT BASE - 指名されたエンティティ認識:
ckiplab/bert-base-chinese-ner
モデルの使用
HuggingfaceのTransformers Libraryからモデルを直接使用できます。
Huggingfaceのトランスフォーマースイートを介して、モデルを直接使用できます。
pip install -U transformers
Berttokenizerfastをトークンザーとして使用し、次の例で必要なモデルにckiplab/albert-tiny-chineseとckiplab/albert-tiny-chinese-ws交換してください。
組み込みのBerttokenizerfastを使用して、 ckiplab/albert-tiny-chineseとckiplab/albert-tiny-chinese-ws次の例で交換してください。
from transformers import (
BertTokenizerFast ,
AutoModelForMaskedLM ,
AutoModelForCausalLM ,
AutoModelForTokenClassification ,
)
# masked language model (ALBERT, BERT)
tokenizer = BertTokenizerFast . from_pretrained ( 'bert-base-chinese' )
model = AutoModelForMaskedLM . from_pretrained ( 'ckiplab/albert-tiny-chinese' ) # or other models above
# casual language model (GPT2)
tokenizer = BertTokenizerFast . from_pretrained ( 'bert-base-chinese' )
model = AutoModelForCausalLM . from_pretrained ( 'ckiplab/gpt2-base-chinese' ) # or other models above
# nlp task model
tokenizer = BertTokenizerFast . from_pretrained ( 'bert-base-chinese' )
model = AutoModelForTokenClassification . from_pretrained ( 'ckiplab/albert-tiny-chinese-ws' ) # or other models above
モデルの微調整
独自のデータセットでモデルを微調整するには、Huggingfaceの変圧器の次の例を参照してください。
次の例を参照して、モデルを独自のデータセットに微調整できます。
- https://github.com/huggingface/transformers/tree/master/examples
- https://github.com/huggingface/transformers/tree/master/examples/pytorch/language-modeling
- https://github.com/huggingface/transformers/tree/master/examples/pytorch/token-classification
中国のトークンザーを使用するために、 --tokenizer_name bert-base-chineseを設定することを忘れないでください。
中国語でトークネイザーを正しく使用するために、 --tokenizer_name bert-base-chineseを設定することを忘れないでください。
python run_mlm.py
--model_name_or_path ckiplab/albert-tiny-chinese # or other models above
--tokenizer_name bert-base-chinese
...
python run_ner.py
--model_name_or_path ckiplab/albert-tiny-chinese-ws # or other models above
--tokenizer_name bert-base-chinese
...
モデルのパフォーマンス
以下は、モデルと他のモデルのパフォーマンス比較です。
結果は、伝統的な中国のコーパスでテストされています。
以下は、モデルのパフォーマンスと他のモデルとの比較です。
各タスクは、従来の中国のテストセットでテストされています。
| モデル | #parameters | 困惑† | WS(F1)‡ | pos(acc)‡ | ner(f1)‡ |
|---|
| ckiplab/albert-tiny-chinese | 4m | 4.80 | 96.66% | 94.48% | 71.17% |
| ckiplab/albert-base-chinese | 11m | 2.65 | 97.33% | 95.30% | 79.47% |
| ckiplab/bert-tiny-chinese | 12m | 8.07 | 96.98% | 95.11% | 74.21% |
| ckiplab/bert-base-chinese | 102m | 1.88 | 97.60% | 95.67% | 81.18% |
| ckiplab/gpt2-tiny-chinese | 4m | 16.94 | - | - | - |
| ckiplab/gpt2-base-chinese | 102m | 8.36 | - | - | - |
| | | | | |
| voidful/albert_chinese_tiny | 4m | 74.93 | - | - | - |
| voidful/albert_chinese_base | 11m | 22.34 | - | - | - |
| バート・ベース・チネーゼ | 102m | 2.53 | - | - | - |
†困惑;小さいほど良い。
†混乱の程度;数が小さいほど良い。
‡WS:単語セグメンテーション。 POS:スピーチの一部。 NER:指名されたエンティティ認識。大きいほど良い。
‡WS:動詞動詞。 POS:スピーチの一部。 NER:エンティティ認識。数が大きいほど良い。
トレーニングコーパス
言語モデルは、ZhwikiおよびCNAデータセットでトレーニングされています。 WSおよびPOSタスクはASBCデータセットでトレーニングされています。 NERタスクは、Ontonotesデータセットでトレーニングされています。
上記の言語モデルは、ZhwikiおよびCNAデータセットでトレーニングされています。動詞Try(WS)とスピーチの一部のタグ付け(POS)タスクモデルは、ASBCデータセットでトレーニングされています。エンティティ認識(NER)タスクモデルは、Ontonotesデータセットでトレーニングされています。
- Zhwiki:https://dumps.wikimedia.org/zhwiki/
中国のウィキペディアテキスト(20200801ダンプ)、OpenCCを使用して従来のものに翻訳されています。
中国のウィキの記事(20200801バージョン)、OpenCCを使用して伝統的な中国語に翻訳されています。
- CNA:https://catalog.ldc.upenn.edu/ldc2011t13
中国のギガウォード第5版 - CNA(中央通信社)パート。
中国のギガウォード第5版 - CNA(中央通信社)。
- ASBC:http://asbc.iis.sinica.edu.tw
Academia Sinica現代中国のリリース4.0のバランスの取れたコーパス。
中国科学アカデミーの中国のバランスの取れたコーパスの第4版。
- Ontonotes:https://catalog.ldc.upenn.edu/ldc2013t19
Ontonotesリリース5.0、中国部品、OpenCCを使用して従来のものに翻訳されています。
Ontonotes第5版、中国の部分は、OpenCCを使用して伝統的な中国語に翻訳されています。
各コーパスの概要です。
以下は、各データセットのリストです。
| データセット | #Documents | #lines | #Characters | ラインタイプ |
|---|
| CNA | 2,559,520 | 13,532,445 | 1,219,029,974 | 段落 |
| Zhwiki | 1,106,783 | 5,918,975 | 495,446,829 | 段落 |
| ASBC | 19,247 | 1,395,949 | 17,572,374 | 句 |
| ontonotes | 1,911 | 48,067 | 1,568,491 | 文 |
言語モデルに使用されるデータセットスプリットは次のとおりです。
以下は、言語モデルのトレーニングに使用されるデータセットカットです。
| CNA+Zhwiki | #Documents | #lines | #Characters |
|---|
| 電車 | 3,606,303 | 18,986,238 | 4,347,517,682 |
| 開発者 | 30,000 | 148,077 | 32,888,978 |
| テスト | 30,000 | 151,241 | 35,216,818 |
以下は、単語セグメンテーションと一部のスピーチタグ付けモデルに使用されるデータセット分割です。
以下は、単語動詞の動詞とスピーチの一部のマーキングモデルをトレーニングするために使用されるデータセット切断です。
| ASBC | #Documents | #lines | #Words | #Characters |
|---|
| 電車 | 15,247 | 1,183,260 | 9,480,899 | 14,724,250 |
| 開発者 | 2,000 | 52,677 | 448,964 | 741,323 |
| テスト | 2,000 | 160,012 | 1,315,129 | 2,106,799 |
以下は、単語セグメンテーションと名前付きエンティティ認識モデルに使用されるデータセットスプリットです。
以下は、エンティティ識別モデルのトレーニングに使用されるデータセットカットです。
| ontonotes | #Documents | #lines | #Characters | #名前付きエンティティ |
|---|
| 電車 | 1,511 | 43,362 | 1,367,658 | 68,947 |
| 開発者 | 200 | 2,304 | 93,535 | 7,186 |
| テスト | 200 | 2,401 | 107,298 | 6,977 |
NLPツール
パッケージは、次のNLPツールも提供します。
当社のスイートは、次の自然言語処理ツールも提供しています。
- (WS)単語セグメンテーション
- (POS)スピーチの一部のタグ付け
- (NER)エンティティ認識という名前
インストール
pip install -U ckip-transformers
要件:
- Python 3.6+
- Pytorch 1.5+
- ハギングフェイストランス3.5+
NLPツールの使用
APIの詳細については、こちらをご覧ください。
詳細なAPIについては、こちらをご覧ください。
この例の完全なスクリプトはhttps://github.com/ckiplab/ckip-transformers/blob/master/example/example.pyです。
次の例の完全なプロファイルは、https://github.com/ckiplab/ckip-transformers/blob/master/example/example.pyにあります。
1。モジュールをインポートします
from ckip_transformers . nlp import CkipWordSegmenter , CkipPosTagger , CkipNerChunker
2。モデルをロードします
NLPツールにいくつかの前提型モデルを提供します。
自然言語ツールの事前に訓練されたモデルを提供しています。
# Initialize drivers
ws_driver = CkipWordSegmenter ( model = "bert-base" )
pos_driver = CkipPosTagger ( model = "bert-base" )
ner_driver = CkipNerChunker ( model = "bert-base" )
ドライバーを使用して独自のチェックポイントをロードすることもできます。
また、当社のツールを使用して、独自のモデルをトレーニングすることもできます。
# Initialize drivers with custom checkpoints
ws_driver = CkipWordSegmenter ( model_name = "path_to_your_model" )
pos_driver = CkipPosTagger ( model_name = "path_to_your_model" )
ner_driver = CkipNerChunker ( model_name = "path_to_your_model" )
GPUを使用するには、ドライバーの初期化中にデバイスIDを指定できます。 GPUを無効にするように-1(デフォルト)に設定します。
GPUを使用するようにワードブレーカーを宣言するときに、デバイスを指定できます。 -1(プリセット値)に設定すると、GPUが使用されないことを意味します。
# Use CPU
ws_driver = CkipWordSegmenter ( device = - 1 )
# Use GPU:0
ws_driver = CkipWordSegmenter ( device = 0 )
3.パイプラインを実行します
単語セグメンテーションと指名されたエンティティ認識の入力は、文のリストでなければなりません。
スピーチの一部のタグ付けの入力は、単語のリスト(単語セグメンテーションの出力)のリストでなければなりません。
動詞およびエンティティの識別の入力は、文のリストでなければなりません。
スピーチの一部のタグの入力は、単語のリストのリストでなければなりません。
# Input text
text = [
"傅達仁今將執行安樂死,卻突然爆出自己20年前遭緯來體育台封殺,他不懂自己哪裡得罪到電視台。" ,
"美國參議院針對今天總統布什所提名的勞工部長趙小蘭展開認可聽證會,預料她將會很順利通過參議院支持,成為該國有史以來第一位的華裔女性內閣成員。" ,
"空白 也是可以的~" ,
]
# Run pipeline
ws = ws_driver ( text )
pos = pos_driver ( ws )
ner = ner_driver ( text )
POSドライバーは、キャラクターを使用して内部的に文を自動的にセグメント化します',,。::;;!!??'モデルの実行中。 (出力文は戻ってきます。)必要な文字にdelim_setを設定できます。
use_delim=Falseを設定してこの機能を無効にするか、wsおよびnerドライバーでuse_delim=Trueを設定してこの機能を有効にすることができます。
スピーチの一部のマーキングツールは自動的に使用されます',,。::;;!!??' ETC文字は、モデルを実行する前に文章をカットします(出力文は自動的にピックアップされます)。 delim_setパラメーターは、他の文字を使用してカットするように設定できます。
さらに、 use_delim=Falseがこの関数を無効にしたこと、または動詞の言い訳とエンティティ識別の場合にuse_delim=Trueが有効になっていることを指定できます。
# Enable sentence segmentation
ws = ws_driver ( text , use_delim = True )
ner = ner_driver ( text , use_delim = True )
# Disable sentence segmentation
pos = pos_driver ( ws , use_delim = False )
# Use new line characters and tabs for sentence segmentation
pos = pos_driver ( ws , delim_set = ' n t ' )
batch_sizeとmax_lengthを指定して、マシンリソースをより適切に活用できます。
また、 batch_sizeとmax_lengthを設定して、マシンリソースをよりよく使用することもできます。
# Sets the batch size and maximum sentence length
ws = ws_driver ( text , batch_size = 256 , max_length = 128 )
4。結果を表示します
# Pack word segmentation and part-of-speech results
def pack_ws_pos_sentece ( sentence_ws , sentence_pos ):
assert len ( sentence_ws ) == len ( sentence_pos )
res = []
for word_ws , word_pos in zip ( sentence_ws , sentence_pos ):
res . append ( f" { word_ws } ( { word_pos } )" )
return " u3000 " . join ( res )
# Show results
for sentence , sentence_ws , sentence_pos , sentence_ner in zip ( text , ws , pos , ner ):
print ( sentence )
print ( pack_ws_pos_sentece ( sentence_ws , sentence_pos ))
for entity in sentence_ner :
print ( entity )
print ()フー・ダレンは安楽死を行おうとしているが、突然、彼は20年前にワイライスポーツステーションに禁止されたと暴露された。彼はテレビ局をどこで怒らせたのか知りませんでした。
fu daren(nb)will(d)will(vc)euthanasia(na)を実行しましたが、(commacategory)は突然(vj)20年前(nd)(ng)(ng)および(commacategory)によって禁止されたことを突然勃発しました。 (ciopcategory)
nertoken(word = 'fu daren'、ner = 'person'、idx =(0、3))
nertoken(word = '20 years '、ner =' date '、idx =(18、21))
nertoken(word = 'weilai Sports Station'、ner = 'org'、idx =(23、28))
米国上院は、今日ブッシュ大統領が指名したZhao Xiaolan労働長官に関する承認聴聞会を開催しました。彼女は上院の支持をうまく通過し、歴史上、国内初の女性中国人内閣のメンバーになることが期待されています。
The United States (Nc) Senate (Nc) is aimed at (P) Today (Nd) President (Na) Bush (Nb) nominated (VC) Secretary of Labor (Na) Zhao Xiaolan (Nb) held a (VC) recognition (VC) hearing (Na), and (COMMACATEGORY) expected (VE) She will (D) very smoothly (VH) passed (VC) Senate (Nc) supported (VC) and (commacategory)は(vg)(nes)国(nc)を常に持っています(d)最初の(neu)中国人(na)女性(NA)キャビネット(NA)メンバー(NA)。 (ciopcategory)
nertoken(word = 'U.S。Senate'、ner = 'org'、idx =(0、5))
nertoken(word = 'today'、ner = 'loc'、idx =(7、9))
nertoken(word = 'bush'、ner = 'person'、idx =(11、13))
nertoken(word = 'of of of of of of of of of of of of of of of of of of of of of of of of of of
nertoken(word = 'choice'、ner = 'person'、idx =(21、24))
nertoken(word = '謝辞聴聞'、ner = 'event'、idx =(26、31))
nertoken(word = 'senate'、ner = 'org'、idx =(42、45))
nertoken(word = 'first'、ner = 'ordinal'、idx =(56、58))
nertoken(word = 'fishen'、ner = 'norp'、idx =(60、62)))
空白も大丈夫です
blank(vh)(whitespace)は(d)is(shi)can(vh)(t)〜(fw)です
NLPツールのパフォーマンス
以下は、当社のツールと他のツールのパフォーマンス比較です。
以下は、当社のツールと他のツールとのパフォーマンスの比較です。
CKIP Transformers vs Monpa&Jeiba
| 道具 | WS(F1) | POS(ACC) | WS+POS(F1) | ner(f1) |
|---|
| CKIP BERTベース | 97.60% | 95.67% | 94.19% | 81.18% |
| CKIP Albert Base | 97.33% | 95.30% | 93.52% | 79.47% |
| ckip bert tiny | 96.98% | 95.08% | 93.13% | 74.20% |
| Ckip Albert Tiny | 96.66% | 94.48% | 92.25% | 71.17% |
| | | | |
| モンパ† | 92.58% | - | 83.88% | - |
| エイバ | 81.18% | - | - | - |
†MONPAは、NERで3種類のタグのみを提供します。
†MONPAのエンティティ識別は、3つのマーカーのみを提供します。
CKIPトランスとCKIPTAGGER
次の結果は、別のデータセットでテストされています。†
次の実験は、別のデータセットでテストされています。 †
| 道具 | WS(F1) | POS(ACC) | WS+POS(F1) | ner(f1) |
|---|
| CKIP BERTベース | 97.84% | 96.46% | 94.91% | 79.20% |
| ckiptagger | 97.33% | 97.20% | 94.75% | 77.87% |
†ここでは、ckiptaggerを使用して同じデータセットを使用してBERTモデルを再訓練/テストしました。
†ckiptaggerと同じデータセットでBERTモデルを再訓練/テストします。
ライセンス
著作権(c)2023 GPL-3.0ライセンスに基づくCKIPラボ。