DUICUO

Google が革命を起こそうとしています!Google Wear 2.0 の最新オフライン AI テクノロジーについて詳しく解説します。

[51CTO.comより] 近年、人工知能分野は非常に活発な動きを見せています。伝統的な学術機関に加え、Google、Microsoft、Facebook、Appleといった大手インターネット企業や、Baidu、Alibabaといった国内企業も関連研究チームを設立し、多くの目覚ましい成果を上げています。

GoogleのAlphaGoは、SiriとGoogle Nowの音声認識機能と同様に、強力なコンピューティング能力を世界に示しました。国内では、BaiduのXiaoduロボットが「Brain」プラットフォーム上で音声認識と画像認識機能を披露しました。これらの優れたプロジェクトは、人工知能分野における人類の急速な発展を強く反映しています。しかし、音声認識と画像認識はどちらも、膨大な計算量とストレージ容量の需要を満たすために、クラウドコンピューティングに大きく依存しています。一方、モバイルデバイスやPCデバイスは、人工知能の目標を達成するために、コンピューティングリソースにアクセスするために常時インターネット接続を必要とします。

しかし、Googleが最近リリースしたAndroid Wear 2.0では、スマートフォンなしで直接ウォッチを使用できるだけでなく、さらに驚くべきは「スマートリプライ」機能です。公式技術チームは、これはオフラインAIを基盤としており、ネットワークに接続してクラウドコンピューティングの助けを求めることなく、自己学習の目的を達成できると考えています。

[[183572]]

(画像はEngadgetより)

これまで、筆者を含め多くの人が、スマートウォッチのようなモバイルデバイスは演算能力とメモリが限られているため、クラウド接続なしで自己学習と「インテリジェント返信」機能を実現することは事実上不可能だと信じていました。しかし、GoogleのAI開発チーム「Expander」がそれを実現し、Android Wear 2.0に移植し、素晴らしい成果を上げました。彼らは、Android Wear 2.0のSmart Replyを支えるだけでなく、他のオフラインモバイルアプリケーションにも大きなメリットをもたらす、より軽量で全く新しい機械学習フレームワークを再設計しました。しかし、それ以前にも、彼らは多くの一般的なニューラルネットワークやグラフ学習技術を試していましたが、構築したモデルはモバイルプラットフォームに適しておらず、返信回数を制限しても期待した効果が得られませんでした。この軽量でシンプルなシステムは、「お元気ですか?」や「調子はどうですか?」など、返信が類似するメッセージを素早く分類できるため、Smart Replyのメモリ負荷を軽減できます。

この間、筆者はGoogleでAndroidを担当するLiang Yuling氏に連絡を取った。同氏によると、AIは一般的に機械学習を指し、主にトレーニングと予測という2つのプロセスで構成される。トレーニングには膨大なデータと強力なコンピューティング能力が必要なため、通常はクラウドで行われる。トレーニング後、結果として得られるモデルは、1回の予測に膨大なデータやコンピューティング能力を必要としない。いわゆるオフラインAIとは、予測のために事前トレーニング済みのモデルをモバイルデバイスに保存することを指すことが多い。そのため、モデルのサイズを縮小し、予測時の計算量を減らし、予測プロセスを高速化することが技術的な課題となることが多い。これを実現する方法は数多くあり、現在普及しているAIチップアクセラレーションもその1つである。

実は、Android Wear 2.0のオフラインAI技術はディープラーニングではなく、半教師ありグラフ学習[1]と呼ばれる技術を採用しています。この技術の中核は、デバイス上の情報コンテンツ(チャット、テキストメッセージなど)を、対応する自動返信に効率的にマッピングすることです。Smart Replyは、全く新しい比較的軽量な機械学習アーキテクチャを採用しており、インテリジェントな返信機能を実現するだけでなく、将来的には多くのオフラインモバイルアプリケーションに大きな助けとなるでしょう。

次に、著者は梁教授の提案とGoogleの公式技術チームのブログを統合して、Android Wear 2.0オフラインAIテクノロジーの実用的なアイデアを具体的に分析します。

Google Wear 2.0 スマートリプライ

学習と投影

