Skip to main content

This documentation is for an older version of this product. See the latest version of this content.Opens in a new tab

キューブでの Text Analytics の使用法

ここでは、Business Intelligence キューブ内に Text Analytics (テキスト・データを調査する分析) を含める方法について説明します (ここでは、テキスト・データを構造化されていないデータと呼びます)。

"Text Analytics で使用するセカンダリ・キューブの生成" も参照してください。

"BI サンプルのアクセス方法" も参照してください。

Text Analytics との統合の概要

Analytics エンジンには、テキスト・データ (構造化されていないデータ) を分析する機能が組み込まれています。テキスト・データとは、英語やフランス語などの人間の言語で記述されたテキストのことです。この機能の概要は、"コンセプトの概要 (NLP)" を参照してください。

構造化されていないデータを含むプロパティがキューブのソース・テーブルに存在する場合 (例えば、テキストを含む文字列フィールド)、キューブ内で構造化されていないデータを使用できます。その際、NLP (自然言語処理) ディメンジョンを使用するピボット・テーブルを定義することができ、さらにそれらのピボット・テーブルは通常どおりダッシュボードで使用できます。

例えば、キューブのソース・テーブルに構造化されているデータと構造化されていないデータの両方が含まれているとします。このページで後述する Aviation デモはその例です。このデモの場合、ソース・テーブルは、航空イベントのレコードで構成されます。航空イベントごとに、出来事の発生場所、航空機型式などを示す一連の短い文字列フィールドが存在します。長いテキスト・フィールドには、イベントの詳細レポートが格納されます。

(InterSystems IRIS Business Intelligence KPI メカニズムによって、Text Analytics クエリを公開する KPI も定義できます。"KPI とダッシュボード" を参照してください。)

用語

構造化されていないデータの分析時に、Analytics エンジンは、そのデータ内のエンティティを識別して、同類の単語および文の中での役割を特定します。エンティティとは、テキストの最小限の論理ユニット、つまり単語または単語のグループです。エンティティの例は、clear skiesclear sky です (これらは別のエンティティであることに注意してください。語幹解析は実行されません)。言語モデルでは、以下の 2 種類のエンティティが識別されます。

  • 関係とは、2 つの概念の関係を指定することでそれらの概念を結合する単語や単語のグループです。関係は、通常は動詞ですが、必ずしもそうとは限りません。

  • 概念とは、関係によって関連付けられる単語や単語のグループです。概念は、通常は名詞または名詞句ですが、必ずしもそうとは限りません。

エンジンは、各文を概念およびリレーションシップの論理的な順序に変換します。こうすることによって、同類の単語 (エンティティ) および文内でのその役割を識別します。これは、はるかに構造化された形式のデータで、分析の基礎となります。これには、関連メトリック、自動化された要約およびカテゴリ化が含まれ、既存の分類法またはオントロジと照合します。

概念およびリレーションシップの識別 (ならびにこれらのエンティティの関連性の測定) の主要なアクティビティに関して、エンジンは、テキストで説明されているトピックの情報を必要としません。つまり、トピックの理解ではなく言語の理解に基づいているため、このエンジンはドメインまたはトピックで適切に機能する真のボトムアップ・テクノロジといえます。

ただし、テキストで説明されるトピックに関する知識がある場合、これら既知の用語 (ディクショナリ用語と呼ばれる) との一致をエンジンに検出させることができます。エンジンは、エンティティの役割およびエクステントを理解するため、テキストで発見されたエンティティ (またはエンティティ・シーケンス) の既存の用語との一致率の高低を判定し、一致スコアを算出することも可能です。例えば、ディクショナリ用語 runway に対して、エンティティ runway (テキスト内) は完全一致ですが、runway asphalt は部分一致であるためスコアが低くなります。

ディクショナリ用語は、ディクショナリ項目にグループ化されます。これは、識別する一意のものを表します。例えば、runway および landing strip は、滑走路を意味する汎用ディクショナリ項目の 2 つの用語です。

ディクショナリの概要は、"InterSystems IRIS 自然言語処理 (NLP) の使用法" の "スマート・マッチング : ディクショナリの作成" および "スマート・マッチング : ディクショナリの使用" を参照してください。

NLP (自然言語処理) のメジャーとディメンジョンについて

NLP メジャーは、その他の種類のメジャーと異なり、アナライザには表示されません。また、ピボット・テーブルで直接使用することはできません。NLP メジャーは、テキスト・データとしてエンジンで処理する必要があるプロパティごとに定義します。そのメジャーは、NLP ディメンジョンの基礎として使用できます。

NLP ディメンジョンは、その他のディメンジョンと似ています。1 つ以上のレベルを含み、それらはメンバを含みます。メンバは、キューブのソース・クラスの一連のレコードで構成されます。

NLP ディメンジョンには、以下の 2 種類があります。

  • エンティティ・ディメンジョン。エンティティ・ディメンジョンには、1 つのレベルが含まれます。そのレベルの各メンバは、構造化されていないデータでエンジンが検出したエンティティに対応します。

    このレベルのメンバは、分散 (このエンティティを含むレコードの数) の降順に並べ替えられます。アナライザの左の領域でこのレベルを展開すると、最も一般的なエンティティ 100 件が表示されます。ただし、このレベルをフィルタとして使用すると、検索によってどのエンティティにもアクセスできます。

  • ディクショナリ・ディメンジョン。ディクショナリ・ディメンジョンには、通常は以下のように 2 つのレベルが含まれます。

    • 上位レベルのディクショナリ・レベルには、ディクショナリごとに 1 つのメンバが含まれます。このメンバは、指定されたディクショナリの項目と一致するすべてのレコードで構成されます。

      例えば、天気状況メンバは、ディクショナリ天気状況の項目と一致するすべてのレコードで構成されます。これには、曇り空などの項目が含まれます。

    • オプションの下位レベルである項目レベルには、ディクショナリ項目ごとに 1 つのメンバが含まれます。このメンバは、指定されたディクショナリ項目の用語と一致するすべてのレコードで構成されます。

      例えば、メンバは、凍結など、冬メンバの用語のいずれかと一致する各レコードで構成されます。

