認知テクノロジーがカルマを維持する方法の物語

最近、ネガティブなレビューを残して他の人の作品をネガティブに評価するかどうかについて、友人の一人と議論しました。 たとえば、銀行に来て、いたずらなコンサルタントがいるとします。 この評価がなければ人は失礼であり続けるので、私はそれが価値があると確信しています。 友人は、これがあなたのカルマにおいて大きなマイナスであると信じています。あなたは人々を怒らせることはできません、彼ら自身は時間とともにすべてを理解するでしょう。 同じ頃、パートナーのためのハックフェストがあり、そこで私たちはそれぞれのカルマを救うことができる解決策を見ました。 罪は分かち合うことではありません。 名前から推測したかもしれませんが、カットの下では、認知サービスに基づいた開発に焦点を当てます。







はじめに



シリーズのテキストは次のとおりです。「どの企業にとっても、サービスの品質を評価することがどれほど重要かを知っています。これが開発の基礎です。」 私の意見では、これらは非常にありふれた真実なので、省略しましょう。



安くカルマを救う



今日お話しするHeedbookサービスには、クライアントとの従業員の仕事を評価する他の方法よりも非常に優れた利点が1つあります。これは、クライアントの感情をリアルタイムで自動的に評価することです。 つまり、私の友人に戻っても、彼の寛容さはコンサルタントを仕事の本当の評価から救いません。 そしてオオカミはいっぱいで、羊は丸ごと、そして友人のカルマもいっぱいです。



仕組み:



1.銀行(または薬局、MFC、店舗、または同様の企業)の最前線の従業員は、営業日の初めにブラウザからシステムにアクセスします。

2.クライアント、たとえば私の友人。

3.システムは、バックグラウンドでリアルタイムでWebカメラからビデオストリームを受信して​​分析します。

4.情報は、感情、音声、およびその他のクライアントパラメータの知的認識システムによって処理されます。

5.分析の結果に基づいて、システムは、感情の構造およびクライアントの肯定的/否定的な感情の共有、従業員に対するクライアントの注意、対話の内容、スクリプトサービスまたは禁止フレーズの使用に関する詳細な分析を提供します。

6.オフィスの責任者と親会社の従業員は、マネージャーとクライアントによる顧客サービスの品質に関する詳細な情報を受け取ります。 (そして、ここで私たちのコンサルタントがどのように緊張し始めるのかがわかります。)



上記に加えて、各従業員について、平均顧客サービス時間、サービスを受ける顧客の数、および人口統計指標による顧客ベースの構造が決定されます。







別の興味深い機能であるディレクターは、最前線の従業員の職場からのビデオストリームに接続し、後で詳細な分析を行ってダイアログのビデオ録画を表示できます。 つまり、コンサルタントが私の友人に失礼になり始めると、新しいシナリオが私たちの物語に追加され、その後突然彼の目が広がり、彼は甘くて礼儀正しくなります。 )







最後に興味深いのは、Heedbookに従業員の評価システムがあることです。



仕組み:開発者の目を通して



マイクロサービスアーキテクチャのAzure Functions



ディマ・ソシュニコフと一緒に、我々は部分的にソリューションの設計を手伝いました。 彼らが最初にしたことは、モノリシックアーキテクチャから脱却し、マイクロサービス上に構築されたシステムを作成することでした(私の前回の記事からわかるように、これは非常に興味深いトピックです)。 これを行うには、 Azure Functionsを使用します。 実際、WebJobについても考えましたが、パフォーマンスに制限があり、実行されるトランザクションの数に基づいて価格が決定されることはありません。



メインのAF開発環境は、Azureポータルのオンライン機能エディターです。 また、2017年5月末から、Visual Studio 2017 UPD 3を使用してAFを作成できます。



AFは新しいMicrosoft製品であるため、完全なドキュメントはまだないため、以下では、AF Heedbookプロジェクトの例を分析します。 これにより、Azureベースのマイクロサービスアーキテクチャを構築する場合に時間を節約できます。



AFトリガーは、Http要求、Azure BlobストレージでのBlobの表示、OneDriveでのアクション、または単なるタイマーです。 このプロジェクトは、AFの上記のオプショントリガーのほぼすべてを実装しています。 また、あるAFの作業が別のAFを開始するときにAFカスケードを実装し、単一のビジネスデータ分析プロセスを提供しました。



AFの例は、ブロブ(画像)の出現によってトリガーされます。 このAFを使用して、写真に写っている人の数と感情を判断します。 これは、 Microsoft Face APIコグニティブサービスを使用して行います



最初に、認知サービスの必要なライブラリを接続する必要があります。 オンラインAFエディターの場合、project.jsonファイルを作成し、必要な依存関係をすべてそこに書き込むことにより、これを手動で行う必要があります。



{ "frameworks": { "net46":{ "dependencies": { "Microsoft.ProjectOxford.Common": "1.0.324", "Microsoft.ProjectOxford.Face": "1.2.5" } } } }
      
      





Visual Studio 2017 UPD 3でAFを作成する場合、Nugetを使用して必要な依存関係を接続するだけです。



次に、AFトリガーと出力パラメーターを登録する必要があります。 私たちの場合、これは特定のコンテナー内のblobの外観と、Azure MsSqlテーブルでの認識結果の記録です。 これは、function.jsonファイルで行われます。



 { "bindings": [ { "name": "InputFace", "type": "blobTrigger", "direction": "in", "path": "frames/{name}", "connection": "heedbookhackfest_STORAGE" }, { "type": "apiHubTable", "name": "FaceData", "dataSetName": "default", "tableName": "FaceEmotionGuid", "connection": "sql_SQL", "direction": "out" } ], "disabled": false }
      
      





