LoginSignup
13
17

More than 1 year has passed since last update.

BERTによる自然言語処理についてモデルを組んで確認してみた

Last updated at Posted at 2021-08-07

はじめに

  システム会社所属のシステムエンジニアが独学に限界を感じて
 オンライン受講した結果を記録する記事です。
 これまでの自己学習での各種技術の習得を行ってきましたが、
 日々複雑になる技術説明の信憑性を担保することに限界を感じ受講
 することにしました。

  本記事は、技術系のオンライン学習を活用し機械学習等、
 説明に苦慮する技術をシステムの開発に、取り入れられる
 ようにするための学習結果の公開です。
 学習するオンライン講座についてはAidemy様の
 「自然言語処理講座」を活用させていただきました。

  Googleの検索エンジンも採用しているTransformerを活用した
 BERTモデルについて学習した知識で理解しようとしています。

  【著者の略歴】

   8年位様々な業種のシステム開発/運用に携わるSEをさせて頂いてます。
  直近2年間でAIにかかわる技術の必要性を感じ、機械学習モデルに興味
  を持ち始めました。

  年代、性別:30代、男
  すきなもの:コーヒー、ダーツ、ウィスキー

本記事の概要

  1. 対象読者

    • Transformerモデルについてを勉強中の方
    • オンライン受講できる学習内容について興味がある方
  2. 記載内容について

    • 制作物のコーディング方法
    • 制作物に対する著者の見解
  3. 今回対象外とする内容

    • 作成するモデルの学習に必要な性能や時間等の測定
    • 環境構築等の手法

目的

 BERTモデルの事前学習の効果について検証する

背景

  GoogleよりBERTモデルの日本語事前学習済みモデルが公開されている
 実際に自作でBERTモデルの日本語について学習したモデルとの性能の差
 を検証してみたいと考えた。

目次

1.BERTモデルをpytorchのnnクラスから記述する

2.日本語事前学習済みモデル(Google提供)と比較する準備

3.結果比較

4.まとめ

5.参考リンク

1. BERTモデルをpytorchのnnクラスから記述する

 BERTモデルの作成については株式会社サイシードより提供されている
 以下のサイトを参考に構築する。
 汎用言語表現モデルBERTを日本語で動かす(PyTorch)
 ※株式会社サイシード

 学習用データの準備にtext_preprocessを実行して学習用データ、検証用データ
 を準備する。
 BERTモデルの構築を行い学習させる。(コードはこちら
 実際のモデルの学習については相当な時間が必要となります。(著者作成時、約30時間)

2. 日本語事前学習済みモデル(Google提供)と比較する準備

 以下のサイト記載の手法を参考にGoogle提供の日本語事前学習済みモデル
 と比較するために準備をする。(コードはこちら)
 BERTの日本語事前学習済みモデルをGoogle Colaboratoryで手軽に試す方法

3. 結果比較

 自作モデルの学習結果

 100MBのデータをベースで学習させた場合の学習結果は以下の通りでした。
 (学習パラメータ等はリンクのコード)の通りです。
 EP_test:2: 98%|| 801/820 [1:54:36<02:34, 8.11s/it]
  {'epoch': 2, 'iter': 800, 'avg_loss': 1.1997434179136965, 'avg_acc': 69.03675093632958, 'loss': 1.2028791904449463}
 EP_test:2: 100%|| 820/820 [1:57:33<00:00, 8.60s/it]
 EP2_test, avg_loss= 1.2002710063283037 total_acc= 68.97655803316181

 使用したデータ量と、学習に使える時間が少なかったため今回はtotal_accが
 68.976とあまり期待ができない値になりました。
 実際に学習したモデルに以下の通り穴抜けの文字を予測させると
 以下のように結果はでたらめに近い結果となってしまいました。

No. 予測単語
0 組織
1 ラルト
2 乱射
3 都庁
4 邂逅

 Google提供の事前学習モデル

 一方Google提供の事前学習済みモデルの場合です。
 「父の父は、祖父。」というテキストに対して2つめの「父」をマスクし、
 文字が予測できるか確認しました。
 結果は以下の通りです。

No. 予測単語
0
1
2
3
4

 4つ目「3」の出力予測に「父」が入っていることが確認できました。
 こちらのモデルではしっかりと穴抜けテキストの予測はできています。

4. まとめ

 BERTモデルはすでに数年前に発表されたモデルのため、Transformerの構造
 理解や作成のためにコーディングすることは有意義でしたが、学習したモデル
 をそのまま活用するには多くの課題が残りそうでした。
 
 今後の学習については転移学習を活用して、大規模な学習時間が必要な
 モデルを作成する際にいかに効率よくモデルに学習させるかを理解できると
 今回のようなGoogle提供モデルより、追加で学習させたモデルの作成
 といった活用ができそうでした。

5. 参考リンク

 汎用言語表現モデルBERTを日本語で動かす(PyTorch)
 BERTの日本語事前学習済みモデルをGoogle Colaboratoryで手軽に試す方法
 

13
17
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
17