Transformers(11) - 質疑応答②わかち書き/ファインチューニング

前回は、質疑応答のためのデータセットの準備と必要なライブラリのインストールを行いました。

今回は、わかち書きファインチューニングを行います。

わかち書き

日本語はわかち書きに変換すると精度が上がります。

下記のコードでわかち書きを行います。

[Google Colaboratory]

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
import json
import MeCab
wakati = MeCab.Tagger("-Owakati")

# paragraphのわかち書き
def wakatiParagraph(dic):
context = None
for k, v in dic.items():
if k == 'context':
dic[k] = wakati.parse(v).strip()
context = dic[k]

for k, v in dic.items():
if k == 'qas':
for qa in v:
if not wakatiQa(qa, context):
print('Warning Remove QA:', context)
v.remove(qa)

# qaのわかち書き
def wakatiQa(dic, context):
for k, v in dic.items():
if k == 'question':
dic[k] = wakati.parse(v).strip()
elif k == 'answers':
for answer in v:
answer['text'] = wakati.parse(answer['text']).strip()
answer['answer_start'] = context.find(answer['text'])
if answer['answer_start'] < 0:
print('Warning Remove Text: ', answer['text'])
v.remove(answer)
if len(v) == 0:
return False
return True

# ファイルのわかち書き
def wakatiFile(in_file, out_file):
data = None
with open(in_file, 'r') as f:
data = json.load(f)
paragraphs = data['data'][0]['paragraphs']
for paragraph in paragraphs:
wakatiParagraph(paragraph)

with open(out_file, 'w') as f:
json.dump(data, f, indent=2, ensure_ascii=False)

# ファイルのわかち書きの実行
wakatiFile('./DDQA-1.0/RC-QA/DDQA-1.0_RC-QA_train.json', 'wakati_DDQA-1.0_RC-QA_train.json')
wakatiFile('./DDQA-1.0/RC-QA/DDQA-1.0_RC-QA_dev.json', 'wakati_DDQA-1.0_RC-QA_dev.json')

実行結果は以下の通りです。

