目指せ不労所得!令和の文豪AIが簡単に実装可能!Python✕transformersの可能性に痺れる。【GPT-2】

2022-03-28

はじめに

私は気がついてしまいました。 ブログ記事というものを一年書きましたが、一人で大量の記事を書くことはできないと気がついてしました、 ブログでアフェリエイトや広告収入を得るためには良質なコンテンツが大量に必要となります。

次に、その大量のコンテンツをどのように手に入れるかを考えることになります。 時間をかけてコツコツ書き溜めていくか、外注してブログ記事を購入することです。 外注自体は多くの人がやっているので、かなり値段が買い叩かれているものの、数百単位で記事を買おうとすると結構値段が必要なのと その記事を書いてくれる人を探し出すのが大変そうです。

考えた結果、機会に流行りの言葉を探させてそのキーワードから文書の自動生成記事を量産して、手直して公開するという手法です。 このメインのブログにそんな真偽が不確かな情報を乗せるつもりはないですが、一本試しに動かして月に5000円でも稼げるようになったら良いなと期待しています。

そうと決まれば、良心の欠片もない楽しい実装を初めましょう。

今日の議題はそうです、文書自動生成です。

手法の検討

まずいちばん初めに思いつく手法としては、単語を並べて確率的に次に来る可能性の高い用語を並べていくというマルコフ連鎖という手法です。一昔前に流行りましたね。 前職の最終選考前日に実装してみるかとなりウキウキしながら作って、ほぼ徹夜の状態で面接受けたのを記憶しています。 当日何言うたかマジで覚えてないのですがなんか受かったので「この会社、ワイの何を見て通したんだ?」と思ったものです。

岸田教団の歌詞をすべて取り込み、形態素解析して、マルコフ連鎖でつなげて歌詞っぽいものを作るということで キャッキャしてたのですが、どうも最近のはGPT-2という手法が熱いようです。 とりあえず動かしてみることにしましょう。

実行環境の構築

とりあえず動かすのが目的なので、WSLに環境整えていきます。 sentencepieceを動かすために必要なライブラリを追加します。

sudo apt-get install cmake build-essential pkg-config libgoogle-perftools-dev

pipでライブラリを取ってきます。

pip3 install sentencepiece transformers

上記ライブラリを動かす際に必要となる、PyTorchをDLします。

pip3 install torch torchvision torchaudio

準備できました。

実行コード

from json.tool import main
from transformers import T5Tokenizer, AutoModelForCausalLM
import sys

def outputString(text,length):
    tk = T5Tokenizer.from_pretrained("rinna/japanese-gpt2-medium")
    md = AutoModelForCausalLM.from_pretrained("rinna/japanese-gpt2-medium")
    inp = tk.encode(text, return_tensors="pt")
    out = md.generate(inp, do_sample=True, max_length=length, num_return_sequences=3)

    return tk.batch_decode(out)

def main():
    args = sys.argv

    outtext = outputString(args[1],300)
    print(outtext)

if __name__ == "__main__":
    main()

実行結果

スタバ記事を書いた体で、その出だしをInputに記事を吐き出してみましょう。

python3 main.py 今日はスターバックスコーヒーの新作、コーヒー牛乳を飲んできたので感想を記事にしたいと思います

出てきたのがこんな感じです。

