AIで文章を自動作成(transformers(python))

AIで文章を自動作成するプログラムについて説明します。

はじめに

この記事で想定している読者の方

AIやPythonプログラミング初心者の方向けの記事になります。自然言語処理のAIについて知りたい方、Pythonについて勉強したい方が想定読者になります。

使っているIT技術

自然言語処理(AI)

文章をAI技術で分析して、類似の文章を分析したり、作成・予測したりするのが自然言語処理の分野になります。

まず、ディープラーニングにより学習データ(コーパス)を分析してモデルを作ります。そして、そのモデルを使って、分析・文章作成・予測などを行ないます。

モデルを自力で作るのは、十分な学習データと高性能のマシンが必要でとても大変なので、初心者のうちは、AI分野の研究者の方々が作ったモデルを利用させてもらうところから始めるのがよいと思います。

transformers(python)

サンプルプログラムはHuggingFace社(米国のスタートアップ企業)の製品transformersを使用します。オープンソースですので、基本機能については無料で利用できます。Transformers自体はフレームワークのようなものなので、単体で使うのではなく、様々な自然言語処理のモデルと組み合わせて利用します。

基本的な使用方法は、HuggingFace社サイトの使い方の説明を参照下さい。

サンプルプログラム

HuggingFace社サイトの文章作成のページのプログラムを元に作成しています。11行目の「 秋と言えば 」に続く文章を自動作成します。

from transformers import T5Tokenizer, AutoModelForCausalLM

tokenizer = T5Tokenizer.from_pretrained("rinna/japanese-gpt2-medium")
tokenizer.do_lower_case = True  # due to some bug of tokenizer config loading

model = AutoModelForCausalLM.from_pretrained("rinna/japanese-gpt2-medium")


prompt = "秋と言えば"


# PyTorch
inputs = tokenizer.encode(prompt, add_special_tokens=False, return_tensors="pt")

outputs = model.generate(
    inputs, 
    max_length=50, 
    do_sample=True, 
    top_p=0.95, 
    top_k=60, 
    no_repeat_ngram_size=2,
    num_beams=5, 
    early_stopping=True,
    num_return_sequences=5
)

print("Output:\n" + 100 * '-')

for i, beam_output in enumerate(outputs):
    print("{}: {}".format(i, tokenizer.decode(beam_output, skip_special_tokens=True)))

1~8行目と 15~16 行目は、使うモデルによって記述方法が変わります。

例えば、Tensorflowベースのモデルを使う場合は、

# 1~8行目の部分
from transformers import TFAutoModelWithLMHead,AutoTokenizer

model = TFAutoModelWithLMHead.from_pretrained("(モデルのパス)")
tokenizer = AutoTokenizer.from_pretrained("(モデルのパス)")

# 15~16行目の部分
inputs = tokenizer.encode(prompt, add_special_tokens=False, return_tensors="tf")

として、PyTorchベースのモデルを使う場合は、

# 1~8行目の部分
from transformers import AutoModelWithLMHead,AutoTokenizer

model = AutoModelWithLMHead.from_pretrained("(モデルのパス)")
tokenizer = AutoTokenizer.from_pretrained("(モデルのパス)")

# 15~16行目の部分
inputs = tokenizer.encode(prompt, add_special_tokens=False, return_tensors="pt")

とします。

それぞれのモデルが何をサポートしているかは、HuggingFace社サイトのmodelのページで調べます。

今回は、日本語の文章生成ですので、Tasksは「Text Generation」を選択し、更に検索条件を“japanese”として絞り込みました。ダウンロード数の多かった「日本マイクロソフトが開発した会話ボット りんな」のモデルを使わせて頂きました。

サンプルプログラムの実行結果

5つの候補文を出力しますが、実行の度に結果が変わります。一例はこちら。11行目のpromptに渡す引数や、model.generateに渡すパラメータを変えても、実行結果は変わります。

0: 秋と言えば、食欲の秋ですよね。そこで今回は、秋の食材をふんだんに使った料理をご紹介します。 秋の味覚といえば、栗や栗きんとんを思い浮かべる人も多いのではない
1: 秋と言えば食欲の秋ですよね。秋は美味しいものがたくさんあるので、ついつい食べ過ぎてしまいがちです。 今回は、そんな秋に食べたい、美味しくてヘルシーなスイーツをご
2: 秋と言えば、やっぱり「食欲の秋」ですよね。秋といえば、美味しい食べ物がたくさんあるので、ついつい食べ過ぎてしまいがち です。 そこで今回は、秋に食べたいおすすめの食べ物を
3: 秋と言えば、やっぱり食欲の秋ですよね。美味しいものがたくさんあるので、ついつい食べ過ぎてしまいます。 さて、今回はそんな秋にピッタリの、美味しくてヘルシーな
4: 秋と言えば、スポーツの秋、読書の秋に、食欲の秋の季節ですね。 さて、今回は、そんな秋の味覚をふんだんに使った料理をご紹介いたします! 今回ご紹介するの

実行環境

HuggingFace社のサイトの例と同様、Google Colabを利用してもよいですが、ご自分のPCでも動かすことはできます。AIは、ディープラーニングを用いたモデル作成は多大なPCリソースを必要としますが、作成したモデルの利用はそれほど大きなリソースを必要としないケースがほとんどです。

Google Colabを初めて利用する場合は、Googleのユーザーアカウントを作成後、GoogleドライブからGoogle Colabを選択します。一定以下のリソースであれば無料で利用できます。

 ご自分のPCで動かす場合は、プログラム実行時、ダウンロードされたモデルデータはキャッシュとしてPCに置かれます。(私のPCの場合、「C:\Users\(ユーザー名)\.cache\huggingface\transformers」でした。)

まとめ

Transformersに「rinna/japanese-gpt2-medium」のモデルを適用して、文章の自動作成のプログラムを作成しました。他にも、文章の分類、質問に対する回答の作成など様々なことができます。詳しくは、transformersのサイトをご確認下さい。

タイトルとURLをコピーしました