[実行結果]

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
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
Warning Remove Text:  冬 期間
Warning Remove QA: と ばかり に 、 DJEBEL を 走ら せ 、 国道 361 号 の 旧道 で 地蔵 峠 を 登っ て いく 。 地蔵 峠 は 御岳 山 を 眺める の に は 、 絶好 の 展望 台 に なっ て いる 。 だ が 峠道 は 冬期 間 は 閉鎖 。 バイク なら ば 走れる の で は ない か と 峠道 を のぼっ て いく と 、 ツルツル 滑る アイスバーン に なり 、 深い 雪道 に なり 、 たてつづけ に 転倒 。
Warning Remove Text: ローディ ー
Warning Remove Text: 米 島口
Warning Remove Text: 米 島口
Warning Remove QA: 本丸 会館 前 間 の 途中 の ところ で 行き違い が 出来る よう に なっ て いる 。 広小路 から 、 複線 と なる 。 道路 の 真ん中 を 、 軽快 に 走る 。 しばらく 走っ て 、 米 島 口 に 到着 する 。
Warning Remove Text: スー パーカ
Warning Remove Text: 三島
Warning Remove QA: 県道 18 号 線 を 下り だし て 修善寺 に 近付く に つれ 、 路面 は 段々 と ウェット 状態 に 。 暑く て も レイン ウェア を 脱が なく て 正解 だっ た 。 修善寺 IC から 修善寺 道路 を 三 島 へ 向かっ て 北上 。 料金 を 払う の が どう も 面倒 くさい 。
Warning Remove Text: 暖機 音
Warning Remove QA: いずれ この 音 に 満足 いか なく なっ たり する の か な 。 朝 早く 暖 機音 が 気 に なる の で 、 アクセル を 開け ず そろそろ と 発進 。 岐れ 路 で 剣道 と ぶつかっ て から ちゃんと 開け て 走る 。 八幡 宮前 を 左折 し て 一路 海 へ 。
Warning Remove Text: 40 分位
Warning Remove QA: 前 に も 後ろ に も 、 対向 車 も い ない 。 それ で も 、 何 と か 家 に 帰ら ない と 、 と 一生 懸命 走っ た らしい 。 その 内 に 気 が つく と 、 いつ も の 道 に 出 て い た 、 と 言う 。 だいたい 、 40 分 位 迷っ て い た らしい ん だ けれど 。 。 。
Warning Remove Text: おまわり さん
Warning Remove QA: こんな の が ごろごろ いる よ 。 自分 の 事 だけ じゃ なく 、 対向 車 や 後続 車 、 歩行 者 や 自転 車 まで 、 自分 の 周り の 全て の 状況 に 心配 れ ない 人 は 、 免許 取り消し 処分 に なっ て も 仕方ない ん じゃ ない の ? ? そんな 奴 に 限っ て お まわり さん に 縁 が 無かっ たり する ん だ よ ね ! ! エコ と か セコ と か 勝手 に すれ ば よい けど 、 状況 を わきまえ て ください 。
Warning Remove Text: デレ ー ラー
Warning Remove QA: 宿 に 着い て 指示 さ れ た 場所 に 自転 車 を 置い て ? ? その まま に し て おけ ば 良い の に 、 変速 用 の ワイヤー が ピーン と 張っ て いる の が 眼 に 入っ て ( 張っ て いる の が 普通 の 状態 で 、 何 も わるく ない ん です よ ) 貧乏 性 な もの です から カチカチ と ワイヤー を 緩め て しまい まし た 。 つまり 1 と 同じ 状況 です 、 チェーン が 廻っ て い ない 状態 で 変速 する と 不 完全 な 変速 状態 ( ロック 状態 ) に なっ て しまい ます 。 で 、 翌朝 そこ に 気 が つか ず に 、 その まま 乗っ て こぎ出し 大きな 負荷 が かかり 、 今度 は デレーラー が 曲がっ て しまっ た ? ? と 言う わけ です 。 ひどく 曲がっ て い まし た 、 軽い 曲がり なら 腕力 で も 直せ ます が ? ? ? 、 考え まし た 。
Warning Remove Text: アクセル と ブレーキ ー
Warning Remove QA: の で フト 見 て み たら 、 お 店 の 駐車 場 の フェンス を 倒し 、 その ちょうど 正面 に ある ビル の 1 階 に 、 1 台 の 。 ワン ボックス カー が 突っ込ん で い た … フェンス を なぎ倒し 、 壁 を 壊し 、 すっぽり と はまっ て い た 。 よく ある アクセル と ブレ ー キー を 踏み 間違え た って 事故 の 。
Warning Remove Text: ア イザイア
Warning Remove QA: 後 を 追う パトカー に 乗っ て いる の は 先ほど ジェニー が 急 発進 し た 時 に 止め た 警官 の アイザイア だっ た 。 「 今 じゃ 私 を 信じ て くれる わ ね 。 」 と 言う ジェニー に ようやく 納得 の アイザイア 。 その 時 、 後部 座席 で 駄洒落 を ふりまい て い た デクスター に 突如 名案 が 浮かん だ よう だ 。 身軽 に 前 に 乗り移る と 車 の 下 に もぐりこみ 配線 接続 を あれこれ 試し て み た 。
Warning Remove Text: 警官 の ア イザイア
Warning Remove Text: ア イザイア
Warning Remove QA: 後 を 追う パトカー に 乗っ て いる の は 先ほど ジェニー が 急 発進 し た 時 に 止め た 警官 の アイザイア だっ た 。 「 今 じゃ 私 を 信じ て くれる わ ね 。 」 と 言う ジェニー に ようやく 納得 の アイザイア 。 その 時 、 後部 座席 で 駄洒落 を ふりまい て い た デクスター に 突如 名案 が 浮かん だ よう だ 。 身軽 に 前 に 乗り移る と 車 の 下 に もぐりこみ 配線 接続 を あれこれ 試し て み た 。
Warning Remove Text: 15 分位
Warning Remove Text: 八幡平
Warning Remove QA: も 出 てる だろう し 時間 が かかる に 違い ない … 。 ここ で 時間 を ロス し て しまう と この 後 の 予定 が 詰まっ て しまう と 考え て 、 残念 ながら 。 八幡 平 を あきらめ て その まま 高速 を 走っ て 次 の 目的 地 を 目指す こと に し まし た 。 安代 Jct を 過ぎ て 八戸 道 へ 入り 走っ て いく と 、 青森 へ 入り まし た 。
Warning Remove Text: 八幡平
Warning Remove QA: と 思い ながら 、 とりあえず 八幡 平 を 目指し て 走り まし た 。 国道 103 号 から 国道 282 へ 入り まし た が 、 雨 は 止む 様子 も なく … 。 そして 東北 の 国道 は あまり 交通 量 も 多く ない し 、 ひたすら 走る ? って ところ が 多い ん です よ ね 。 4 日 走っ て い ます が 、 距離 も 長い し 雨 の 音 しか し ない し 、 疲れ も ある ため か スピード も 出せ ない の で ボーっと 走っ て いる と つい ウトウト し ちゃう こと が 何 度 か あり まし た (^_^;)
Warning Remove Text: 川 沿い
Warning Remove QA: 思っ た 通り 、 一 往復 する 間 に 、 すいすい 乗れる よう に 。 と いっ て も 、 「 滑らか な 道 なら OK 」 と いう 条件 つき です し 、 乗る こと で 精 一杯 です から 、 自転 車 で どこ か へ 出かける の は まだまだ 危ない です が 。 これ まで の 感じ だ と 、 こう いっ た 、 「 成長 と とも に 、 あまり 苦労 なく できる よう に なる こと 」 に つい て は 、 早め に 練習 する より は 、 ある 程度 大きく なっ て から やっ て み た 方 が 、 スンナリ できる よう に なる こと が 多かっ た の です が 、 自転 車 も やっぱり その パターン だっ た よう です 。 川沿い を 往復 し て 、 少々 疲れ て 、 自転 車 を 押し て 家 まで 帰る 途中 。
Warning Remove Text: 40 00 回転
Warning Remove Text: うー ー ん 、 、 奴 ら 、 死に たい の か と ?
Warning Remove Text: と よ じ さ ん ち
Warning Remove QA: 進め られ て い まし た 。 する と 向う から 、 またまた やっ て 来 まし た ? また 横 を サーッ と 通り抜け て 、 スタコラ サッサと 坂 を 下り て ゆき まし た 。 この 道 は いつ も の 散歩 道 に 通じ て おり 、 と よ じ さん ち に 行く 近道 ・ ・ ・
Warning Remove Text: ア ミ ティ
Warning Remove QA: そして おの や ん 家 一同 は アミ ティ に 乗っ て 我が家 に 向かう 。 走り 出し た 瞬間 、 オートマ に すれ ば よかっ た か な ? と 少し 後悔 を 感じる 。 その 後悔 を 振り払い ながら 車 を 進める 。 前 を 見 て 運転 し て いる だけ で は 、 ロング ハイ ルーフ の ハイ エース と 雰囲気 は 変わら ない 。
Warning Remove Text: ティピ ー
Warning Remove QA: 「 ティ ピー の 前 で 写真 を 撮る から 集まれ ? ! 」 皆 が 外 に 出 た とき は 、 結構 な 降り に なっ て い た が 、 家族 全員 が 、 ランドティピー の 前 で 写真 を 撮る こと が 最後 だ と 感じ て いる の で 、 誰 も 文句 を 言わ ず に 外 へ 出 た 。 三脚 を ランドティピー の 前 に 立て て 、 セルフ タイマー を セット する 。 「 みんな ? 、 あの カメラ の 真ん中 を 見 て ね と ? 」 言い ながら 自分 も 車 に 駆け寄る 。
Warning Remove Text: お 祖母 ちゃん が どう し て この 坂 の 上 に お 墓 を 建て た か
Warning Remove Text: ネズミ 捕
Warning Remove Text: 右前
Warning Remove QA: 雪 が 降っ て い て 視界 が 悪かっ た の も 影響 し た 。 両車 とも 手前 で スピード を 緩め て いる の で それ 程 衝撃 も なく 、 ぶつかっ た ところ も 右 前 で 自分 の 近く で 良かっ た 。 誰 も 怪我 も なく 人身 事故 で は なく 物損 事故 と なっ た 。 向こう の 人 は 特に 怒っ た そぶり も なく 淡々 と 事故 後 の 手続き を 踏ん で い た 。
Warning Remove Text: 左折 に あたる から 左 合図
Warning Remove Text: 走っ たり と まっ た
Warning Remove Text: 50 00 回転
Warning Remove Text: 白い L クサ ス
Warning Remove QA: 昨日 は いつ も より 早く 家 を 出 まし た から 道 は まだ 空い て い て 。 で も 信号 の 間隔 は 同じ です から できる だけ 止まら ない よう に 。 かつ 安全 スピ ? ド で 走っ て ます と 後ろ から 白い L クサス が 迫っ て き て 。 ピタっ と 真後ろ に つい た 片側 2 車線 です から 抜い て いけ ば いい ん だ けど 。
Warning Remove Text: うっちゃん
Warning Remove QA: 何 時 に 行こう か と 悩ん でる うち に 夜中 に なっ て しまい まし た 。 Chiffon は いつ も 私 の 膝 の 上 に 来 ます 。 私 が 運転 席 で 、 助手 席 に うっ ちゃん が い て も 来る の で 。 安全 を 考え て いつ も 寝 て いる Chiffon の ベッド を 持っ て いく 事 に し まし た 。
Warning Remove Text: 思いのほか よい 燃費
Warning Remove Text: え れ み
Warning Remove Text: マ アーン
Warning Remove Text: ガー ミン
Warning Remove QA: 後 は 、 何 と か 登り はじめ 前 に 自販 機 か なん か で 給水 できれ ば なん と か なる な 。 確認 し て おい た とおり に 右折 。 後 は 道 なり に 進ん で 、 ガーミン 頼っ て いけ ば 間違わ ない はず 。 住宅 地 を 抜ける と だんだん 上り坂 に 。
Warning Remove Text: ちゃんと 大型 車 の 運転
Warning Remove Text: アンキ モ
Warning Remove QA: 大洗 港 近く の 「 潮騒 の 湯 」 ( 入浴 料 1000 円 10 時 ? 21 時 ) に 入り 、 湯 から 上がる と 「 あんこう 鍋 うどん 」 ( 900 円 ) を 食べ た 。 アン キモ が 上 に のっ て いる 。 アンコウ を 先 に 食べ 、 その あと で 味 の しみ込ん だ うどん を 食べ た 。 それ を 最後 に R 51 から 水戸 大洗 IC で 東 水戸 道路 に 入り 、 常磐 道 で 東京 に 戻っ た 。
Warning Remove Text: わんこ の 好き な おもちゃ
Warning Remove Text: ユ ロン 峠
Warning Remove Text: ラチ ェ
Warning Remove Text: あ ん こう 鍋 うどん
Warning Remove QA: 大洗 港 近く の 「 潮騒 の 湯 」 ( 入浴 料 1000 円 10 時 ? 21 時 ) に 入り 、 湯 から 上がる と 「 あんこう 鍋 うどん 」 ( 900 円 ) を 食べ た 。 アン キモ が 上 に のっ て いる 。 アンコウ を 先 に 食べ 、 その あと で 味 の しみ込ん だ うどん を 食べ た 。 それ を 最後 に R 51 から 水戸 大洗 IC で 東 水戸 道路 に 入り 、 常磐 道 で 東京 に 戻っ た 。
Warning Remove Text: 川上 牧 丘
Warning Remove Text: 上 浦幌 の パーキング エリア
Warning Remove Text: 上 浦幌 の パーキング エリア
Warning Remove Text: 市 内
Warning Remove QA: これ は 今 まで と は ちょっと 違う と 思い つつ も 、 少し 遠出 を し た が その 時 は 大丈夫 だっ た 。 一旦 帰宅 し て 、 用事 を 済ま せる ため に 市内 を 走っ て いる とき だっ た 。 右折 中 に 突然 ボキッ と いう よう な 音 と 、 ガラガラ ガタガタ と いう 大きな 音 と 衝撃 が 走っ た 。 ブレーキ を 踏ん で も 、 ス ? っと 手応え が ない 感じ で 効い て い ない よう だ 。
Warning Remove Text: 男子 予備 校生
Warning Remove Text: 男子 予備 校生
Warning Remove Text: アニキ ィ
Warning Remove QA: そんな アニ キィ は わんこ 先生 仕込み の ヤクザ 運転 で 、 ブイ ブイ 言わし ながら 走る けど 、 高速 は 怖く て 乗ら ない らしい 。 あん だけ 運転 出来 たら 怖い モノ は 無い と 思う の だ けど 不思議 。 しかも 運転 が 好き じゃ ない と か 。 助手 席 に 乗っ てる 方 が 良い と 、 センス の 無い 私 の 運転 で も 助手 席 に 座る 。
Warning Remove Text: 伏 石町
Warning Remove QA: かなり 雪道 を 走っ た 割 に は 良い 数字 が 出 まし た 。 給油 後 、 伏 石 町 に ある コイン 洗車 に 行っ て 洗車 、 ワックス がけ を し て から 、 住居 に は 午前 11 時 45 分 に 到着 し まし た 。 前 の バンパー に は 、 凍っ た 雪 が ぶつかっ て つい た 傷 が 多数 あり まし た 。 車体 側面 に も 一部 に 傷 が 見つかっ た の で 、 先ほど 、 ドンキホーテ に 行っ て 。
Warning Remove Text: みっ き ぃ ママ
Warning Remove QA: 既に 日 は 落ち て しまい 、 明るい 時間 帯 に 走り たかっ た な ? と 思っ たり し た 。 車 を 停め て 散歩 し たかっ た な ? と か 。 で 、 その 頃 助手 席 のみ っ き ぃ ママ は と いう と ・ ・ ・ 、 「 おえ ? 」 の 連発 で うるさかっ たり し たり し て ・ ・ ・
Warning Remove Text: キン ヘッド の お 兄 さん
Warning Remove Text: ザザ ザザ ザザッ
Warning Remove Text: タウン ビー
Warning Remove Text: 三 輪 車
Warning Remove QA: あの 頃 、 私 たち は 交通 事故 ごっこ を よく し て い た 。 私 が 地面 に 横たわり 、 * * ちゃん が 、 三輪 車 に 乗っ て 私 を 轢い た 。 それ は 子供 だけ の 秘密 めい た 遊び で 、 私 と * * ちゃん は 共犯 者 の よう な 関係 だっ た 。 大人 に 見つから ない よう な 場所 で 遊ん で い た もの の 、 ある とき 、 近所 の 口うるさい おば さん に 見つかっ た 。
Warning Remove Text: バ カナディアン の 運転 マナー
Warning Remove Text: オオ ホリ
Warning Remove QA: 途中 、 右 カーブ を 曲がり 切れ ず 、 ミニ 四駆 みたい に 壁 づたい に 走る 車 。 左 の ドア と 壁 と の 摩擦 で 、 なぜ か 左腕 を 大やけど する 助手 席 オオホリ 。 さらに 加速 を 続ける こと 10 分 あまり か 。 ついに あきらめ 、 車 を 止めよう と する ゴト ー 。
Warning Remove Text: マ ルラ
Warning Remove QA: だ が 、 洪水 と 泥土 に すっかり 慣れ た メンバー 全員 は 、 「 目指せ ! エアーズ ロック 」 を 合言葉 に 「 ウーダナダッタトラック 」 も 走り きり 、 スチュワート ハイウエイ の マルラ に 着い た 。 ここ まで 来れ ば 、 あと は もう 舗装 路 のみ 。 マルラ で は キャラバン パーク で キャンプ し た が 、 その 夜 は 大きな 難関 を 突破 し た 喜び を 爆発 さ せ 、 焚き火 を 囲ん で の 大 宴会 に なる 。
Warning Remove Text: オト ン
Warning Remove QA: その 前 に 良い 相手 を 見つけ ね ば なら ん が 、 現実 的 に 厳しい だろう な … 。 食事 が 終わる なり オトン は 去っ た 。 結局 奴 と 一言 も 話す こと は なけれ ば 、 一 度 も 目 を 合わす こと は なかっ た 。 全く 知ら なかっ た の だ が 、 奴 は 広島 で 単身 赴任 し て い たり 、 弟 に 車 を 貸し て い たり 、 今朝 広島 から やっ て き て その まま 広島 に 帰っ た と か 。
Warning Remove Text: 真っ暗 な 中立
Warning Remove Text: イ ク ミ
Warning Remove QA: 「 おめぇ ら 、 仲 良い ん だ な 。 ダチ って の は 大切 に し なきゃ な 」 この 運転 手 さん が 言っ た 言葉 も イク ミ の 予想 通り だ 。 前 に この 運転 手 さん の 事 を 話し たら 、 もし その 人 が 不良 だっ たら 友達 と か 仲間 を 凄い 大事 に する 人 か も ね 、 って 言っ て た 。 ラジオ で 非行 問題 の 事 を 放送 し て い て 、 そう いう 人 達 は 敵対 関係 に ある 人間 に は 凄い 怖い けど 、 結束 力 は 凄い って 言っ て た の を 覚え て い た らしい 。
Warning Remove Text: スタットレス ト
Warning Remove QA: うち に 近ずく に つれ 激しく なっ て き た 。 いくら スタットレスト は いえ スピード を 出す の は やばい ! な の で 40 キロ 走行 21 時 過ぎ だっ たろう か ・ ・ ・ そして 、 うち の 方 へ 曲がっ て 少し 走っ て い たら 、 「 ドカーン ! ! 」 と 音 が し た 。
Warning Remove Text: 一 礼
Warning Remove QA: 向こう も 分かっ て 嬉しかっ た らしい 。 お 互い 笑顔 で 確認 も ほどほど に 、 一礼 を し て 自分 は 去っ た 。 ちょうど 自分 の 買い物 に 行く スーパー の 方向 と 途中 まで 一緒 だっ た の で 、 歩き 始め た 後 も 、 後ろ から 来る で あろう ワゴン 車 が 気 に なっ て は い た 。 案の定 少し 遅れ て 来 た ニトリ の ワゴン 車 が 自分 の 脇 を 抜け て 前 へ 行く 。
Warning Remove Text: 一 礼
Warning Remove Text: かな っぺ
Warning Remove QA: もえ も え の トキ も 同じ よう な 授業 を 参観 し た コト が ある の で 、 アレ 、 また コレ かぁ ? ( 笑 ) って カンジ (* ̄m ̄) ププッ 。 ひとりひとり 、 先生 に 当て られ た 順 に 前 に 出 て 、 自分 の 名前 と 誕生 日 ・ 2 年 生 に なっ て がんばる こと を 発表 し た 後 、 黒板 に 貼っ て ある 表 の 誕生 月 の 欄 に 自分 の カード を 貼り付け て いき ます 。 20 分間 しか 参観 できる 時間 が ない モノ で ( もえ も え の クラス に まわら なきゃ いけ ない 関係 上 ) 、 な っぽ の いる 間 に かなっ ぺ の 番 が まわっ て くる か 気 に なっ た ン だ けど 、 運 よく 早い うち に かなっ ぺ は 当て られ 、 前 に 出 て 発表 を し て い まし た 。
Warning Remove Text: 何 か 変 な もの ふん だ
Warning Remove Text: ト ダ
Warning Remove QA: わかる わかる 。 こっ から だ と 5 分 くらい で 行ける って 。 じゃ 、 すぐ 行く わ 。 トダ は テキパキ 答え 、 すぐ に 通話 を 切る 。 ナカ ヤン は 仕事 の 内容 など を 伝え て おき たかっ た の だ が 、 それ は 合流 し て から で も いい だろう 、 と 思い直す 。 ふと 見る と 、 少年 達 は いつ の ま に か サッカー を やめ て 、 キャッチ ボール に 移行 し て い た 。
Warning Remove Text: くろと わ さん
Warning Remove QA: なるほど 、 道沿い に 二 軒 おき 位 に 寺 が 延々 と 続い て いる 。 これ って 下 世話 な 話 、 商売 に なる の か な ? ? 1 時間 ほど 散策 し 、 ホテル に 戻っ た 。 前日 の 約束 通り 、 9 時 半 に 駐車 場 で くろ とわ さん と 落ち合う 。
Warning Remove Text: トン ネ
Warning Remove Text: とみ や ま 村
Warning Remove Text: とみ や ま 村
Warning Remove Text: 名栗 川 沿い
Warning Remove Text: ま たがる
Warning Remove QA: さっそく またがる 。 やっぱ デケ え し 重い 300 kg を 余裕 で 超し て いる の を 今 に なっ て 思い 。 出す 。 店 の 人 に 通行 を 確認 し て もらい ながら 車 の 切れ目 を ぬっ て いざ 路上 へ 。
Warning Remove Text: ブリス コーティング
Warning Remove Text: 香川 県 内
Warning Remove QA: 利用 し た 大坂 峠 ( 実 は 有名 な 心霊 スポット 出 そう な ) の 入り口 付近 まで 走っ て き まし た 。 教習 所 を 卒業 し て 以来 の 運転 です が … 。 うん 、 やはり 慣れ て い ない 乗り物 を 運転 する の は 怖い です ね ( ´ = ω = ) と いう か 正確 に は 香川 県内 を 走る 事 が 怖い … 。
Warning Remove Text: サイコ ン
Warning Remove QA: 進ん で いる と なん だ か 南 に 進ん で いる 様 な 感じ に なっ て き まし た 。 サイコン の 表示 で 確認 し まし た が ” S ” と 表示 さ れ て い まし た 。 行き先 の 看板 も 大阪 に 行く 途中 に 名阪 国道 で 見 た 地名 が 出 て き まし た 。 「 この まま だ と 名阪 国道 に 合流 し て しまう なぁ と ・ ・ ・ 」 少し 考え まし た が 、 まず は 進む こと が 重要 と 判断 し て その まま 道 なり に 進み ます 。
Warning Remove Text: 町内
Warning Remove QA: 道路 の 左側 も 住宅 で 、 生垣 や フェンス 、 ブロック 塀 に 囲ま れ て いる 。 こちら も ひっそり と 静まり返り 、 真っ暗 だ 。 どう なっ て ん だ ・ ・ ・ 町 内 で 旅行 に で も 出かけ てる の か ?
Warning Remove Text: ポ ミ オ
Warning Remove Text: ポ ミ オ
Warning Remove Text: ポ ミ オ
Warning Remove Text: 湖畔 の 公園 内 の 食堂
Warning Remove Text: カ マ ウ
Warning Remove QA: もし か し て と 思い 、 「 Burst ? 」 と 聞く と 、 「 Yes 」 と の 答え で 、 車 を 脇 に 停める 。 カマウ が 車 を 降りる と 、 その 辺 から どこ から と も なく 人 が 集まっ て くる 。 中 に 、 明らか に 車 の 修理 慣れ し た 男性 が い て 、 彼 が タイヤ 交換 を ほぼ やっ て くれ た 。 その 間 、 車 の メーター を 盗み見る と 、 何 と 24 万 km 超え !
Warning Remove Text: ゲロ リン
Warning Remove Text: ゲロ リン
Warning Remove Text: ロントバンパー が 割れ た 程度
Warning Remove Text: BE NZ
Warning Remove QA: 今週 、 近所 の 方 に 頼ま れ て 、 BENZ を ちょっと 診 て い ます 。 W 210 の E 320 です が 、 丸目 4 灯 の E クラス も さすが に 10 年 以上 経ち ます から 古 臭 さ は 否め ませ ん 。 で も 腐っ て も やっぱり BENZ 、 走り は 良い です ね 。 走行 時 の 静穏 性 や クイック で しなやか な 足回り 等 、 高速 テスト を し て も 申し分 あり ませ ん 。
Warning Remove Text: BE NZ
Warning Remove QA: 今週 、 近所 の 方 に 頼ま れ て 、 BENZ を ちょっと 診 て い ます 。 W 210 の E 320 です が 、 丸目 4 灯 の E クラス も さすが に 10 年 以上 経ち ます から 古 臭 さ は 否め ませ ん 。 で も 腐っ て も やっぱり BENZ 、 走り は 良い です ね 。 走行 時 の 静穏 性 や クイック で しなやか な 足回り 等 、 高速 テスト を し て も 申し分 あり ませ ん 。
Warning Remove Text: ジャック ラッセル テリア
Warning Remove QA: 「 道 に ジャック ラッセル が 、 一人 で いる から ピックアップ し て あげ て ! 」 この ジャック ラッセル 、 近所 の 家の子 だ と 知っ て いる ん です ね 。 と いう の は 、 この 家 の 庭 を 囲ん で いる 柵 、 かなり 背 が 低い もの で 、 私 は 、 いつ も この 家 の 前 を 通る たび に 、 この 低い 柵 じゃ 、 ジャック ラッセル なら 簡単 に 飛び越え ちゃう よ な 、 飼い主 さん 、 ジャック ラッセル は 、 すっごい ジャンプ できる って 知ら ない の か な ? って 思っ て い た ん です 。 と いう こと で 、 外 に 出 て みる と 、 ちょうど 家 の 周り の 道 を うろうろ し て い た の で 、 捕まえよう と し た の です が 、 ジャックラッセルテリア 、 すっごく やん ちゃ !
Warning Remove Text: ジャック ラッセル テリア
Warning Remove Text: くろと わ さん
Warning Remove QA: なるほど 、 道沿い に 二 軒 おき 位 に 寺 が 延々 と 続い て いる 。 これ って 下 世話 な 話 、 商売 に なる の か な ? ? 1 時間 ほど 散策 し 、 ホテル に 戻っ た 。 前日 の 約束 通り 、 9 時 半 に 駐車 場 で くろ とわ さん と 落ち合う 。
Warning Remove Text: デバ ガメ
Warning Remove Text: デ コッパ チ
Warning Remove QA: そして ら デコ ッ パチ は 、 僕 の 後ろ に 入っ た 。 そして 車間 を つめ た まま 走っ て くる 。 この デコッパチ 、 前 に 3 人 座れる の で 、 女の子 を 真ん中 に おやじ が 運転 し て おく さん が 助手 席 。 家族 で 乗っ てる なら 、 もう ちょっと 安全 を 考え た 運転 を する べき 。
Warning Remove Text: で き の 悪い 子供 ほど かわいい と 言う が 、 こと 車 に 関し て は 腹 しか 立た ない な 。
Warning Remove Text: 祥雲 寺 前
Warning Remove QA: 「 どっ から 来 た の ? 」 「 東京 です 」 「 日本 一 周 ? 」 いきなり 来 た … 。 そう いう 人 しか 来 ない 場所 な ん だろう か 。 バス 停 「 祥雲 寺前 」 で 折れ て 、 猿岩 方面 へ 。 こっち の 道 も 、 細い 道 で 登り下り し て 行く 。
Warning Remove Text: アップ ダウン コース
Warning Remove QA: 作業 中 の 。 自転 車 屋 さん は TL ? FC 33 じゃ ない 奴 を 首振り の ソケット レンチ で 使っ て まし た 。 あれ は 何 を 使っ て た の か な ? ? ? 増し 締め 後 に 15 km アップダウンコース を 走っ て み たら 異音 が し ませ ん でし た 。
Warning Remove Text: カ ラオ カン
Warning Remove QA: しかし 何処 の 国 に 行っ て も バイク 屋 や 用品 屋 が 立ち並ぶ エリア を 見 て 歩く の は 楽しい 。 思っ た より も 長 時間 カラオカン に 滞在 し た 。 夕方 の 渋滞 が 始まる 前 に 高速 に 乗る 為 に 移動 を 開始 。 少し 混み 始め て い た が 、 そこ は バイク 集団 で 分離 帯 の 無い 所 は 堂々 と はみ出し 走行 で バリンタワック から 高速 に 入る 。
Warning Remove Text: プ セット
Warning Remove QA: ガラス 張り な の で 彼女 の 行動 は 見え て い まし た 。 最初 は 待っ て い た の に プセット に 荷物 を 急い で 詰め てる 時 、 彼女 は 歩き 始め まし た 。 急い で プセット を 押し て また 彼女 を 捕まえ まし た 。 みんな が 振り返る 程 、 大声 で 叫び 口調 で 「 ママ が 待っ て と 言っ たら 待ち なさい 」 「 一人 で 歩い ちゃ いけ ませ ん 」 「 車 が たくさん いる ん だ から 危ない 」 と 彼女 に きつく いい まし た 。
Warning Remove Text: イミクジロー さん
Warning Remove Text: ハザード チカチカ
Warning Remove QA: ハザードチカチカ の ご 挨拶 は 、 あれ って 誰 が いつ の 間 に やる よう に なっ た ん だろう 。 今 じゃ 当たり前 の よう に みんな やっ てる よ ね 。 そして 割り込ん で 来 て は チカーチカー っと 鳴らす 。 。 強引 に 入っ て 来 て は チカーチカー って やる 。
Warning Remove Text: 某 エネオス
Warning Remove QA: まず 最初 に 並ん だ 某 エネ オス 。 この スタンド の 営業 再開 の 見込み が 立た ない と 分かっ た の は 、 並び 始め て 2 時間 以上 も 経っ て から ・ ・ ・ 。 車 を 降り て 走っ て スタンド の 様子 を 見 に 行っ た 所 、 どう 考え て も オープン する 見込み が 無い と 判断 。 完全 に 無人 の スタンド で 、 「 再開 の 見込み 無し 」 と 貼り出さ れ た スタンド に 2 時間 も 並ん で しまっ た 。
Warning Remove Text: ママ リャリ
Warning Remove QA: アニメ ・ コミック を 中心 と し た 備忘 録 。 信号 待ち を し て い たら 、 前 に 止まっ て い た 自動 車 が かなり の 速度 で 後退 し て き た の で 、 降り て 押し て い た ママリャリ を もっ て 後ろ に さがり まし た が 、 それ で も 間 に 合わす 自転 車 の 前輪 に ぶつけ られ まし た 。 警察 を 呼ぶ ところ まで は 行き ませ ん で でし た が 、 ホイール が 振れ て い たら 弁償 する と いう 確認 を とり 連絡 先 を 聞い て と いう 形 に 。 なん と も 無さ そう に 思える ん です けど 、 しばらく のっ て み ない と わから ない です ね 。
Warning Remove Text: この 子
Warning Remove QA: 前回 、 予定 時間 より 少し 早く 終了 し て ゲージ に 入れ られ て 待たさ れ て い た 際 、 パニック に なり 金 の 柵 を ガリガリ し 続け て 爪 が 折れ た ? の か 私 が 迎え に 行く と 大 出血 し て 手当て を し て もらっ た あんた ん 。 ( こー たん は もちろん の こと 、 ぜ ? っ たいこ の 子 は 預かり と か ペット ホテル と か 飛行 機 と か 入院 と か 無理 だ わぁ ・ ・ って 改めて 思っ た ) 心配 だ から 待つ 時間 が ない 状態 に し て あげ なく ちゃ ! と 思い 、 1人 で 自由 の 身 だっ た から 1 時間 前 から お 店 の 中 の あんた ん から 見え ない 場所 で 待機 し て 引き取っ て き まし た 。
Warning Remove Text: ゆうた
Warning Remove QA: 7 月 は 車 を ぶつけ たり 、 その 他 に も 落ち込む こと が 立て続け に 。 ちょうど 実家 に ゆう た と 帰っ て た 時 に 事件 が 発生 ! ! 両親 を のせ て 4 人 で 垂水 の アウトレット に 行っ て 、 お 寿司 を ご 馳走 し て もらっ て 、 気分 よく 帰っ て たら 、 隣 を 走っ て た 初心 者 マーク の 車 が 急 に 車線 変更 を し て … 。 あぶない ! と 思っ て とっさ に 左 に 切っ た の で 、 ぶつから なかっ た けど 、 すんごい 音 が し て タイヤ が パンク し て しまい まし た 。
Warning Remove Text: 両親 指
Warning Remove QA: 車内 で 二人 掛け の シート に 座り 、 暫し 近況 話 に 花 が 咲き まし た 。 高2 の お 母 さん で も あり 、 未亡人 に なっ て から 一人 で 頑張っ て い ます 。 最初 の 頃 は 何 と 声 を 掛け て 良い やら 困り まし た が 、 前向き な 姿勢 で 疲れ た 様子 は 見受け られ ませ ん でし た 。 両 親指 が バネ指 に なっ た よう です が 、 今 は 痛む こと は ない そう です 。
Warning Remove Text: 少し 窓 を 開け て 話し合い を しよう と し たら
Warning Remove Text: ダイド ー
Warning Remove QA: そして 、 この 道 で そもそも 夜 に 他 の バイク や 車 と すれ違っ た こと は ない 。 と いう か 、 まあ 車 で 走る に は 狭い 。 ぎょえ ー ! と 思っ て 、 パンドラ の うち に つく と 、 前 の 二人 は もう 着い て い た 。 「 ダイ ドー ( 最後 に 走っ て い た ヤツ ) の 隣 に もう 一 台 い た ん だ よ ! 」
Warning Remove Text: 手 く 入れ ない 車
Warning Remove Text: 午前 4 時 から 9 時の間
Warning Remove Text: 場内 の 方向 転換 の 課題 へ
Warning Remove Text: 場内 の 方向 転換 の 課題
Warning Remove Text: 意力 が 散漫 に なっ て いる 時
Warning Remove Text: つも の お 姉 さん
Warning Remove Text: 忘れ物
Warning Remove Text: GAM BA LI
Warning Remove Text: GAM BA LI
Warning Remove Text: ばちゃ ん スクーター
Warning Remove Text: 新学 期始
Warning Remove Text: ラ ・ トゥール
Warning Remove QA: ラ・トゥール で ミカ 達 が 作戦 を 練っ て いる 頃 、 オーストラリア の ナナ と 美和子 の 車 は ハイウェイ を 疾走 し て い た 。 「 なん だ かん だ 言っ て も 、 気分 ええ なぁ ? ? ! 」 日本 の 物 と は 違う 景色 を 眺め ながら ナナ は 美和子 に 話し掛ける 。 美和子 も ハンドル を 握り ながら 、 普段 走り回っ て いる 都内 の 景色 と 違う 中 、 目 を 丸く し ながら 頷い て いる 。
Warning Remove Text: 街中
Warning Remove QA: 室内 の 静粛 性 、 直進 安定 性 、 そして ボディ 剛性 の 高 さ など どれ も 変わら ぬ 感想 で 素晴らしい ! ただ 、 試乗 の 時 と 違い 街 中 を 走っ て い て 気づい た こと が 1 つ 。 それ は アイドリング ストップ システム に 関し て ・ ・ ・ 。 この アイドリング ストップ システム です が 、 信号 待ち など 停車 中 に 自動 的 に エンジン を 停止 し 、 再 発進 する 際 に 自動 的 に エンジン が 再 始動 する システム な 訳 です が 、 実 は この デイズ を 運転 し て 唯一 気 に なる 点 が 、 この エンジン の ストップ と 再 始動 の タイミング 。
Warning Remove Text: 警官 の ア イザイア
Warning Remove Text: 八幡平
Warning Remove QA: も 出 てる だろう し 時間 が かかる に 違い ない … 。 ここ で 時間 を ロス し て しまう と この 後 の 予定 が 詰まっ て しまう と 考え て 、 残念 ながら 。 八幡 平 を あきらめ て その まま 高速 を 走っ て 次 の 目的 地 を 目指す こと に し まし た 。 安代 Jct を 過ぎ て 八戸 道 へ 入り 走っ て いく と 、 青森 へ 入り まし た 。
Warning Remove Text: ジェベ ル
Warning Remove QA: しかし 、 ここ 最近 の 猛暑 の 中 、 高速 道路 の 連続 走行 に ジェベル が 耐え られる の か が 少々 心配 。 この 前 の ツーリング と 違っ て 道東 方面 は 全線 1 車線 の ため 、 速い 車 は お 先 に どうぞ と は いか なく 、 厳しい 走行 が 続く こと に なる だろう 。 広高 オイル に し て から 現在 1000 km 走行 し た が 、 とりあえず この まま で いく 。 前後 の タイヤ は 先日 交換 し た ばかり な の で 問題 ない 。
Warning Remove Text: 外人
Warning Remove QA: まだ 朝 早い の で 人影 が 少なく 、 車 も 通ら ない 。 5 分 ほど し て ようやく 1 台 を 見つけ た が 、 先 の ほう で 別 の 人 に 拾わ れ て しまっ た 。 しばらく し て また 空車 を 見つけ た の で 手 を 上げる が 今度 は 乗車 拒否 。 格好 を 見れ ば 長 距離 乗り そう な 雰囲気 の はず だ けど 、 ホテル の 前 に つける タクシー と 違っ て 、 この 辺り を 流す タクシー は 外 人慣れ し て なく て 面倒 に 思う の か も しれ なかっ た 。
Warning Remove Text: と よ じ さ ん ち
Warning Remove QA: 進め られ て い まし た 。 する と 向う から 、 またまた やっ て 来 まし た ? また 横 を サーッ と 通り抜け て 、 スタコラ サッサと 坂 を 下り て ゆき まし た 。 この 道 は いつ も の 散歩 道 に 通じ て おり 、 と よ じ さん ち に 行く 近道 ・ ・ ・
Warning Remove Text: なに い っ ! !

