6月になってからGIGAZINEの記事末尾部分に入っている「関連コンテンツ」がGoogle AdSenseを利用したものから、自前で開発した機械学習サーバーを使った仕組みに入れ替わりました。

◆自前の関連記事自動生成システム&機械学習サーバーを開発した理由

理由はシンプルで、以前に利用していたGoogle AdSenseによる関連記事自動生成「関連コンテンツ」の精度があまり高くなかったためです。精度が低い理由については、直接GoogleのAdSenseを担当するエンジニアにGoogleハングアウトで話をする機会を得た際に質問してある程度の原因を聞いており、結果的には「これは自前で作った方が後々のことを考えても十分、アリだろう」と判断できたから、ということになります。

また、Googleのサイトにも書いてあるように、関連記事を適切に表示することで「平均的なおすすめの関連コンテンツでページビュー数が 9%、滞在時間が 10% 向上します」ということが可能となるため、サイト全体で考えるとかなりの底上げが可能な施策だったというのもあります。

記事末尾にある以下の部分「関連コンテンツ」が、機械学習サーバーによって自動生成された関連記事一覧になります。



◆どのような仕組みなのか?

大まかな仕組みとしてはGensimのDoc2Vecの機能を利用して関連記事を生成しています。現在ならfastTextを利用した方がラクにできるかもしれません。

構成としては関連記事表示サーバーと機械学習サーバーの2台構成となっています。機械学習中はメモリを大量に消費し、CPU使用率も高くなるのでこのような構成になりました。



GIGAZINEは記事が毎日更新されるので毎日数回学習させています。学習時には記事を関連記事表示サーバーから機械学習サーバーに更新された記事分だけ転送しています。



関連記事の取得は下図のようになっています。

1:関連記事表示サーバーが機械学習サーバーにAPI経由で記事IDを投げる。

2:記事IDを元に学習データへ参照をかける。

3:機械学習サーバーから関連記事一覧結果が関連記事表示サーバーに返ってくる。

4:関連記事がGIGAZINEに表示される。



最新の関連記事のデータは学習データ内にありません。どのようにして最新の関連記事を出しているのかというと、学習データを使って予測しています。具体的な方法は下図のようになります。

1:最新記事を学習サーバーに投げる。

2:最新記事を簡易学習データに変換する。

3:機械学習サーバーにある学習データと簡易学習データを比べ、簡易学習データに似ている記事一覧を学習データからピックアップする。

4:機械学習サーバーから関連記事一覧結果が関連記事表示サーバーに返ってくる。

5:関連記事がGIGAZINEに表示される。



こうやってGIGAZINEの関連記事は日々自動生成され続けているわけです。

◆どのようなサーバーで動いているのか?

学習サーバーは1台だけではなく予備も用意してあります。予備を用意することでメインの学習サーバーに不具合が発生しても切り替えられる仕組みです。



主な構成は以下の通りです。

・CPU1:Xeon E5-2630 v4 BOX

・CPU2:Xeon E5-2630 v4 BOX

・CPUクーラー1:ETS-N30R-HE

・CPUクーラー2:ETS-N30R-HE

・メモリ:CT2K8G4RFD8213

・マザーボード:Z10PE-D8 WS with IPMI

・電源:EVGA SuperNOVA 1000 G2 80+ GOLD

・簡易電源冗長キット:Phanteks Power Combo

・SSD1:850 EVO MZ-75E1T0B/IT

・SSD2:850 EVO MZ-75E1T0B/IT

・ケース:Enthoo Primo

メインの学習サーバーは計算リソース確保のためIntelのXeonを2つ積んだ自作PCとなっています。サーバーの保守料金やパーツ代金を考えるとこの方が管理しやすく、費用も抑えられるので、このような機械学習サーバーになりました。少し前までは電源の冗長性を確保することが困難でしたが、今では「Power Combo」という簡易冗長電源キットがあり、簡単に実装できます。

Phanteks Innovative Computer Hardware Design



サーバーの電源監視には通常IPMIを使いますが簡易冗長電源キットだと電源監視をすることができません。なので、電源1つにつきUPS1つを付けてUPSの電源負荷を監視することにしました。

予備の学習サーバーは保守切れを起こしたDELLの「PowerEdge T310」を流用することにしました。このサーバーはIPMIで自身の電源状態を管理できるのでUPSの監視が必要ありません。

現在の機械学習サーバーはサーバー室で毎日稼働しています。手前にあるのがメイン、奥にあるのが機械学習サーバーの予備機です。



機械学習サーバーの後ろ側を見ると、電源が冗長化されているのがわかります。



というわけで、こういう風にして機械学習やサーバーの記事を作りたい!という編集部員をGIGAZINEでは募集中です。「え?サーバー管理者とかシステム開発者ではなく?」ということで「???」となるはずなのですが、募集するのは「編集部員」になります。

というのも、機械学習系の記事を作成するにあたり、やはり専門知識のあるなしというのは今後、もっと問われることになるだろう、と予測しているためです。そこで、こういう記事タイトルを見て、思わずここまで読んでしまっているあなたのような人材に、是非とも編集部へ来て欲しいな、というのが実はこの記事の趣旨です。この機械学習サーバーを作った中の人もあなたが来るのを待っています!

編集部の求人の詳細については、以下の記事を参照してくれればOKです。

「あなたの能力をフル活用できない会社を見限ってうちへおいでよ」GIGAZINEが編集部員を募集開始したのでQ&Aまとめ - GIGAZINE



大体雰囲気がつかめると思いますので、「これなら大丈夫そう」と感じたのであれば、鉄は熱いうちに打て、即座に応募してくれるととってもうれしく感じます。この記事を読んだという目印として、履歴書に「機械学習でGIGAZINEの関連記事を自動生成するサーバー記事を読みました」という旨のことを書いておいてくれれば大丈夫です。よろしくお願いします。