通常はソース・テキストに複数のエンティティが含まれるので、ソース・レコードは、あるレベルの複数のメンバに属する可能性が高くなります。

生成された Text Analytics ドメイン

このページで説明している機能を使用すると、1 つまたは複数の Text Analytics ドメインが作成されます。各キューブ・レベルおよび各メジャーは、Text Analytics クエリで使用できる擬似メタデータ・フィールドとして使用できます。レベルでは、等値演算子および不等値演算子がサポートされます。メジャーでは、すべての演算子がサポートされます。Text Analytics クエリの詳細は、"InterSystems IRIS 自然言語処理 (NLP) の使用法" を参照してください。

このページで後述する "Text Analytics ドメインの管理" も参照してください。

Aviation Events デモの設定

ここでは、Samples-Aviation サンプル (https://github.com/intersystems/Samples-AviationOpens in a new tab) を使用します。サンプルは、SAMPLES という名前の専用のネームスペースを作成して、そのネームスペースにロードすることをお勧めします。一般的な手順は、"InterSystems IRIS® で使用するサンプルのダウンロード" を参照してください。

Aviation デモには、いくつかのキューブ定義、条件リストの例、およびダッシュボードが含まれます。

このデモでは、プライマリ・キューブ (Aviation Events) はテーブル Aviation.Event に基づいていて、これは航空イベントのレコードで構成されています。航空イベントごとに、出来事の発生場所、航空機型式などを示す一連の短い文字列フィールドが存在します。長いテキスト・フィールドには、イベントの詳細レポートが格納されます。

サンプル・ダッシュボード

サンプル・ダッシュボードを表示する手順は以下のとおりです。

  1. 管理ポータルで、このサンプルをロードしたネームスペースにアクセスします。

  2. [アナリティクス][ユーザポータル] を選択します。

    ユーザ・ポータルが表示され、既存のパブリック・ダッシュボードとピボット・テーブルがこのネームスペースにリストされます。ユーザ・ポータルの上部で、[表示:] 表示オプションを選択できます。

  3. [Aviation event reports] ダッシュボードを選択します。

[Aviation event reports] ダッシュボードには、以下のピボット・テーブルが含まれます。

Pivot table with similarly named rows and columns for none, minor, serious, and fatal, plus a row for All Dictionaries.

このピボット・テーブルは、以下のように定義されています。

  • メジャーは、Count (イベント数) です。

  • 最後の行を除いて、Analytics エンジンが検出し Text Analytics ディクショナリの項目に一致したエンティティを各行は表します。

  • 最後の行は、ディクショナリの項目に一致したすべてのレコードを表します。

  • 列には、Highest Injury レベル (レポートに対して用意されている直接分類に基づく標準データ・ディメンジョン内のレベル) のメンバが表示されます。

つまり、行には、(テキストのレポートで Analytics エンジンが検出した) 構造化されていないデータによって決定されたグループが表示され、列には、構造化されているデータによって決定されたグループ (直接分類) が表示されます。このようなピボット・テーブルを使用して、構造化されていないデータと構造化されているデータの間の不一致を検出できます。

例えば、最も高い負傷レベルとして正式に None に分類されているレポートの情報を提供する None 列について考えてみます。この設定で、この列のセルでは、次の情報が提供されます。

  • iKnow —> none セルは、377 個のレポートで、Analytics エンジンが負傷ディクショナリの none 項目と一致するエンティティを検出したことを示しています。これは妥当です。

  • iKnow —> minor セルは、4 レポートで、Analytics エンジンが負傷ディクショナリの minor 項目と一致するエンティティを検出したことを示しています。つまり、4 レポートで、構造化されていないデータは、(これらのレポートは最も高い負傷レベルとして None が分類されているにもかかわらず) 軽傷があったことを示唆しています。

    このセルの値は、構造化されていないデータと構造化されているデータの間に不一致があることを表しています。このセルでは、さらに調査を進め、完全なレポートを読むことが有用です。

  • iKnow > serious セルおよび iKnow > fatal セルは空です。これらのセルは、Analytics エンジンが serious または fatal という負傷エンティティを検出したレコードがないことを示しています。これは妥当です。

None のセル iKnow > minor の詳細リストを表示し、これらのインシデントのレポートを (text measure アイコンを使用して) 表示する場合、これらのレポートの分類が間違っていて、すべてのレポートに軽傷があることがわかります。例えば、最初のレポートには、"The private pilot reported minor injuries" (プライベート・パイロットが軽傷を報告しました) という文が含まれています。

同様に、Minor 列で、iKnow > serious セルと iKnow > fatal セルが他の不一致を示しています。Serious 列では、iKnow > fatal セルが他の不一致を示しています。

Aviation キューブの詳細

これらのデモ・キューブの詳細を確認するには、アーキテクトおよびアナライザを使用します。Aviation Events キューブには、以下の要素が含まれています。

  • Count メジャー。イベント・レポート数です。

  • InjuriesTotal メジャー。負傷の合計です。

  • Report メジャー。構造化されていないデータを使用する NLP メジャーです。このメジャーは、NLP ディメンジョンでのみ使用することを意図されているため、アナライザにはリストされません。

  • Event DateLocationSky ConditionMid-Air、および Injuries の各ディメンジョン。構造化されているデータを使用する標準ディメンジョンです。

  • Entities ディメンジョン。エンティティ・ディメンジョンです。

  • Dictionaries ディメンジョン。ディクショナリ・ディメンジョンです。

  • Aircraft ディメンジョン。Aircraft キューブとのリレーションシップです。

    Aircraft キューブは、航空機の属性 (タイプ、モデルなど) でレコードをグループ化するために使用できるディメンジョンを提供します。Aircraft キューブには、航空機の職員と関連付けられたレベルを提供する、Crew キューブとのリレーションシップも含まれます。

NLP メジャーの定義

NLP メジャーを追加する手順は以下のとおりです。

  1. [要素の追加] を選択します。

    ダイアログ・ボックスが表示されます。

  2. [新規項目名の入力] に、メジャー名を入力します。

  3. [メジャー] を選択します。

  4. [OK] を選択します。

  5. アーキテクトの中央領域でメジャーを選択します。

  6. 以下のオプションを指定します。

    • [プロパティ] または [式] — 構造化されていないデータを含むソース値を指定します。

      または、プレーン・テキスト・ファイル (処理するテキストが格納されているファイル) のフル・パスを含む値を指定します。

    • [タイプ][iKnow] を選択します。

    • [iKnow ソース] — ソース値のタイプを指定します。stringstream、または file を選択します。例えば、選択したソース・プロパティのタイプが %Stream.GlobalCharacterOpens in a new tab の場合は、stream を選択します。または、値がファイルへのパスの場合は、file を選択します。

      このオプションは、Analytics エンジンに対して、[プロパティ] または [式] に指定された値の処理方法を指示します。

      domain は、上級者向けです。"代替手法 : 既存の Text Analytics ドメインの使用" を参照してください。

    例として、Aviation キューブは Aviation.Event クラスに基づきます。NLP メジャーの Report は、そのクラスの NarrativeFull プロパティに基づきます。このメジャーでは、[iKnow ソース]string です。

    [集計] オプションは、NLP メジャーに影響しません。

  7. アーキテクトにキューブ定義を保存します。

  8. このメジャーを使用するディクショナリ・レベルを 1 つまたは複数定義することを予定している場合、以下のように [ディクショナリ] オプションも指定します。

    1. [ディクショナリ] の下にあるボタンを選択します。

      ダイアログ・ボックスが表示されます。

    2. [利用可能なディクショナリ] リストで適切なディクショナリを選択してから [>] をクリックして、そのディクショナリを [選択されたディクショナリ] リストに移動します。

      [利用可能なディクショナリ] に必要なディクショナリがリストされていない場合は、このページで後述する "ディクショナリのロードおよび更新" を参照してください。

    3. 必要に応じて、この手順を繰り返します。

    4. [OK] を選択します。

    各ディクショナリは実際には条件リストです。ここで説明した手順を実行すると、Analytics エンジンは指定した条件リストを自動的に検出して、ディクショナリとしてロードし、マッチングを実行します。(この属性を追加しなくても、代わりにこれらのタスクを実行するメソッドを起動できます。)

NLP メジャーは、キューブのファクト・テーブルには格納されず、アナライザに表示されないことに注意してください。NLP メジャーの主な目的は、Text Analytics ドメインを定義することと、NLP ディメンジョンの基礎として使用することです。次のセクションを参照してください。

メジャーの既定のパラメータをオーバーライドできることにも注意してください。このページで後述する "メジャーの Text Analytics ドメイン・パラメータの指定" を参照してください。このオプションは上級者向けです。

代替手法 : 既存の Text Analytics ドメインの使用

既存の Text Analytics ドメインは、再利用できます。前述の手順を以下のように変更して、実行します。

  • [iKnow ソース]domain と指定します。

  • ソース式またはソース・プロパティを指定する際、これがファクト・テーブルのレコードに対応するソースの外部 ID として評価されるように指定します。

  • スタジオで、iKnowDomain 属性をメジャー定義に追加します。その値は、既存の Text Analytics ドメインの名前である必要があります。

  • 手順 8 をスキップします。つまり、[ディクショナリ] オプションを指定しないでください。

Important:

この場合、Text Analytics ドメインは、キューブのコンパイル、構築、および同期の処理とは別に管理されます。Analytics エンジンは、構築時に Text Analytics レコードの削除またはロードを一切実行しません。カスタム・コードでは、ファクト・レベルで外部 ID プロパティ/式によって表現され、特定されるすべてのデータが正しくロードされることを保証する必要があります。Analytics エンジンは、実行時にのみ Text Analytics ロジックを使用します。また、Analytics エンジンは、キューブのコンパイル、構築、および同期の処理時にデータを自動的にロードすることはない点に注意してください。データのロード、パラメータの指定、またはそれ以外にこのドメインの管理を実行するには、"InterSystems IRIS 自然言語処理 (NLP) の使用法" の説明に従ってドメイン API を直接使用します。

代替手法 : 他の場所からの構造化されていないテキストの取得

一部のシナリオでは、構造化されていないテキストを Web ページから取得する必要が生じることがあります。例えば、追加情報 (ニュース記事など) を検索できる URL を含むフィールドのある、構造化された情報のテーブルがある場合があります。そのような場合、NLP メジャーとしてテキストを使用する最も簡単な方法は、以下のとおりです。

  • ユーティリティ・メソッドを記述してテキストを URL から取得します。

  • NLP メジャーのソース式でそのユーティリティ・メソッドを参照します。

例えば、ニュース記事に関する概要情報のあるクラスでキューブをベースにするとします。クラス内の各レコードには、報道会社の名前、日付、見出し、および Link という名前のプロパティ (ニュース全文の URL が格納されている) が格納されています。それらの URL にあるニュース本文を使用する NLP メジャーを作成します。

そのためには、以下のように GetArticleText() メソッドをキューブ・クラスで定義できます。

ClassMethod GetArticleText(pLink As %String) As %String
{
    set tSC = $$$OK, tStringValue = ""
    try {
        
        set tRawText = ..GetRawTextFromLink(pLink, .tSC)
        quit:$$$ISERR(tSC)
        
        set tStringValue = ..StripHTML(tRawText, .tSC)
        quit:$$$ISERR(tSC)
        
    } catch (ex) {
        set tSC = ex.AsStatus()
    }
    if $$$ISERR(tSC) {
        set tLogFile = "UpdateNEWSARCHIVE"
        set tMsg = $system.Status.GetOneErrorText(tSC)
        do ##class(%DeepSee.Utils).%WriteToLog("UPDATE", tMsg, tLogFile)
    }
    quit tStringValue
}

GetRawTextFromLink() メソッドは、以下のように Raw テキストを取得します。

ClassMethod GetRawTextFromLink(pLink As %String, Output pSC As %Status) As %String
{
    set pSC = $$$OK, tRawText = ""
    try {
        // derive server and path from pLink
        set pLink = $zstrip(pLink,"<>W")
        set pLink = $e(pLink,$find(pLink,"://"),*)
        set tFirstSlash = $find(pLink,"/")
        set tServer = $e(pLink,1,tFirstSlash-2)
        set tPath = $e(pLink,tFirstSlash-1,*)
        
        // send the HTTP request for the article
        set tRequest = ##class(%Net.HttpRequest).%New()
        set tRequest.Server = tServer
        set tSC = tRequest.Get(tPath)
        quit:$$$ISERR(tSC)
        
        set len = 32000
        while len>0 {
            set tString = tRequest.HttpResponse.Data.Read(.len, .pSC)
            quit:$$$ISERR(pSC)
            set tRawText = tRawText _ tString
        }
        
    } catch (ex) {
        set pSC = ex.AsStatus()
    }
    quit tRawText
}

StripHTML() メソッドは、以下のように HTML フォーマットを削除します。

ClassMethod StripHTML(pRawText As %String, Output pSC As %Status) As %String
{
    set pSC = $$$OK, tCleanText = ""
    try {
        for tTag = "b","i","span","u","a","font","em","strong","img","label","small","sup","sub" {
            set tReplaceTag(tTag) = " "
        }
    
        set tLowerText = $$$LOWER(pRawText)
        set tStartPos = $find(tLowerText,"<body")-5, tEndTag = ""
        set pRawText = $e(pRawText,tStartPos,*), tLowerText = $e(tLowerText,tStartPos,*)
        for {
            set tPos = $find(tLowerText,"<")
            quit:'tPos // no tag start found
            
            set tNextSpace = $f(tLowerText," ",tPos), tNextEnd = $f(tLowerText,">",tPos)
            set tTag = $e(tLowerText,tPos,$s(tNextSpace&&(tNextSpace<tNextEnd):tNextSpace, 1:tNextEnd)-2)
            if (tTag="script") || (tTag="style") {
                set tPosEnd = $find(tLowerText,">",$find(tLowerText,"</"_tTag,tPos))
            } else {
                set tPosEnd = tNextEnd
            }
            if 'tPosEnd { // 
                set tEndTag = $e(pRawText,tPos-1,*)
                set pRawText = $e(pRawText,1,tPos-2)
                quit
            }
            
            set tReplace = $s(tTag="":"", 1:$g(tReplaceTag(tTag),$c(13,10,13,10)))
            set pRawText = $e(pRawText,1,tPos-2) _ tReplace _ $e(pRawText,tPosEnd,*)
            set tLowerText = $e(tLowerText,1,tPos-2) _ tReplace _ $e(tLowerText,tPosEnd,*)
        }
        set tCleanText = $zstrip($zconvert(pRawText, "I", "HTML"),"<>=W")
        
    } catch (ex) {
        set pSC = ex.AsStatus()
    }
    quit tCleanText
}