実行結果として次の2ファイルが出力されます。

  • wakati_DDQA-1.0_RC-QA_train.json
    分かち書きした学習データ
  • wakati_DDQA-1.0_RC-QA_dev.json
    分かち書きした検証データ

ファインチューニングの実行

質疑応答のファインチューニングを行います。

各パラメータの意味は次の通りです。

  • model_type
    モデル識別
  • model_name_or_path
    モデル名
  • do_train
    学習するかどうか
  • do_eval
    検証するかどうか
  • max_seq_length
    最大シーケンス長
  • per_gpu_train_batch_size
    バッチサイズ
  • learning_rate
    学習率
  • num_train_epochs
    学習のエポック数
  • train_file
    学習データ(csvファイルまたはjsonファイル)
  • predict_file
    検証データ(csvファイルまたはjsonファイル)
  • output_dir
    出力先フォルダのパス
  • overwrite_output_dir
    出力先フォルダの上書き

[Google Colaboratory]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
%%time

# ファインチューニングの実行
!python ./transformers/examples/legacy/question-answering/run_squad.py \
--model_type=bert \
--model_name_or_path=cl-tohoku/bert-base-japanese-whole-word-masking \
--do_train \
--do_eval \
--max_seq_length=384 \
--per_gpu_train_batch_size=12 \
--learning_rate=3e-5 \
--num_train_epochs=3 \
--train_file=wakati_DDQA-1.0_RC-QA_train.json \
--predict_file=wakati_DDQA-1.0_RC-QA_dev.json \
--output_dir=output/ \
--overwrite_output_dir

[実行結果]

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
10/03/2021 00:15:58 - WARNING - __main__ -   Process rank: -1, device: cuda, n_gpu: 1, distributed training: False, 16-bits training: False
10/03/2021 00:15:58 - INFO - filelock - Lock 139742275205968 acquired on /root/.cache/huggingface/transformers/573af37b6c39d672f2df687c06ad7d556476cbe43e5bf7771097187c45a3e7bf.abeb707b5d79387dd462e8bfb724637d856e98434b6931c769b8716c6f287258.lock
[INFO|file_utils.py:1386] 2021-10-03 00:15:58,904 >> https://huggingface.co/cl-tohoku/bert-base-japanese-whole-word-masking/resolve/main/config.json not found in cache or force_download set to True, downloading to /root/.cache/huggingface/transformers/tmpzc_e3b8q
Downloading: 100% 479/479 [00:00<00:00, 482kB/s]
[INFO|file_utils.py:1390] 2021-10-03 00:15:59,083 >> storing https://huggingface.co/cl-tohoku/bert-base-japanese-whole-word-masking/resolve/main/config.json in cache at /root/.cache/huggingface/transformers/573af37b6c39d672f2df687c06ad7d556476cbe43e5bf7771097187c45a3e7bf.abeb707b5d79387dd462e8bfb724637d856e98434b6931c769b8716c6f287258
[INFO|file_utils.py:1393] 2021-10-03 00:15:59,083 >> creating metadata file for /root/.cache/huggingface/transformers/573af37b6c39d672f2df687c06ad7d556476cbe43e5bf7771097187c45a3e7bf.abeb707b5d79387dd462e8bfb724637d856e98434b6931c769b8716c6f287258
10/03/2021 00:15:59 - INFO - filelock - Lock 139742275205968 released on /root/.cache/huggingface/transformers/573af37b6c39d672f2df687c06ad7d556476cbe43e5bf7771097187c45a3e7bf.abeb707b5d79387dd462e8bfb724637d856e98434b6931c769b8716c6f287258.lock
[INFO|configuration_utils.py:463] 2021-10-03 00:15:59,084 >> loading configuration file https://huggingface.co/cl-tohoku/bert-base-japanese-whole-word-masking/resolve/main/config.json from cache at /root/.cache/huggingface/transformers/573af37b6c39d672f2df687c06ad7d556476cbe43e5bf7771097187c45a3e7bf.abeb707b5d79387dd462e8bfb724637d856e98434b6931c769b8716c6f287258