軽量な会話モデルを構築するためのシンプルな戦略は、デバイス上に小規模で規則的な辞書(例:入力 → 応答マッピング)を作成し、推論時に単純なクエリ戦略を用いることです。これは、少数の特徴量を用いた少数の予測タスク(例:二項感情分類。「この映画は好きです」は肯定的な感情を伝え、「ひどい映画でした」は否定的な感情を伝えます)を扱います。しかし、この方法はスケーラビリティに欠け、チャットメッセージによく見られる豊富な語彙や複雑な言語的バリエーションをサポートできません。一方、リカレントニューラルネットワーク(例:LTSM)などの機械学習モデルは、「スマートリプライ」を含む自然言語理解タスクにおける複雑なシーケンスを学習するための非常に強力なツールです。しかし、このような豊富なモデルを小さなメモリデバイスに収まるように圧縮し、計算コストを削減することで信頼性の高い予測(必要に応じて迅速に処理)を実現することは非常に困難です。 Android Wear 2.0 チームによるモデルを制限したり、応答の小さなバッチのみを予測したり、量子化または文字レベルのモデルを使用したりといった初期の試みは、満足のいく結果を生みませんでした。

***は、デバイス上の機械学習システム向けに異なるソリューションを構築することで、この問題を解決しました。そのアイデアは、まず高速で効率的なメカニズムを用いて類似のメッセージをグループ化し、それらを類似の(「隣接する」)ビットベクトル表現に投影するというものです。この投影ステップを実行する方法はいくつかあり、例えば単語埋め込みやエンコーダネットワークなどを用いる方法がありますが、*** Android Wear 2.0では改良されたLocality-Sensitive Hash(LSH)アルゴリズムを採用し、次元を数百万の固有単語から短い固定長のビットシーケンスへと削減しています。これにより、メッセージの投影をオンザフライで非常に高速に計算できるようになり、メッセージ、単語埋め込み、さらにはトレーニングに使用するモデル全体を保存する必要がなくなるため、デバイス上のメモリ使用量も削減されます。

投影手順:類似のメッセージはグループ化され、近傍ベクトルに投影されます。例えば、「やあ、調子はどう?」と「調子はどうだい、相棒?」というメッセージは内容が類似しており、同じ近傍ベクトル11100011に投影される可能性があります。別の関連メッセージ「やあ、調子はどう?」は、位置が2つだけ異なる近傍ベクトル11100110にマッピングされます。

次に、システムはメッセージとその投影を組み合わせることで、「メッセージ投影モデル」を学習します。このモデルは、半教師ありグラフ学習フレームワークを用いて、適切な応答を予測する方法を学習します。グラフ学習フレームワークは、複数の情報源(メッセージと応答の相互作用、単語/句の類似性、意味的クラスタリング情報)からの意味関係を組み合わせ、優れた応答予測につながる有用な投影操作を学習することで、信頼性の高いモデルを学習することを目指しています。

学習手順:(上)機械学習フレームワークでは、メッセージ、投影、および対応するレスポンスが組み合わされ、「メッセージ投影モデル」を学習します。(下)メッセージ投影モデルは、レスポンスと対応するメッセージ投影を関連付けることを学習します。例えば、モデルは「こんにちは、順調ですか?」と「調子はどうですか?」という2つの異なるメッセージ(下中央)を隣接するビットベクトルに投影し、それらを関連するレスポンスにマッピングすることを学習します(下右)。

注目すべきは、高度な機械学習とクラウドコンピューティング機能を用いてメッセージ投影モデルを学習できる一方で、モデル自体はデバイス上に常駐し、実行と推論もすべてデバイス上で行われるという点です。デバイス上で動作するアプリケーションは、ユーザーにメッセージを送信し、デバイス上のモデルから応答予測を受け取ることができます。データはデバイス外に持ち出されません。さらに、モデルはユーザーの文章スタイルや好みに合わせて変更できるため、パーソナライズされたエクスペリエンスを向上させることができます。

推論ステップ:モデルは学習した投影をメッセージ(またはメッセージシーケンス)に適用し、適切な応答を複数提案します。推論プロセスはデバイス上で実行されるため、モデルはユーザーデータと個々の書き方に適応できます。