最後に、NLP メジャーを作成し、それを %cube.GetArticleText(%source.Link) ソース式でベースにします。

ディクショナリのロードおよび更新

このセクションでは、NLP メジャーとディメンジョンで使用するために、ディクショナリをロードおよび更新する方法について説明します。

ディクショナリのロード

InterSystems IRIS にディクショナリをロードするには、以下の手順を実行します。

  1. "条件リスト・マネージャへのアクセス" の説明に従って、条件リスト・マネージャにアクセスします。

  2. ディクショナリ項目およびディクショナリ用語が含まれる新しい条件リストを定義します。この条件リストを以下に示します。

    • 用語リストの簡便な名前を使用します。ディクショナリ名は、条件リスト名に基づき、接頭語が追加されます。

    • 必要に応じて、カスタム・フィールドURIlanguage を追加します。これらのフィールドを使用する方法の詳細は、以下の手順を参照してください。

      どの条件リストにも、keyvalue のフィールドがあるので、使用する条件リストにもそれらのフィールドがあります。

    条件リストの作成に関する一般情報は、"条件リストの定義" を参照してください。

  3. 用語を条件リストに追加します。条件リストの各項目について、以下のように値を指定します。

    • key (必須) は、テキストで検出される可能性がある一意の用語です。

    • value (必須) は、対応するディクショナリ項目です。

    • URI (オプション) は、ディクショナリ項目 (条件リストの value 列) の一意の識別子です。特定のディクショナリ項目を参照する必要がある場合、この識別子を MDX クエリのメンバ・キーとして使用できます。この識別子は、ディクショナリ名とディクショナリ項目の組み合わせごとに一意である必要があります。

      このフィールドを省略した場合、以下の形式の URI が生成されます。

      :dictionary_name:dictionary_item
      

      dictionary_name は定義または更新するディクショナリの名前、dictionary_itemvalue フィールドの値です。

    • language (オプション) は、すべて小文字の言語タグです (enes など)。

    以下に例を示します (language フィールドは省略されています)。

    A term list where one row has a Key of Broken Clouds, a Value of Clouds, and a URI of :weather:clouds.

  4. 条件リストを保存します。

  5. ディクショナリとしてこの条件リストを使用する NLP メジャーごとに [ディクショナリ] オプションを指定します。"NLP メジャーの定義" を参照してください。