(・・・・・途中略・・・・・)

100% 1/1 [00:00<00:00, 7.62it/s]
convert squad examples to features: 100% 1052/1052 [00:08<00:00, 130.44it/s]
add example index and unique id: 100% 1052/1052 [00:00<00:00, 656901.56it/s]
10/03/2021 02:22:37 - INFO - __main__ - Saving features into cached file ./cached_dev_bert-base-japanese-whole-word-masking_384
10/03/2021 02:22:39 - INFO - __main__ - ***** Running evaluation *****
10/03/2021 02:22:39 - INFO - __main__ - Num examples = 1052
10/03/2021 02:22:39 - INFO - __main__ - Batch size = 8
Evaluating: 100% 132/132 [00:52<00:00, 2.53it/s]
10/03/2021 02:23:31 - INFO - __main__ - Evaluation done in total 52.158478 secs (0.049580 sec per example)
[INFO|squad_metrics.py:401] 2021-10-03 02:23:31,244 >> Writing predictions to: output/predictions_.json
[INFO|squad_metrics.py:403] 2021-10-03 02:23:31,244 >> Writing nbest to: output/nbest_predictions_.json
10/03/2021 02:23:34 - INFO - __main__ - Results: {'exact': 87.79069767441861, 'f1': 92.2942438197623, 'total': 1032, 'HasAns_exact': 87.79069767441861, 'HasAns_f1': 92.2942438197623, 'HasAns_total': 1032, 'best_exact': 87.79069767441861, 'best_exact_thresh': 0.0, 'best_f1': 92.2942438197623, 'best_f1_thresh': 0.0}
CPU times: user 51.7 s, sys: 7.79 s, total: 59.5 s
Wall time: 2h 7min 44s

