見出し画像

Huggingface Transformers 入門 (7) - 言語モデルをサンプルスクリプトで学習

Huggingface Transformers」の付属のサンプルスクリプトで「言語モデル」を学習して、「テキスト生成」を行います。

前回

1. Transformersのインストール

「Transformers」のインストール方法は、次のとおりです。

# Transformersのインストール
!git clone https://github.com/huggingface/transformers.git
!cd transformers/; pip install -e .

2. データセットの準備

今回は、Wikipediaの小説家の記事を使います。

import codecs
import re
import requests
from bs4 import BeautifulSoup

# URLとキーワードリスト
url = "https://ja.wikipedia.org/wiki/"
keyword_list = [
    "中島敦", "太宰治", "国木田独歩",
    "江戸川乱歩", "谷崎潤一郎", "宮沢賢治",
    "与謝野晶子", "芥川龍之介", "樋口一葉",
    "中原中也", "尾崎紅葉", "梶井基次郎",
    "夢野久作", "森鷗外", "織田作之助"   
]

# Wikipediaの小説家の記事のダウンロード
corpus = []
for keyword in keyword_list:
    response = requests.get(url + keyword)
  
    soup = BeautifulSoup(response.text, 'lxml')
    for p_tag in soup.find_all('p'):
        # 空白の削除
        text = "".join(p_tag.text.strip().split(" "))

        # 空行は無処理
        if len(text) == 0:
            continue

        # 注釈の削除 (例: [注釈1], [注釈1], [1])
        text = re.sub(r"\[注釈[0-9]+\]", "", text)
        text = re.sub(r"\[注[0-9]+\]", "", text)
        text = re.sub(r"\[[0-9]+\]", "", text)

        # 行の追加
        corpus.append(text)

# ファイルの保存       
print(*corpus, sep="\n", file=codecs.open("wiki.txt", "w", "utf-8"))

訓練データとテストデータに分割します。

# データセットの分割
!head -n100 wiki.txt > eval.txt
!tail -n+101 wiki.txt > train.txt
!wc -ml *.txt
   100  18623 eval.txt
   769 127358 train.txt
   869 145981 wiki.txt
  1738 291962 total

訓練データ(train.txt)は769行、テストデータ(eval.txt)は100行になります。

3. 言語モデルの学習

「言語モデル」の学習には、run_language_modeling.py を使います。

# 学習
!python transformers/examples/language-modeling/run_language_modeling.py \
    --output_dir=output \
    --model_type=gpt2 \
    --model_name_or_path=gpt2 \
    --do_train \
    --train_data_file=train.txt \
    --do_eval \
    --eval_data_file=eval.txt \
    --per_device_train_batch_size=2 \
    --per_device_eval_batch_size=2 \
    --num_train_epochs=10 \
    --save_steps=5000 \
    --save_total_limit=3

outputフォルダにモデルが出力されます。

4. テキスト生成

試しにテキスト生成を行います。

!python transformers/examples/text-generation/run_generation.py \
    --model_type=gpt2 \
    --model_name_or_path=output \
    --prompt "山田太郎。日本の小説家。 " \
    --seed=${RANDOM} \
    --length 1000
山田太郎。日本の小説家。 三高校会町洋紀(現・三高校会町洋紀)、帰郷籍本町東京専門学校会町洋町洋戒、浪海町東京専門屋動(現・浪海町東京試専門学校会町洋町洋)を出版「基次郎」のち町試寄、掲載まで基次郎の筆町。左京都大学在町の訳現(現・左京都大学在町の創作断)、懁運学(現・懁運学。その頃、基次郎と歩批されている。1887年(明治40年)1月、1903年(明治44年)、文芸店店在体繁にも静き、近所誌『野菊多教物誌』(卒業文経葬結核)を教究し、大阪家二発行籍者・基次郎の繁養演の姦の原崎を教究。
次文専門(現・次文専門左山田太郎秀家富)の半死に寄くなり、基次郎「中谷孝雄」の前作が刊行する。
1907年(明治50年)に同誌『中谷孝雄』(大阪家二発行籍者・基次郎が中谷と失み出版と名めに書いて、文江の全了と取り刊行する時に発表した。基次郎は山田太郎は、演演指学校会町洋紀の書いて発表し、いた公募・動で資金を引き、生前に卒業となる。
乱年の滞在入学の進向肉を国塾され、完晶冬の小説家と作家とされるが、他の資金を以前者・作家の場告が友人先った「持学校会町洋紀の書いて発表した。書いて発表から寄くなり主に見ている。可能を『戻果』に意みない持学校会町洋紀の試丸は、発表から熱した時代わった文学の前作となる。中谷と失み出版が持学校会町に寄くなり、またこれ

次回



この記事が気に入ったらサポートをしてみませんか?