したがって、Azure Functionsのコード自体!



 #r "System.IO" using System.IO; using Microsoft.ProjectOxford.Face; using Microsoft.ProjectOxford.Common.Contract; public static async Task Run(Stream InputFace, string name, IAsyncCollector<FaceEmotion> FaceData, TraceWriter log) { log.Info($"Processing face {name}"); var namea = Path.GetFileNameWithoutExtension(name).Split('-'); var cli = new FaceServiceClient(<Face_Api_Key>); var res = await cli.DetectAsync(InputFace,false,false,new FaceAttributeType[] { FaceAttributeType.Age, FaceAttributeType.Emotion, FaceAttributeType.Gender}); var fc = (from f in res orderby f.FaceRectangle.Width select f).FirstOrDefault(); if (fc!=null) { var R = new FaceEmotion(); R.Time = DateTime.ParseExact(namea[1],"yyyyMMddHHmmss",System.Globalization.CultureInfo.InvariantCulture.DateTimeFormat); R.DialogId = int.Parse(namea[0]); var t = GetMainEmotion(fc.FaceAttributes.Emotion); R.EmotionType = t.Item1; R.FaceEmotionGuidId = Guid.NewGuid(); R.EmotionValue = (int)(100*t.Item2); R.Sex = fc.FaceAttributes.Gender.ToLower().StartsWith("m"); R.Age = (int)fc.FaceAttributes.Age; await FaceData.AddAsync(R); log.Info($" - recorded face, age={fc.FaceAttributes.Age}, emotion={R.EmotionType}"); } else log.Info(" - no faces found"); } public static Tuple<string,float> GetMainEmotion(EmotionScores s) { float m = 0; string e = ""; foreach (var p in s.GetType().GetProperties()) { if ((float)p.GetValue(s)>m) { m = (float)p.GetValue(s); e = p.Name; } } return new Tuple<string,float>(e,m); } public class FaceEmotion { public Guid FaceEmotionGuidId { get; set; } public DateTime Time { get; set; } public string EmotionType { get; set; } public float EmotionValue { get; set; } public int DialogId { get; set; } public bool Sex { get; set; } public int Age { get; set; } }
      
      





この場合、それはCognitive Services Face APIと連動した非同期手順です。 AFは、ストリームblobを受信し、CSに転送します。



  var res = await cli.DetectAsync(InputFace,false,false,new FaceAttributeType[] { FaceAttributeType.Age, FaceAttributeType.Emotion, FaceAttributeType.Gender});
      
      





次に、フレーム内で最大の顔を選択します。



  var fc = (from f in res orderby f.FaceRectangle.Width select f).FirstOrDefault();
      
      





そして、認識結果をデータベースに書き込みます。



 await FaceData.AddAsync(R);
      
      





簡単ですね。 未来はマイクロサービスにあります。 )



問題について



さて、実際にはそれほど単純ではありません。



残念ながら、AFには現在、いくつかの制限があります(名前バインディングが機能しない、ライブラリの競合があります)。 幸いなことに、.Net開発の世界には常に多くの回避策があります。基本的なシナリオで問題を解決できない場合は、いくつかの回避策を見つけることができます。



バックグラウンドでビデオとオーディオを撮影する



ご存知のように、最新のオペレーティングシステムは、バッテリ寿命を可能な限り節約しようとし、バックグラウンドですべてのアプリケーションの予防的な作業を停止します。 これは、Web、モバイル、またはデスクトップアプリケーションでのストリーミングにも適用されます。 このテーマに関する長い調査作業の後。 Webソリューションを選択しました。



GetUserMedia()



を使用して、Webカメラからビデオおよびオーディオストリームを取得します。 次に、受信したビデオおよびオーディオストリームを記録し、そこからデータを抽出してバックエンドに送信する必要があります。 これは、ブラウザブックマークを非アクティブにするとすぐに、ブラウザウィンドウが常にアクティブな場合に機能します。つまり、データを書き込むことができなくなります。 私たちのタスクは、バックグラウンドで動作し、従業員が直接の義務を果たすことを妨げないシステムを作成することでした。 したがって、解決策は、ビデオとオーディオのストリームデータを記録および抽出する独自のストリーム変数を作成することでした。



ロシア語の認識の質



将来、このサービスは独自の音声認識モデルの作成に移行しますが、現時点では、ロシア語認識サービスの外部プロバイダーを使用する必要があります。 ロシア語で高品質の音声認識を提供する優れたサービスを選択することは困難でした。 現在のシステム構成では、音声認識システムの組み合わせを使用しています。ロシア語の音声には、グーグルの音声Apiが使用され、テストでは認識品質の最良の結果が示されました。



現実に戻る



実際、この決定は単なる未来の物語ではありません。 近い将来、Heedbookはモスクワ地方のMFCと国内最大の銀行で働き始めます。



Heedbookチームは、ソリューションに対するコメントに感謝するとともに、ML、データ分析、SEO、および大規模なクライアントとの連携の分野の専門家と協力できることを嬉しく思います。 コメントにあなたの考えを書いたり、 info@heedbook.comにメールを送ってください



All Articles