2時間7分ほどかかりました。(;^_^A

学習結果の確認

TensorBoardで学習結果を確認します。

[Google Colaboratory]

1
2
3
# 学習状況の確認
%load_ext tensorboard
%tensorboard --logdir runs

[実行結果]

損失(Loss)が0に収束しているため、きちんと学習できていることが分かります。

次回は、学習したモデルを使って質疑応答を行います。

Transformers(10) - 質疑応答①データセットの準備とライブラリ・インストール

質疑応答を3回に分けて説明していきます。

質疑応答は、コンテキスト(ひとまとまりの文章)質問からコンテキスト内に含まれる応答を抽出する処理です。

今回は、データセットの準備と必要ライブラリのインストールまで行います。

データセットの準備

データセットとしては運転ドメインQAデータセットを使います。

下記のURLから、ダウンロードリンクよりDDQA-1.0.tar.gzファイルをダウンロードしてください。

運転ドメインQAデータセット - https://nlp.ist.i.kyoto-u.ac.jp/?Driving+domain+QA+datasets


次にダウンロードしたファイルを、Google Colaboratoryにアップロードし、下記コマンドを使って解凍します。

[Google Colaboratory]

1
!tar xzvf DDQA-1.0.tar.gz

[実行結果]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
DDQA-1.0/
DDQA-1.0/RC-QA/
DDQA-1.0/PAS-QA-NOM/
DDQA-1.0/PAS-QA-ACC/
DDQA-1.0/PAS-QA-DAT/
DDQA-1.0/README_en.txt
DDQA-1.0/README_ja.txt
DDQA-1.0/PAS-QA-DAT/DDQA-1.0_PAS-QA-DAT_train.json
DDQA-1.0/PAS-QA-DAT/DDQA-1.0_PAS-QA-DAT_dev.json
DDQA-1.0/PAS-QA-DAT/DDQA-1.0_PAS-QA-DAT_test.json
DDQA-1.0/PAS-QA-ACC/DDQA-1.0_PAS-QA-ACC_train.json
DDQA-1.0/PAS-QA-ACC/DDQA-1.0_PAS-QA-ACC_dev.json
DDQA-1.0/PAS-QA-ACC/DDQA-1.0_PAS-QA-ACC_test.json
DDQA-1.0/PAS-QA-NOM/DDQA-1.0_PAS-QA-NOM_dev.json
DDQA-1.0/PAS-QA-NOM/DDQA-1.0_PAS-QA-NOM_test.json
DDQA-1.0/PAS-QA-NOM/DDQA-1.0_PAS-QA-NOM_train.json
DDQA-1.0/RC-QA/DDQA-1.0_RC-QA_dev.json
DDQA-1.0/RC-QA/DDQA-1.0_RC-QA_test.json
DDQA-1.0/RC-QA/DDQA-1.0_RC-QA_train.json

これでデータセットの準備は完了です。

Huggingface Transformersのインストール

ソースからHuggingface Transformersのインストールを行います。

[Google Colaboratory]

1
2
3
4
5
# ソースからのHuggingface Transformersのインストール
!git clone https://github.com/huggingface/transformers -b v4.4.2
!pip install -e transformers
!pip install fugashi[unidic-lite]
!pip install ipadic

下記のような実行結果になれば、Huggingface Transformersのインストールは成功しています。

[実行結果]

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
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
Cloning into 'transformers'...
remote: Enumerating objects: 85569, done.
remote: Counting objects: 100% (28/28), done.
remote: Compressing objects: 100% (22/22), done.
remote: Total 85569 (delta 8), reused 17 (delta 3), pack-reused 85541
Receiving objects: 100% (85569/85569), 68.44 MiB | 24.02 MiB/s, done.
Resolving deltas: 100% (61496/61496), done.
Note: checking out '9f43a425fe89cfc0e9b9aa7abd7dd44bcaccd79a'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by performing another checkout.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -b with the checkout command again. Example:

git checkout -b <new-branch-name>

Obtaining file:///content/transformers
Installing build dependencies ... done
Getting requirements to build wheel ... done
Preparing wheel metadata ... done
Collecting tokenizers<0.11,>=0.10.1
Downloading tokenizers-0.10.3-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl (3.3 MB)
|████████████████████████████████| 3.3 MB 5.1 MB/s
Requirement already satisfied: filelock in /usr/local/lib/python3.7/dist-packages (from transformers==4.4.2) (3.0.12)
Requirement already satisfied: requests in /usr/local/lib/python3.7/dist-packages (from transformers==4.4.2) (2.23.0)
Collecting sacremoses
Downloading sacremoses-0.0.46-py3-none-any.whl (895 kB)
|████████████████████████████████| 895 kB 50.1 MB/s
Requirement already satisfied: numpy>=1.17 in /usr/local/lib/python3.7/dist-packages (from transformers==4.4.2) (1.19.5)
Requirement already satisfied: packaging in /usr/local/lib/python3.7/dist-packages (from transformers==4.4.2) (21.0)
Requirement already satisfied: regex!=2019.12.17 in /usr/local/lib/python3.7/dist-packages (from transformers==4.4.2) (2019.12.20)
Requirement already satisfied: tqdm>=4.27 in /usr/local/lib/python3.7/dist-packages (from transformers==4.4.2) (4.62.3)
Requirement already satisfied: importlib-metadata in /usr/local/lib/python3.7/dist-packages (from transformers==4.4.2) (4.8.1)
Requirement already satisfied: typing-extensions>=3.6.4 in /usr/local/lib/python3.7/dist-packages (from importlib-metadata->transformers==4.4.2) (3.7.4.3)
Requirement already satisfied: zipp>=0.5 in /usr/local/lib/python3.7/dist-packages (from importlib-metadata->transformers==4.4.2) (3.5.0)
Requirement already satisfied: pyparsing>=2.0.2 in /usr/local/lib/python3.7/dist-packages (from packaging->transformers==4.4.2) (2.4.7)
Requirement already satisfied: idna<3,>=2.5 in /usr/local/lib/python3.7/dist-packages (from requests->transformers==4.4.2) (2.10)
Requirement already satisfied: chardet<4,>=3.0.2 in /usr/local/lib/python3.7/dist-packages (from requests->transformers==4.4.2) (3.0.4)
Requirement already satisfied: certifi>=2017.4.17 in /usr/local/lib/python3.7/dist-packages (from requests->transformers==4.4.2) (2021.5.30)
Requirement already satisfied: urllib3!=1.25.0,!=1.25.1,<1.26,>=1.21.1 in /usr/local/lib/python3.7/dist-packages (from requests->transformers==4.4.2) (1.24.3)
Requirement already satisfied: click in /usr/local/lib/python3.7/dist-packages (from sacremoses->transformers==4.4.2) (7.1.2)
Requirement already satisfied: six in /usr/local/lib/python3.7/dist-packages (from sacremoses->transformers==4.4.2) (1.15.0)
Requirement already satisfied: joblib in /usr/local/lib/python3.7/dist-packages (from sacremoses->transformers==4.4.2) (1.0.1)
Installing collected packages: tokenizers, sacremoses, transformers
Running setup.py develop for transformers
Successfully installed sacremoses-0.0.46 tokenizers-0.10.3 transformers-4.4.2
Collecting fugashi[unidic-lite]
Downloading fugashi-1.1.1-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl (490 kB)
|████████████████████████████████| 490 kB 5.2 MB/s
Collecting unidic-lite
Downloading unidic-lite-1.0.8.tar.gz (47.4 MB)
|████████████████████████████████| 47.4 MB 92 kB/s
Building wheels for collected packages: unidic-lite
Building wheel for unidic-lite (setup.py) ... done
Created wheel for unidic-lite: filename=unidic_lite-1.0.8-py3-none-any.whl size=47658836 sha256=b5301b21eb0c5ec36e22cf4f0e7f6dfb63d8c968cf59353e0ba252853e96d055
Stored in directory: /root/.cache/pip/wheels/de/69/b1/112140b599f2b13f609d485a99e357ba68df194d2079c5b1a2
Successfully built unidic-lite
Installing collected packages: unidic-lite, fugashi
Successfully installed fugashi-1.1.1 unidic-lite-1.0.8
Collecting ipadic
Downloading ipadic-1.0.0.tar.gz (13.4 MB)
|████████████████████████████████| 13.4 MB 210 kB/s
Building wheels for collected packages: ipadic
Building wheel for ipadic (setup.py) ... done
Created wheel for ipadic: filename=ipadic-1.0.0-py3-none-any.whl size=13556723 sha256=07367203dbaaef7bd0d3d9a3c355d8927072637e6e2398a3e2ab710c877d6e7a
Stored in directory: /root/.cache/pip/wheels/33/8b/99/cf0d27191876637cd3639a560f93aa982d7855ce826c94348b
Successfully built ipadic
Installing collected packages: ipadic
Successfully installed ipadic-1.0.0

ここで、一旦ランタイムの再起動を行います。

メニューからランタイム → ランタイムを再起動を選択してください。

Huggingface Datasetsのインストール

Huggingface Datasetsのインストールを行います。

[Google Colaboratory]

1
2
# Huggingface Datasetsのインストール
!pip install datasets==1.2.1

[実行結果]

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
Collecting datasets==1.2.1
Downloading datasets-1.2.1-py3-none-any.whl (159 kB)
|████████████████████████████████| 159 kB 5.4 MB/s
Requirement already satisfied: numpy>=1.17 in /usr/local/lib/python3.7/dist-packages (from datasets==1.2.1) (1.19.5)
Requirement already satisfied: pyarrow>=0.17.1 in /usr/local/lib/python3.7/dist-packages (from datasets==1.2.1) (3.0.0)
Collecting tqdm<4.50.0,>=4.27
Downloading tqdm-4.49.0-py2.py3-none-any.whl (69 kB)
|████████████████████████████████| 69 kB 6.6 MB/s
Requirement already satisfied: multiprocess in /usr/local/lib/python3.7/dist-packages (from datasets==1.2.1) (0.70.12.2)
Requirement already satisfied: importlib-metadata in /usr/local/lib/python3.7/dist-packages (from datasets==1.2.1) (4.8.1)
Requirement already satisfied: pandas in /usr/local/lib/python3.7/dist-packages (from datasets==1.2.1) (1.1.5)
Requirement already satisfied: requests>=2.19.0 in /usr/local/lib/python3.7/dist-packages (from datasets==1.2.1) (2.23.0)
Collecting xxhash
Downloading xxhash-2.0.2-cp37-cp37m-manylinux2010_x86_64.whl (243 kB)
|████████████████████████████████| 243 kB 19.6 MB/s
Requirement already satisfied: dill in /usr/local/lib/python3.7/dist-packages (from datasets==1.2.1) (0.3.4)
Requirement already satisfied: urllib3!=1.25.0,!=1.25.1,<1.26,>=1.21.1 in /usr/local/lib/python3.7/dist-packages (from requests>=2.19.0->datasets==1.2.1) (1.24.3)
Requirement already satisfied: chardet<4,>=3.0.2 in /usr/local/lib/python3.7/dist-packages (from requests>=2.19.0->datasets==1.2.1) (3.0.4)
Requirement already satisfied: certifi>=2017.4.17 in /usr/local/lib/python3.7/dist-packages (from requests>=2.19.0->datasets==1.2.1) (2021.5.30)
Requirement already satisfied: idna<3,>=2.5 in /usr/local/lib/python3.7/dist-packages (from requests>=2.19.0->datasets==1.2.1) (2.10)
Requirement already satisfied: typing-extensions>=3.6.4 in /usr/local/lib/python3.7/dist-packages (from importlib-metadata->datasets==1.2.1) (3.7.4.3)
Requirement already satisfied: zipp>=0.5 in /usr/local/lib/python3.7/dist-packages (from importlib-metadata->datasets==1.2.1) (3.5.0)
Requirement already satisfied: python-dateutil>=2.7.3 in /usr/local/lib/python3.7/dist-packages (from pandas->datasets==1.2.1) (2.8.2)
Requirement already satisfied: pytz>=2017.2 in /usr/local/lib/python3.7/dist-packages (from pandas->datasets==1.2.1) (2018.9)
Requirement already satisfied: six>=1.5 in /usr/local/lib/python3.7/dist-packages (from python-dateutil>=2.7.3->pandas->datasets==1.2.1) (1.15.0)
Installing collected packages: xxhash, tqdm, datasets
Attempting uninstall: tqdm
Found existing installation: tqdm 4.62.3
Uninstalling tqdm-4.62.3:
Successfully uninstalled tqdm-4.62.3
Successfully installed datasets-1.2.1 tqdm-4.49.0 xxhash-2.0.2

MeCabのインストール

MeCabのインストールを行います。

MeCabは、簡単なテキスト解析や、分かち書きができるライブラリです。

[Google Colaboratory]

1
2
# MeCabのインストール
!pip install mecab-python3

[実行結果]

1
2
3
4
5
Collecting mecab-python3
Downloading mecab_python3-1.0.4-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl (488 kB)
|████████████████████████████████| 488 kB 5.3 MB/s
Installing collected packages: mecab-python3
Successfully installed mecab-python3-1.0.4

以上で、必要なライブラリのインストールが完了しました。

次回は、わかち書きファインチューニングを行います。

Transformers(9) - テキスト分類②学習と推論

前回は、テキスト分類のための学習データと検証データを用意しました。

今回は、この学習データと検証データを使って学習と推論を行います。

Huggingface Transformersのインストール

ソースからHuggingface Transformersのインストールを行います。

[Google Colaboratory]

1
2
3
4
5
# ソースからのHuggingface Transformersのインストール
!git clone https://github.com/huggingface/transformers -b v4.4.2
!pip install -e transformers
!pip install fugashi[unidic-lite]
!pip install ipadic

下記のような実行結果になれば、Huggingface Transformersのインストールは成功しています。

[実行結果]

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
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
Cloning into 'transformers'...
remote: Enumerating objects: 85569, done.
remote: Counting objects: 100% (28/28), done.
remote: Compressing objects: 100% (22/22), done.
remote: Total 85569 (delta 8), reused 17 (delta 3), pack-reused 85541
Receiving objects: 100% (85569/85569), 68.48 MiB | 23.50 MiB/s, done.
Resolving deltas: 100% (61495/61495), done.
Note: checking out '9f43a425fe89cfc0e9b9aa7abd7dd44bcaccd79a'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by performing another checkout.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -b with the checkout command again. Example:

git checkout -b <new-branch-name>

Obtaining file:///content/transformers
Installing build dependencies ... done
Getting requirements to build wheel ... done
Preparing wheel metadata ... done
Requirement already satisfied: filelock in /usr/local/lib/python3.7/dist-packages (from transformers==4.4.2) (3.0.12)
Requirement already satisfied: numpy>=1.17 in /usr/local/lib/python3.7/dist-packages (from transformers==4.4.2) (1.19.5)
Requirement already satisfied: requests in /usr/local/lib/python3.7/dist-packages (from transformers==4.4.2) (2.23.0)
Requirement already satisfied: packaging in /usr/local/lib/python3.7/dist-packages (from transformers==4.4.2) (21.0)
Requirement already satisfied: importlib-metadata in /usr/local/lib/python3.7/dist-packages (from transformers==4.4.2) (4.8.1)
Collecting sacremoses
Downloading sacremoses-0.0.46-py3-none-any.whl (895 kB)
|████████████████████████████████| 895 kB 5.2 MB/s
Requirement already satisfied: regex!=2019.12.17 in /usr/local/lib/python3.7/dist-packages (from transformers==4.4.2) (2019.12.20)
Collecting tokenizers<0.11,>=0.10.1
Downloading tokenizers-0.10.3-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl (3.3 MB)
|████████████████████████████████| 3.3 MB 32.2 MB/s
Requirement already satisfied: tqdm>=4.27 in /usr/local/lib/python3.7/dist-packages (from transformers==4.4.2) (4.62.3)
Requirement already satisfied: zipp>=0.5 in /usr/local/lib/python3.7/dist-packages (from importlib-metadata->transformers==4.4.2) (3.5.0)
Requirement already satisfied: typing-extensions>=3.6.4 in /usr/local/lib/python3.7/dist-packages (from importlib-metadata->transformers==4.4.2) (3.7.4.3)
Requirement already satisfied: pyparsing>=2.0.2 in /usr/local/lib/python3.7/dist-packages (from packaging->transformers==4.4.2) (2.4.7)
Requirement already satisfied: chardet<4,>=3.0.2 in /usr/local/lib/python3.7/dist-packages (from requests->transformers==4.4.2) (3.0.4)
Requirement already satisfied: urllib3!=1.25.0,!=1.25.1,<1.26,>=1.21.1 in /usr/local/lib/python3.7/dist-packages (from requests->transformers==4.4.2) (1.24.3)
Requirement already satisfied: certifi>=2017.4.17 in /usr/local/lib/python3.7/dist-packages (from requests->transformers==4.4.2) (2021.5.30)
Requirement already satisfied: idna<3,>=2.5 in /usr/local/lib/python3.7/dist-packages (from requests->transformers==4.4.2) (2.10)
Requirement already satisfied: joblib in /usr/local/lib/python3.7/dist-packages (from sacremoses->transformers==4.4.2) (1.0.1)
Requirement already satisfied: click in /usr/local/lib/python3.7/dist-packages (from sacremoses->transformers==4.4.2) (7.1.2)
Requirement already satisfied: six in /usr/local/lib/python3.7/dist-packages (from sacremoses->transformers==4.4.2) (1.15.0)
Installing collected packages: tokenizers, sacremoses, transformers
Running setup.py develop for transformers
Successfully installed sacremoses-0.0.46 tokenizers-0.10.3 transformers-4.4.2
Collecting fugashi[unidic-lite]
Downloading fugashi-1.1.1-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl (490 kB)
|████████████████████████████████| 490 kB 5.3 MB/s
Collecting unidic-lite
Downloading unidic-lite-1.0.8.tar.gz (47.4 MB)
|████████████████████████████████| 47.4 MB 46 kB/s
Building wheels for collected packages: unidic-lite
Building wheel for unidic-lite (setup.py) ... done
Created wheel for unidic-lite: filename=unidic_lite-1.0.8-py3-none-any.whl size=47658836 sha256=a900f8c583a206e3a5dbf25e2c9bc3bb7c8bd17e5968974b5c3a798570bc2364
Stored in directory: /root/.cache/pip/wheels/de/69/b1/112140b599f2b13f609d485a99e357ba68df194d2079c5b1a2
Successfully built unidic-lite
Installing collected packages: unidic-lite, fugashi
Successfully installed fugashi-1.1.1 unidic-lite-1.0.8
Collecting ipadic
Downloading ipadic-1.0.0.tar.gz (13.4 MB)
|████████████████████████████████| 13.4 MB 182 kB/s
Building wheels for collected packages: ipadic
Building wheel for ipadic (setup.py) ... done
Created wheel for ipadic: filename=ipadic-1.0.0-py3-none-any.whl size=13556723 sha256=0903009667e96df8abd478ee8f094186148de203896aeeebb6f068a4811d2c0d
Stored in directory: /root/.cache/pip/wheels/33/8b/99/cf0d27191876637cd3639a560f93aa982d7855ce826c94348b
Successfully built ipadic
Installing collected packages: ipadic
Successfully installed ipadic-1.0.0

ここで、一旦ランタイムの再起動を行います。

メニューからランタイム → ランタイムを再起動を選択してください。

Huggingface Datasetsのインストール

Huggingface Datasetsのインストールを行います。

[Google Colaboratory]

1
2
# Huggingface Datasetsのインストール
!pip install datasets==1.2.1

下記のような実行結果になれば、Huggingface Datasetsのインストールは成功しています。

[実行結果]

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
Collecting datasets==1.2.1
Downloading datasets-1.2.1-py3-none-any.whl (159 kB)
|████████████████████████████████| 159 kB 5.4 MB/s
Collecting xxhash
Downloading xxhash-2.0.2-cp37-cp37m-manylinux2010_x86_64.whl (243 kB)
|████████████████████████████████| 243 kB 32.3 MB/s
Requirement already satisfied: importlib-metadata in /usr/local/lib/python3.7/dist-packages (from datasets==1.2.1) (4.8.1)
Requirement already satisfied: requests>=2.19.0 in /usr/local/lib/python3.7/dist-packages (from datasets==1.2.1) (2.23.0)
Requirement already satisfied: numpy>=1.17 in /usr/local/lib/python3.7/dist-packages (from datasets==1.2.1) (1.19.5)
Requirement already satisfied: pyarrow>=0.17.1 in /usr/local/lib/python3.7/dist-packages (from datasets==1.2.1) (3.0.0)
Requirement already satisfied: pandas in /usr/local/lib/python3.7/dist-packages (from datasets==1.2.1) (1.1.5)
Requirement already satisfied: multiprocess in /usr/local/lib/python3.7/dist-packages (from datasets==1.2.1) (0.70.12.2)
Requirement already satisfied: dill in /usr/local/lib/python3.7/dist-packages (from datasets==1.2.1) (0.3.4)
Collecting tqdm<4.50.0,>=4.27
Downloading tqdm-4.49.0-py2.py3-none-any.whl (69 kB)
|████████████████████████████████| 69 kB 6.4 MB/s
Requirement already satisfied: certifi>=2017.4.17 in /usr/local/lib/python3.7/dist-packages (from requests>=2.19.0->datasets==1.2.1) (2021.5.30)
Requirement already satisfied: idna<3,>=2.5 in /usr/local/lib/python3.7/dist-packages (from requests>=2.19.0->datasets==1.2.1) (2.10)
Requirement already satisfied: chardet<4,>=3.0.2 in /usr/local/lib/python3.7/dist-packages (from requests>=2.19.0->datasets==1.2.1) (3.0.4)
Requirement already satisfied: urllib3!=1.25.0,!=1.25.1,<1.26,>=1.21.1 in /usr/local/lib/python3.7/dist-packages (from requests>=2.19.0->datasets==1.2.1) (1.24.3)
Requirement already satisfied: typing-extensions>=3.6.4 in /usr/local/lib/python3.7/dist-packages (from importlib-metadata->datasets==1.2.1) (3.7.4.3)
Requirement already satisfied: zipp>=0.5 in /usr/local/lib/python3.7/dist-packages (from importlib-metadata->datasets==1.2.1) (3.5.0)
Requirement already satisfied: python-dateutil>=2.7.3 in /usr/local/lib/python3.7/dist-packages (from pandas->datasets==1.2.1) (2.8.2)
Requirement already satisfied: pytz>=2017.2 in /usr/local/lib/python3.7/dist-packages (from pandas->datasets==1.2.1) (2018.9)
Requirement already satisfied: six>=1.5 in /usr/local/lib/python3.7/dist-packages (from python-dateutil>=2.7.3->pandas->datasets==1.2.1) (1.15.0)
Installing collected packages: xxhash, tqdm, datasets
Attempting uninstall: tqdm
Found existing installation: tqdm 4.62.3
Uninstalling tqdm-4.62.3:
Successfully uninstalled tqdm-4.62.3
Successfully installed datasets-1.2.1 tqdm-4.49.0 xxhash-2.0.2

ファインチューニングの実行

ファインチューニングの実行を行います。

各パラメータの意味は以下の通りです。

  • model_name_or_path
    モデル名
  • do_train
    学習するかどうか
  • do_eval
    検証するかどうか
  • max_seq_length
    最大シーケンス長
  • per_device_train_batch_size
    バッチサイズ
  • use_fast_tokenizer
    ファストトークナイザーの利用
  • learning_rate
    学習率
  • num_train_epochs
    学習のエポック数
  • train_file
    学習データ(csvファイル、jsonファイル)
  • validation_file
    検証データ(csvファイル、jsonファイル)
  • output_dir
    出力先フォルダのパス
  • overwrite_output_dir
    出力フォルダの上書き
  • logging_steps
    何ステップごとにチェックポイントを出力するか

[Google Colaboratory]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
%%time

# ファインチューニングの実行
!python ./transformers/examples/text-classification/run_glue.py \
--model_name_or_path=cl-tohoku/bert-base-japanese-whole-word-masking \
--do_train \
--do_eval \
--max_seq_length=128 \
--per_device_train_batch_size=32 \
--use_fast_tokenizer=False \
--learning_rate=2e-5 \
--num_train_epochs=10 \
--train_file=train.csv \
--validation_file=dev.csv \
--output_dir=output/ \
--overwrite_output_dir \
--logging_steps=100

ファインチューニングは少し時間がかかりますので、気長にお待ちください。

[実行結果]

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
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
10/02/2021 06:53:19 - WARNING - __main__ -   Process rank: -1, device: cuda:0, n_gpu: 1distributed training: False, 16-bits training: False
10/02/2021 06:53:19 - INFO - __main__ - Training/evaluation parameters TrainingArguments(output_dir=output/, overwrite_output_dir=True, do_train=True, do_eval=True, do_predict=False, evaluation_strategy=IntervalStrategy.NO, prediction_loss_only=False, per_device_train_batch_size=32, per_device_eval_batch_size=8, gradient_accumulation_steps=1, eval_accumulation_steps=None, learning_rate=2e-05, weight_decay=0.0, adam_beta1=0.9, adam_beta2=0.999, adam_epsilon=1e-08, max_grad_norm=1.0, num_train_epochs=10.0, max_steps=-1, lr_scheduler_type=SchedulerType.LINEAR, warmup_ratio=0.0, warmup_steps=0, logging_dir=runs/Oct02_06-53-19_e352111af80c, logging_strategy=IntervalStrategy.STEPS, logging_first_step=False, logging_steps=100, save_strategy=IntervalStrategy.STEPS, save_steps=500, save_total_limit=None, no_cuda=False, seed=42, fp16=False, fp16_opt_level=O1, fp16_backend=auto, fp16_full_eval=False, local_rank=-1, tpu_num_cores=None, tpu_metrics_debug=False, debug=False, dataloader_drop_last=False, eval_steps=100, dataloader_num_workers=0, past_index=-1, run_name=output/, disable_tqdm=False, remove_unused_columns=True, label_names=None, load_best_model_at_end=False, metric_for_best_model=None, greater_is_better=None, ignore_data_skip=False, sharded_ddp=[], deepspeed=None, label_smoothing_factor=0.0, adafactor=False, group_by_length=False, report_to=['tensorboard'], ddp_find_unused_parameters=None, dataloader_pin_memory=True, skip_memory_metrics=False, _n_gpu=1)
10/02/2021 06:53:19 - INFO - __main__ - load a local file for train: train.csv
10/02/2021 06:53:19 - INFO - __main__ - load a local file for validation: dev.csv
Downloading: 5.33kB [00:00, 4.14MB/s]
Using custom data configuration default
Downloading and preparing dataset csv/default-3977538288dff7b4 (download: Unknown size, generated: Unknown size, post-processed: Unknown size, total: Unknown size) to /root/.cache/huggingface/datasets/csv/default-3977538288dff7b4/0.0.0/2960f95a26e85d40ca41a230ac88787f715ee3003edaacb8b1f0891e9f04dda2...
Dataset csv downloaded and prepared to /root/.cache/huggingface/datasets/csv/default-3977538288dff7b4/0.0.0/2960f95a26e85d40ca41a230ac88787f715ee3003edaacb8b1f0891e9f04dda2. Subsequent calls will reuse this data.
[INFO|file_utils.py:1386] 2021-10-02 06:53:20,548 >> https://huggingface.co/cl-tohoku/bert-base-japanese-whole-word-masking/resolve/main/config.json not found in cache or force_download set to True, downloading to /root/.cache/huggingface/transformers/tmpx2iuwgdb
Downloading: 100% 479/479 [00:00<00:00, 423kB/s]
[INFO|file_utils.py:1390] 2021-10-02 06:53:20,673 >> storing https://huggingface.co/cl-tohoku/bert-base-japanese-whole-word-masking/resolve/main/config.json in cache at /root/.cache/huggingface/transformers/573af37b6c39d672f2df687c06ad7d556476cbe43e5bf7771097187c45a3e7bf.abeb707b5d79387dd462e8bfb724637d856e98434b6931c769b8716c6f287258
[INFO|file_utils.py:1393] 2021-10-02 06:53:20,673 >> creating metadata file for /root/.cache/huggingface/transformers/573af37b6c39d672f2df687c06ad7d556476cbe43e5bf7771097187c45a3e7bf.abeb707b5d79387dd462e8bfb724637d856e98434b6931c769b8716c6f287258
[INFO|configuration_utils.py:463] 2021-10-02 06:53:20,674 >> loading configuration file https://huggingface.co/cl-tohoku/bert-base-japanese-whole-word-masking/resolve/main/config.json from cache at /root/.cache/huggingface/transformers/573af37b6c39d672f2df687c06ad7d556476cbe43e5bf7771097187c45a3e7bf.abeb707b5d79387dd462e8bfb724637d856e98434b6931c769b8716c6f287258
[INFO|configuration_utils.py:499] 2021-10-02 06:53:20,674 >> Model config BertConfig {
"architectures": [
"BertForMaskedLM"
],
"attention_probs_dropout_prob": 0.1,
"gradient_checkpointing": false,
"hidden_act": "gelu",
"hidden_dropout_prob": 0.1,
"hidden_size": 768,
"id2label": {
"0": "LABEL_0",
"1": "LABEL_1",
"2": "LABEL_2"
},
"initializer_range": 0.02,
"intermediate_size": 3072,
"label2id": {
"LABEL_0": 0,
"LABEL_1": 1,
"LABEL_2": 2
},
"layer_norm_eps": 1e-12,
"max_position_embeddings": 512,
"model_type": "bert",
"num_attention_heads": 12,
"num_hidden_layers": 12,
"pad_token_id": 0,
"position_embedding_type": "absolute",
"tokenizer_class": "BertJapaneseTokenizer",
"transformers_version": "4.4.2",
"type_vocab_size": 2,
"use_cache": true,
"vocab_size": 32000
}

[INFO|configuration_utils.py:463] 2021-10-02 06:53:20,802 >> loading configuration file https://huggingface.co/cl-tohoku/bert-base-japanese-whole-word-masking/resolve/main/config.json from cache at /root/.cache/huggingface/transformers/573af37b6c39d672f2df687c06ad7d556476cbe43e5bf7771097187c45a3e7bf.abeb707b5d79387dd462e8bfb724637d856e98434b6931c769b8716c6f287258
[INFO|configuration_utils.py:499] 2021-10-02 06:53:20,803 >> Model config BertConfig {
"architectures": [
"BertForMaskedLM"
],
"attention_probs_dropout_prob": 0.1,
"gradient_checkpointing": false,
"hidden_act": "gelu",
"hidden_dropout_prob": 0.1,
"hidden_size": 768,
"initializer_range": 0.02,
"intermediate_size": 3072,
"layer_norm_eps": 1e-12,
"max_position_embeddings": 512,
"model_type": "bert",
"num_attention_heads": 12,
"num_hidden_layers": 12,
"pad_token_id": 0,
"position_embedding_type": "absolute",
"tokenizer_class": "BertJapaneseTokenizer",
"transformers_version": "4.4.2",
"type_vocab_size": 2,
"use_cache": true,
"vocab_size": 32000
}

[INFO|file_utils.py:1386] 2021-10-02 06:53:20,926 >> https://huggingface.co/cl-tohoku/bert-base-japanese-whole-word-masking/resolve/main/vocab.txt not found in cache or force_download set to True, downloading to /root/.cache/huggingface/transformers/tmpjq6xsip6
Downloading: 100% 258k/258k [00:00<00:00, 3.12MB/s]
[INFO|file_utils.py:1390] 2021-10-02 06:53:21,164 >> storing https://huggingface.co/cl-tohoku/bert-base-japanese-whole-word-masking/resolve/main/vocab.txt in cache at /root/.cache/huggingface/transformers/15164357d71cd32532e56c1d7c2757141326ae17c53e2277bc417cc7c21da6ea.a7378a0cbee5cff668832a776d72b97a25479604fe9564d5595897f75049e7f4
[INFO|file_utils.py:1393] 2021-10-02 06:53:21,164 >> creating metadata file for /root/.cache/huggingface/transformers/15164357d71cd32532e56c1d7c2757141326ae17c53e2277bc417cc7c21da6ea.a7378a0cbee5cff668832a776d72b97a25479604fe9564d5595897f75049e7f4
[INFO|file_utils.py:1386] 2021-10-02 06:53:21,533 >> https://huggingface.co/cl-tohoku/bert-base-japanese-whole-word-masking/resolve/main/tokenizer_config.json not found in cache or force_download set to True, downloading to /root/.cache/huggingface/transformers/tmpvwenqgcb
Downloading: 100% 110/110 [00:00<00:00, 105kB/s]
[INFO|file_utils.py:1390] 2021-10-02 06:53:21,664 >> storing https://huggingface.co/cl-tohoku/bert-base-japanese-whole-word-masking/resolve/main/tokenizer_config.json in cache at /root/.cache/huggingface/transformers/0e46f722799f19c3f0c53172545108a4b31847d3b9a2d5b100759f6673bd667b.08ae4e4044742b9cc7172698caf1da2524f5597ff8cf848114dd0b730cc44bdc
[INFO|file_utils.py:1393] 2021-10-02 06:53:21,664 >> creating metadata file for /root/.cache/huggingface/transformers/0e46f722799f19c3f0c53172545108a4b31847d3b9a2d5b100759f6673bd667b.08ae4e4044742b9cc7172698caf1da2524f5597ff8cf848114dd0b730cc44bdc
[INFO|tokenization_utils_base.py:1702] 2021-10-02 06:53:21,789 >> loading file https://huggingface.co/cl-tohoku/bert-base-japanese-whole-word-masking/resolve/main/vocab.txt from cache at /root/.cache/huggingface/transformers/15164357d71cd32532e56c1d7c2757141326ae17c53e2277bc417cc7c21da6ea.a7378a0cbee5cff668832a776d72b97a25479604fe9564d5595897f75049e7f4
[INFO|tokenization_utils_base.py:1702] 2021-10-02 06:53:21,790 >> loading file https://huggingface.co/cl-tohoku/bert-base-japanese-whole-word-masking/resolve/main/added_tokens.json from cache at None
[INFO|tokenization_utils_base.py:1702] 2021-10-02 06:53:21,790 >> loading file https://huggingface.co/cl-tohoku/bert-base-japanese-whole-word-masking/resolve/main/special_tokens_map.json from cache at None
[INFO|tokenization_utils_base.py:1702] 2021-10-02 06:53:21,790 >> loading file https://huggingface.co/cl-tohoku/bert-base-japanese-whole-word-masking/resolve/main/tokenizer_config.json from cache at /root/.cache/huggingface/transformers/0e46f722799f19c3f0c53172545108a4b31847d3b9a2d5b100759f6673bd667b.08ae4e4044742b9cc7172698caf1da2524f5597ff8cf848114dd0b730cc44bdc
[INFO|tokenization_utils_base.py:1702] 2021-10-02 06:53:21,790 >> loading file https://huggingface.co/cl-tohoku/bert-base-japanese-whole-word-masking/resolve/main/tokenizer.json from cache at None
[INFO|file_utils.py:1386] 2021-10-02 06:53:21,968 >> https://huggingface.co/cl-tohoku/bert-base-japanese-whole-word-masking/resolve/main/pytorch_model.bin not found in cache or force_download set to True, downloading to /root/.cache/huggingface/transformers/tmpa845b2k1
Downloading: 100% 445M/445M [00:12<00:00, 36.5MB/s]
[INFO|file_utils.py:1390] 2021-10-02 06:53:34,325 >> storing https://huggingface.co/cl-tohoku/bert-base-japanese-whole-word-masking/resolve/main/pytorch_model.bin in cache at /root/.cache/huggingface/transformers/cabd9bbd81093f4c494a02e34eb57e405b7564db216404108c8e8caf10ede4fa.464b54997e35e3cc3223ba6d7f0abdaeb7be5b7648f275f57d839ee0f95611fb
[INFO|file_utils.py:1393] 2021-10-02 06:53:34,325 >> creating metadata file for /root/.cache/huggingface/transformers/cabd9bbd81093f4c494a02e34eb57e405b7564db216404108c8e8caf10ede4fa.464b54997e35e3cc3223ba6d7f0abdaeb7be5b7648f275f57d839ee0f95611fb
[INFO|modeling_utils.py:1051] 2021-10-02 06:53:34,325 >> loading weights file https://huggingface.co/cl-tohoku/bert-base-japanese-whole-word-masking/resolve/main/pytorch_model.bin from cache at /root/.cache/huggingface/transformers/cabd9bbd81093f4c494a02e34eb57e405b7564db216404108c8e8caf10ede4fa.464b54997e35e3cc3223ba6d7f0abdaeb7be5b7648f275f57d839ee0f95611fb
[WARNING|modeling_utils.py:1159] 2021-10-02 06:53:37,781 >> Some weights of the model checkpoint at cl-tohoku/bert-base-japanese-whole-word-masking were not used when initializing BertForSequenceClassification: ['cls.predictions.bias', 'cls.predictions.transform.dense.weight', 'cls.predictions.transform.dense.bias', 'cls.predictions.transform.LayerNorm.weight', 'cls.predictions.transform.LayerNorm.bias', 'cls.predictions.decoder.weight', 'cls.seq_relationship.weight', 'cls.seq_relationship.bias']
- This IS expected if you are initializing BertForSequenceClassification from the checkpoint of a model trained on another task or with another architecture (e.g. initializing a BertForSequenceClassification model from a BertForPreTraining model).
- This IS NOT expected if you are initializing BertForSequenceClassification from the checkpoint of a model that you expect to be exactly identical (initializing a BertForSequenceClassification model from a BertForSequenceClassification model).
[WARNING|modeling_utils.py:1170] 2021-10-02 06:53:37,781 >> Some weights of BertForSequenceClassification were not initialized from the model checkpoint at cl-tohoku/bert-base-japanese-whole-word-masking and are newly initialized: ['classifier.weight', 'classifier.bias']
You should probably TRAIN this model on a down-stream task to be able to use it for predictions and inference.
100% 3/3 [00:00<00:00, 6.14ba/s]
100% 1/1 [00:00<00:00, 7.77ba/s]
10/02/2021 06:53:39 - INFO - __main__ - Sample 456 of the training set: {'attention_mask': [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], 'input_ids': [2, 9680, 21436, 28589, 472, 19366, 9594, 1754, 35, 6006, 28645, 10622, 14, 14930, 25910, 18920, 3723, 28, 6, 1532, 35, 12590, 9, 36, 5342, 16, 80, 38, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], 'label': 1, 'sentence': '【Sports Watch】妻・SHIHOが凄艶ヌード披露も、夫・秋山は「聞いてない」', 'token_type_ids': [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]}.
10/02/2021 06:53:39 - INFO - __main__ - Sample 102 of the training set: {'attention_mask': [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], 'input_ids': [2, 63, 2000, 623, 6234, 7875, 29182, 17489, 6848, 65, 5, 612, 11, 2461, 104, 14, 16089, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], 'label': 2, 'sentence': '『劇場版 FAIRY TAIL』の一部を原作者が暴露', 'token_type_ids': [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]}.
10/02/2021 06:53:39 - INFO - __main__ - Sample 1126 of the training set: {'attention_mask': [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], 'input_ids': [2, 4623, 2710, 5, 3245, 21324, 237, 4158, 2720, 14, 690, 315, 40, 398, 971, 19, 126, 5, 28404, 11, 1174, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], 'label': 0, 'sentence': '進む資料のデジタルアーカイブ化\u3000国会図書館が明治時代から昭和27年までの官報を公開', 'token_type_ids': [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]}.
[INFO|trainer.py:483] 2021-10-02 06:53:48,144 >> The following columns in the training set don't have a corresponding argument in `BertForSequenceClassification.forward` and have been ignored: sentence.
[INFO|trainer.py:483] 2021-10-02 06:53:48,145 >> The following columns in the evaluation set don't have a corresponding argument in `BertForSequenceClassification.forward` and have been ignored: sentence.
[INFO|trainer.py:946] 2021-10-02 06:53:48,352 >> ***** Running training *****
[INFO|trainer.py:947] 2021-10-02 06:53:48,352 >> Num examples = 2114
[INFO|trainer.py:948] 2021-10-02 06:53:48,352 >> Num Epochs = 10
[INFO|trainer.py:949] 2021-10-02 06:53:48,352 >> Instantaneous batch size per device = 32
[INFO|trainer.py:950] 2021-10-02 06:53:48,353 >> Total train batch size (w. parallel, distributed & accumulation) = 32
[INFO|trainer.py:951] 2021-10-02 06:53:48,353 >> Gradient Accumulation steps = 1
[INFO|trainer.py:952] 2021-10-02 06:53:48,353 >> Total optimization steps = 670
{'loss': 0.2883, 'learning_rate': 1.701492537313433e-05, 'epoch': 1.49}
{'loss': 0.0415, 'learning_rate': 1.4029850746268658e-05, 'epoch': 2.99}
{'loss': 0.0058, 'learning_rate': 1.1044776119402986e-05, 'epoch': 4.48}
{'loss': 0.0024, 'learning_rate': 8.059701492537314e-06, 'epoch': 5.97}
{'loss': 0.0019, 'learning_rate': 5.074626865671642e-06, 'epoch': 7.46}
75% 500/670 [09:48<03:22, 1.19s/it][INFO|trainer.py:1558] 2021-10-02 07:03:37,211 >> Saving model checkpoint to output/checkpoint-500
[INFO|configuration_utils.py:314] 2021-10-02 07:03:37,212 >> Configuration saved in output/checkpoint-500/config.json
[INFO|modeling_utils.py:837] 2021-10-02 07:03:38,494 >> Model weights saved in output/checkpoint-500/pytorch_model.bin
[INFO|tokenization_utils_base.py:1896] 2021-10-02 07:03:38,495 >> tokenizer config file saved in output/checkpoint-500/tokenizer_config.json
[INFO|tokenization_utils_base.py:1902] 2021-10-02 07:03:38,495 >> Special tokens file saved in output/checkpoint-500/special_tokens_map.json
{'loss': 0.0015, 'learning_rate': 2.08955223880597e-06, 'epoch': 8.96}
100% 670/670 [13:13<00:00, 1.13it/s][INFO|trainer.py:1129] 2021-10-02 07:07:01,701 >>

Training completed. Do not forget to share your model on huggingface.co/models =)


