エンジニアMのAI学習記録(2018年5月分)

2018年05月11日
こちらは、Webに関連するエンジニア向けの記事です。
当社のWeb関連技術の公開と採用活動のために掲載しています。

(2018年5月25日更新)

みなさんこんにちは、エンジニアのMです。
これは当社の技術やAIに興味のある方に向けた日誌になります。
少し間が空きましたがまた更新していきます、よろしくお願いします。

4月23日~5月11日

■ Django

書類作成に追われ、Djangoの分からない部分で詰まり、GWを挟んだということで、あまりめぼしい成果は得られていない。
React+Django+REST Frameworkで作ったAPIをブラウザから叩こうと思っていたが、Djangoテンプレートへの理解も足りない状況では手も足も出なさそうだったので、Javascript+Django+REST Frameworkとした。

結論としてはDjangoには大変苦戦している。

■ 進捗

以前に進めていた類似文検索を扱うシステムである。

API

  • 問い合わせ関連(デフォルトのGET,POST)
  • 保存済みベクトル値を使って類似文上位を取得

検索用Webページ

  • Djangoテンプレートを使って「ID:用件」の一覧でセレクトボックスを作成
  • ボタンを押下してJavascriptで類似文APIを叩いて情報取得→表示
  • 類似文検索のページ遷移(進行中)

こうやってまとめると全然進んでいない感覚になる。
htmlファイルは順調に大きくなっているのだが。
今後進めるとしたら、ページ遷移の後はFastTextをブラウザからAPI経由で実行させる、とかになるだろうか。
再計算中はデータベースをロックしたりする方法など、また色々と調べる必要がありそうだ。


5月14日~5月25日

■ fastTextに関する記事

Windows 10ユーザー向けの、fastTextを入れて遊んでみるまでを解説した記事を書いた。

  • Facebookが公開したfastTextのインストールと使用方法について解説 | フォームズのブログ [リンク]

読みながらコピペするだけでfastTextが動くように解説しているので、初心者向けに仕上がっているはず。
WSLでUbuntuをすでに使っていたためにDebianを使っての解説になったが、UbuntuがそもそもDebianの派生であるということで、使用感に差は無かった。
Linuxは全く詳しくないが、細かい部分や覚えなくて良さそうなことを全部切り捨てると記事も書けるものだなと感じた。

当初はMeCabも使う予定だったが、テキストエディタすら使わない簡単仕様となった。
この点に関しては、Windows側で編集してLinux側で読み込むだけ(文字コードは注意)、という手もある。
従来のような共有フォルダの設定作業も要らないのは嬉しいところ。


■ Django

類似文検索を扱うシステムの続きを進めた。


API

  • 問い合わせ関連(デフォルトのGET,POST)
  • 保存済みベクトル値を使って類似文上位を取得
  • (New)別スレッドを立ち上げて、fastText実行と進行状況の管理・送信

検索用Webページ

  • Djangoテンプレートを使って「ID:用件」の一覧でセレクトボックスを作成
  • ボタンを押下してJavascriptで類似文APIを叩いて情報取得→表示
  • (New)類似文検索のページ遷移

(New)fastTextの実行リクエストページ

  • 次元とEpoch数だけ指定して、fastTextの実行をリクエストする
  • 実行中は一定間隔でサーバーに状況を問い合わせる

Gensimの修正

  • 辞書からの単語ベクトル取得方法を修正

Gensimには辞書にない単語でも、N-gramを考慮してその単語のベクトルを推測する機能が備わっている。
しかしこれを利用すると以前の実装と結果が異なることが確実であるので、辞書にない単語の時はエラーを返すよう修正した。
設定で機能を切れるようには見えなかったので、関連するクラスを継承しメソッドをオーバーライドしている。

仮想OSには1コアしか割り当てていないが、3スレッドを同時処理してブラウザに状況を報告できることは確認した。
データベースをロックしていないので、処理中に検索機能を呼び出したら結果がおかしくなるだろう。ここは次の課題だ。

また進行状況の管理はデータベースを利用して行っている。
ブラウザ側から状況を逐一問い合わせることで、ブラウザ側は状況を把握する仕組みとなっている。
言うまでもないが、この方法では無駄な通信が多い。データベースへのアクセスも多くなる。
そこでWebSocketやSPDY、HTTP/2などについて調べているうちに、「Django Channel」というものがあることを知った。
「Django REST Framework」について覚えるだけで一苦労だったので、これに手を出すとまた長い戦いになるだろう。


フォームズ編集部
オフィスで働く方、ネットショップやホームページを運営されている皆様へ、ネットを使った仕事の効率化、Webマーケティングなど役立つ情報をお送りしています。