日本語テキスト生成の精度が低い・コストが高い問題をT5で効率的に解決する方法

日本語テキスト生成で直面する課題

日本語の文章要約、タイトル生成、文書分類などのタスクに取り組む際、以下のような問題に直面していませんか?

1. 精度の問題

  • 従来のルールベース手法では自然な日本語文章が生成できない
  • 英語向けモデルでは日本語の文法や表現に対応できない
  • 複数のタスクで個別にモデルを構築する必要がある

2. 開発コストの問題

  • 各タスク専用のモデル開発に時間とリソースがかかる
  • 文書分類、要約、タイトル生成それぞれで異なるアプローチが必要
  • 学習データの準備とモデル構築の工数が膨大

3. 運用の複雑さ

  • 複数のモデルを管理・運用する必要がある
  • タスクごとに異なるAPIやインターフェース
  • モデルの更新やメンテナンスが煩雑

実際に遭遇したテキスト生成の課題事例

失敗事例:タスク別個別開発の限界

# 従来のアプローチ
classification_model = load_bert_classifier()      # 文書分類用
summarization_model = load_summarization_model()   # 要約用
title_generation_model = load_title_model()        # タイトル生成用

# 問題:
# - 3つのモデルを個別管理
# - メモリ使用量が3倍
# - 開発・保守コストが高い

この問題を解決するのが**日本語T5(Text-To-Text Transfer Transformer)**です。

[Read More]

日本語文書の意味的類似度計算が遅い・精度が低い問題をSentence BERTで解決する方法

文書類似度計算で直面する課題

日本語の文書検索や推薦システムを構築する際、以下のような問題に直面していませんか?

1. 精度の問題

  • 単語レベルの一致だけでは文書の意味的類似度を正確に測れない
  • 同じ意味でも表現が異なる文書を関連文書として発見できない
  • 従来のTF-IDFやBM25では意味的な類似度が取得できない

2. 計算速度の問題

  • BERTモデルで毎回文書をエンコードすると時間がかかりすぎる
  • 大量の文書との類似度計算がリアルタイムで実行できない
  • 文書検索のレスポンス時間が数秒〜数十秒かかる

3. 日本語対応の問題

  • 英語向けのモデルでは日本語の意味的類似度が正確に取得できない
  • 日本語特有の表現や文法構造に対応していない
  • カスタムモデルの構築が困難

実際に遭遇した文書類似度の課題事例

失敗事例:従来手法での限界

# TF-IDFによる類似度計算の例
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.metrics.pairwise import cosine_similarity

# 以下のような文書では類似度が正しく計算されない
doc1 = "機械学習の精度を向上させる方法"
doc2 = "AIモデルの性能を改善する手法"
# 結果: 低い類似度(単語が異なるため)

# BERTの直接利用も計算コストが高い
# 毎回エンコードが必要で、大量データに不向き

この問題を解決するのがSentence BERTです。

[Read More]

文書分類の精度・速度・導入コストの三重苦をFasttextで一気に解決する戦略

文書分類で直面する三重苦

文書分類プロジェクトに取り組む際、以下のような問題に直面していませんか?

1. 精度の問題

  • 既存の手法では十分な精度が出ない
  • 複雑なディープラーニングモデルでも期待した結果が得られない
  • データセットによって性能が大きく左右される

2. 速度の問題

  • 学習時間が長すぎてイテレーションが回せない
  • GPUリソースが必要で開発コストが高い
  • 本格的なモデル訓練に数時間〜数日かかる

3. 導入コストの問題

  • 複雑なモデルの構築・運用が困難
  • 環境構築が複雑で他のメンバーに共有できない
  • プロトタイプ作成に時間がかかりすぎる

実際に遭遇した文書分類の課題事例

失敗事例:複雑なモデルでの挫折

# NeuralClassifierを使った事例
# 複雑な設定ファイルが必要
# GPU環境の準備が必要  
# 結果:精度が期待値以下、学習時間が長い

このような状況で、Facebook Research が公開するFasttextライブラリが解決策として注目されています。

[Read More]

機械学習実験が管理できず再現性がない問題をMLflowで体系的に解決する方法

機械学習実験で直面する再現性の課題

機械学習の実験を繰り返していると、以下のような問題に直面することがありませんか?

  • 良い結果が出たモデルのパラメータを忘れてしまう
  • 過去の実験結果を比較できず、改善が進まない
  • チームメンバーと実験結果を共有できない
  • 同じ実験を再実行しても結果が再現できない

これらの問題は、機械学習の実践が「ある種の黒魔術」となってしまう原因でもあります。

[Read More]

日本語要約の手法・サービスのまとめ

  • 日本語文章の自動要約について調べたのでまとめておく
  • 原文から一部を選択的に抜粋する抽出型と機械翻訳のように対応する要約文を生成する生成型がある
  • またウェブで公開されている要約サービスもある

