ちょっとした機械学習でウェブサイトを高速化

ちょっとした機械学習でウェブサイトを高速化

私の人生の 73% は、Web パフォーマンスについて考えています。低スペックの電話で 60 FPS を達成すること、リソースを順番に読み込むこと、オフラインでキャッシュできるものはすべてキャッシュすることなどです。他にもいくつか最適化があります。

最近、Web パフォーマンスの定義が狭すぎるかもしれないということ、そしてこれらはユーザーの観点から見た Web パフォーマンスのほんの一部に過ぎないということに気付きました。

そこで、よく利用するウェブサイトを開いて、考えられるすべてのユーザー操作を試し、かかった時間を記録しました。 (ユーザー操作用のタイムラインツールが必要です)

その後、パフォーマンスを向上させる実行可能な解決策を見つけました。

以下の記事では、特定の Web サイトの具体的な操作手順に焦点を当てています。しかし、このソリューション (そうです、機械学習) は他の多くの種類の Web サイトにも適用できると思います。

質問: どうすれば時間を節約できますか?

このウェブサイトは、売り手が役に立たないものを販売し、買い手がそれらのものを購入して価値のあるものを見つけるために使用されます。

販売者がウェブサイトで何かを販売したい場合、まずカテゴリーを選択し、対応するテンプレートを選択し、詳細を入力してプレビューし、最後に公開する必要があります。

しかし、最初のステップであるカテゴリーの選択で、私は遠回りをしてしまいました。

まず、カテゴリーは 674 もあり、あなたの古くてボロボロのカヤックがどのカテゴリーに属するのか全く分かりません (Steve Krug が言ったように、ユーザーに考えさせないでください)。

2 番目のステップでは、アイテムが属するカテゴリ、サブカテゴリ、サブサブカテゴリがわかっているにもかかわらず、少なくとも 12 秒かかります。

ページの読み込み時間を 12 秒短縮できると言ったら、気が狂ったと思われるでしょう。では、その 12 秒をどこか別の場所で節約してみませんか。

ジュリアス・シーザーが言ったように、時間は貴重です。

私は常に、ユーザーの無知は幸福であると信じてきました。製品のタイトル、説明、価格を機械学習モデルに入力すると、システムは製品が属するカテゴリを自動的に計算できるはずです。

これにより、ユーザーはカテゴリを選択する時間を節約できます。彼らはその時間を、Reddit で DIY 二段ベッドを探すことに楽しく費やすことができます。

機械学習 - 逃げるのではなく、受け入れるべきです

最初は機械学習について何も知りませんでした。私がゲーム AI について知ったのは、AlphaGo が人間のトップクラスの囲碁プレイヤーを破った後でした。

それで、私はそれについて学び始めるつもりです。次のいくつかのステップは 1 時間もかかりません。

  1. Googleで「機械学習」を検索
  2. 機械学習に関する幅広い記事をご覧ください
  3. Amazonがリリースした機械学習関連サービスを発見
  4. 機械学習についてあまり詳しく知る必要はないことに気づき始めました。
  5. えーと。とても幸せ

(著者注:私は機械学習を体系的に研究していないため、記事内の専門用語の一部が誤って使用されている可能性があります。)

シンプルな実装プロセス

Amazon が機械学習に関するドキュメントを公開しました。この文書に興味がなく、5 時間かけて読む予定がない場合は、私が書いた要約をご覧ください。

要約すると次のようになります。

  • いくつかの CSV データ ファイルを取得します。各行は製品項目 (^_^ 私のカヤック) であり、列名はタイトル、説明、価格、カテゴリです。
  • AmazonのAWS S3バケットにデータを転送する
  • データを使用して機械をトレーニングします。このようにして、この小さなクラウド ロボットは、製品のタイトル、説明、価格に基づいて製品のカテゴリを予測できます。
  • フロントエンドページで、ユーザーが入力したタイトル/説明/価格を取得してクラウドロボットに送信するコードを記述します。計算後、製品が属するカテゴリを予測できます。

実際の戦闘シミュレーション

以下は、販売者が情報を公開するためのいくつかの重要なプロセスをシミュレートする、私が作成したフォームです。

以下の結果は、機械学習への興味をさらに深めるものとなるでしょう。信じてください。提案されたカテゴリはディープラーニングシミュレーションによって予測されます。

冷蔵庫を売りましょう。

水槽を売ってみます。

このクラウドロボットは実際に水族館を認識できます!