{'train_runtime': 793.3481, 'train_samples_per_second': 0.845, 'epoch': 10.0}
100% 670/670 [13:13<00:00, 1.18s/it]
[INFO|trainer.py:1558] 2021-10-02 07:07:02,143 >> Saving model checkpoint to output/
[INFO|configuration_utils.py:314] 2021-10-02 07:07:02,144 >> Configuration saved in output/config.json
[INFO|modeling_utils.py:837] 2021-10-02 07:07:03,410 >> Model weights saved in output/pytorch_model.bin
[INFO|tokenization_utils_base.py:1896] 2021-10-02 07:07:03,411 >> tokenizer config file saved in output/tokenizer_config.json
[INFO|tokenization_utils_base.py:1902] 2021-10-02 07:07:03,411 >> Special tokens file saved in output/special_tokens_map.json
[INFO|trainer_pt_utils.py:656] 2021-10-02 07:07:03,442 >> ***** train metrics *****
[INFO|trainer_pt_utils.py:661] 2021-10-02 07:07:03,442 >> epoch = 10.0
[INFO|trainer_pt_utils.py:661] 2021-10-02 07:07:03,442 >> init_mem_cpu_alloc_delta = 1MB
[INFO|trainer_pt_utils.py:661] 2021-10-02 07:07:03,442 >> init_mem_cpu_peaked_delta = 0MB
[INFO|trainer_pt_utils.py:661] 2021-10-02 07:07:03,442 >> init_mem_gpu_alloc_delta = 422MB
[INFO|trainer_pt_utils.py:661] 2021-10-02 07:07:03,442 >> init_mem_gpu_peaked_delta = 0MB
[INFO|trainer_pt_utils.py:661] 2021-10-02 07:07:03,443 >> train_mem_cpu_alloc_delta = 0MB
[INFO|trainer_pt_utils.py:661] 2021-10-02 07:07:03,443 >> train_mem_cpu_peaked_delta = 94MB
[INFO|trainer_pt_utils.py:661] 2021-10-02 07:07:03,443 >> train_mem_gpu_alloc_delta = 1324MB
[INFO|trainer_pt_utils.py:661] 2021-10-02 07:07:03,443 >> train_mem_gpu_peaked_delta = 3394MB
[INFO|trainer_pt_utils.py:661] 2021-10-02 07:07:03,443 >> train_runtime = 793.3481
[INFO|trainer_pt_utils.py:661] 2021-10-02 07:07:03,443 >> train_samples = 2114
[INFO|trainer_pt_utils.py:661] 2021-10-02 07:07:03,443 >> train_samples_per_second = 0.845
10/02/2021 07:07:03 - INFO - __main__ - *** Evaluate ***
[INFO|trainer.py:483] 2021-10-02 07:07:03,557 >> The following columns in the evaluation set don't have a corresponding argument in `BertForSequenceClassification.forward` and have been ignored: sentence.
[INFO|trainer.py:1775] 2021-10-02 07:07:03,559 >> ***** Running Evaluation *****
[INFO|trainer.py:1776] 2021-10-02 07:07:03,559 >> Num examples = 529
[INFO|trainer.py:1777] 2021-10-02 07:07:03,559 >> Batch size = 8
100% 67/67 [00:07<00:00, 9.09it/s]
[INFO|trainer_pt_utils.py:656] 2021-10-02 07:07:11,070 >> ***** eval metrics *****
[INFO|trainer_pt_utils.py:661] 2021-10-02 07:07:11,070 >> epoch = 10.0
[INFO|trainer_pt_utils.py:661] 2021-10-02 07:07:11,070 >> eval_accuracy = 0.9698
[INFO|trainer_pt_utils.py:661] 2021-10-02 07:07:11,070 >> eval_loss = 0.1554
[INFO|trainer_pt_utils.py:661] 2021-10-02 07:07:11,070 >> eval_mem_cpu_alloc_delta = 0MB
[INFO|trainer_pt_utils.py:661] 2021-10-02 07:07:11,071 >> eval_mem_cpu_peaked_delta = 0MB
[INFO|trainer_pt_utils.py:661] 2021-10-02 07:07:11,071 >> eval_mem_gpu_alloc_delta = 0MB
[INFO|trainer_pt_utils.py:661] 2021-10-02 07:07:11,071 >> eval_mem_gpu_peaked_delta = 33MB
[INFO|trainer_pt_utils.py:661] 2021-10-02 07:07:11,071 >> eval_runtime = 7.3979
[INFO|trainer_pt_utils.py:661] 2021-10-02 07:07:11,071 >> eval_samples = 529
[INFO|trainer_pt_utils.py:661] 2021-10-02 07:07:11,071 >> eval_samples_per_second = 71.507
CPU times: user 6.09 s, sys: 875 ms, total: 6.96 s
Wall time: 14min