[ディクショナリ] オプションは、この NLP メジャーのディクショナリとしてロードする条件リストを指定します。指定された条件リストは、キューブの構築時に自動的にロードされます。

ディクショナリの更新

ディクショナリとして使用する条件リストを作成または変更する場合、ディクショナリを更新する必要があります。この操作には、%iKnow.DeepSee.CubeUtilsOpens in a new tabUpdateDictionary() メソッドを使用します。

classmethod UpdateDictionary(pTermList As %String, 
                             pCube As %String = "", 
                             pMeasure As %String = "", 
                             pClearFirst As %Boolean = 0) as %Status

以下は、この指定の説明です。

  • pTermList は、用語リストの名前です。

  • pCube は、キューブの名前です。この引数を省略した場合、このメソッドは、このネームスペースのすべてのキューブに対して起動されます。

  • pMeasure は、NLP メジャーの名前です。この引数を省略した場合、このメソッドは、指定されたキューブ (または pCube によってはすべてのキューブ) のすべての NLP メジャーに対して呼び出されます。

  • pClearFirst は、再ロードする前に既存のディクショナリを用語リストから削除するかどうかを制御します。条件リストへの追加のみを実行した場合は pClearFirst に 0 を、既存の用語を変更または削除した場合は 1 を使用します。

    pClearFirst が 0 の場合、このメソッドは大幅に高速実行できます。

