3ファイル追加してGitHub ActionsでHugoにレコメンド記事を表示する

prelimsを使ってコンテンツベースのレコメンドをしてみよう

https://chezo.uno/post/2021-04-24-ml-at-work-2nd-edition/ へのレコメンドの例

こんにちは、早いものでもう40の大台が迫ってくる誕生日を迎えました。前日にブースターショットを打ったので、一日中ほとんど寝込んでいました。必要な人のために、例のリストを置いておきます。

さて、Hugoにはキーワードベースの関連記事の表示をする機能があります。

しかし、キーワードベースの関連記事も悪くはないのですが、折角なので自分で関連記事のレコメンドをしてみたくないですか? そう思っていたら、 takuti さんの Prelims というオープンソースを見つけました。

Prelimsは、Hugo(やJekyll)のFront matterと呼ばれるメタデータの部分にキーワードやレコメンド記事を足してくれるものになります。

レコメンドの方式自体は、今実装されているのは古典的なTF-IDFを用いたコンテンツベースの類似文書を出してくる方式ですが、Front matterを後から処理してレコメンド記事を追加するというシンプルだけどスマートな方法に感銘を受けました。

ただし、Prelimsはflexibilityを重視しているため、例えば日本語のtokenizerやstop wordsなどは自分で設定をする必要があります。

このあたり、ちょっと慣れていないと難しいかなとも思ったので、prelims-cliというCLIツールを作り、config用のYAMLファイルを用意すればGitHub Actionsでrecommendできるようにしました。

用意するものは以下の3つです。

  1. prelims-cli用の scripts/config/myconfig.yaml
  2. 関連ページを表示する layouts/partials/page_related.html
  3. prelims-cliを実行する GitHub Actions

実際の例をgistに貼りました。

myconfig.yaml については、 content/blog が英語の content/post が日本語の記事をおいている想定です。 この3つのファイルを追加すればHugoであれば関連記事が、冒頭の画像のように出てくるはずです。

内部的には日本語のtokenizerはSuachiPyのfull辞書を使い、最も長いCモードで形態素単位を設定しています。 ただし、prelimsが生成する keywords は少しノイジーだなと思ったので、自分のサイトでは recommendations のみを利用しています。

僕はものぐさなので、タグやカテゴリを豆にメンテナンスできないのですが、レコメンドのおかげで過去の関連記事のリンクも出せるので便利だと感じています。 また、自分の記事は自分の持ち物なので、それに対してレコメンドしてML的なsandboxとして遊ぶのは楽しいなと感じています。

この環境を使うことで、Netlify CMSでの執筆等Python環境を用意することができないところでも執筆して、レコメンド記事を作成することができます。 もしよければ、 prelims を使ったレコメンドを試してみてください。

Aki Ariga
Aki Ariga
Staff Software Engineer

Interested in Machine Learning, ML Ops, and Data driven business. If you like my blog post, I’m glad if you can buy me a tea 😉

  Gift a cup of Tea

Related