14分ほどで終了しました。

学習状況の確認

TensorBoardで学習の状況を確認します。

runフォルダに出力されている統計情報を可視化します。

[Google Colaboratory]

1
2
3
# 学習状況の確認
%load_ext tensorboard
%tensorboard --logdir runs

[実行結果]

損失(loss)が0に収束しているので、きちんと学習できていることが分かります。

損失は正解値と推論値の差になります。学習はこの損失の最小化を目的としています。

テキスト分類の推論

テキスト分類の推論を行います。

textに推論対象の文章を設定します。

[Google Colaboratory]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import torch
from transformers import BertJapaneseTokenizer, AutoModelForSequenceClassification

# トークナイザーとモデルの準備
tokenizer = BertJapaneseTokenizer.from_pretrained('cl-tohoku/bert-base-japanese-whole-word-masking')
model = AutoModelForSequenceClassification.from_pretrained('output/')

# テキスト
text = "Win11配布開始"

# テキストをテンソルに変換
input = tokenizer.encode(text, return_tensors='pt')

# 推論
labels = ['IT', 'スポーツ', '映画']
model.eval()
with torch.no_grad():
outputs = model(input)[0]
print(labels[torch.argmax(outputs)])

[実行結果]

1
IT

「Win11配布開始」ITであることが正しく推論できています。


次は「阪神快勝!」を推論してみます。

[Google Colaboratory]

1
2
3
4
5
6
7
8
9
10
11
12
# テキスト
text = "阪神快勝!"

# テキストをテンソルに変換
input = tokenizer.encode(text, return_tensors='pt')

# 推論
labels = ['IT', 'スポーツ', '映画']
model.eval()
with torch.no_grad():
outputs = model(input)[0]
print(labels[torch.argmax(outputs)])

[実行結果]

1
スポーツ

問題なくスポーツと推論できました。


最後に「全米が泣いた」を推論してみます。

[Google Colaboratory]

1
2
3
4
5
6
7
8
9
10
11
12
# テキスト
text = "全米が泣いた"

# テキストをテンソルに変換
input = tokenizer.encode(text, return_tensors='pt')

# 推論
labels = ['IT', 'スポーツ', '映画']
model.eval()
with torch.no_grad():
outputs = model(input)[0]
print(labels[torch.argmax(outputs)])

[実行結果]

1
映画

映画と正しく推論できました。

Transformers(8) - テキスト分類①学習データと検証データの生成

テキスト分類を2回に分けて説明していきます。

今回は、データセットをダウンロードし、そのデータから学習データと検証データを生成します。

データセットのダウンロード

まずlivedoor ニュースコーパスからニュース記事のデータセットをダウンロードします。

[Google Colaboratory]

1
!wget https://www.rondhuit.com/download/ldcc-20140209.tar.gz

[実行結果]

1
2
3
4
5
6
7
8
9
10
--2021-10-01 20:42:32--  https://www.rondhuit.com/download/ldcc-20140209.tar.gz
Resolving www.rondhuit.com (www.rondhuit.com)... 59.106.19.174
Connecting to www.rondhuit.com (www.rondhuit.com)|59.106.19.174|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 8855190 (8.4M) [application/x-gzip]
Saving to: ‘ldcc-20140209.tar.gz’

ldcc-20140209.tar.g 100%[===================>] 8.44M 2.99MB/s in 2.8s

2021-10-01 20:42:37 (2.99 MB/s) - ‘ldcc-20140209.tar.gz’ saved [8855190/8855190]

データセットの解凍

ダウンロードした圧縮ファイル(ldcc-20140209.tar.gz)を解凍します。

[Google Colaboratory]

1
!tar xzvf ldcc-20140209.tar.gz

textディレクトリが作成され、その中に各ジャンル別にニュース記事のテキストファイルがたくさん解凍されます。

学習データと検証データの生成

解凍したデータセットから、学習データ(dev.csv)検証データ(train.csv)を生成します。

[Google Colaboratory]

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
import os
import pandas as pd

# タイトルリストの取得
def get_title_list(path):
title_list = []
filenames = os.listdir(path)
for filename in filenames:
# ファイルの読み込み
with open(path+filename) as f:
title = f.readlines()[2].strip()
title_list.append(title)
return title_list

# データフレームの作成
df = pd.DataFrame(columns=['label', 'sentence'])
title_list = get_title_list('text/it-life-hack/')
for title in title_list:
df = df.append({'label':0 , 'sentence':title}, ignore_index=True)
title_list = get_title_list('text/sports-watch/')
for title in title_list:
df = df.append({'label':1 , 'sentence':title}, ignore_index=True)
title_list = get_title_list('text/movie-enter/')
for title in title_list:
df = df.append({'label':2 , 'sentence':title}, ignore_index=True)

# シャッフル
df = df.sample(frac=1)

# CSVファイルの保存
num = len(df)
df[:int(num*0.8)].to_csv('train.csv', sep=',', index=False)
df[int(num*0.8):].to_csv('dev.csv', sep=',', index=False)

正常に処理が実行されると、学習データ(dev.csv)検証データ(train.csv)が作成されます。

次回は、この学習データと検証データを使ってテキスト分類の学習と推論を行います。

Transformers(7) - トークナイザー

今回は、トークナイザーを使ってみます。

(Transformersのインストールは完了している想定となります。)

トークナイザー

トークナイザーは自然言語の入力テキストを深層学習モデルの入力データに変換する処理です。

深層学習モデルの入力データはテンソルと呼ばれる多次元配列になります。

トークナイザーの準備

AutoTokenizerクラスの作成時に‘bert-base-cased’を指定すると、BERTモデル用のトークナイザーとなります。

[Google Colaboratory]

1
2
3
4
from transformers import AutoTokenizer

# トークナイザーの準備
tokenizer = AutoTokenizer.from_pretrained('bert-base-cased')

[実行結果]

1
2
3
4
5
6
7
8
Downloading: 100%
570/570 [00:00<00:00, 13.3kB/s]
Downloading: 100%
213k/213k [00:00<00:00, 563kB/s]
Downloading: 100%
436k/436k [00:00<00:00, 587kB/s]
Downloading: 100%
29.0/29.0 [00:00<00:00, 725B/s]

自然言語テキストをテンソルにエンコード

tokenizer.encodeを使うと、自然言語テキストをテンソルにエンコードすることができます。

[Google Colaboratory]

1
2
3
# 自然言語テキストをテンソルにエンコード
input = tokenizer.encode("Hello, I'm a single sentence!", return_tensors='pt', max_length=512, truncation=True)
print(input)

[実行結果]

1
tensor([[ 101, 8667,  117,  146,  112,  182,  170, 1423, 5650,  106,  102]])

テンソルを自然言語テキストにデコード

tokenizer.decodeを使うと、テンソルを自然言語テキストにデコードすることができます。

[Google Colaboratory]

1
2
# テンソルを自然言語テキストにデコード
print(tokenizer.decode(input.numpy()[0]))

[実行結果]

1
[CLS] Hello, I'm a single sentence! [SEP]

複数の自然言語テキストをテンソルにエンコード

tokenizer.encode_plusを使うと、複数の自然言語テキストをテンソルにエンコードすることができます。

[Google Colaboratory]

1
2
3
# 複数の自然言語テキストをテンソルにエンコード
inputs = tokenizer.encode_plus('This is a question', 'This is a context!', return_tensors='pt')
print(inputs)

戻り値の意味は次の通りです。

  • input_ids
    トークンIDの配列
  • token_type_ids
    複数の文章を判定するバイナリマスク
  • attention_mask
    パディング時に埋め込み文字かどうかを判定するバイナリマスク

[実行結果]

1
2
3
{'input_ids': tensor([[ 101, 1188, 1110,  170, 2304,  102, 1188, 1110,  170, 5618,  106,  102]]), 
'token_type_ids': tensor([[0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1]]),
'attention_mask': tensor([[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]])}

テンソルを複数の自然言語テキストにデコード

tokenizer.decodeを使うと、テンソルを複数の自然言語テキストにデコードすることができます。

[Google Colaboratory]

1
2
# テンソルを複数の自然言語テキストにデコード
print(tokenizer.decode(inputs['input_ids'].numpy()[0]))

[実行結果]

1
[CLS] This is a question [SEP] This is a context! [SEP]

BERTのスペシャルトークンとしては、次のようなものがあります。

  • [CLS]
    文頭に埋め込むトークン(classification)
  • [SEP]
    文と文の間に埋め込むトークン(separator)
  • [PAD]
    指定された長さに満たさない文を埋めるトークン(padding)
  • [MASK]
    マスクしたトークン(mask)

Transformers(6) - 言語モデル(マスクした単語の予測)

今回は、言語モデルを試してみます。

(Transformersのインストールは完了している想定となります。)

言語モデル

言語モデルは、テキストの自然な単語の並びを予測する処理です。

Transformersライブラリでは、言語モデルを事前に学習しておりその事前学習済みモデルを使ってチューニングを行います。

言語モデルの学習方法には下記のようなものがあります。

  • MLM(Masked Language Modeling)
  • CLM(Causal Language Modeling)

MLM(マスクした単語の予測)

MLMでは、文章内のマスクした単語の予測を学習する手法です。

サンプルコードは次の通りです。

タスク名に‘fill-mask’を指定し、言語モデル(MLM)のパイプラインを作成します。

文章内の予測したい箇所に{nlp.tokenizer.mask_token}を設定するとその位置の単語を予測することができます。

[Google Colaboratory]

1
2
3
4
5
6
7
from transformers import pipeline

# MLMのパイプラインの準備
nlp = pipeline('fill-mask')

# マスク位置の単語を予測
print(nlp(f'Once upon a time there was a young lady and an old {nlp.tokenizer.mask_token}.'))

単語の予測結果として次の情報が出力されます。

  • sequence
    予測した単語を埋め込んだ文章
  • score
    スコア
  • token_str
    予測した単語