キューブの構築時に、新しい条件リストを追加することによって、このキューブによって使用されるすべてのディクショナリが更新されます。削除した項目および名前を変更した項目は、影響を受けません。このページで後述する "Text Analytics の更新が実行されるタイミング" を参照してください。

エンティティ・ディメンジョンの定義

エンティティ・ディメンジョンを追加する手順は以下のとおりです。

  1. このページの前半で示した説明に従って、このディメンジョンで使用する NLP メジャーを作成します。

    この操作は、ディメンジョンを定義したでも実行できます。その場合は、後でディメンジョンを編集して、ディメンジョンがこのメジャーを参照するようにします。

  2. [要素の追加] を選択します。

    ダイアログ・ボックスが表示されます。

  3. [新規項目名の入力] に、ディメンジョン名を入力します。

  4. [iKnow ディメンジョン] を選択し、[OK] を選択します。

  5. アーキテクトの中央領域でディメンジョンを選択します。

  6. 必要に応じて、ディメンジョンに以下の変更を加えます。

    • [iKnow タイプ][エンティティ] を選択します。

    • [NLP メジャー] — このディメンジョンで使用する NLP メジャーを選択します。

  7. アーキテクトの中央領域でレベルを選択し、必要に応じて [名前][表示名] を変更します。

  8. 必要に応じて、このレベルのメンバを手動で指定し、スタジオを使用してそのレベル内に <member> 要素を定義します。

    このレベルは、既定ではすべてのエンティティで構成され、分散の降順に並べ替えられています。<member> を使用して手動でメンバを指定する場合、それによってこのレベルのメンバとその順序が指定されます。エンティティ・ディメンジョンの場合、アナライザに表示されるメンバ数は 100 個に固定されています。

    "キューブおよびサブジェクト領域の高度な機能の使用" の "レベルのメンバの手動指定" を参照してください。

ディメンジョンまたはレベルのどちらでも、[ソース値] には何も指定する必要がないことに注意してください。NLP ディメンジョンの場合、ソース値は関連付けられている NLP メジャーによって指定されます。

ディクショナリ・ディメンジョンの定義

