マルコフ連鎖用テーブルの構造

マルコフ連鎖用テーブルの構造

マルコフ連鎖用テーブルの構造について

以前記載した内容は実装データを何も公開しませんでした。

「こんなことできるよ」と言う情報と実際にマルコフ連鎖で作った文章を載せただけにもかかわらず見て頂けることが多かったため、今回は私が悩んで作成したテーブル構造を記載しようと思います。

マルコフ連鎖用テーブル

様々な条件を試した結果、それなりに商品に合致した文章を作る為には下記条件がベストであると考えています。

  1. elementは4つにする
  2. 文章のスタートとエンドを認識するカラムを用意する
  3. 商品カテゴリと紐づけるカラムを用意する

具体的にはこんな感じです。

まだLaravelで作り変えてないのでカラム名が適当ですね。だから今苦労してるのですが、以下解説します。

MarcovID 連番IDで主キー
sted 文章の始まりを【1】、終わりを【2】、途中を【0】として記録したマーカー
M1~4 読み込んだ文章を形態素分析した結果。4要素ごと、1要素ずつずらして登録
B_cat 商品カテゴリ、フライパンの説明に掃除道具の文章が出ない様にする為の抽出条件に利用

したい事はSEOワードの自動記載

そうです。何も文章を作りたい訳じゃない。WEBショップ最大の問題である『SEO対策でMarkovを使う』ために作成/検証しているわけです。その為、絶対にあってはならない事があります。

  1. 場違いな検索ワードの取込み
  2. 必要なワードが盛り込まれない文章

フライパンに『お手入れ楽々』はあってもいいですが『床がきれいになります』はNGです。

この解決手段として、商品分類カテゴリをDBに持ちそのカテゴリとマルコフの関連づけが活躍します。
商品分類カテゴリをDB上に持つと、カテゴリ毎に必要なキーワードを格納する事も出来、マルコフからそのワードを持つレコードを抽出して文章化していくことが可能です。

なぜ要素を4つとる事にしたか

原因は形態素分析とSEOワードとしての合成語に起因します。

上のテーブル画像で言えば次の文字たちです。

利便性、耐久性、表面加工

共にネットショップのSEOワードとしては力の弱いワードですが、2つ合わせて1つのワードであると認識は理解できると思います。

でも、形態素分析をするとこれらのワードは分解されてしまいます。
形態素分析ツールに辞書登録すれば修正できますが、言語学者ではないので1つ1つ確認して潰していくなんて時間を取りたいとは思いません。だって、複数のジャンルで考えればかなり膨大な修正になりますよ。ただでさえやることの多い店舗運営に支障が出ます。

そこで実験した結果、4カラムでの構成が『作成文章の多様性』『合成語の生成率』を考えベストとの解になりました。

多様な文章を生み出す為には少ないカラム構成が良く、カラム数を増やすほど決まった文章が生成される率が高くなります。

スタートとエンドのマークの必要性

可能な限りキーワードを網羅しようとした場合、ある程度の文章の長さが必要になります。『。』や『改行』で終わるように設計した場合、思った以上に短い文章で終了してしまうことがあります。これはあまり嬉しくありません。

この時、スタートをマークのあるカラムを抽出してランダムに選びリスタートするように設計しておくと「に行われるフライパン」の様な書き出しを防いでくれます。

また『N回繰り返し』を実行した時、文章の途中で終わる事があります。『N回繰返しが終わった場合、次のエンドマークで終了』と指示をしておけば最後を『。』で終了する事が出来ます。

まとめ

前回の記事でも書きましたが、マルコフ連鎖は自然な文章を生成してくれません。

マルコフでより自然な文章を目指すなら、1レコード内に取り込むレコード数を増やす必要があります。

ただこの場合、様々な文章を作成してくれず、文章のコピーと言った印象を与える可能性があります。

  • 商品カテゴリ(ジャンル)とマルコフレコードの関連づけ
  • 商品カテゴリ(ジャンル)とWordリストの関連付け

これだけでかなり意図したワードを入れた文章を作成してくれます。文章としては変ですが。