Splunkは、ログメッセージのような機械生成テキストやカスタマーサポートの記録のような人間生成テキストといった、テキストデータに対して優れた可視性を提供しています。テキストデータの分析は、類似したログメッセージを相関させてパターンを特定したり、顧客の要求を分析することで顧客の意図を理解するなど、さまざまなシナリオで非常に有益な価値を証明できます。
全文的または部分的なマッチングを行う正規表現はある程度役立つことがありますが、言語の自然な柔軟性、つまり特定の文脈内での同義語の使用や表現方法などは、重大な課題を提供します。これらの課題は、人間の介入なしに分析の効果と正確性に影響を及ぼす可能性があります。
これらの課題に対して、Splunkでは深層学習を用いることで克服できるようになりました!Splunk App for Data Science and Deep Learning(DSDL)の最新リリース(v5.1.1)では、深層学習に基づくテキスト分析のための2つの新しいユースケースを紹介しています。1つ目は「テキストの類似性スコアリング」で、テキスト間の類似性を、それらの意味的な内容と文脈的な意味に基づいて評価できます。この機能は、単純なキーワードのマッチングを超えて、テキスト関係の理解を提供します。2つ目のユースケースは「ゼロショット分類」で、モデルのトレーニングを必要とせず、カスタマイズ可能なラベルでテキストを分類できる機能です。つまり、学習データがなくてもテキストデータを効果的に分類でき、さまざまなテキスト分析のタスクに高い柔軟性と適応性を提供します。
この2つのユースケースはSplunk DSDL(Splunk MLTK and Python for Scientific Computingが必要)のgolden-cpu-transformersまたgolden-gpu-transformers(v5.1.1)のコンテナを通して提供されております。早速、2つのユースケースのデモに入りましょう。
テキストの類似性を評価することは、過去の類似したイベントを特定したり、イベントを内容に基づいて分類するなど、色々なユースケースに価値があります。このブログでは、2つのシナリオで、類似性スコアリングの実用的な使い方を示します。
業務上で、エラーメッセージを調査してトラブルシューティングを行うケースが多いと思います。しかし、過去に同様の問題が発生した可能性があります。過去の類似したログメッセージを見つけることで、解決策への道を提供し、現在の問題の迅速なトラブルシューティングを容易にすることができます。
このシナリオでは、エラーメッセージ "RuntimeError: assist binary not found" を解決しようとしています。Splunkに保存されている過去のログメッセージのリストがあると仮定した場合、以下の画像に示されているように、1行のSPL(Splunk Processing Language)を使用して、現在のメッセージを記録リスト内の各メッセージと比較し、類似性を評価することができます。
過去のログメッセージは "text2" というフィールドにリストされ、評価したい最近のログは "text1" フィールドにあります。Splunk DSDLで深層学習アルゴリズムを使用するには、以下のコマンドを実行してください。
| fit MLTKContainer algo=transformers_sentencebert lang=en from text1 text2 into app:transformers_sentencebert
ここで、指定されたコマンドでは、lang というパラメーターが入力言語を指定します(英語の場合は "en"、日本語の場合は "jp" をサポート)。また、入力フィールドの命名規則である "text1" および "text2" に厳密に従う必要があります。
このコマンドは、"predicted_similarity score" というフィールドを出力します。このフィールドの最大値は1.00で、テキスト間の完全な一致を示します。提供された例では、ログメッセージ "raise RuntimeError(f'assist binary not found" は、類似性スコアが0.84と高く、入力ログメッセージとの顕著な類似性を示しています。逆に、関連のないログメッセージは類似性が低く、入力メッセージとの類似性がないことを示します。
カスタマーサポートセンターでは、多くの顧客の問い合わせや苦情を管理することが一般的な課題です。これらの問い合わせの背後にあるインテントを特定することは、効率的な問題のトリアージングとサービスの分析にとって非常に重要です。このシナリオでは、顧客からの問い合わせ文 「壊れた商品の返品」を考えてみましょう。この問い合わせを、事前に定義されたインテントリストから適切なインテントにマッピングすることが目標です。この既存のインテントリストは、"text2" フィールドに提供されています(以下の画像に示されています)。
上記の図に示されているように、"text2" フィールドに格納された目標の意図のリストと、"text1" フィールドに提供された入力問い合わせに基づいて、前のシナリオで使用したSPLコマンドが実行されました(langパラメータは日本語のjpに取り替えた)。このコマンドは類似性スコアのリストを出力しました。これらのスコアの中で、最も高いスコアはインテント "損傷や不具合のある商品を交換する" に割り当てられました。
分類はテキスト分析において非常に重要なタスクです。Splunk DSDLのv5.1.0リリースでは、カスタマイズしたデータセットに基づいてテキスト分類モデルの学習が可能なNatural Language Processing (NLP) Assistant機能が導入されました(詳細はブログ)。ただし、学習データが限られている場合、頑健な分類モデルを作成することは簡単ではありません。
この課題に対して、新しいリリースではゼロショット分類機能が組み込まれています。この追加機能により、モデル学習を必要とせずに、カスタマイズ可能なラベルとプロンプトに基づいてテキスト分類を実行できるようになりました。この機能について、以下のシナリオから詳しく見てみましょう。
このシナリオでは、顧客からの苦情が受け取られました:「壊れた商品を返品したい」。この文を自動的に「注文ミス」、「損傷あり」、および「配達遅い」のラベルの1つに分類することが目標です。このラベルの決定は、以下の画像に示されているように、わずか1行のSPLコマンドで実現されます。
実行された次のSPLコマンドを見てみましょう。
| fit MLTKContainer algo=transformers_zeroshot_classification lang=jp labels=注文ミス+損傷あり+配達遅い prompt="返品の理由は{}です" from text into app:transformers_zeroshot_classification
まず最初に、入力テキストは "text" という名前のフィールドに配置される必要があります。このコマンドには3つの調整可能なパラメータが含まれています:"lang"、"labels"、および "prompt" です。"lang" パラメータはテキストの言語を指定し、英語の場合は "en"、日本語の場合は "jp" を使ってください。"labels" パラメータは、分類のためのカスタマイズ可能なラベルを決定します。各ラベルはスクリプトで使用される区切り記号として "+" 記号で区切られるべきです。最後に、"prompt" パラメータは、ゼロショット分類で使用されるプロンプトを調整することができます。プロンプト内の中括弧 "{}" は、ラベルの位置を示しています。
この例では、深層学習モデルは、「返品の理由は{注文ミス}です」が入力テキストに適した説明であるかどうかを判断し、提供されたすべてのラベルを繰り返し処理して、最適なオプション 「損傷あり」を見つけて、ラベルとそのラベルのスコア(0.4)を出力します。これにより、入力テキストの文脈に最も適したラベルが特定されます。
このブログ記事では、Splunk DSDLで動作する深層学習によるテキスト分析のための2つの新しい機能:テキストの類似性スコアリングとゼロショット分類を紹介しました。異なるユースケースを通じて、深層モデルをSplunk DSDL内に統合する際の簡便さと効果を実証しました。
Splunkプラットフォームは、データを行動へとつなげる際に立ちはだかる障壁を取り除いて、オブザーバビリティチーム、IT運用チーム、セキュリティチームの能力を引き出し、組織のセキュリティ、レジリエンス(回復力)、イノベーションを強化します。
Splunkは、2003年に設立され、世界の21の地域で事業を展開し、7,500人以上の従業員が働くグローバル企業です。取得した特許数は1,020を超え、あらゆる環境間でデータを共有できるオープンで拡張性の高いプラットフォームを提供しています。Splunkプラットフォームを使用すれば、組織内のすべてのサービス間通信やビジネスプロセスをエンドツーエンドで可視化し、コンテキストに基づいて状況を把握できます。Splunkなら、強力なデータ基盤の構築が可能です。