ランサーズ(Lancers)エンジニアブログMENUHOMEABOUTRECRUITCOMPANYHOMEABOUTRECRUITCOMPANYランサーズ等のサービスを開発・運用する中で得た知識やノウハウを紹介しています。2ランサーズ社では今年の4月頃から毎週金曜日に自分の好きなテーマの開発ができる20%ルールというものを設けました。6月頃から20%ルールの中で機械学習の取り組みが本格化し始め、外部サービスを使って提供していたレコメンドシステムを内製化することを目標として社内から有志が集まりました。毎月利用費を支払っているので、それが0円になれば成果として見えやすいという理由でレコメンドシステムの内製化をテーマとしました。機械学習の知識が全くない状態からスタートし、徐々に勉強していく中で、レコメンドシステムが形になっていきました。利用していた外部のレコメンドシステムの契約期間が1年の自動更新だったので、更新しないことをその会社に伝えることで退路を断ち、自分たちのモチベーションをより高めました。大きな問題に直面することもなく、8月にレコメンドシステムをリリースしました。サンプルデータを使ってリアルタイムレコメンデーションを作る内製化したことで、レコメンドシステムの毎月の維持費を90%削減することができました。その上、仕事への提案率を150%増加させることもできました。様々な箇所へレコメンドシステムを応用するプロジェクトも計画されており、内製化したことは良いことづくめでした。レコメンドシステムが上手く稼働したので、機械学習の取り組みは20%ルールの枠を超え、当社のメインプロジェクトへと格上げされました。機械学習を使った次に取り組むべきテーマは何だということになり、今年に入ってから大幅に増加していたスパムメッセージの検知が候補に上がりました。Lancersプラットフォームでは、ランサーとクライアントがやり取りするためのメッセージ機能を提供しています。このメッセージ機能は誰でも利用できるため、マルチ商法の勧誘に悪用されることが多々あります。スパムを送信する人は、Sleipnirのような自動化ツールを使って大量のスパムメッセージを定期的に送信するので、正常なやり取りがスパムメッセージの中に埋もれてしまう問題が起こりつつありました。レコメンドシステムをリリースする中で培った機械学習の知識を使って、スパムメッセージを検知できるようにするプロジェクトが今年の9月から本格的に開始しました。スパムメッセージの特徴を掴むところから調査を開始しました。当社にはユーザからの問い合わせ等に対応する専門のチームが存在します。スパムメッセージを見つけ次第、削除するなどの対応を行なっているのもそのチームになるので、そのチームのメンバーに協力を要請し、わからないことは何でも聞ける状況を確保しました。スパムメッセージを当社のプラットフォーム上で送信することで、スパマーの人たちにとってどういう形でメリットがあるのか、どうやって送信しているのか、どうすれば送信をやめるのか、なぜ送信し続けるのか、などを調査しました。マルチ商法のような勧誘は、騙されて知らず知らずのうちに加担していた、というケースが大半だろうという先入観があったのですが、調査の中で分かってきたことは、自ら進んで応募しているケースも無きにしも非ず、ということでした。そのため、ユーザにスパムメッセージを見せないようにするということが、結果として、スパムメッセージを減らすことに繋がるであろう、という仮説を立てました。次に、スパムメッセージをどうすれば検知できるかということを調査しました。Aggressiveで学習させています。試しましたが、速度と精度のバランスがこの組み合わせが最もよかったです。スパムメッセージ検知システムを作るにあたり、参考になった論文ベスト3です。機械学習を使ったスパムメッセージの検知が上手くいくことがわかったので、次にどのようにランサーズ社のプラットフォームに組み込むかを検討しました。基本的にはマイクロサービスとして検知システムを組み込むということを方針としました。当社では、ランサーズプラットフォームのフロントエンド、バックエンド、メッセージ機能、インフラの担当者がそれぞれ分かれています。今回のように横断的に機能を拡張するケースでは、プロジェクトリーダー的な役割が必要でした。システムの設計を行いました。フロントエンド、バックエンド、メッセージ機能、インフラのそれぞれの要件・仕様をGithubのissueに記載することでコミュケーションを行いました。検知システムの開発と並行してユーザからの問い合わせ等に対応する専門のチームのオペレーションの変更も検討しました。具体的には、検知したスパムメッセージを社内向け管理画面に表示することで非表示等のオペレーションを行えるようにしました。そのための人員リソースの調整等も行いました。以上で検知システムリリースのための準備が整ったため、2017年12月半ばに検知システムをリリースしました。調査開始から約3ヶ月間でのリリースでした。3ヶ月程度でリリースできたのは、当社が日頃から協力し合う文化を培っていることが大きかったと思います。違反検知システムは現場からの発案で、自発的に開始したプロジェクトになります。ランサーズ社は社員にチャレンジすることを推奨しており、チャレンジする人を周りが協力する文化があります。自発的に物事に取り組みたい人はぜひランサーズ社のエンジニア職に応募してみてください。追記]違反検知システムを「マルチ商法チェッカー」というサービス名で誰でも利用できるように公開しました。高田茂臣(takada.shigeomi@lancers.co.jp)ランサーズではサービスを成長させてくれるエンジニア、デザイナーを募集しています!ご興味がある方は、以下URLよりご応募ください。...AIチームの立ち上げとこれからこんにちは。開発部の水島(@0xb5951)です。Calender18日目の記事です。昨日は長島さんのプロジェクトをうまく回せた時の感動を味わいたいという記事でした。...Python/wxPythonでGUIプログラミングはじめまして!ランサーズのyutakaです。今回はwxPythonでGUIプログラミングをしてみようと思います。wxPythonはPythonで記述されたクロスプラットフォームなウィジェット・ツールキットです。...私はデジタルノマドです。世界中を旅しながらソフトエンジニアとして働いています。Lancers,Inc。