ディクショナリ・ディメンジョンを追加する手順は以下のとおりです。

  1. InterSystems IRIS にディクショナリをロードします。このページで前述した "ディクショナリのロード" を参照してください。

    この操作は、ディメンジョンを定義したでも実行できます。

  2. このディメンジョンで使用する NLP メジャーを作成します。

    この操作は、ディメンジョンを定義したでも実行できます。その場合は、後でディメンジョンを編集して、ディメンジョンがこのメジャーを参照するようにします。

  3. [要素の追加] を選択します。

    ダイアログ・ボックスが表示されます。

  4. [新規項目名の入力] に、ディメンジョン名を入力します。

  5. [iKnow ディメンジョン] を選択し、[OK] を選択します。

  6. アーキテクトの中央領域でディメンジョンを選択します。

  7. 必要に応じて、以下のように変更します。

    • [iKnow タイプ][ディクショナリ] を選択します。

    • [NLP メジャー] — このディメンジョンで使用する NLP メジャーを選択します。

  8. 必要に応じて、このディメンジョンの同じ階層に別のレベルを追加します。

    ディメンジョンにレベルが 1 つだけ存在する場合、そのレベルを使用してディクショナリ項目にアクセスします。ディメンジョンにレベルが 2 つ存在する場合、下位レベルを使用してディクショナリ項目に一致するエンティティにアクセスします。

  9. アーキテクトの中央領域で各レベルを選択し、必要に応じて [名前][表示名] を変更します。

  10. アーキテクトにキューブ定義を保存します。

  11. スタジオでキューブ・クラスを開き、このディメンジョンの定義を検索します。例えば、ディメンジョンにレベルが 1 つ存在する場合、以下のように表示されます (この例では改行が追加されています)。

    <dimension name="MyDictionaryDimension" disabled="false" 
     ` hasAll="false" allCaption="MyDictionaryDimension" allDisplayName="MyDict" 
      type="iKnow" iKnowType="dictionary"  nlpMeasure="Report" 
      hidden="false" showHierarchies="default">
        <hierarchy name="H1" disabled="false">
          <level name="Dictionary" disabled="false" list="false" useDisplayValue="true">
          </level>
        </hierarchy>
    </dimension>
    

    または、ディメンジョンにレベルが 2 つ存在する場合、以下のように表示されます。

    <dimension name="MyDictionaryDimension" disabled="false" 
      hasAll="false" allCaption="MyDictionaryDimension" allDisplayName="MyDict" 
      type="iKnow" iKnowType="dictionary"  nlpMeasure="Report" 
      hidden="false" showHierarchies="default">
        <hierarchy name="H1" disabled="false">
          <level name="Dictionary" disabled="false" list="false" useDisplayValue="true">
          </level>
          <level name="Items" disabled="false" list="false" useDisplayValue="true">
          </level>
        </hierarchy>
    </dimension>
    
  12. ディクショナリ・レベルで、必要に応じてこのレベルで使用するディクショナリを 1 つまたは複数指定します。レベルが 2 つ存在する場合、高いほうのレベルがディクショナリ・レベルになります。レベルが 1 つ存在する場合、そのレベルがディクショナリ・レベルになります。

    ディクショナリを指定しない場合、すべてのディクショナリが使用されます。

    使用するディクショナリごとに、<level> 要素と </level> の間に以下を追加します。

            <member name="dictionary name" />
    
    

    dictionary name はディクショナリの名前です。

    例えば、ディクショナリを 1 つ使用する場合、以下のようになります。

    <dimension name="MyDictionaryDimension" disabled="false" 
      hasAll="false" allCaption="MyDictionaryDimension" allDisplayName="MyDict" 
      type="iKnow" iKnowType="dictionary"  nlpMeasure="Report" 
      hidden="false" showHierarchies="default">
        <hierarchy name="H1" disabled="false">
          <level name="Dictionary" disabled="false" list="false" useDisplayValue="true">
             <member name="my dictionary" />
          </level>
          <level name="Items" disabled="false" list="false" useDisplayValue="true">
          </level>
        </hierarchy>
    </dimension>
    
  13. スタジオにキューブ定義を保存します。

ディメンジョンまたはレベルのどちらでも、[ソース値] には何も指定する必要がないことに注意してください。NLP ディメンジョンの場合、ソース値は関連付けられている NLP メジャーによって指定されます。

項目レベルへのメンバ・オーバーライドの追加

レベルが 2 つ存在するディクショナリ・ディメンジョン内では、既定で、ディクショナリ・レベルによって下位項目レベルのメンバが決定されます。この項目レベルに、親によって決定される定義をオーバーライドする <member> 要素を追加できます。

これは、例えば、ディクショナリのサブセットのみ表示する必要がある場合に便利です。

このようなオーバーライドを作成する場合、各 <member> 要素は、以下の形式で指定する必要があります。

        <member name="itemURI" displayName="displayName" />

itemURI はディクショナリ項目の一意の URI、displayName はディクショナリ項目の表示名です。このページで前述した "ディクショナリのロード" を参照してください。

<member> 要素を、必要に応じて並べ替えてリストします。以下はその例です。

  <level name="ReportDictInjuriesDimItem" displayName="Injuries" >
     <member name=":injuries:none" displayName="not injured" />
     <member name=":injuries:minor" displayName="minor injuries" />
     <member name=":injuries:serious" displayName="serious injuries" />
     <member name=":injuries:fatal" displayName="killed" />
  </level>

これらのオーバーライドは以下のように機能します。

  • 少なくとも 1 つの <member> 要素が、指定されたディクショナリ項目とマッチング可能である場合、このレベルには、これらの <member> 要素によってリストされるメンバのみが含まれます。

  • ディクショナリ項目とマッチング可能な <member> 要素が存在しない場合、これらのオーバーライドはすべて無視されます。

プラグインを使用するメジャーの追加

プラグインは事実上クエリです。システムには、専用の Text Analytics クエリを実行するプラグインが用意されています。これらのプラグインを使用して、エンティティの出現および一致結果に関する情報を提供する計算メジャーを追加できます。以降のセクションで詳細を説明します。

エンティティ出現を数値化するメジャーの追加

エンティティ出現に関する情報 (合計数、レコードあたりの平均数など) を提供するメジャーを簡単に追加できます。例は、Aviation Events キューブの計算メジャー Distinct Entity Count を参照してください。

独自のメジャーを追加するには、"InterSystems Business Intelligence のモデルの定義" の "計算メジャーの定義" の手順に従います。[式] には、以下の式を使用します。

%KPI("%DeepSee.iKnow","Result",1,"aggregate","total","%CONTEXT")

この式は、あらゆるコンテキストにおいて、個別のエンティティの合計数を返します。

"total" の代わりに、以下のいずれかを使用できます。

  • "sum" — この場合、式は、指定したコンテキストにおいて、(個別のエンティティではなく) エンティティの合計数を返します。つまり、エンティティが複数回カウントされる場合があります。

  • "average" — この場合、式は、指定したコンテキストにおいて、レコードあたりのエンティティの平均数を返します。

  • "max" — この場合、式は、指定したコンテキストのあらゆるレコードのエンティティの最大数を返します。

  • "min" — この場合、式は、指定したコンテキストのあらゆるレコードのエンティティの最小数を返します。

この式は、%KPI MDX 関数とプラグイン・クラス %DeepSee.PlugIn.iKnowOpens in a new tab を使用します。この関数の詳細は、"InterSystems MDX リファレンス" を参照してください。このクラスの詳細は、クラス・リファレンスを参照してください。

Important:

"%CONTEXT" を省略すると、あらゆる場合で、計算メジャーは、すべてのコンテキストを無視し、データ・セット全体の結果を返します。

一致結果を数値化するメジャーの追加

ディクショナリ・マッチング結果に関する情報 (合計数、レコードあたりの平均一致スコアなど) を提供するメジャーを簡単に追加できます。例は、Aviation Events キューブの計算メジャー Dictionary Match Count および Total Dictionary Score を参照してください。

独自のメジャーを追加するには、"InterSystems Business Intelligence のモデルの定義" の "計算メジャーの定義" の手順に従います。[式] には、以下の式のいずれかを使用します。

  • 一致結果 (ディクショナリ項目と一致する結果) の数を取得するには、以下の式を使用します。

    %KPI("%DeepSee.iKnowDictionary","MatchCount",1,"aggregate","sum","%CONTEXT")
    

    この式は、あらゆるコンテキストにおいて、一致する結果の合計数を返します。

    "sum" の代わりに、前のセクションでリストした代替の集約タイプを使用できます。

  • 一致する結果のスコアを取得するには、以下の式を使用します。

    %KPI("%DeepSee.iKnowDictionary","MatchScore",1,"aggregate","sum","%CONTEXT")
    

    この式は、あらゆるコンテキストにおいて、一致する結果の合計スコアを返します。

    "sum" の代わりに、前のセクションでリストした代替の集約タイプを使用できます。

これらの式は、%KPI MDX 関数とプラグイン・クラス %DeepSee.PlugIn.iKnowDictionaryOpens in a new tab を使用します。この関数の詳細は、"InterSystems MDX リファレンス" を参照してください。このクラスの詳細は、クラス・リファレンスを参照してください。

Important:

"%CONTEXT" を省略すると、あらゆる場合で、計算メジャーは、すべてのコンテキストを無視し、データ・セット全体の結果を返します。

リストに Text Analytics の結果を組み込む方法

以下のように、リストに Text Analytics の結果を組み込むことができます。

リストに Text Analytics サマリ・フィールドを組み込む方法

構造化されていないテキストのサマリをリストに追加できると便利です。このようなサマリを追加するには、リスト・フィールド定義内で $$$IKSUMMARY トークンを使用します。このトークンは、2 つの引数 (角括弧で囲みます) を取ります。

$$$IKSUMMARY[nlpMeasure,summarylength] As Report

nlpMeasure はサマリを作成する NLP メジャーの名前、summary_length はサマリに追加する文の数 (既定値は 5) です。キューブに NLP メジャーが 1 つしかない場合は、nlpMeasure を省略できます。

As 節は、列のタイトルを指定します。この場合、タイトルは Report です。

$$$IKSUMMARY トークンは、ソースと最も関連性のある文を返し、最大 32000 文字の文字列に連結します。

以下に例を示します。

<listing name="Default" disabled="false" listingType="table" 
    fieldList="%ID,EventId,Year,AirportName,$$$IKSUMMARY[Report] As Report">
</listing>

内部で $$$IKSUMMARY は、%iKnow.Queries.SourceAPIOpens in a new tabGetSummary() メソッドを使用します。

リスト・キューブと関連キューブの間に多対一のリレーションシップがある場合は、$$$IKSUMMARY トークンを使用して関連キューブ内の NLP メジャーを参照することもできます。その場合は、$$$IKSUMMARY の最初の引数として、nlpMeasure の代わりに relationshipname.nlpMeasure を使用します。例えば、Observations キューブに、Patients キューブを指す Patient という名前のリレーションシップがあるとします。また、Patients キューブには、History という名前の NLP メジャーがあるとします。Observations キューブ内で、$$$IKSUMMARY[Patient.History] を含むリストを定義できます。

同様に、リレーションシップのリレーションシップを参照することもできます。例 : $$$IKSUMMARY[Relationship.Relationship.Measure]

コンテンツ分析プラグインで使用する専用リストの作成

アナライザに用意されている高度な分析オプションの 1 つとして、コンテンツ分析プラグインがあります。このオプションは、詳細リストを使用して、最も一般的なレコード 5 件と最も一般的でないレコード 5 件を表示します。既定では、このプラグインは、キューブの既定リストを使用します。

容量の問題で、ここで使用するためだけのリストを作成するものとします。ShortListing という名前のリストを定義した場合は、プラグインは代わりにこのリストを使用します。

どちらの場合も、プラグインは、リストに定義されている列の右側に Score 列を追加します。

この分析オプションの詳細は、"ダッシュボードとユーザ・ポータルの使用法" の "Text Analytics コンテンツ分析" を参照してください。

Text Analytics ドメインの管理

このページで説明している機能を使用すると、1 つまたは複数の Text Analytics ドメインが作成されます。こうした Text Analytics ドメインは、Business Intelligence で管理されます ("InterSystems IRIS 自然言語処理 (NLP) の使用法" で説明するように、直接作成する Text Analytics ドメインとは異なります)。これらを変更するには、このページで説明されている API のみを使用する必要があります。

InterSystems IRIS によるこれらのドメインの管理は、ユーザによる操作をほとんど、あるいはまったく必要としない方法で行われます。ここでは、Text Analytics ドメインに精通していて、管理方法の詳細に興味があるユーザを対象に説明します。

ユーザがキューブに NLP メジャーを 1 つ追加すると、システムによって Text Analytics ドメインが 1 つ作成されます。このドメインの名前は DeepSee@cubename@measurename です。cubename はキューブの論理名、measurename は NLP メジャーの論理名です。

InterSystems IRIS では、これらのドメインが以下のように管理されます。

  • キューブを初めてコンパイルするときに、必要なドメインが作成されます。

  • キューブの構築時に、Analytics エンジンは NLP メジャーのテキストを処理して、その結果を保存します。

  • キューブを再コンパイルするときは、必要なドメインが存在するかどうかのチェックが行われます。存在する場合、それらが再利用されます。存在しない場合、作成されます。

    特定のドメインが再利用可能かどうかのチェックでは、各 NLP メジャーの (論理名ではなく) ソース値またはソース式が考慮されます。したがって、NLP メジャーの名前を変更した場合も、既存の Text Analytics ドメインが再利用されます。

  • NLP メジャーを削除してキューブを再コンパイルすると、対応する Text Analytics ドメインおよび関連付けられていたエンジンのすべての結果が削除されます。

  • キューブを削除すると、その Text Analytics ドメインおよび関連付けられていたエンジンのすべての結果が削除されます。

その他のトピック

このセクションでは、以下のその他のトピックについて説明します。

メジャーの Text Analytics ドメイン・パラメータの指定

まれに、指定された NLP メジャーで使用する既定の Text Analytics ドメイン・パラメータをオーバーライドする必要がある場合があります。そのためには、スタジオでキューブ・クラスを編集し、該当する NLP メジャーの定義に以下を追加します。

iKnowParameters="parameter::value;parameter::value"

parameter には、パラメータ名またはパラメータを表すマクロを使用します。パラメータとその値の間に 2 つのコロンを使用します。リストの名前と値のペア同士の間は、セミコロンで区切ります。

以下の例では、DefaultConfig パラメータおよび MAT:SkipRelations パラメータの既定の値がオーバーライドされます。

iKnowParameters="DefaultConfig::Spanish;MAT:SkipRelations::0"

Text Analytics ドメイン・パラメータの詳細は、"InterSystems IRIS 自然言語処理 (NLP) の使用法" の "NLP 環境作成の代替方法" を参照してください。

skiplist のロード

skiplist とは、クエリから返されることを望まないエンティティのリストです。Business Intelligence で使用するために skiplist をロードするには、以下の手順を実行します。

  1. skiplist 項目で構成される条件リストを作成します。条件リストの作成の詳細は、"InterSystems Business Intelligence の実装" の "条件リストの定義" を参照してください。

  2. この skiplist を使用する NLP メジャーを編集します。そのためには、スタジオでメジャーを編集し、iKnowParameters 属性を指定します。この属性には、1 つ以上の名前と値のペアが含まれています。名前は Text Analytics ドメイン・パラメータで、値はそれに対応する値です。iKnowParameters の指定に関する一般情報は、このページで前述した "メジャーの Text Analytics ドメイン・パラメータの指定" を参照してください。

    この場合、Text Analytics ドメイン・パラメータは $$$IKPDSSKIPLIST で、その値は条件リスト名です。

  3. キューブを再構築するか、条件リストを skiplist として手動でロードします。

    条件リストを skiplist として手動でロードするには、以下の %iKnow.DeepSee.CubeUtilsOpens in a new tab のクラス・メソッドを使用します。

    classmethod LoadTermListAsSkipList(pCube As %String, 
                                         pMeasure As %String, 
                                         pTermList As %String) as %Status
    

    以下は、この指定の説明です。

    • pCube は、この NLP メジャーを使用するキューブの名前です。

    • pMeasure は、この skiplist を使用する NLP メジャーの名前です。

    • pTermList は、用語リストの名前です。

この skiplist は、以下の目的で使用されます。

  • アナライザで、または直接 MDX を使用して、エンティティ・ディメンジョンから返されたエンティティをフィルタ処理する。

  • [エンティティ分析] 画面に表示される上位グループの派生からのエンティティを除外する ("ダッシュボードとユーザ・ポータルの使用法" の "[ピボット分析] ウィンドウの使用" を参照)。skiplist のエントリ (またはそれらの標準化された形式) は、それら自体でグループになることはありませんが、他のグループのスコアに引き続き寄与します。例えば、pilot が skiplist にある場合でも、helicopter pilot は、helicopter グループにまだ属しています。

  • [エンティティ分析] 画面の [エンティティの詳細] タブに表示されるエンティティをフィルタ処理する。

skiplist は、[エンティティ分析] 画面の [文字列の分析] オプションの補助テキスト・エントリには影響しません。

skiplist の更新

skiplist を更新するには、対応する条件リストを編集してから、キューブを再構築するか、条件リストを skiplist として手動でロードします (前のサブセクションを参照)。

NLP の更新が実行されるタイミング

以下の表は、Analytics エンジンがディクショナリ、skiplist、およびマッチング結果を更新するタイミングをまとめたものです。

操作 Analytics エンジンによる NLP の自動更新
キューブのコンパイル なし
キューブの構築
  • 新しい条件リストを追加することによって、このキューブが使用するすべてのディクショナリを更新 (削除した項目および名前を変更した項目は影響を受けません)

  • キューブが使用する条件リストのすべての skiplist の完全な更新

  • 一致する結果の完全な更新

キューブの同期
  • ディクショナリまたは skiplist の更新なし

  • ファクト・テーブル内の新しいレコードの結果の作成

API または管理ポータルを使用した条件リストの更新 なし
%iKnow.DeepSee.CubeUtilsOpens in a new tabUpdateDictionary() メソッドを使用した条件リストの更新
  • 指定した条件リストが表すディクショナリの完全な更新

  • 指定した条件リストに対する一致する結果の完全な更新

FeedbackOpens in a new tab