['今日はスターバックスコーヒーの新作、コーヒー牛乳を飲んできたので感想を記事にしたいと思います</s> さて、いよいよ発売が開始されたのですが、早速飲んできました。 実際に
使ってみたところ、非常によく冷えていてびっくりしました。 ミルクコーヒーはよく冷やされていて、そのあとの温度が冷たくてとてもおいしかったです。 アイスミルクコーヒーも温 かくてとってもおいしいのですが、アイスコーヒーが好きな人はミルクコーヒーをチョイスしてもいいと思います。 ちなみに、スタバのアイスコーヒーは期間限定で販売しているようです。

今日はスターバックスコーヒーの新作、コーヒー牛乳を飲んできたので感想を記事にしたいと思います</s> 今までスターバックスコーヒーでしか飲んだことがないという人は多いと思います! 私は、スターバックスとは名前通り、コーヒーの専門店で、カフェとコーヒーのチェーンという事になっていて、コーヒ ー豆の焙煎から販売までを行っているのです。 カフェというだけあって、コーヒー以外のメニューをオーダーするのもありですね。 スターバックスは、コーヒーだけでなく、ケーキや サンドイッチといったコーヒー以外でメニューをオーダーするものもたくさんあります。 今回は、スターバックスで買ったお勧めメニューメニューを紹介したいと思います! スターバックスコーヒーで購入したおすすめメニューメニューを紹介しました。 コーヒーをメインに扱っているスタバのサンドイッチは、値段が非常にリーズナブルなので、コーヒーがメインではなく、サンドイッチをメインにしたいという人には特におすすめです! スターバックス・コーヒーでは、期間限定のメニューだけでなく、定番メニューも沢山あるので、他の人と行くの にちょうど良いと思います! スターバックス・コーヒーで注文する時に頼まなきゃいけない、注文方法は「オーダーシート」か「電話注文」の2つだけです。 スターバックス・コーヒー の注文方法は、ドリンクバーや支払いの際に表示されるので、注文内容は事前に確認できるようになっています。 今までスターバックス・コーヒーのドリンクバーを注文したことがないという人や、ド', '今日はスターバックスコーヒーの新作、コーヒー牛乳を飲んできたので感想を記事にしたいと思います</s> スタバの新作商品や最近行ったお店など気になる情報を記事にしていきます 今日もスターバックスは新作商品やコーヒー牛乳を飲んできましたので、スタバの新作商品やコーヒー牛乳を食べた感想を載せていきたいと思います 味は、コーヒー 牛乳がベースになっているので、コーヒー牛乳よりもおいしく飲みましたが、味の方は甘すぎず苦すぎず飲みやすかったです スターバックスで豆乳を飲んでもおいしいですが、豆乳の味を豆乳が邪魔せずおいしい味がします 今回注文した商品は、エスプレッソ専用なのでいつもと同じになりますし、お店で注文したのですぐに届くだろうと思っていましたが、いつの間にか届いていたのでビックリしました スターバックスでは、2日〜3日で届くように注文ができないらしいですが、今のところ2日〜3日で届きました スターバックスでエスプレッソコーヒ ーを頼んでから20日くらいで届いたことに驚きました スターバックスでエスプレッソコーヒーを頼んだら2週間くらいかかってました でもスターバックスでは、2週間〜3日で届くのでそのくらいなら大丈夫かな(^_^;) このエスプレッソコーヒー牛乳の味は、エスプレッソ牛乳がベースになっている']

ところどこよくわからない部分もありますが、それっぽいですよ。

他の一文でも試してみましょう。

python3 main.py メロスは激怒した。

メロスが何にキレてるのか、文豪AIが導きてみましょう。

['メロスは激怒した。</s> それをキッカケに、メロスはスネ夫に暴力を振るうようになり、スネ夫に逆らったスネ夫は、再び逮捕されてしまう。 メロスはキッカケを利用してスネ夫を始末しようとした。 (※第1シーズン) スネ夫は刑務所から脱走。 スネ夫を脅してスネ夫を刑務所へ送り込んでしまった。 そんなスネ夫にスネ夫の元妻が嫉妬心を持って近づいてくる。 スネ夫を始末したのはスネ夫の復讐が目的だろうが、スネ夫はスネ夫を陥れようとする復讐で自ら犯罪者になってしまった。 それでもスネ夫はスネ夫の復讐のために刑務所から脱走した。 (第2シーズン) 元妻と離婚後もスネ夫は元妻との仲を決して修復することはなかった。 また、スネ夫も自分がかつてスネ夫を殺害した過去を隠していた。 スネ夫を「本当の敵」から守るために彼は刑務所の仮出所を言い渡された。 仮出所を待ってスネ夫の復讐にスネ夫も協力することになる。 (第3シーズン) そしてスネ夫の復讐も、元妻にもバレてしまった。 しかも、スネ夫は昔スネ夫を恨んだことを根に持っているという。 スネ夫と元妻が互いに離婚することになった。 スネ夫は元妻と自分が殺したことを後悔して、スネ夫を殺そうと企み始め
た。 (', 'メロスは激怒した。</s> メロスは、この怒りは復讐によってのみ解消されるべきだと思っていたのである。 すると、メロスは、女の死体と口だけの女との交換条件である、
女の骨の一部を、自分の父親に送りつけようと提案した。 悪魔の企みは、この女がメロスに渡すという約束、女の骨を自分の父親に送りつけさせるという約束を破り、女の骨をメロスに与えるというものであった。 メロスは、女の骨を受け取ったが、メロスはそれに気付いていないふりをして、女との交換条件である、女の骨をメロスと交換した。 しかし、メロスは、
メロスが、メロスを騙していることに気付いていなかったことに愕然として動揺したのであった。 メロスは女の骨との交換を条件に、男を連れ出した。 男は、メロスに、男をメロスに
差し出すと約束させられたのだ。 男は、メロスが、自分の娘のパンティをもらいに来た、とメロスの恋人だと確信した。 メロスの親友、スリムは、スリムとの結婚を目論む。 スリムが女の骨を盗み、男をメロスの男嫌いの罠に落としていたことから、メロスが、男に騙されていると、メロスは疑い、メロスは、スリムに、女の骨を渡す用意をするよう、スリムに言った
。 スリムは、男がメロスに女の骨を', 'メロスは激怒した。</s> メロスはついに自らその言葉の正しさを証明し、ついに有罪になってしまう。 メロスは、この無罪を証明したのが、自分の正体を隠すための変装であり、その変装がメロス本人を裏切っていたことから裁判に負けたと知って激怒したからだと話した。 メロスの弁護人は、メロスが犯人であるという証拠はまったく見つかっておらず、むしろメロスが警察とのやり取りを通じて、事件に関係していることが次々に明らかになっていく。 メロスは、警察に何度も呼び出されているものの、そのたびに、捜査は難航を強いられている。 検察官側は、メロスが起訴されて有罪判決が出れば、その裁判は無効(無罪)とされ、それどころか多額の罰金とそれ相応の刑が予想されることから、メロスが冤罪の可能性を示唆し、有罪をうっかり吹聴することさえできない。 なぜなら、冤罪の可能性を示す証拠が見つからなかったからだ。 検察側はメロスの無罪を立証しよう とするが、メロスが無罪である証拠はほとんど得られなかった。 さらに、メロスには、その証拠から導かれる冤罪が、彼の前科を隠蔽するための目的があったとして、検察の取り調べに対して、彼と同様の犯行を行ったとしてメロスの父であるマックスから抗議を受けている。 このままではメロスはもはや有罪になってしまうのではないかと危惧するメロスは、刑事司法部の捜査に全面協力することを決意する。 第一審、第二審、第一審、第二審でのメロスの起訴は無効であった。 そして、裁判所はメロス、マックス、そして']

キレたメロスが、スネ夫に暴力を振るうようになったり、 メロスは、この怒りは復讐によってのみ解消されるべきだと思っていたのである。 とか中々攻撃的な人柄なのが伺えます。

メロスが裁判で裁かれることになるという中々熱い展開も見え隠れします。

このままではメロスはもはや有罪になってしまうのではないかと危惧するメロスは、刑事司法部の捜査に全面協力することを決意する。

このへんとかストーリー性を感じますね。

まとめ

文書生成技術の進歩を感じると同時に、これうまくやれば文書自動生成して記事生成して、 その記事を校正して量産するというやり方への可能性を感じています。 かなりロマンを感じている。