[実行結果]

1
2
3
4
5
[{'sequence': 'Once upon a time there was a young lady and an old gentleman.', 'score': 0.49178990721702576, 'token': 22164, 'token_str': ' gentleman'}, 
{'sequence': 'Once upon a time there was a young lady and an old man.', 'score': 0.2817203998565674, 'token': 313, 'token_str': ' man'},
{'sequence': 'Once upon a time there was a young lady and an old boy.', 'score': 0.08439457416534424, 'token': 2143, 'token_str': ' boy'},
{'sequence': 'Once upon a time there was a young lady and an old lady.', 'score': 0.06599652022123337, 'token': 6429, 'token_str': ' lady'},
{'sequence': 'Once upon a time there was a young lady and an old woman.', 'score': 0.01124062854796648, 'token': 693, 'token_str': ' woman'}]

5つの単語が予測されました。

  • スコア 49 [gentleman]
    「a young lady」に対して「an old gentleman」は自然な予測だと思います。
  • スコア 28 [man]
    「a young lady」に対して「an old man」も自然な予測ではないでしょうか。
  • スコア 8 [boy]
    「an old boy」は単語として不自然な感じがします。
  • スコア 6 [lady]
    「a young lady」に対して「an old lady」も老若の女性ということで自然ですね。
  • スコア 1 [woman]
    「a young lady」に対して「an old woman」も特に問題なさそうです。

この程度の文章であれば、問題なくマスクした単語の予測ができることを確認できました。


次回は、トークナイザーを使ってみます。

Transformers(5) - テキスト生成

今回は、テキスト生成を行います。

(Transformersのインストールは完了している想定となります。)

テキスト生成

テキスト生成は、入力されたテキストに続くもっともらしいテキストを自動生成する処理です。

ソースとしては、まずタスク名に‘text-generation’を指定したパイプラインを作成します。

パイプラインには次の3つを引数として渡し、テキスト生成処理を行います。

  • 第1引数
    入力するテキスト
  • max_length
    生成するテキストの最大語数
  • min_length
    生成するテキストの最小語数

[Google Colaboratory]

1
2
3
4
5
6
7
8
9
10
from transformers import pipeline

# テキスト生成のパイプライン
text_generator = pipeline('text-generation')

# 入力テキスト
text = 'Once upon a time there was an old man and an old woman.'

# テキスト生成
print(text_generator(text, max_length=100, min_length=50))

実行結果は下記の通りです。

[実行結果]

1
2
3
4
Some weights of GPT2Model were not initialized from the model checkpoint at gpt2 and are newly initialized: ['h.0.attn.masked_bias', 'h.1.attn.masked_bias', 'h.2.attn.masked_bias', 'h.3.attn.masked_bias', 'h.4.attn.masked_bias', 'h.5.attn.masked_bias', 'h.6.attn.masked_bias', 'h.7.attn.masked_bias', 'h.8.attn.masked_bias', 'h.9.attn.masked_bias', 'h.10.attn.masked_bias', 'h.11.attn.masked_bias']
You should probably TRAIN this model on a down-stream task to be able to use it for predictions and inference.
Setting `pad_token_id` to `eos_token_id`:50256 for open-end generation.
[{'generated_text': 'Once upon a time there was an old man and an old woman. One was a very good maid on whom the women worked while the young men worked in the yard.\n\nThis time in the middle of the night, the young maid ran off the edge of the street, followed by several other girls, and as they approached the old maid came the other to speak to this man. He gave her a call and said he had come for someone. The young maid took the call, and found'}]

生成されたテキストを訳すとだいたい次のような感じです。

Once upon a time there was an old man and an old woman.
昔々、おじいさんとおばあさんがいました。

One was a very good maid on whom the women worked while the young men worked in the yard.
一人は、若い男性が庭で働いている間、女性が働いていたとても良いメイドでした。

This time in the middle of the night, the young maid ran off the edge of the street, followed by several other girls, and as they approached the old maid came the other to speak to this man.
今回は真夜中に、若いメイドが通りの端から逃げ出し、他の何人かの女の子が続き、彼らが近づくと、古いメイドがこの男と話すためにもう一人来ました。

He gave her a call and said he had come for someone. The young maid took the call, and found
彼は彼女に電話をかけ、誰かのために来たと言いました。若いメイドが電話に出て、見つけました。

テキストが生成されるにはされたのですが、なんだか謎が謎をよぶ展開になってます。。。😅

次回は、言語モデルを試してみます。

Transformers(4) - 要約

今回は、Transformersを使って要約を行います。

(Transformersのインストールは完了している想定となります。)

要約

要約は、長い文章(本文)を短い文章に変換する処理です。

ソースとしては、まずタスク名に‘summarization’を指定したパイプラインを作成します。

パイプラインには次の3つを引数として渡し、要約処理を行います。

  • 第1引数
    要約対象の本文を指定します。
  • max_length
    要約の最大語数
  • min_length
    要約の最小語数

[Google Colaboratory]

1
2
3
4
5
6
7
8
9
10
from transformers import pipeline

# 要約のパイプラインの準備
summarizer = pipeline('summarization')

# テキスト
text = 'Huggingface Transformers is a deep learning framework provided by Huggingface that specializes in natural language processing. It supports both TensorFlow and PyTorch. You can use deep learning to solve natural language processing tasks such as text classification, question answering, and summary.'

# 推論
print(summarizer(text, max_length=20, min_length=10))

実行結果は下記の通りです。

[実行結果]

1
[{'summary_text': ' Huggingface Transformers is a deep learning framework that specializes in natural language processing . It'}]

結果は「Transformersは、自然言語処理に特化したディープラーニングのフレームワークです。」と、的確な要約文になっています。

次回は、テキスト生成を行います。

Transformers(3) - 質疑応答

今回は、Transformersを使って質疑応答を行います。

(Transformersのインストールは完了している想定となります。)

質疑応答

質疑応答では、コンテキスト質問からコンテキスト内に含まれる応答を抽出します。

ソースとしては、タスク名に‘question-answering’を指定したパイプラインを作成し、コンテキストと質問を渡して応答を推論します。

[Google Colaboratory]

1
2
3
4
5
6
7
8
9
10
11
12
13
from transformers import pipeline

# 質疑応答のパイプラインの準備
nlp = pipeline('question-answering')

# コンテキスト
context = 'Huggingface Transformers is a deep learning framework provided by Huggingface that specializes in natural language processing. It supports both TensorFlow and PyTorch. You can use deep learning to solve natural language processing tasks such as text classification, question answering, and summary.'

# 質問
question = 'What is a natural language processing task?'

# 推論
print(nlp(question=question, context=context))

実行結果は下記の通りです。

[実行結果]

1
{'score': 0.6564476490020752, 'start': 245, 'end': 297, 'answer': 'text classification, question answering, and summary'}

スコア65で、テキスト分類、質疑応答、要約という結果になりました。

正しい応答になっていると思います。


次回は、要約を行います。

Transformers(2) - インストール/テキスト分類

今回は、Transformersのインストールとテキスト分類を行います。

Transformersのインストール

Transformersのインストールを行うためには次のコマンドを実行します。

実行環境としてはGoogle Colaboratoryを想定しています。

[Google Colaboratory]

1
!pip install transformers[ja]==4.4.2

次のような実行結果が表示されればインストールは成功しています。

[実行結果]

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
Collecting transformers[ja]==4.4.2
Downloading transformers-4.4.2-py3-none-any.whl (2.0 MB)
|████████████████████████████████| 2.0 MB 13.1 MB/s
Requirement already satisfied: filelock in /usr/local/lib/python3.7/dist-packages (from transformers[ja]==4.4.2) (3.0.12)
Requirement already satisfied: packaging in /usr/local/lib/python3.7/dist-packages (from transformers[ja]==4.4.2) (21.0)
Requirement already satisfied: regex!=2019.12.17 in /usr/local/lib/python3.7/dist-packages (from transformers[ja]==4.4.2) (2019.12.20)
Requirement already satisfied: importlib-metadata in /usr/local/lib/python3.7/dist-packages (from transformers[ja]==4.4.2) (4.8.1)
Requirement already satisfied: numpy>=1.17 in /usr/local/lib/python3.7/dist-packages (from transformers[ja]==4.4.2) (1.19.5)
Collecting tokenizers<0.11,>=0.10.1
Downloading tokenizers-0.10.3-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl (3.3 MB)
|████████████████████████████████| 3.3 MB 56.6 MB/s
Requirement already satisfied: tqdm>=4.27 in /usr/local/lib/python3.7/dist-packages (from transformers[ja]==4.4.2) (4.62.2)
Collecting sacremoses
Downloading sacremoses-0.0.45-py3-none-any.whl (895 kB)
|████████████████████████████████| 895 kB 55.7 MB/s
Requirement already satisfied: requests in /usr/local/lib/python3.7/dist-packages (from transformers[ja]==4.4.2) (2.23.0)
Collecting fugashi>=1.0
Downloading fugashi-1.1.1-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl (490 kB)
|████████████████████████████████| 490 kB 60.5 MB/s
Collecting ipadic<2.0,>=1.0.0
Downloading ipadic-1.0.0.tar.gz (13.4 MB)
|████████████████████████████████| 13.4 MB 212 kB/s
Collecting unidic>=1.0.2
Downloading unidic-1.0.3.tar.gz (5.1 kB)
Collecting unidic-lite>=1.0.7
Downloading unidic-lite-1.0.8.tar.gz (47.4 MB)
|████████████████████████████████| 47.4 MB 79 kB/s
Requirement already satisfied: wasabi<1.0.0,>=0.6.0 in /usr/local/lib/python3.7/dist-packages (from unidic>=1.0.2->transformers[ja]==4.4.2) (0.8.2)
Requirement already satisfied: plac<2.0.0,>=1.1.3 in /usr/local/lib/python3.7/dist-packages (from unidic>=1.0.2->transformers[ja]==4.4.2) (1.1.3)
Requirement already satisfied: chardet<4,>=3.0.2 in /usr/local/lib/python3.7/dist-packages (from requests->transformers[ja]==4.4.2) (3.0.4)
Requirement already satisfied: urllib3!=1.25.0,!=1.25.1,<1.26,>=1.21.1 in /usr/local/lib/python3.7/dist-packages (from requests->transformers[ja]==4.4.2) (1.24.3)
Requirement already satisfied: certifi>=2017.4.17 in /usr/local/lib/python3.7/dist-packages (from requests->transformers[ja]==4.4.2) (2021.5.30)
Requirement already satisfied: idna<3,>=2.5 in /usr/local/lib/python3.7/dist-packages (from requests->transformers[ja]==4.4.2) (2.10)
Requirement already satisfied: typing-extensions>=3.6.4 in /usr/local/lib/python3.7/dist-packages (from importlib-metadata->transformers[ja]==4.4.2) (3.7.4.3)
Requirement already satisfied: zipp>=0.5 in /usr/local/lib/python3.7/dist-packages (from importlib-metadata->transformers[ja]==4.4.2) (3.5.0)
Requirement already satisfied: pyparsing>=2.0.2 in /usr/local/lib/python3.7/dist-packages (from packaging->transformers[ja]==4.4.2) (2.4.7)
Requirement already satisfied: six in /usr/local/lib/python3.7/dist-packages (from sacremoses->transformers[ja]==4.4.2) (1.15.0)
Requirement already satisfied: joblib in /usr/local/lib/python3.7/dist-packages (from sacremoses->transformers[ja]==4.4.2) (1.0.1)
Requirement already satisfied: click in /usr/local/lib/python3.7/dist-packages (from sacremoses->transformers[ja]==4.4.2) (7.1.2)
Building wheels for collected packages: ipadic, unidic, unidic-lite
Building wheel for ipadic (setup.py) ... done
Created wheel for ipadic: filename=ipadic-1.0.0-py3-none-any.whl size=13556723 sha256=868f02ff1674a53b19d8180bdf7a9473a57ab3be9cb1551291fdcb03bfb98bc5
Stored in directory: /root/.cache/pip/wheels/33/8b/99/cf0d27191876637cd3639a560f93aa982d7855ce826c94348b
Building wheel for unidic (setup.py) ... done
Created wheel for unidic: filename=unidic-1.0.3-py3-none-any.whl size=5506 sha256=8977d77c05cd5ec120e9f048171cc7fe4804c6191cb8c3dc209a1eae232c6aa8
Stored in directory: /root/.cache/pip/wheels/23/30/0b/128289fb595ef4117d2976ffdbef5069ef83be813e88caa0a6
Building wheel for unidic-lite (setup.py) ... done
Created wheel for unidic-lite: filename=unidic_lite-1.0.8-py3-none-any.whl size=47658836 sha256=05af03831b7babce0692a95538db2a5616e083838fd8a98d6336cdf8e6f9a009
Stored in directory: /root/.cache/pip/wheels/de/69/b1/112140b599f2b13f609d485a99e357ba68df194d2079c5b1a2
Successfully built ipadic unidic unidic-lite
Installing collected packages: tokenizers, sacremoses, unidic-lite, unidic, transformers, ipadic, fugashi
Successfully installed fugashi-1.1.1 ipadic-1.0.0 sacremoses-0.0.45 tokenizers-0.10.3 transformers-4.4.2 unidic-1.0.3 unidic-lite-1.0.8

テキスト分類

テキスト分類は、テキストを事前に定義されたカテゴリに分類する処理となります。

今回は文章を「ポジティブ」か「ネガティブ」かに分類してみます。

タスク名に‘sentiment-analysis’を指定したパイプラインを作成し、そのパイプラインに任意の文章を渡します。

[Google Colaboratory]

1
2
3
4
5
6
7
8
9
10
from transformers import pipeline

# テキスト分類のパイプラインを準備
nlp = pipeline('sentiment-analysis')

# テキスト
text = 'This movie was very interesting.'

# 推論
print(nlp(text))

[実行結果]

1
2
3
4
5
6
7
8
9
Downloading: 100%
629/629 [00:00<00:00, 10.1kB/s]
Downloading: 100%
268M/268M [00:06<00:00, 45.4MB/s]
Downloading: 100%
232k/232k [00:00<00:00, 266kB/s]
Downloading: 100%
48.0/48.0 [00:00<00:00, 850B/s]
[{'label': 'POSITIVE', 'score': 0.9997621178627014}]

スコア99以上で‘POSITIVE’な文章であると判断できました。


少し文章を変更して再度テキスト分類を行います。

[Google Colaboratory]

1
2
3
4
5
6
7
8
9
10
from transformers import pipeline

# テキスト分類のパイプラインを準備
nlp = pipeline('sentiment-analysis')

# テキスト
text = 'This movie was very silly.'

# 推論
print(nlp(text))

[実行結果]

1
[{'label': 'NEGATIVE', 'score': 0.9983341693878174}]

スコア99以上で‘NEGATIVE’な文章であると判断できました。

次回は、質問応答を行います。