この結果を見たとき、嬉しくて小躍りしてしまいました。素晴らしいと思いませんか?

(どのように実装したかをこっそり教えましょう: React、Redux、JQuery、Mox、RxJs、BlueBird、Bootstrap、Sass、Compass、NodeJs、Express、Loadsh。プロジェクトは webpack を使用してパッケージ化されています。最終的に生成されるファイルは約 1 MB です)

えーと。もうナンセンスはやめましょう。さあ、本題に入りましょう。

当初は機械学習のためのデータを取得するためでした。私もこれについては頭を悩ませてきました。約10K件のレコードが必要です。その後、地元の取引ウェブサイトでこのデータを見つけました。 URL と DOM 構造を確認した後、Google Scraper プラグインを使用してデータを抽出しました。 CSV ファイルにエクスポートします。このデータに約 4 時間を費やしました。プロジェクト期間のほぼ半分が完了しました。

データが整理された後、Amazon S3 にアップロードされ、機械学習パラメータが設定され、データモデルが設定されました。学習プロセス全体は CPU 上でわずか 3 分しかかかりませんでした。

インターフェースにはリアルタイム予測機能もあるので、いくつかのパラメータでテストしてみるつもりです。

えーと。かなり便利ですよ。

Amazon API をブラウザに公開しないようにするために、API を Node サーバーに配置しました。

バックグラウンドコード(ノード)