生成型要約

モデル

  • DNN 言語モデル
    • BERTの文脈から派生した要約手法が多い
    • BART
    • T5
      • 学習をすべて自然言語で設定して行うことで複数のタスクへと柔軟に対応する、というコンセプトのモデル
      • T5がhugging face で公開されたモデルをファインチューニングして使うことが割と手軽にできた
      • 要約だけでなく単語の分散表現を得ることにも使える
  • 整数計画問題
    • ソルバーで厳密に解くことができる
      • 無償のソルバーはpythonだとpulp, Python-MIPが選択肢になる
      • 式を記述する際の挙動の軽さから私はPython-MIPを勧める
    • 制約条件として文の数、文字数を指定できる
    • 計算時間が短いというわけではない
      • 定式化の問題か?
    • 各モデル
      • 文全体が一つのトピックを扱っていると仮定して、その代表的な文を拾ってくるイメージ
      • McDonaldモデル
      • 最大被覆モデル
      • 施設配置モデル
        • 劣モジュラ最適化問題に帰着できる
        • 文の類似度を計算する必要がある
        • 原論文では単語の重複をスコアとしている
          • ROUGEみたいな
          • 2022年現在では文の分散表現を求めることもできるのでそこはケースバイケースで特徴量を選択する
  • LexRank
    • 文間の類似度からグラフ関係を計算して、重要な文をランキングする
    • 文字数の指定はできない
    • Sentence Transformersのサイトに実装例がある
      • 日本語に適用するには多少の修正が必要になる
    • 別に文の間の類似度が出せるならSBERTでなくてもいい
      • ROUGE, USEなど

サービス

  • イライザダイジェスト
    • 3文に要約
    • 割と内容を理解した出力をする印象
    • 生成型特有のゆらぎが見られる
      • 不自然な箇所に句読点など
  • タンテキ
    • 3文に要約
    • 抜粋型か?

参考文献

技術書典11に参加するに当たって技術書を作成したメモ 経緯、あと感想

前回

技術書典7に参加するに当たって技術書とプログラムを作成したメモ 経緯と売り上げ、あと感想

経緯

学位を取るための論文執筆が死ぬほど辛かった私は執筆の経験が浅いから苦しんだのだと仮説を置いた。

この仮説を検証するために論文よりレベルを落として薄い本を書くことを思い立った。

[Read More]

日本語で学習済みのT5がhugging face で公開されたので使い方メモ

T5(Text-To-Text Transfer Transformer) とは

  • 事前学習における入出力を文に統一してしまうことで、 複数の形式の問題に対しても適応できる様式となった。
  • モデルの基本構造としては Transformer が使われており、その点はBERTと共通している。
  • 事前学習の形式をすべてテキストによる指定にするというアイデアはGPT-3などでも用いられている。
    • 0 shot learning など入力文で模範解答例を入力するだけで、出力を操作するということも行われている
    • “操作の指定:入力文1、出力に期待する文、操作の指定:入力文2"で、“出力文2"が得られるという次第

できること

  • 下流のタスクとして転移学習を行うことで以下のようなことが実行できる。
    • 文書分類
    • タイトル生成
    • 文章生成
    • 生成要約

生成要約の例

  • 一つの原文から2種類の要約文を生成するファインチューニングが思いの外うまく働いた。

データとしては

[Read More]

Circle Ci を利用してre:viewをビルドしてpdfを得る手順

Circle Ci を利用してre:viewをビルドしてpdfを得る手順

  1. Re:VIEW Template をローカルに用意する
  2. 自分のgithubレポジトリに移す
  3. article フォルダ以下の該当するファイルを編集する
  4. Circle Ciへgithubアカウントでログインして連携する
  5. 自分のgithub レポジトリへpushするとgithub actions が実行される
  6. Actions -> buildの指定 -> Artifacts から出力されたpdfをダウンロードできる

参考リンク

word2vecでteratailの検索システムっぽいものを作る

概要

分散表現を用いた検索システムを作る。

  1. teratailから質問をスクレイピングする。
  2. スクレイピングした文章をもとにword2vecを学習する。
  3. word2vecによって得られた分散表現をもとにcosine similarityを計算して、クエリと質問文の類似度を得る。
  4. 類似度をもとにソートする。

ソース

teratail_w2v_question.ipynb

[Read More]

アテンションを用いた画像処理モデルの作成

アテンションを用いた画像処理モデルの作成のまとめ

画像認識にアテンションという機構を付与して、判断の根拠を可視化しました。

前振り

画像認識についてはもう深層学習が人間を超えてから(2015)しばらく経っています。

[Read More]