デバイス システムをすぐに使えるようにするために、Android Wear チームは、デバイス上のコンピューティングを高速化し、モデルからさまざまな応答を生成するための最適化など、いくつかの追加の改善を行う必要がありました。

オフラインAI:時計通信からアプリケーションまで

Google Wearチームがこの技術をゼロから開発し始めた当初、モデルの予測の有用性と精度に不安がありました。しかし、プロジェクト完了後、コンピューティング能力とストレージリソースが非常に限られているAndroidウェアラブルデバイスでも、この技術が期待通りのパフォーマンスを発揮したことに驚き、チーム全体が大いに盛り上がりました。彼らは今後もモデルの改良を続け、ユーザーにより良い会話体験を提供するとともに、このデバイス内機械学習プラットフォームを最大限に活用し、Googleが以前リリースしたAlloアプリのような、コミュニケーションをよりシンプルにし、業務効率を向上させる新しいアプリケーションを開発していきます。

そのため、Android Wearチームは、Wearを使用するサードパーティ製デバイスがスマートリプライ機能にアクセスして使用できるように、非常に豊富なAPIインターフェースも提供しています。例えば、通知アクションでスマートリプライを有効にするには、以下の手順を実行する必要があります。

  • NotificationCompat.MessagingStyle の使用
  • 通知操作で setAllowGeneratedReplies(true) を呼び出します。
  • 通知操作に RemoteInput (対応する永続性を含む) があることを確認します。

次の例は、スマート リプライ応答を使用して MessagingStyle 通知を作成する方法を示しています。

  1. // 返信アクションのインテントを作成する 
  2. インテント replyIntent = new Intent( this 、 ReplyActivity. class );
  3. 保留中のインテントの返信保留中のインテント =
  4. PendingIntent.getActivity( this , 0 , replyIntent,
  5. PendingIntent.FLAG_UPDATE_CURRENT);
  6.  
  7. // 返信アクションを作成し、リモート入力を追加する 
  8. NotificationCompat.Action アクション =
  9. 新しいNotificationCompat.Action.Builder(R.drawable.ic_reply_icon,
  10. getString(R.string.label)、replyPendingIntent)
  11. .addRemoteInput(リモート入力)
  12.  
  13. // 1) 生成された返信を許可する 
  14. .setAllowGeneratedReplies( true )
  15. 。建てる();
  16.  
  17. 通知 noti =新しいNotificationCompat.Builder()
  18. .setContentTitle(messages.length + " 個の新しいメッセージ " + sender.toString())
  19. .setContentText(件名)
  20. .setSmallIcon(R.drawable.new_message)
  21. .setLargeIcon(ビットマップ)
  22. // 2) スタイルをMessagingStyleに設定する 
  23. .setStyle(新しいNotificationCompat.MessagingStyle(resources.getString(R.string.reply_name))
  24. .addMessage(メッセージ[ 0 ].getText(), メッセージ[ 0 ].getTime(), メッセージ[ 0 ].getSender())
  25. .addMessage(messages[ 1 ].getText(), messages[ 1 ].getTime(), messages[ 1 ].getSender()))
  26.  
  27.  
  28. // 3) RemoteInputでアクションを追加する 
  29. .extend(新しいWearableExtender().addAction(action)).build();

さらに拡張機能にアクセスするには、>> に移動する必要があります。

***、梁教授は筆者に対し、Googleは現在、Google翻訳など、オフラインAIを使ったプロジェクトをいくつか展開していると語った。しかし、具体的な実装技術はアプリケーションシナリオによって異なり、例えば、Google翻訳とWear 2.0のSmart Replyで使用されている手法は同じではない。梁教授はSmart Replyがオープンソース化できるかどうかについてはコメントしなかったが、AndroidとiOSでディープラーニングベースの画像認識を実装する能力を示しており、非常に優れた事例もある、新しくリリースされたTensorFlow 1.0バージョン[2]に注目するよう提案した。

[1]:https://arxiv.org/pdf/1512.01752

[2]:https://github.com/tensorflow/tensorflow/tree/master/tensorflow/examples/android

[これは51CTOからのオリジナル記事です。提携サイトへの転載の際は、原著者と出典を51CTO.comと明記してください。]