使い方はとても簡単です。インターフェース パラメーターは modelId であり、サーバーは予測を返します。

  1. AWS SDK for .NETをビルドします  
  2. AWS MachineLearning を新規に作成します。  
  3. 定数パラメータ = {  
  4. MLModelId: 'モデルID'  
  5. PredictEndpoint: 'some-endpoint'  
  6. 記録: {}、  
  7. };  
  8. machineLearning.predict(params, (err, prediction) => { // 予測ができました!});

ここでのパラメータは大文字で始まっていますが、これを変更するつもりでした。後で考えた結果、諦めることにしました。

レコードは JSON オブジェクトです。属性値は(タイトル、説明、価格)です

単にコードスニペットを提供するだけでは不十分です。誰もがよりよく理解できるようにするためです。サーバー側のコードをすべて貼り付けました。

server.js:

  1. 定数 express は require( 'express' ) を必要とします。
  2. bodyParser を require( 'body-parser' );
  3. AWS SDK for .NETをビルドします
  4. express() は、定数です。
  5. app.use( express.static ( 'public' ));
  6. app.use(bodyParser.json());  
  7. AWS.config.loadFromPath( './private/aws-credentials.json' );
  8. AWS MachineLearning を新規に作成します。  
  9. app.post( '/predict' , (req, res) => { const params = {
  10. MLModelId: '私のモデルID'
  11. 予測エンドポイント: 'https://realtime.machinelearning.us-east-1.amazonaws.com'
  12. レコード: req.body、
  13. };  
  14. machineLearning.predict(params, (err, data) => { if (err) {
  15. コンソールログ(エラー);
  16. }それ以外{
  17. res.json({ カテゴリ: data.Prediction.predictedLabel });
  18. }
  19. });
  20. });  
  21. アプリをリッスンします(8080);

aws-credentials.json:

  1. {
  2. "accessKeyId" : "私のアクセスキーID" ,
  3. 「secretAccessKey」 : 「shhh-secret-squirrel」 「リージョン」 : 「us-east-1」  
  4. }

(.gitignore 内の /private フォルダは無視してください)

バックグラウンドコードはこれだけです。

フロントエンドコード

フォーム内のコード機能は比較的単純です。

  • 複数の入力ボックスのぼかしイベントをリッスンする
  • フォーム内のフィールド値を読み取る
  • APIへのPOST
  • APIから返された予測をページに表示する

  1. 関数() {
  2. const titleEl = document.getElementById( 'title-input' );
  3. const descriptionEl = document.getElementById( 'desc-input' );
  4. const priceEl = document.getElementById( 'price-input' );
  5. const catSuggestionsEl = document.getElementById( 'cat-suggestions' );
  6. const catSuggestionEl = document.getElementById( '提案カテゴリ' );
  7.  関数予測カテゴリ() {
  8. const フェッチオプション = {
  9. メソッド: 'POST'
  10. ヘッダー: { 'Content-Type' : 'application/json' ,
  11. },
  12. 本文: JSON.stringify({
  13. タイトル: titleEl.value,
  14. 説明: descriptionEl.value、
  15. 価格: priceEl.value、
  16. })
  17. };  
  18. フェッチ( '/predict' 、 fetchOptions)
  19. . then (レスポンス => response.json())
  20. . then (予測 => {
  21. catSuggestionEl.textContent = prediction.category;
  22. catSuggestionsEl.style.display = 'ブロック' ;
  23. });
  24. }  
  25. document.querySelectorAll( '.user-input' ).forEach(el => {
  26. el.addEventListener( 'blur' 、予測カテゴリ);
  27. });
  28. })();

上記がフロントエンドのコード全体です。

ああ…クラウドサービスは有料です。

急いで帽子をしまわないでください。マジックショーが無料になるなんてあり得ません。

上記で使用したモデル データ (10K 行/4 列) は 6.3 MB です。クラウドは、リクエストの受け入れを待機している間に 6.3 MB のメモリを消費します。これらのリソースのコストは 1 時間あたり 0.0001 ドルです。または年間 8 ドル。 私はこれよりも多くのお金を手袋に使ったことがあります。

予測を行うたびに、0.0001 ドルの費用がかかります。したがって、この API を気軽に呼び出さないでください。

このサービスを提供しているのは Amazon だけではありませんが、他の 2 つの大手メーカーの価格表はまだ見つけていません。

Google には TensorFlow がありますが、入門チュートリアルを見ただけで逃げてしまいました。

Microsoft は機械学習を提供していますが、IE6 はまだ少し気になります (近い将来、Amazon と Microsoft の間で大きな戦いが起こるかもしれません)。

いくつかの結論

ちょっと驚いているだけかもしれませんが(「ニュース」が「新しい」の複数形だと気づいたときのことを今でも覚えています)、これはすべてかなり驚くべきことだと思います。これにより、あなたや私のような一般人(開発への影響力は小さい)が機械学習を詳しく調べることができるようになり、それらのユーザーにとって大きな改善につながる可能性があります。

次はどこへ行く?

上記の例は明らかに不自然なものであり、いくつかのトピックを省略したことは認めます。

できればすべての問題をリストアップしたいのですが、自分でやってみて自分で問題を見つけ出すのも楽しいでしょう。

ぜひ挑戦してみてください。成功したら、ぜひコメント欄で教えてください。

<<:  NLPとナレッジグラフの統合

>>:  闇の奥:人工知能の奥にはどんな闇が隠されているのか?

ブログ    
ブログ    
ブログ    

推薦する

数学をしっかり学べないMLエンジニアは優れたデータサイエンティストではない

数学はすべての科目の基礎であり、数学の学習には終わりがありません。ビジネスに携わっている場合、または...

顔認識はどれくらい強力ですか? AIFRテクノロジーはあなたを数分で「スター」に変えます

[[195170]] [51CTO.com からのオリジナル記事]最近、私たちの画面には、「どの有名...

Tofsee ボットネットは独自のドメイン名生成アルゴリズムを使用する

概要スイス政府コンピュータ緊急対応センター (GovCERT) は最近、Tofsee ボットネット ...

国連チーフAIアドバイザーとの独占インタビュー:AIは完璧だと期待しているが、決して完璧ではない

[[384962]]ビッグデータダイジェスト制作出典: informationweek編纂者:張大毓...

...

...

...

...

研究は、人工知能が手術後のオピオイド使用を減らすのにどのように役立つかを示している

ペンシルベニア大学医学部が最近実施した研究では、人工知能がオピオイド乱用と戦うためにどのように使用で...

医療機器における人工知能:これらは新たな産業アプリケーションです

人工知能により、研究者や製造業者は生活の質を向上させることができます。 [[419960]]人工知能...

AIがスマートグリッドにもたらす革新

スマートグリッドは、供給者から消費者に電力を供給する相互接続されたコンポーネントの複雑なシステムです...

最も人気のある 12 の AI ツール、ライブラリ、プラットフォーム

[[205783]]近年 AI の利用が増えているため、利用可能な AI ツール、ライブラリ、プラッ...

ファーウェイ、セキュリティ業界を洞察から先見へと進化させる2019年スマートセキュリティ事業戦略を発表

[51CTO.comより引用] 2019年8月8日、ファーウェイの2019年スマートセキュリティビジ...

中小企業はデータセンターの自動化によってもたらされる課題にどのように対処するのでしょうか?

デジタル変革の時代において、データセンターは現代の企業のバックボーンを支える上で重要な役割を果たしま...