現状最強の自然言語処理モデルLUKEを用いてQAタスクを解いてみた
2023年01月08日 13:21
こんにちにゃんです。
水色桜(みずいろさくら)です。
今回は現在(2023年1月)、世界最高精度を有している言語モデルであるLUKEをファインチューニングして、Question-Answeringタスク(SQuAD、狭義の質問応答)を行ってみようと思います。
作成したモデルはこちらのサイトで公開していますので、もしよろしければ使ってみてください。
今回も初心者でもたった2ステップ(ステップ1:モデルのダウンロード、ステップ2:コードのコピペ)で簡単に使えるようにしてあります。
このモデルを使えばチャットボットなども作成することが可能です。
https://huggingface.co/Mizuiro-sakura/luke-japanese-finetuned-question-answering
torch 1.12.1
transformers 4.24.0
Python 3.9.13
transformersのバージョンが古いとMLukeTokenizerが含まれていないので注意してください。(上記のバージョンまでアップデートしてください)
2020年4月当時、5つのタスク(Open Entity, TACRED, CoNLL2003, ReCoRD, SQuAD 1.1)で世界最高精度を達成した新しい言語モデル。
日本語バージョンのLUKEは執筆現在(2023年1月)も4つのタスク(MARC-ja, JSTS, JNLI, JCommonsenseQA)で最高スコアを有しています。RoBERTaを元として構成され、entity-aware self-attentionという独自のメカニズムを用いています。
今回はファインチューニングのためのデータとして運転ドメインQAデータセット(DDQA)を用いました。
このデータセットはウェブ上で公開されている運転ドメインのブログ記事を基に構築されており、述語項構造QAデータセット(PAS-QAデータセット)と文章読解QAデータセット(RC-QAデータセット)から構成されています。その中でも、RC-QAデータセットは文章の中から質問に対する答えを抽出する問題です。今回はSQuAD(質問に対する応答(該当部分の抜き出し))の学習を行いたいので、RC-QAデータセットを用いました。
下記のコードを用いて学習を行いました。
学習には時間がかなりかかるため、読者の皆さんはすでに作成しておいたこちらのモデルを利用することを強くお勧めします。
もし自分でファインチューニングをしてみたいという方は下記のコードを参考にしてみてください。
厳密一致(Exact match)は約40%でした。またf1値は0.77でした。厳密一致の割合はあまり高くないため、余分な文字が含まれていたりする可能性が高いと考えられます。
以下のコードを実行することでQAタスクを解くことができます。
modelのあるディレクトリ名を適宜変えてください。
実行結果
今回はQuestion-Answeringタスクに対応したモデルに関して書いてきました。
厳密一致がもう少し高いとより汎用性が高くなると感じました。(個人開発だとこのレベルが限界でした...>_<)
もしよろしければぜひこのモデルを利用してみてください。
では、ばいにゃん~。
著者である山田先生およびStudio ousiaさんには感謝いたします
診断を受けるとあなたの現在の業務委託単価を算出します。今後副業やフリーランスで単価を交渉する際の参考になります。また次の単価レンジに到達するためのヒントも確認できます。
目次を見る