AIプログラミング

形態素解析とマルコフ連鎖を利用して文章の自動生成を行う

投稿日:

moritz320 / Pixabay

形態素解析とマルコフ連鎖を利用した文章の自動生成

今回は形態素解析とマルコフ連鎖を利用して文章の自動生成を行います。

例として『嫌われる勇気』で有名な「アルフレッド・アドラー」の名言集を使用し自動生成しました。

自動生成例

「失敗ばかり」でいいのだ。「信用」するのではなく、与えられた能力をもって生まれたかである。 人生にはなれないだろうか。もっとも重要な人物である。「信用」するのは誰か、冷静に考えてみることだ。 「ありがとう、助かったよ」とは裏付けも担保もなくいま現在だけを見なさい。 貢献感は「仕事の課題」とほめるのではなく「優しい」のだ。 この判断基準で大きく間違うことは人が何を持っているのだ。 受け取るよりも仲間たち、仲間たちより社会全体。 過去の原因は「どこから」ではない。

よく見ると意味が分からない気もしなくもないですが、それなりにいいことを言っているようにも見ます。マルコフ連鎖を利用した文章生成は文脈を意識せずに単語を組み替えるので、このように完全には自然な文章にはなりませんが、Twitterや短文のような数行程度の短い文章であればそこそこ日本語らしくみえるという特徴があります。

これは、日本語を文法や単語の品詞情報に分解する形態素解析のおかげです。

形態素解析とは

形態素解析とは、対象となる言語の文法や単語の品詞情報をもとに,文章を単語が意味を持つ最小の単位に分解する解析法です。
言葉だけでは通じにくいので、形態素解析の定番である「すもももももももものうち」を例にして見てみます。

このように、ある名詞や助詞など、文章を意味のある最小単位の要素に分解することが形態素解析です。

形態素解析はPythonで行うことができ、形態素解析エンジンとして日本人により作られたJanome、MeCabなどがあります。これらのJanomeMeCabを使用することにより、特別な技術を必要とせずに形態素解析を行うことが出来ます。

では、実際にコードを作成していきます。
環境はAmazon AWS(EC2)、形態素解析エンジンとしてMeCabを使用していきます。

使用する環境

  • Amazon AWS(EC2)
  • Amazon Linux AMI 2018.03.0 (HVM), SSD Volume Type
  • Python 2.x
  • MeCab
  • TextGenerato

Amazon AWS(EC2)での無料利用枠で使用できるt2.microを使用して環境を構築します。TextGeneratorはpython2.x系のコードですが、Amazon AWS(EC2)でのデフォルトではpython2.x系がインストールされているためそのまま使用することが出来ます。

Amazon Linuxでの環境構築

Amazon AWS(EC2)でのインスタンス生成

手順は省略します。

Amazon AWS(EC2)での無料利用枠で使用できるt2.microを使用して環境を生成します。生成が完了したらログインします。

最新環境へのupdate

yumのupdateコマンドにてAmazon Linux環境の最新化を行います。Complete!と表示されたら成功です。
pythonのバージョンを調べます。

現時点でインストールされているpythonのバージョンは2.x系のPython 2.7.14が最新でした。pythonのバージョンは3.x系もありますが、今回使用するTextGeneratorはPython2系のコードになっているためそのまま使用します。

Mecabのインストール

mecabをコンパイルするためにgccをインストールします。Complete!と表示されたら成功です。
MeCab本体をインストールしています。
辞書ファイル(IPA辞書を選択)をインストールしています。

このMecab本体と辞書ファイルをインストールすることでいよいよmecabを実行することが出来ます。インストールが正しくできていることを確認するために、形態素解析の定番である「すもももももももものうち」を行ってみましょう。

このように、「すもももももももものうち」という言葉が固定の意味を持つ単語に分解されたら成功です。

この画面はCTL+Cで抜けることが可能です。これでmecabを使用することが出来ました。しかし、今のままではPythonからは読み出すことが出来ません。次にPythonのコードからmecabを起動できるようにmecab-pythonを使用してバインディングを行います。

mecab-pythonのインストール(失敗編)

なぜかここで手間取ったのでメモとして残しておきます。

そのまま、pip install mecab-pythonを行うと、バージョンが古いのでインストールに失敗しましたというメッセージが出力されます。さらに不思議なことにpip install --upgrade pipを行った場合でもバージョンが古いのでインストールに失敗しましたというメッセージが繰り返されます。

そこでpipバージョンの再インストールを行います。

mecab-pythonのインストール(成功編)

pip自体のバージョン更新

pip自体のバージョンを更新するため、一旦pipを削除して再インストールすることにします。
pip -Vにて最新のバージョン(現在は18.1)の表記が出力されればバージョン更新は成功です。
続いてmecab-pythonのインストールを行っていきます。一旦ルートで入りなおします。

mecab-pythonのインストール

pip install mecab-pythonでインストールします。

Complete!と表示されたら成功です。

形態素解析とマルコフ連鎖を利用して文章の自動生成を行う

いよいよ文章の自動生成を行っていきます。こちらのサイトを参考にして頂きました。

TextGeneratorをgitからclone

TextGeneratorというプログラムを使用することで文章の自動生成を行うことができます。

その後、自動生成をするための元ネタとなる文章をsample.txtというファイル名に保存して以下コマンドを実行して下さい。

これで元となる文章の解析が終わり、データベースファイルが作成されます。最後に以下コマンドを実行するたびに文章が自動で生成されます。最後の10というのは10行を示しています。ここを変更することで文章量を変更することができます。

「失敗ばかり」でいいのだ。「信用」するのではなく、与えられた能力をもって生まれたかである。 人生にはなれないだろうか。もっとも重要な人物である。「信用」するのは誰か、冷静に考えてみることだ。 「ありがとう、助かったよ」とは裏付けも担保もなくいま現在だけを見なさい。 貢献感は「仕事の課題」とほめるのではなく「優しい」のだ。 この判断基準で大きく間違うことは人が何を持っているのだ。 受け取るよりも仲間たち、仲間たちより社会全体。 過去の原因は「どこから」ではない。

 

 

-AIプログラミング
-, ,

Copyright© AI人工知能テクノロジー , 2019 All Rights Reserved.