NER pipeline bug??

#1
by roidnishikawa - opened

NERタスクにて利用させて頂いております。
どうしても不可解な点があり質問しました。

・問題点
サブワード含みの文をNERすると特徴位置がずれている?

・学習データ
{
"text": "原因は、サッダーム・フセインの叔父で、汚職で有名だったハイラッラー・ティルファーの資金を海外の口座に送金するのをアル=アッザーウィーが拒否したためであった。",
"entities": [
{
"name": "サッダーム・フセイン",
"span": [
4,
14
],
"type": "人名"
},
{
"name": "ハイラッラー・ティルファー",
"span": [
27,
40
],
"type": "人名"
},
{
"name": "アル=アッザーウィー",
"span": [
56,
66
],
"type": "人名"
}
]
},

・結果
SENTENCE:
原因は、サッダーム・フセインの叔父で、汚職で有名だったハイラッラー・ティルファーの資金を海外の口座に送金するのをアル=アッザーウィーが拒否したためであった。
TOKENIZE:
['原因', 'は', '、', 'サッ', 'ダー', '##ム', '・', 'フ', '##セイ', '##ン', 'の', '叔父', 'で', '、', '汚職', 'で', '有名', 'だっ', 'た', 'ハイ', '##ラ', '##ッラー', '・', 'ティル', 'ファー', 'の', '資金', 'を', '海外', 'の', '口座', 'に', '送', '##金', 'する', 'の', 'を', 'アル', '=', 'アッ', '##ザー', '##ウィ', 'ー', 'が', '拒否', 'し', 'た', 'ため', 'で', 'あっ', 'た', '。']
RESULT:
word: サッ label: B-人名 score: 0.9971186
word: ダー label: I-人名 score: 0.99834764
word: ##ム label: I-人名 score: 0.99861544
word: ・ label: I-人名 score: 0.99872655
word: 有名 label: B-人名 score: 0.9969955
word: だっ label: I-人名 score: 0.9986276
word: た label: I-人名 score: 0.9987207
word: ハイ label: I-人名 score: 0.9987995
word: に label: B-人名 score: 0.99630404
word: 送 label: I-人名 score: 0.9981911
word: ##金 label: I-人名 score: 0.9985434
word: する label: I-人名 score: 0.9984387
※学習精度については他の「##」を含まない文だとほぼ100%正解になります。

・tokenizerの呼び方
 学習時:tokenizer = BertJapaneseTokenizer.from_pretrained(”cl-tohoku/bert-base-japanese-v2”)
 テスト時:tokenizer = BertJapaneseTokenizer.from_pretrained(”学習した自前モデルパス”)

・modelの呼び方
 学習時:model = BertForTokenClassification.from_pretrained(”cl-tohoku/bert-base-japanese-v2”)
 テスト時:BertForTokenClassification.from_pretrained(”学習した自前モデルパス”)

・学習したモデルのtokenizer_config.json
{"unk_token": "[UNK]", "sep_token": "[SEP]", "pad_token": "[PAD]", "cls_token": "[CLS]", "mask_token": "[MASK]", "do_lower_case": false, "do_word_tokenize": true, "do_subword_tokenize": true, "word_tokenizer_type": "mecab", "subword_tokenizer_type": "wordpiece", "never_split": null, "mecab_kwargs": {"mecab_dic": "unidic_lite"}, "special_tokens_map_file": null, "tokenizer_file": null, "name_or_path": "cl-tohoku/bert-base-japanese-v2", "tokenizer_class": "BertJapaneseTokenizer"}

これだけの情報では不足でしょうがもし何かお気づきの点がありましたらご教授いただければ幸いです。

追記:
学習時のデータ正当性についてはTrainerのtrain_datasetの中身を見て確認しました。

Sign up or log in to comment