Dictionary Add

-find root -> Resource -> Dictionaries

-click right on Dictionaries folder

-select New -> Dictionary Database

-insert Dictionary name

-select language

-click Finish

-find out dictionary name which you made

-select the dictionary

-right click at dictionary table and choose Add entry to dictionary [dicName]

-insert a word you want to add as dictionary

-if you want to add word as synonym, click Add surface form



Server Config

-find root -> Configuration -> Servers

-right click on Servers folder

-select New -> Contents Analystic Server Connection

-insert Host Name, User Id, Password, Port, Admin Port, Collection.

User Id, Password, Port, Admin Port has already been setup, when you install wex in server




Annotator refresh

:All analysis is executed by Annotator config folder.

Eventhough building new dictionary or rule, the new built setup which won't be reflected at annotation config is not a target of analysis. 

-find root -> Configuration -> Annotators

-click right on Dictionaries folder

-select New -> UIMA Pipeline Configuration

-set up Lexical  Analysis(dictionary model), parsing Rules(rule base model)

-click Select button at Lexical Analysis index.

-Add new dictionary.

-click Rebuild buttion.




Annotator export & Facet Add

-find root -> Configuration -> Annotators

-right click on .annoconfig file

-select Content Analytics Studio -> UIMA pipeline to Content Analystic Server

-select target annotation config

-select target server config

-select collection(collection is easily seemed as table of DB)

-click Add button

-select UIMA type

-Add Index Filed or Facet*(covered Text, literal value... )

-Add Facet Tree Path

-check button Field Search

-check buttion Upload PEAR file to the Content Analystic Server (*what sis PEAR file)




1
2
3
4
5
6
7
8
9
{
        "path": [
          "component",
          "danger"
        ],
        "keyword""バッテリー",
        "begin"1,
        "end"6
      }
cs




1
2
3
4
5
6
7
8
{
        "path": [
          "Section"
        ],
        "keyword""危険物情報",
        "begin"1,
        "end"6
      }
cs


1
2
3
4
5
6
7
8
 {
        "path": [
          "Section"
        ],
        "keyword""輸出入制限品",
        "begin"1,
        "end"6
 }
cs



covered Text : 인지한 단어 그대로

literal value : 지정한 스트링으로 keyword지정

lemma:key : 搭乗口:搭乗ゲート、ゲート의 경우 搭乗口의 동의어로 搭乗ゲート、ゲート가 포함되어 있음. 이때 lemma는  搭乗口. keyword를 lemma:key로 설정할 경우 ゲート를 찾아도 搭乗口를 키워돌 지정함














https://console.bluemix.net/docs/services/watson-knowledge-studio/glossary.html#gloss_M


annotation

Information about a span of text. For example, an annotation might indicate that a span of text represents a company name.



annotation set

In human annotation, a collection of documents that are extracted from the corpus that allow the workload to be shared by multiple human annotators. In machine-based annotation, a collection of documents that can be used as blind data, training data, or test data.





human annotator

A subject matter expert who reviews, modifies, and augments the results of pre-annotation by identifying mentions, entity type relationships, and mention coreferences. By examining text in context, a human annotator helps determine ground truth and improve the accuracy of the machine learning model.

[ヒューマン・アノテーション]:人間の目でドキュメントを確認し、その中の単語や関係に対して手動でentityやrelationを割り当てる方法です。ある意味もっとも確実といえる方法ですが、時間がかかったり人間ならではのミスもある方法です。複数のヒューマンアノテーターで一斉にアノテーションすることにより正確さを高めることもできますが、その場合はアノテーター間で矛盾したアノテーションをおこなう(アノテーションの競合といいます)可能性もあるため、最終的にはその競合を解消する必要があります。





entity

  1. A mention that is annotated by an entity type.
  2. A person, object, or concept about which information is stored.
  3. A set of details that are held about a real-world object such as a person, location, or bank account. An entity is a kind of item.





entity type

The type of entity that a mention represents without consideration for context. For example, the mention IBM might be annotated by the entity type ORGANIZATION.

In an entity-relationship model, an entity type is the thing that is being modeled or the thing that a mention refers to, such as the name of a person or place. Different entity types have different sets of attributes such as "surname" or "home town", and are connected through relationships like "lives in". An entity type exists independently and can be uniquely identified.

[entity type]は単語の種類を分類したものです。以下例を示します。

- メアリー(Mary), ボブ(Bob), トーマス・ワトソン(Thomas Watson), オバマ大統領(President Obama)などは、人(PERSON)entity typeとしてアノテーションされます。

- IBM, Google, Microsoftは、組織(ORGANIZATION)entity typeとしてアノテーションされます。




relation

Typically a verb that reflects how entities are related to one another. For example, "lives in" is a relation between a person and a town. A relation links two different entities in the same sentence.






relation type

A binary, uni-directional relationship between two entities. For example, Mary employedBy IBM is a valid relationship; IBM employedBy Mary is not.

[relation type]は2つのentity間の順序付けられた関係を定義します。以下例を示します。

- メアリーはIBMで働いている(Mary works for IBM)という文からは、~で働いている(employedBy)relation typeがアノテーションされます。

- IBMの創始者であるトーマスワトソン(IBM founder Thomas Watson)という文からは、~の創始者である(founderOf)relation typeがアノテーションされます。






rule set

A set of rules that define patterns for annotating text. If a pattern applies, then the actions of the rule are performed on the matched annotations. A rule typically specifies the condition that must match, an optional quantifier, a list of additional constraints that the matched text must fulfill, and the actions to be taken when a match occurs, such as creating a new annotation or modifying an existing annotation.





lemma

The normalized or canonical form of a word. Typically, the lemma is the underived and uninflected form of a noun or a verb. For example, the lemma of the terms 'organizing' and 'organized' is 'organize'. See also dictionaryand surface form.






dictionary

A collection of words that can be used to pre-annotate documents. A new annotation is created for each word in the document text that matches a term in the dictionary. A machine learning model can be configured with one or more independent dictionaries, which are typically domain-specific, such a dictionary for pharmaceuticals and a dictionary for wealth management. See also lemma and surface form.

[辞書]には、ドキュメントで使用される単語の見出し語とその類義語、品詞が含まれています。




dictionary pre-annotator

A component that identifies mentions in text that match a specific set of words. By using domain-specific terminology to pre-annotate text, dictionary pre-annotators can accelerate a human annotator's ability to prepare a set of ground truth documents.

[辞書ベースアノテーション]:辞書とドキュメントを照らし合わせ、辞書にある単語がドキュメント内にもある場合、その辞書に対応するentity typeをその単語に割り当てる方法です。ドキュメントが固有名詞や特殊な用語を持つ場合に有効ですが、逆に多義語の分類を正しくできないことがあります(はし(橋)とはし(端)など)。また、辞書ベースアノテーションではrelationをアノテーションしないため、代わりにヒューマン・アノテーションにより手動で補う必要があります。


document set

A collection of documents. Documents that are imported together become a document set. Annotated documents that are grouped together for training purposes (Test, Train, Blind) are generated as document sets.





machine learning model/machine learning annotator

A component that identifies entities and entity relationships according to a statistical model that is based on ground truth. The model applies past experience, such as training data, to determine or predict the correct outcome of future experiences based on characteristics of the data. These past experiences are captured in the form of a model by calculating feature scores for each candidate answer or evidence and combining that with known outcomes. Sometimes referred to as machine learning annotator.

[機械学習アノテーション]:既存のドキュメントのみをアノテーションした後、機械学習モデルを作成してアノテーションの結果を学習させ、その学習モデルを使用して後から追加した未知の新しい文書に自動的にアノテーションする方法です。学習に使用されたドキュメントと新しいドキュメントが似ている場合に有効です


Class


클래스에는 딕셔너리나 정규표현식, 률의 규칙이 포함된다. 룰은 딕셔너리와 정규표현식의 조합을 포함하여 규정하는 더큰 방식의 률베이스 모델이다





















Watson Knowledge StudioのTutorialをやってみた (後編)

この記事は最終更新日から1年以上が経過しています。

はじめに(前編のおさらい)

Watson Knowledge Studio(以下、WKS)は、IBM Watsonにおいて、特定の業界に特化して用いられる言葉のニュアンス、意味や関係を理解する機械学習モデルを、開発者と専門家が協力して作成するクラウド・ベースのアプリケーションです。

本記事は、Watson Knowledge StudioのTutorialをやってみた (前編)に続く後編です。前回に引き続き、WKSのチュートリアルを実施していきます。

前回では、まずチュートリアルに先立ち、WKSの特色や使用の流れ、アノテーションやtype systemといった概念について解説しました。そしてチュートリアルでは、プロジェクトの作成、type systemの作成、ドキュメントの追加、ドキュメントセットの作成、辞書の追加を実施しました。

今回は、ヒューマン・アノテーション辞書ベースアノテーション機械学習アノテーションなど、数種類のアノテーションの方法をチュートリアルを通して学習します。

チュートリアルの前に

前回(前編)で解説した用語のひとつに、ドキュメントに対して正解データを付与する作業を意味するアノテーションがありました。WKSでは、このアノテーションを自動的に行ってくれる機械学習アノテーターを作成することを目指すことになります。

今回(後編)では、この機械学習アノテーターを作成するために用いる次の3つのアノテーションを、チュートリアルを通して体験します。

  • ヒューマン・アノテーション:人間の目でドキュメントを確認し、その中の単語や関係に対して手動でentityやrelationを割り当てる方法です。ある意味もっとも確実といえる方法ですが、時間がかかったり人間ならではのミスもある方法です。複数のヒューマンアノテーターで一斉にアノテーションすることにより正確さを高めることもできますが、その場合はアノテーター間で矛盾したアノテーションをおこなう(アノテーションの競合といいます)可能性もあるため、最終的にはその競合を解消する必要があります。

  • 辞書ベースアノテーション:辞書とドキュメントを照らし合わせ、辞書にある単語がドキュメント内にもある場合、その辞書に対応するentity typeをその単語に割り当てる方法です。ドキュメントが固有名詞や特殊な用語を持つ場合に有効ですが、逆に多義語の分類を正しくできないことがあります(はし(橋)とはし(端)など)。また、辞書ベースアノテーションではrelationをアノテーションしないため、代わりにヒューマン・アノテーションにより手動で補う必要があります。

  • 機械学習アノテーション:既存のドキュメントのみをアノテーションした後、機械学習モデルを作成してアノテーションの結果を学習させ、その学習モデルを使用して後から追加した未知の新しい文書に自動的にアノテーションする方法です。学習に使用されたドキュメントと新しいドキュメントが似ている場合に有効です。

重要なのはこの3つのアノテーションの使い分けです。たとえば、辞書ベースアノテーションを事前に実施しておくことで、ヒューマン・アノテーションを行う際にドキュメントのアノテーションを一からすべて実施する必要をなくし、作業負荷を軽減する、といったことが可能になります。こうしてアノテーションしたドキュメントを機械学習させてモデルを作成したり、逆にそのモデルによって機械学習アノテーションしたドキュメントを再びヒューマン・アノテーションによって修正してモデルを再学習させることによって、機械学習アノテーターの精度を改善する、といった作業をすすめることになります。

チュートリアル

では、前回の続きからチュートリアルを再開します。

  • 前編(前回)
    • Lesson 1: ユーザーロールの割り当て
    • Lesson 2: プロジェクトの作成
    • Lesson 3: type system の作成
    • Lesson 4: ドキュメントの追加
    • Lesson 5: ドキュメントセットの作成
    • Lesson 6: 辞書の追加
  • 後編(今回)
    • Lesson 7: 辞書ベースアノテーターによる事前アノテーション
    • Lesson 8: アノテーション・タスクの作成
    • Lesson 9: ドキュメントのアノテーション
    • Lesson 10: アノテーター間合意分析
    • Lesson 11: アノテーション済ドキュメント間の競合の解消
    • Lesson 12: 機械学習アノテーターの作成
    • Lesson 13: 機械学習アノテーターによる事前アノテーション

なお、Lesson 8からLesson 11は、ヒューマン・アノテーションの作業に相当します。

Lesson 7: 辞書ベースアノテーターによる事前アノテーション

辞書ベースアノテーターを作成して、ドキュメントの事前アノテーションを行います。

  1. Annotator Componentページにて、DictionaryボックスのCreate this type of pre-annotatorをクリックします。
    WS000027.JPG

  2. Create Annotatorページにて、前回(前編)の「Lesson 6: 辞書の作成」で作成したTest dictionary辞書の横のチェックボックスを選択します。選択された辞書の単語がプレビューに表示されます。
    さらに、Createをクリックして、ドロップダウンからCreate & Runを選択します。
    WS000028.JPG

  3. Run Annotatorページにて、前回(前編)の「Lesson 5: ドキュメントセットの作成」で作成した2つのドキュメントセットの横のチェックボックスを選択し、Runをクリックします。
    WS000029.JPG
    Annotator Componentページに辞書ベースアノテーターが追加され、この辞書ベースアノテーターによる2つのドキュメントセットSet1Set2への事前アノテーションが行われます。
    WS000030.JPG

Lesson 8: アノテーション・タスクの作成

ヒューマン・アノテーションを行うために、アノテーション・タスクを作成します。

  1. Human Annotationページにて、Add Taskをクリックします。
    WS000031.JPG

  2. タスクを表すボックスにおいて、タスクの詳細を下記のように指定し、Add Taskをクリックします。

    • Enter a title欄:Test
    • Deadline欄:未来の任意の日付 WS000032.JPG
  3. Add Document Set to Taskウインドウにおいて、前回(前編)の「Lesson 5: ドキュメントセットの作成」で作成した2つのドキュメントセットの横のチェックボックスを選択し、Create Taskをクリックします。
    WS000033.JPG
    Testタスクが作成され、Human AnnotationページのTasksタブに表示されます。
    WS000034.JPG

Lesson 9: ドキュメントのアノテーション

ヒューマン・アノテーションを行います。
実際のプロジェクトでは、HUMAN_ANNOTATORロールを持つ複数の異なるユーザーにより多くの単語に対してアノテーションを行いますが、本チュートリアルでは話を簡単にするため、単一のユーザーにより2箇所だけアノテーションを行うことにします。

  1. Human Annotationページにて、「Lesson 8: アノテーション・タスクの作成」で作成したTestアノテーション・タスクをクリックします。
    WS000034.JPG

  2. ドキュメントセットSet 1の横のAnnotateをクリックします。
    WS000036.JPG

  3. ドキュメント一覧のページにて、ドキュメントTechnology - gmanews.tvをクリックします。 
    WS000037.JPG

  4. アノテーションページが開きます。
    WS000038.JPG
    すでに単語IBMORGANIZATION entity typeとしてアノテーションされています。このアノテーションは、「Lesson 7: 辞書ベースアノテーターによる事前アノテーション」にて辞書ベースアノテーターによって事前に追加されたものです。この事前アノテーションは正しいので変更の必要はありません。

  5. 左側のMentionアイコンをクリックし、entityのアノテーションを開始します。
    ドキュメント内のテキストThomas Watsonを選択して、右のEntity-TypeリストのPERSONをクリックします。これにより、テキストThomas WatsonPERSONentity typeとしてアノテーションされます。
    WS000039.JPG
    ※ショートカットコマンドとして、右側のリスト内のentity/relationをクリックする際、代わりにリスト内のentity/relationの左側に表示されている文字(PERSONentityの場合はpPRODUCTentityの場合はQなど)を入力することによってもアノテーションを行うことができます。

  6. 左側のRelationアイコンをクリックし、ドキュメント内の2つのテキストThomas WatsonIBMのrelationのアノテーションを開始します。
    この2つのテキスト上部に表示されたentity typeのラベルPERSONORGANIZATIONをこの順番で選択します。さらに、右のRelationリストのfounderOfをクリックします。これにより、2つのテキストThomas WatsonIBMとの間の関係がfouderOfrelation typeとしてアノテーションされます。
    WS000040.JPG

  7. 上部のメニューからCompletedを選択し、Saveをクリックします。
    WS000043.JPG

  8. 戻ってきたドキュメント一覧のページにて、Submit Allをクリックします。
    WS000044.JPG

  9. ドキュメントセットSet 2に対しても、手順2.-8.を繰り返します。ただし、手順6.においてのみ、founderOfrelation typeの代わりにemployedByrelation typeを選択します。
    WS000045.JPG

Lesson 10: アノテーター間合意分析

複数のヒューマン・アノテーターによるアノテーションを比較する方法を見ます。

「Lesson 9:ドキュメントのアノテーション」により、ヒューマン・アノテーターからアノテーションが提出されました。異なるヒューマン・アノテーターが同じドキュメントに対して矛盾なくアノテーションしている(アノテーションに競合がない)かどうかを確認するには、アノテーター間合意(Inter-Annotator Agreement)スコア(以下、IAAスコア)を確認します。スコアが許容範囲内であれば、提出されたアノテーションを承認し、そうでない場合は、提出されたアノテーションを却下して、再度ヒューマン・アノテーターに差し戻します。

  1. Human Annotationページにて、Testタスクをクリックします。
    WS000052.JPG

  2. 2つのドキュメントセットSet 1Set 2の状態がSUBMITTEDになっていることを確認した上で、Calcurate Inter-Annotator Agreementをクリックします。
    WS000046.JPG

  3. IAAスコアを表示します。このとき、画面上部のMentionPairと表示されたドロップダウンを選択することで、表示を切り替えます。

    • Mention/Relation:entity/relationごとのIAAスコアを表示
    • Pair/Document:アノテーター/ドキュメントごとのIAAスコアを表示 WS000047_modified.JPG
      ※上記画面では、Mention/RelationのドロップダウンでMentionを選択したことにより各entityごとのIAAスコアが表示され、さらにPair/DocumentのプルダウンでPairを選択したことによりアノテーターごとの比較をおこなっています(青枠部分に2人のアノテーターの名前が表示されます)。
  4. スコアを確認後、状態がSUBMITTEDになっているドキュメントの隣に表示されているチェックボックスを選択して、Approve(承認)またはRejectを(却下)をクリックします。本チュートリアルではApproveを選択します。
    WS000051.JPG

完全合意、すなわち2人のヒューマン・アノテーターがそのentityやrelationに対して同じアノテーションをした場合、IAAスコアは1となります。アノテーションを行わなかったものに対しては、IAAスコアはN/Aとなります。
チュートリアルの結果からは、2つのアノテーション間のIAAに関して、下記のことが読み取れます。

  • ORGANIZATIONPERSONentity typeのIAAには1(Set 1Set 2で同じアノテーションを行ったため)
    WS000048.JPG

  • employedByfounderOfrelation typeのIAAには0(Set 1Set 2で異なるアノテーションを行ったため)
    WS000050.JPG

Lesson 11: アノテーション済ドキュメント間の競合の解消

ドキュメント間のアノテーションの競合を解消する方法を学習します。
「Lesson 10: アノテーター間合意分析」においてアノテーションを承認する場合、もしアノテーションに競合がある場合は承認前に競合を解消する必要があります。

  1. Human Annotationページにて、Testタスクをクリックします。
    WS000052.JPG

  2. 2つのドキュメントセットSet 1Set 2の状態がIN CONFLICTになっていることを確認した上で、Check Overlapping Documents for Conflictsを選択します。
    WS000054.JPG

  3. Overlapping Documents in Task Testページにて、1つのドキュメントの横のCheck for Conflictsをクリックします。
    WS000055.JPG

  4. Set 1Set 2を選択して、Check for Conflictsをクリックします。
    WS000057_modified.JPG

  5. 競合しているアノテーションの数を確認し、競合が存在した場合、そのアノテーションを削除または修正することにより競合を解消します。
    WS000059.JPG

  6. 他のドキュメントに対しても、手順3. ~ 7.を繰り返し、アノテーションの競合を解消します。
    WS000062.JPG

Lesson 12: 機械学習アノテーターの作成

機械学習アノテーターを作成し、学習を行い、その結果を確認します。

  1. Annotator ComponentページにてCreate Annotatorをクリックします。
    WS000064.JPG

  2. Create Annotatorページにて、Machine LeaerningボックスのCreate this type of pre-annotatorをクリックします。
    WS000065.JPG

  3. 学習に使用するドキュメントセットを指定するため、Set 1Set 2のチェックボックスを選択します。
    さらに、これらのドキュメントセットを下記3種類のドキュメントに分けるため、それぞれの割合を指定し、Train & Evaluateをクリックします。

    • Training Set:まだ学習を行っていないアノテーターの学習を行うために使用されるドキュメントセット。
    • Test Set:すでに学習を行ったアノテーターのテストを行うために使用されるドキュメントセット。
    • Blind Set:アノテーターのテストと改善を何度か反復した後で、定期的にシステムのテストを行うために使用されるドキュメントセット。
      ※数値を入力するテキストボックスには推奨値(70%, 23%, 7%)がデフォルトで入力されていますが、ユーザーの判断で変更の必要がある場合には改めて入力し直します。
      WS000066.JPG機械学習アノテーターの学習がはじまります。 ドキュメント内の単語の量やアノテーションの個数により、十数分から数時間程度かかることがあります。 WS000067.JPG
  4. 機械学習アノテーターの学習が終了した後、Machine LeaerningボックスのDetailsをクリックします。
    WS000068.JPG

  5. Train/Test/Buildページにて以下のボタンをクリックすると、それぞれ下記の操作をすることができます。

    • View Ground Truth:ヒューマン・アノテーションしたドキュメントの内容の確認
    • View Decoding Result:学習済みの機械学習アノテーターが行ったアノテーションの確認 WS000069.JPG
  6. Statisticsページにて、各entityに対する機械学習アノテーションの精度(Precision)と再現度(Recall)、F1値(後述)といった統計情報を表示します。
    WS000070.JPG

  7. Versionページでは、アノテーターとその作成に使用されたリソース(辞書やアノテーション・タスクを除く)のスナップショットを作成できます。
    たとえば、アノテーター変更前にスナップショットを作成し、アノテーション変更後に統計情報が悪い場合は、古いバージョンに戻し新しいバージョンを削除する、といった使い方ができます。
    WS000071.JPG
    WS000072.JPG

なお、各entityに対するアノテーションの精度と再現度F1値の定義は下記のとおりです。

名称変数(※)意味
精度Precision=TPTP+FP実際にそのentityにアノテーションされた単語のうち、本来そのentityにアノテーションされるべきである単語の割合
再現度Recall=TPTP+FN本来そのentityにアノテーションされるべきである単語のうち、実際にそのentityにアノテーションされた単語の割合
F1値F1=2PrecisionRecallPrecision+Recall精度と再現度の調和平均

※ここで、各変数の定義は以下の通りです。

名称変数意味
True PositiveTP本来そのentityにアノテーションされるべきであり、実際にそのentityにアノテーションされた単語の数
True NegativeTN本来そのentityにアノテーションされるべきでなく、実際にそのentityにアノテーションされなかった単語の数
False PositiveFP本来そのentityにアノテーションされるべきでなく、実際にそのentityにアノテーションされた単語の数
False NegativeFN本来そのentityにアノテーションされるべきであり、実際にそのentityにアノテーションされなかった単語の数

Lesson 13: 機械学習アノテーターによるドキュメントの事前アノテーション

学習させた機械学習アノテーターを使用して、後から追加したドキュメントを機械学習アノテーションします。

さらに、機械学習アノテーションしたドキュメントにヒューマン・アノテーションによる修正を行い、修正したそのドキュメントを使用して機械学習アノテーターを再度学習させてみます。

  1. ドキュメントdocuments-ml.csvを追加し、下記設定でドキュメントセットを作成します(参考:Lesson 4: ドキュメントの追加、Lesson 5: ドキュメントセットの作成)。

    • Base Set欄:documents-ml.csv
    • Overlap欄:100
    • Annotator欄:sample_user
    • Set Name欄:adminSet WS000079.JPG
  2. Annotator Componentページにて、Machine LeaerningボックスのRunをクリックします。
    WS000080.JPG

  3. Run Annotatorページにて、adminSetを選択して、Runをクリックします。
    WS000081.JPG
    機械学習アノテーションが開始されます。
    WS000082.JPG

  4. 機械学習アノテーションが完了した後、アノテーション・タスクTest2を作成し、ドキュメントセットadminSetをヒューマン・アノテーションして結果を保存した後、そのDocument Setを承認します(参考:Lesson 8: アノテーション・タスクの作成、Lesson 9: ドキュメントのアノテーション、Lesson 10: アノテーター間合意分析、Lesson 11: アノテーションしたドキュメント内の矛盾の解消)。
    WS000083.JPG
    WS000084.JPG
    WS000088.JPG

  5. Annotator Componentページにて、Machine LearningボックスのDetailをクリックします。
    WS000092.JPG

  6. Train/Test/BuildページにてEdit Setsをクリックします。
    WS000105.JPG

  7. 追加したドキュメントセットadminSet横のチェックボックスを選択して学習データに追加し、TRAINまたはTRAIN & EVALUATEをクリックします。
    WS000095.JPG
    これにより、追加したドキュメントセットを含めて再度機械学習アノテーターの学習が始まります。

おわりに

前回(前編)と今回(後編)を通して、以上でWKSのチュートリアルを完了しました。type system、ドキュメントセット、辞書、アノテーションといった基本概念に始まり、アノテーションの種類(ヒューマン・アノテーション、辞書ベースアノテーション、機械学習アノテーション)、およびアノテーションの競合やその解消といった、WKSを使う上での基本的な流れをひととおりご覧いただけたかと思います。

前回(前編)で紹介したとおり、WKSで作成したモデルは、Watson ExplorerAlchemy APIなどの他の多くのWatson製品と連携することができます。これに関しては、別記事にて詳しく紹介したいと思います。

お問い合わせ

ご質問がございましたら、こちらにもお問い合わせいただけます。

すくすくワトソン編集室: eb17685@jp.ibm.com



Watson Knowledge StudioのTutorialをやってみた (前編)

この記事は最終更新日から1年以上が経過しています。

はじめに

Watson Knowledge Studio(以下、WKS)は、IBM Watsonにおいて、特定の業界に特化して用いられる言葉のニュアンス、意味や関係を理解する機械学習モデルを、開発者と専門家が協力して作成するクラウド・ベースのアプリケーションです。

Watson Developer CloudにはすでにWKSのチュートリアルが用意されています。本記事では前後編にわたり、このチュートリアルを実施します。

チュートリアルの前に

Watsonはベースとして保有している知識があるため、学習にかかるコストを少なく抑えることができます。しかし、各業界や専門分野(流通、製造、金融、医療、保険、法律・・・)の知識をはじめから完全に習得しているわけではないため、それぞれの分野の専門家の手で新たに学習させる必要があります。WKSはそのような作業を支援するツールです。

WKSには次のような特長があります。

  • 直感的なユーザーインターフェース:WKSでは、わかりやすく可視化された直感的な最新のユーザーインターフェースが提供されています。これにより、操作に不慣れな初心者でも、高度なコーディングなどをすることなく、かんたんに機械学習モデルの正解データを作成することができます。

  • 共同作業によるモデルの改善:WKSでは、対象分野の専門知識や自然言語の微妙な違いをWatsonに入力する作業を複数の専門家で協力して実施し、各専門家が入力した内容を比較したり妥当性を確認したりすることができます。これにより、機械学習モデルの精度を向上させることができます。

  • 機械学習によるモデルの改善:WKSでは、機械学習を活用して学習データの拡張を行います。これにより、人間が一から十まですべてWatsonに覚え込ませる必要はなく、ある程度の量だけを学習させるだけで十分となり、少し異なる知識であれば自動的に類推し応用してくれるようになります。

  • 多くのWatsonソリューションとの連携:WKS上で作成したモデルは、他の多くのWatson製品と連携することができます。たとえば、モデルをWatson Explorerにインポートすると、そのモデルをドキュメントの分析に使用することができ、モデル内の単語の種類や単語間の関係などの情報から、様々な角度からの分析結果を自動的に作成してくれるようになります。

WKSを使用する流れはおおまかに次のようになります。

  1. ドキュメントのインポート:対象となる業界のドキュメントを集めたものをWKSにインポートします。
  2. 既存ドキュメントのアノテーション]:そのドキュメントに登場する単語の分類(entity)と単語間の関係(relation)を定義するtype systemを作成し、このtype systemに基づいてドキュメントに登場する単語に正解データを付与(アノテーション)します。
    (例)犬(dog)を「ペット(PET)」に分類する。

  3. モデルの学習:正解データを利用してモデルの反復学習を行い、モデルの精度を改善します。

  4. 新しいドキュメントのアノテーション:得られたモデルを利用して、未知の新しいドキュメントをアノテーションします。
    (例)犬(dog)を「ペット(PET)」に分類していたことから、ハムスター(hamster)も「ペット(PET)」に分類する。

WS000097.JPG

ここで、いくつか出てきた用語について解説します。

※entity, relationは以下の記事でも登場しましたが、後述する通り、本記事で登場するものは同じ概念と考えて差し支えないものです。

アノテーション

アノテーションとは、ドキュメントに含まれるテキストに対して「正解データ」を付与する作業です。

例として、チュートリアルで用いるドキュメントdocuments-new.csv(英語)のTechnology - gmanews.tv`の一部(日本語訳)を以下に示します。

NCR, which counts IBM founder Thomas Watson as one of its early employees,...
IBM創始者であるトーマス・ワトソンを初期の従業員の1人として数えているNCRは、・・・

WKSにおけるアノテーションは、たとえば、上記ドキュメントのテキストに対して、

  • IBMは「組織(ORGANIZATION)」の一種である。→分類
  • トーマス・ワトソン(Thomas Watson)は「人(PERSON)」の一種である。→分類
  • トーマス・ワトソン(Thomas Watson)IBMの創始者(founder)である。→関係
  • ……

といった、単語の分類(entity)や単語間の関係(relation)といった情報を付与する作業になります。このような、単語の分類や単語間の関係の種類を定義するのが、後述のtype systemと呼ばれるものです。

アノテーションを行う主体をアノテーターといいます。とくに、人間の手でアノテーションを実施する場合はヒューマン・アノテーター、機械学習によりアノテーションを実施する場合は機械学習アノテーターなどと呼びます。

WKSではドキュメントのアノテーションをGUIで行うことができます。各単語の分類は色分けして表示され、各単語間の関係は単語を結ぶ矢印によって表示されます。これらの設定はマウスによるテキスト選択やボタン操作によって手軽に実施することができます。下の図は、先ほどご紹介したテキストを実際にアノテーションしている例です。IBM組織(Organization)トーマス・ワトソン(Thomas Watson)人(PERSON)に分類され、トーマス・ワトソン(Thomas Watson)IBM創始者(founder of)として矢印で関連付けられています。
WS000040.JPG

Type System

type systemは、アノテーションの際にドキュメントに付与する情報の種類の定義であり、単語の分類を表すentity typeと、異なるentity間の関係を表すrelation typeからなります。

type_system.png

Entity Type

entity typeは単語の種類を分類したものです。以下例を示します。
メアリー(Mary)ボブ(Bob)トーマス・ワトソン(Thomas Watson)オバマ大統領(President Obama)などは、人(PERSON)entity typeとしてアノテーションされます。
IBMGoogleMicrosoftは、組織(ORGANIZATION)entity typeとしてアノテーションされます。

entity typeは以下2つの属性によって、さらに細かく分類されます。

  • Role: entity typeを文脈によって定義づけるものです。
  • Entity Subtype: entity typeをさらに分類するものです。

例として、チュートリアルで用いるKLUE type system(※)en-klue2.zipの52個のentity typeのうち一部を以下に示します。
※KLUE(Knowledge from Language Understanding and Extraction)はニュース記事のコレクションに基づいたtype systemであり、多くの機械学習モデルにおける基本的なtype systemとして利用されています。

Entity Type NameRolesSubtypes
GPE(※1)GPE, LOCATION, ORGANIZATION, PEOPLE, PERSON, PERSONPEOPLEOTHER, UNSPECIFIED, AREA, COUNTRY
MONEYMONEYOTHER, UNSPECIFIED, WORTH, GAINLOSS
ORGANIZATION(※2)ORGANIZATION, FACILITY, PEOPLE, PRODUCT, TICKER, TITLEWORKOTHER, UNSPECIFIED, MULTIGOV, GOVERNMENT, COMMERCIAL, EDUCATIONAL, POLITICAL, RELIGIOUS, SPORTS, MILITARY

※1 GPE(Geo-Political Entity):なんらかの政治的構造に関連する地理的領域のこと。

※2 1つのentityに対して、複数のentity subtypeやroleを定義できます。以下例を示します。

  • 組織(ORGANIZATION)entityのroleには、組織(ORGANIZATION)の他にも施設(FACILTY)などが含まれています。IBMという単語は組織(ORGANIZATION)entity typeとしてアノテーションされますが、IBMで研修をおこなうという文では施設という役割を果たしています。
  • 組織(ORGANIZATION)entityのsubtypeには、政府(GOVERNMENT)教育(EDUCATIONAL)宗教(RELIGIOUS)などが含まれています。国会(parliament)大学(university)教会(church)などは組織(ORGANIZATION)entity typeとしてアノテーションされるとともに、国会(parliament)政府(GOVERNMENT)大学(university)教育(EDUCATIONAL)教会(church)宗教(RELIGIOUS)entity subtypeとしてアノテーションされます。

Relation Type

2つのentity間の順序付けられた関係を定義します。以下例を示します。
メアリーはIBMで働いている(Mary works for IBM)という文からは、~で働いている(employedBy)relation typeがアノテーションされます。
IBMの創始者であるトーマスワトソン(IBM founder Thomas Watson)という文からは、~の創始者である(founderOf)relation typeがアノテーションされます。

例として、チュートリアルで用いるKLUE type systemen-klue2.zipの2177個のrelation typeのうち一部を以下に示します。

Relation TypeFirst Entity Type / RoleSecond Entity Type / Role
colleaguePEOPLE, PERSON, PERSONPEOPLEPEOPLE, PERSON, PERSONPEOPLE
employedByPEOPLE, PERSON, GPE, PERSONPEOPLEGPE, WEB, PERSONPEOPLE, PERSON, PEOPLE, ORGANIZATION
founderOfGPEORGANIZATION
founderOfPERSON, PEOPLE, PERSONPEOPLEFACILITY, ORGANIZATION, WEB, GPE

一部のrelation typeでは、entityの順序が重要になります。以下、例を示します。
~で働いている(employedBy)relation typeでは、メアリーはIBMで働いている(Mary employedBy IBM)は有効ですが、IBMはMaryで働いている(IBM employedBy Mary)は無効です。
~の同僚である(colleague)relation typeでは、メアリーはボブの同僚である(Mary colleague Bob)ボブはメアリーの同僚である(Bob colleague Mary)も有効です。

辞書

辞書には、ドキュメントで使用される単語の見出し語とその類義語、品詞が含まれています。

例として、チュートリアルで用いる、ORGANIZATIONentityに対する辞書データdictionary-items-organization.csvの一部を以下に示します。

Lemma(見出語)Surface Forms(類義語)Part of Speech(品詞)
AppleApple Inc., AppleNoun(名詞)
British AcademyBAFTA/LA, British AcademyNoun(名詞)
Burger KingBurger King Holdings Inc., Burger KingNoun(名詞)

チュートリアル

いよいよ、チュートリアルを実施します。

チュートリアルは下記のような13個のLessonから構成されています。
本記事ではこのチュートリアルを下記の通り前後編に分けて実施します。

  • 前編(今回)
    • Lesson 1: ユーザーロールの割り当ての確認
    • Lesson 2: プロジェクトの作成
    • Lesson 3: type system の作成
    • Lesson 4: ドキュメントの追加
    • Lesson 5: ドキュメントセットの作成
    • Lesson 6: 辞書の追加
  • 後編(次回)
    • Lesson 7: 辞書ベースアノテーターによる事前アノテーション
    • Lesson 8: アノテーション・タスクの作成
    • Lesson 9: ドキュメントのアノテーション
    • Lesson 10: アノテーター間合意分析
    • Lesson 11: アノテーション済ドキュメント間の競合の解消
    • Lesson 12: 機械学習アノテーターの作成
    • Lesson 13: 機械学習アノテーターによる事前アノテーション

推奨環境は次のとおりです。

  • ブラウザ:Mozilla Firefox, Google Chrome(最新版)

Lesson 1: ユーザーロールの割り当ての確認

WKSユーザーとして登録されているすべてのユーザーIDを一覧表示させ、チュートリアル中の作業を実施する上で必要な権限が付与されているか確認します。

各ユーザーIDは、次の3つの役割のいずれかを持ちます(権限は上にいくほど強くなります)。

  1. SUPER_USER:WKSインスタンス上のすべてのプロジェクトで「アノテーションプロセスマネージャ(※)」として機能し、さらにヒューマン・アノテーターとしても機能します。
  2. MASTER_ADMINISTRATOR:WKSインスタンス上の自分が作成したプロジェクトで「アノテーションプロセスマネージャ」として機能し、さらにヒューマン・アノテーターとしても機能します。
  3. HUMAN_ANNOTATOR:ヒューマン・アノテーターとして機能しますが、割り当てられたドキュメントセットのみを表示できます。

アノテーションプロセスマネージャは、プロジェクトの作成にはじまり、ドキュメントセットに対するヒューマン・アノテーターの割り当て、アノテーションの承認や競合の解消、機械学習アノテーションの実行などを行うことができます。

実際のプロジェクトでは複数のHUMAN_ANNOTATORによってアノテーションが実施されますが、このチュートリアルではSUPER_USER権限をもつユーザーID1つのみを使用することとします。

  1. WKSインスタンスにアクセスします。
  2. 右上のMenuからSettingsをクリックしてUser Account Managementページを開きます。 WS000024.JPG
  3. 自分のユーザーIDがSUPER_USERロールをもつことを確認します。 WS000026_modified.JPG

Lesson 2: プロジェクトの作成

プロジェクトを作成します。

プロジェクトは、type system、ドキュメント、辞書、ヒューマン・アノテーターによって追加されるアノテーションなど、機械学習アノテーターを作成するために必要なすべての要素を定義するものです。

  1. Create New Projectをクリックします。 WS000002.JPG
  2. プロジェクトの詳細を下記のように設定し、Saveをクリックします。
    • Project Name欄:マイ・プロジェクト
    • Project descrription欄:Watson Knowledge Studio チュートリアル・プロジェクト
    • Language of DocumentsEnglish WS000003.JPG

Lesson 3: Type Systemの作成

type systemを作成します。本チュートリアルではサンプルとしてKLUE type systemen-klue2.zipをダウンロードしてインポートします。
さらにそれに対して編集をかけてみます。ここでは、MONEYentity typeのroleからAWARDroleを削除してみます。

  1. en-klue2.zipをダウンロードします。

  2. Type SystemページにてImportをクリックします。
    WS000004.JPG

  3. ダウンロードしたen-klue2.zipをウインドウ内へドラッグアップドロップして、Importをクリックします。
    WS000004.JPG
    インポートされたtype systemが表に表示されます。
    WS000006.JPG

  4. MONEYentity typeを検索して表示し、MONEY行内をダブルクリックします。
    Roles列のAWARD行の削除(Delete a role)アイコンをクリックして、Saveをクリックします。
    WS000007.JPG

    WS000008.JPG

    WS000009.JPG

    WS000010.JPG

Lesson 4: ドキュメントの追加

ドキュメントを追加します。本チュートリアルではサンプルとしてドキュメントdocuments-new.csvをダウンロードしてインポートします。

  1. documents-new.csvをダウンロードします。
  2. DocumentsページにてImportをクリックします。 WS000011.JPG
  3. ダウンロードしたdocuments-new.csvをウインドウ内へドラッグアップドロップして、Importをクリックします。 WS000012.JPGインポートされたドキュメントが表に表示されます。 WS000013.JPG

Lesson 5: ドキュメントセットの作成

Lesson 4でインポートしたドキュメントからドキュメントのひとかたまり(ドキュメントセット)を作成し、そのドキュメントのひとかたまりに対して、それをアノテーションする担当者(ヒューマン・アノテーター)を割り当てます。

実際のプロジェクトでは、ヒューマン・アノテーターごとにアノテーションの差異が出るため、同一ドキュメントから複数のドキュメントセットを作成してそれぞれを異なるヒューマン・アノテーターに割り当てることがよくあります。しかし、複数のユーザーIDが使用できない場合は、複数のドキュメントセットを同じヒューマン・アノテーターに割り当てることができます。このチュートリアルでは、2つのドキュメントセットを作成し、同じユーザーを2つのドキュメントセットに割り当てています。

なお、次回(後編)で扱うLesson 10: アノテーター間合意分析において、アノテーター間スコアを使用して各アノテーターごとのアノテーションを比較するには、少なくとも2人のヒューマン・アノテーターを異なるドキュメントセットに割り当てる必要があります。また、ドキュメントの一部がドキュメントセット間で重複するように指定する必要があります。

  1. DocumentsページにてCreate Setをクリックします。
    WS000014.JPG

  2. Create Documents Setsウインドウにて、(+)Add another set and human annotatorをクリックして新たなドキュメントセット用の欄を追加します。
    さらに、作成する新しいドキュメントセットごとに、必要な情報を下記のように指定し、Saveをクリックします。

    • Overlap欄:100
    • Annotator欄:sample_user
    • Set Name欄:Set 1
    • Annotator欄:sample_user
    • Set Name欄:Set 2 WS000015.JPG

新しいドキュメントセットが作成され、Documentsページの表に表示されます。
WS000016.JPG

上記設定では、2つのドキュメントセットSet 1Set 2が作成され、それぞれにヒューマン・アノテーターとしてsample_userを割り当てています。さらにOverlap欄に100を指定することにより、すべてのドキュメントが新しいドキュメントセットに含まれて、すべてのアノテーターによってアノテーションされるようになります。

なお一般に、ドキュメントN個をドキュメントセットM個に分割する場合にOverlap欄にp(=0,1,,100)を指定すると、元のドキュメントN個のうちp%がすべてのドキュメントセットに含まれ、残りがM等分されて各ドキュメントセットに含まれるようになります。

Lesson 6: 辞書の追加

辞書を追加します。さらに、追加した辞書に、見出語のIBMを新たに追加します。

WKSに辞書を追加する際は、CSV形式のファイルを用意します。
今回のチュートリアルでは、dictionary-items-organization.csvという辞書ファイルをダウンロードして使用します。

  1. dictionary-items-organization.csvをダウンロードします。
  2. Documentsページにて+アイコンをクリックして辞書を追加し、各欄に以下を入力して、Saveをクリックします。
    • Name欄:Test Dictionary
    • Entity Type欄:ORGANIZATION WS000017.JPG
  3. Importをクリックします。 WS000018.JPG
  4. ダウンロードしたdictionary-items-organization.csvをウインドウ内へドラッグアップドロップして、Importをクリックします。 WS000019.JPG
  5. Add Entryをクリックし、各欄に以下を入力して、Saveをクリックします。
    • Surface Forms列にIBMおよびInternational Business Machines Corporationと入力します。
    • ラジオボタンをIBMにセットします。
    • Part of Speech欄にてNounを選択します。 WS000098.JPG↓ WS000103.JPG↓ WS000099.JPG↓ WS000100.JPG↓ WS000101.JPG↓ WS000102.JPG

おわりに(後編に向けて)

今回(前編)では、WKSプロジェクトを作成して、type system作成、ドキュメント追加、ドキュメントセット作成、辞書の追加を実施しました。ここまでの手順で、ドキュメントのアノテーションの準備が整ったことになります。

次回(後編)では、この状態からアノテーションを実施します。

お問い合わせ

ご質問がございましたら、こちらにもお問い合わせいただけます。

すくすくワトソン編集室: eb17685@jp.ibm.com


1. intent


・contexts

-기본적으로 컨텍스트는 파라미터를 전달하는 역할을 한다.

-컨텍스트에서는 컨텍스트 변수의 라이프사이클개념이 중요하다. 하나의 인텐트를 지날때마다 하나의 라이프사이클로 인정되며, 라이프사이클을 모두 소진할시 컨텍스트 변수는 사라진다.

-컨텍스트 변수A가 인텐트1,2,3을 패싱했다면, 인텐트 1.2.3에서 정의된 모든 파라미터를 컨텍스트 변수A가 담는다.

-인텐트1의 인풋컨텍스트에 컨텍스트 변수A를 넣어놓으면, 컨텍스트 변수A가 살아있을 때만 인텐트1이 실행된다. 때문에, 이러한 성질을 통해 인텐트간의 연결고리를 만들 수 있는데, 예를 들어 인텐트1 이후에 인텐트2를 실행 시키고 싶은 경우, 인텐트1의 아웃풋 컨텍스트에 컨텍스트 변수A를 라이프 사이클2로 설정해 놓고, 인텐트2의 인풋 컨텍스트에 컨텍스트 변수A를 넣어놓으면 인텐트2는 컨텍스트 변수A없이는 실행될 수 없으므로 인텐트1 이후 인텐트2가 실행된다.



・event


・training phrase

-왓슨에서의 인텐트와 같은 느낌이다.

-예상되는 유저의 답을 여러개 집어넣어 놓는다.

-유저의 답을 엔티티로 제한할 수 있고, 엔티티설정된 답안을 파라미터로 넣을 수도 있다.



・action and parameters

-파라미터를 모두 보여준다.

-$표시된 value값은 intent안에서 만 사용가능하다.

-value에는 사용자가 원하는 값을 넣을 수 있다.


슬롯을 설정할 수 있다.

-슬롯 설정을 위해서는 required에 체크표시 해야한다.(단순히 파라미터만 설정할거면 체크표시 불요)

-해당 엔티티에 부합되는 답안만 유저 레스폰스로 들어올 수 있게 만든다.

예를들어 @food엔티티에 gimchi bulgogi 두개의 컴포넌트만 들어있다면, 두 컴포넌트 이외의 답안은 재질문을 받게 된다.



・responses

-payload로 오프젝트를 리퀘스트에 얹혀 보낼 수 있다.





・fulfillment


-enable webhook call for this intent : 인텐트 레스폰스를 반환하기 전에 인텐트의 퉵훅을 쏜다.

-enable webhook call for slog filling :  슬롯마다 웹훅을 보낸다










2.entities









3.fulfillment

-https url 지정(보통 프록시서버로 보냄)

-인텐트와 엔티티는 연관성이 없는 서로 다른 개념

:인텐트는 사용자의 "의도"를 파악하는 지표료, 같은 의도를 나타내는 여러개의 문장을 하나의 인텐트에 저장함으로써 어떤 유저로부터 어떤 반응이 나오면 인텐트에 저장된 문장들과 일치하는지를 파악하여 인식한다.

:엔티티는 비슷한 단어들의 집합

:사용자가 어떤 인풋을 나타낼시 왓슨은 인텐트를 통해 인식하거나, 엔티티를 통해 인식하거나, 둘 다를 통해 인식한다.


-dialog의 기능

1.If bot Recogizes :  가장 기본적인 기능으로, #인텐트, @엔티티, $변수 의 값이 들어갈 수 있고, 이에 간단에 함수들이 합쳐진 논리도 들어올 수 있다.

2.slot : 내부에 found, unfound의 기능이 있다.

3.multi response : 조건에 따라 다른 response를 주고 싶을때 사용한다.

4.setup context : $변수에 값을 줄 수 있다.

5.and finally : dialog이후에 어떤 행동을 할지 정해주는 기능으로, wait for user input/ skip user input / jump to other dialog 의 기능이 있다.


-dialog에서 response는 하지 않고 변수 설정만 하고 싶을 시에는 if bot Recognizes 를 true로 설정 후 .and finally를 jump to other dialog 하면 된다.


-dialog내에 들어가는 각 #인텐트, @엔티티 는 내가 지정해 놓은 인텐트와 엔티티가 저장되는 것이 아니고, 유저로부터 받은 일회적인 input 만들어온다.


-dialog내에서 사용할 수 있는 함수들을 다음 사이트에서 참고하라.

(https://console.bluemix.net/docs/services/conversation/dialog-methods.html#expression-language-methods)


-try it을 시행하면 우상단에 manage context가 있는데 각페이즈별로 내가 설정한 $변수 들에 어떤 값들이 들어오는지 볼 수 있다.


-【기본이해】

왓슨은 유저인풋에 대응하여 엔티티와 인텐트를 매칭하는 작업을 함. 스스로 스마트하게 매칭하는 작업이 AI의 내부 논리가 하는 일이며, 서비스에 대해 비싼 가격을 요구하는 이유이기도 함

예를 들어 


@food:ham,hamburger,cheese,sushi,bulgogi,coffee

@drink:coffee,coke,sprite,wine

#hungry:I want to eat hamburger

의 인덴트와 엔티티가 존재할 때


유저 인풋이 【cheese】이면, @food가 매칭되므로

・ @food에 cheese라는 값을 담고

・ entities객체에 매칭된 @food:cheese의 정보를 담음

[{"entity":"food","location":[x,x],"value":"cheese","confidence":1,"expected":true}]


유저 인풋이 【hamburger】이면, @food와 #hungry가 매칭되므로

・ @food에 cheese라는 값을 담고

・ entities객체에 매칭된 @food:cheese의 정보를 담음

[{"entity":"food","location":[x,x],"value":"cheese","confidence":1,"expected":true}]

・ #hungry:I want to eat hamburger라는 값을 담고

・ intent객체에 매칭된 #hungry:I want to eat hamburger의 정보를 담음

[{"intent":"hungry","confidence":0.8247748613357544}]


유저 인풋이 【coffee】이면, @food,@drink가 매칭되므로

・ @food에 coffee라는 값을 담고, @drink에 coffee라는 값을 담음

・ entities객체에 매칭된 @food:coffee, @drink:coffee의 정보를 담음

[{"entity":"food","location":[x,x],"value":"coffee","confidence":1,"expected":true},{"entity":"drink","location":[x,x],"value":"coffee","confidence":1,"expected":true}]


유저 인풋이 【sushi,bulgogi】이면, @food,@food(@food가 두번 매칭됨)가 매칭되므로

・ @food에 sushi라는 값을 담고, @food에 bulgogi라는 값을 담음

・ entities객체에 매칭된 @food:sushi, @food:bulgogi의 정보를 담음

[{"entity":"food","location":[x,x],"value":"sushi","confidence":1,"expected":true},{"entity":"food","location":[x,x],"value":"bulgogi","confidence":1,"expected":true}]


entities에 접근하는 방법

・<? entities ?> <- 왓슨이 유저인풋에 대응하여 매칭시킨 엔티티들을 배열로 담음

[{"entity":"シネマズギフトカード関連","location":[0,6],"value":"ギフトカード","confidence":1,"expected":true},{"entity":"テスト","location":[0,6],"value":"ギフトカード","confidence":1,"expected":true}]

・<? entities['テスト'] ?>하면, 일치된 entities중에서 엔티티명이 テスト인 것만 필터링됨(intent는 이런식의 문법 사용 안됨.)

예를 들어 <? entities ?> 인식된 모든 엔티티의 결과가

[{"entity":"シネマズギフトカード関連","location":[0,6],"value":"ギフトカード","confidence":1,"expected":true},{"entity":"テスト","location":[0,6],"value":"ギフトカード","confidence":1,"expected":true}]

일때,

<? entities['テスト'] ?> 하면, 

[{"entity":"テスト","location":[0,6],"value":"ギフトカード","confidence":1,"expected":true}]이 검색돼

하나만 일치시에 객체인것처럼 보이지만 배열로 리턴됨에 주의


【intent에 접근하는 방법

・<? intent ?> <- 왓슨이 유저인풋에 대응하여 매칭시킨 인텐츠들중 confidence(일치도)가 높은 상위 10개를 내림차순 배열로 리턴됨

[{"intent":"シネマズギフトカード販売","confidence":0.5247748613357544},{"intent":"シネマズギフトカード残高確認","confidence":0.35115565061569215},{"intent":"シネマズギフトカード利用方","confidence":0.32244925498962407},{"intent":"シネマズギフトカード有効期限","confidence":0.3199282050132752},{"intent":"挨拶","confidence":0.2722834348678589},{"intent":"TCXとは","confidence":0.2501681208610535},{"intent":"IMAXとは","confidence":0.24999908208847046},{"intent":"劇場オープン時間","confidence":0.2475628912448883},{"intent":"プレミアボックスとは","confidence":0.24686517417430878},{"intent":"スクリーン12と13の場所","confidence":0.2400550663471222}]

・객체내부값에는 json에 접근하는 방법과 동일하게 접근하면됨.

<? intent[0]['intent'] ?> => "シネマズギフトカード販売"

<? intent[1]['confidence'] ?> => 0.35115565061569215


@entities와 #intent에 관해

*watson doc에 의하면 intent의 생략표시구문은 존재하지 않는다.

@entities는 순수하게 값만 들어가는 배열이므로, @entities.confidence라던지, @entities.location같은 문법을 사용할 수없다.

사용할 수 있는 것은 배열에 관한 함수들 뿐 @entities.size() @entities[0] 등

#intent는 boolean이다.




-개행은 \n로 하고, 프론트에 따라 다른데 프론트가 웹이면 </br>로 줘야함


-digression:여러 조건트리에서 일치하는게 없으면 루트로 보냄(지금까진 true로 처리했던것)

go away

come into

return


제약: 루트 노드로밖에 이동읆 못함

차일드 노드로 true를 설정하면 digression 사용 불가


-폴더 나누기 기능

노드와 다른점은 폴더의 경우 레스폰스가 없음

폴더의 if bot recongnize기능 0

레스폰스 x


디그리션을 다이알로그 하나하나 설정하지 않고

폴더 에서 디그리션 설정하면 그 아래 것들도 외괄 설정이 가능


ui로써 보기가 좀 좋아지고, digression 관리가 쉬우저ㅣ는 정도일가




-도중에 그만두는 기능

일단 return을 오프로(그만뒀는데 다시 돌아오면 안되니까)


-루트 마지막에 공통 노드를 

리셋토, 안내종료 같은 최후의 노드를 넣어두고 return은 off 로함





-assign코맨드로 변수에 값 저장

-uiexplorer : 오브젝트의 프로퍼티같은걸 변경할 수 잇음

-ocr - screnn scraping

-오케스트라 : 웹(오케스트라)에 로봇의 특정 번호를 등록함

-get Asset : 웹에 등록한 변수를 가져올수 있음. AA랑 비슷하네

-vb에서 조작가능한 모든것이 다들어감. 근데 type을 맞춰줘야함

-기본 오프젝트들의 객체는 이미선언되어 있는듯.

-datatable : output에서 datatable의 변수를 설정하면 read range 등 결과가 datatable로 들어오는 결과를 변수에 담음

-output datatable : input에 datatable 타입의 변수를 넣으면 datatable 결과를 string으로 변환시켜줌, 결과를 시각적으로 나타내어 주지는 않음

-변수의 type에 주의할 것

-변수를 각 페이즈에 따라 로컬, 글로벌로 설정 가능

-플로우차트와 시퀀스 : 설계로써, 플로우차트안에 플로우차트와 시퀀스를 담을 수 있고, 역으로 시퀀스 안에 플로우차트를 담을 수도 있음

-invoke code

-DateTime.Now.AddMonths(-1).ToString("MM") : 전달의 달

/ DateTime.Now.AddMonths(-1).ToString("yyyyMMdd")  : 전달의 년월일

/ DateTime.DaysInMonth(DateTime.Now.Year,DateTime.Now.AddMonths(-1).Month).ToString : 전달의 마지막날


-String.IsNullOrEmpty ->isempty

-IS/ IsNot

-()x -> offset


-셀안에 값저장후 엔터누르지않으면 오브젝트가 셀에 귀속되어 버림


-selector 설정 -> *로 범용성을 높여 비슷한 이름의 윈도우가 열려도 반응할 수 있도록하기







[Setup Environment Config]


Simultaneous Task running via another user on one bot is not impossible.


環境設定:1.Dic設定 2.Error Handling規約 3.Folder名前作り


▶AA의 유저는 하나의 어카운트에 귀속되므로, 한 어카운트에 이미 귀속된 유저는 다른 어카운트에서 사용할 수 없다.


▶10.5이상의 버전에서만 net4.7이상을 지원한다.


설치시는 sql10.2로 환경설정할 것(10.3으로 하지말것)

한번으로 안될시 -> 기존 설치된 sql2014를 모두 제거 -> 재설치(AACR인스턴스가 존재)




[Dev Environment Config]

▶가장 처음과 끝에 에러 핸들링으로 처리하기


▶devEnDic과 realEnDic을 만들어 개발환경과 본환경의 디렉토리를 구분하기(중복언급)



[AA technic]

Debugging
Debugging button is upper part of page or click the starting part of line makes break point.

 

Put into Log command one task by task

▶파일이나 폴더를 만들때는 if문으로 감싸서, 혹시나 이미 존재하더라도 오류가 나지 않도록 처리할 것


▶되로록이면 키보드가 아닌 오브젝트 조작으로 진행하고, 가장 적합하도록 여러번 테스팅을 거쳐 오류가 나지 않는 조합을 선택하도록


▶runscript 시 파라미터에 공백이 있으면 공백 구분으로 잘라버리므로 오류가 난다.


▶aa에서 DB를 최초로 CSV로 격납시 , 델리미터지만, Excel.Application 객체로 한번이라도 오픈하면 탭 델리미터로 바뀌어버린다.

-> Excel.Application 객체로 오픈한 CSV는 삭제해버릴 것


▶일본어로 된상태에서 키보드 조작하면 폰트가 망가짐


- (Extremely important) Don’t forget to disconnect Database before end, otherwise DB denies AA accessing into DB with error message : commonly trigger insufficient previlege.


As KeyStroke works are sometimes faster than window’s working, put in Delay command after Keystrokes command. 


▶Array를 잘 사용하면 편리


▶내용을 확인 하는 로직을 만들때는 if result="error"를 배치해서 스크립트에서 오류난 거 거르고 그 다음, if result <> "pass" 로 result가 fail일뿐만 아니라 계산 오류로 공백으로 아웃풋되는 것도 거르기


▶이후 운용에 유리할 수 있도록 프로그래밍이 되어 있는가?

-가령 개발패스와 실환경패스를 정하는 부분 등이 운용보수에 편하게 짜여져 있는가?

-스크립트가 하나의 태스크에만 사용되는 것이아니라, 파라미터만 바꾸면 다른 테스크에도 통용될 수 있도록 일반성있게 짜여져 있는가? 스크립트 내의 변수의 위치에는 고정치를 줄 것이 아니라 파라미터를 통한 변수를 줄 것


▶VBScript는 에러핸들링을 해도 AA에서 에러경고창을 띄우지만, JScript는 에러핸들링시 에러경고창을 띄우지않는다.
-The message box which task shows is not shown by AAPlayer hence it cannot be controlled using the Error Handling command in the Task Editor. It is shown by AA_MyVB.vbs. To hide this message box, open AA_MyVB.vbs located at AAE Client installation path and comment following line.
WScript.Echo("Error In Script - " & VbCrlf & err.number & " " & err.description)


▶task와 에러 핸들링은 if 문으로 개별적 에러 처리가 필요. 

10.5버전(최신버전 임에도 불구하고) 아직 task와 script에 대한 에러 핸들링 커맨드가 구비되지 않음.


▶SAP 조작은
첨부파일에 있는 두 단계의 설정을 거쳐 옵션에서 scripting record and play를 실행시키면, 엑셀의 마크로처럼 내가 건들였던 움직임이 VBS로 반환된다.


▶웹 오브젝트 조작에서 오브젝트로 추출된 각 태그의 value를 변수로 선정할 수 있다.


▶스크립트 내에서는 절대 절대디렉토리를 만들지 말고, AA에서 만들어진 변수에 담긴 디렉토리만을 사용해서, 메인테넌스를 일괄화 시켜야한다.


▶웹 메니징 컨트롤에서, 버튼 태그로 되어 있어서 오브젝트 셀렉팅이 되지 않는 경우, 마우스 오른쪽 버튼을 누르면 셀렉팅된다.


▶Run Script에서 파라미터를 넣을 때, 하나의 파라미터를 반드시 ""로 감싸도록한다.

 AA는 띄워쓰기를 하나의 파라미터 단위로 인식하기 때문에, 파일명 자체에 스페이스가 들어가 있으면 하나의 패스를 두개로 나눠서 읽는 참사가 발생한다.


▶기본 변수 설정

변수의 설정 조건 : 1. 고정적으로 사용되어 재사용성이 높은가? 2. 운용에 유리하게 사용될 수 있는 변수인가? 3. 다른 변수에 또 값을 담아 돌려사용할 수 없는가? 꼭 만들어야하는가?

dpRoot : AA는 상대패스가 안되므로 루트 디렉토리를 담는 변수를 만들어 놓고, 이후에 각 path에 dpRoot를 이용하여 디렉토리를 지정한다.
dpRootD

dpRootR


dpInput : 실제 사용하는 디렉토리 변수

pathInputDev : 개발용 디렉토리 변수

pathInputReal: 본환경 디렉도리 변수


dpOutput : 실제 사용하는 디렉토리 변수

pathOutputDev : 개발용 디렉토리 변수

pathOutputReal: 본환경 디렉도리 변수


fpLog : 로그의 위치와 파일명은 고정되있으므로 로그위치 로그파일명을 변수에 담을 것

fpCsv: CSV의 위치는 고정
dpScript :  Script의 위치는 고정


result : 각 태스크의 부분적, 잠정적 결과를 일시적으로 받아냄

resultScript

resultTask


dayOfToday : 오늘의 일

monthOfToday : 오늘의 달

yearOfToday : 오늘의 년


loopingVar : 루프시에는 하나의 변수를 여러곳에서 돌려사용하는 것이 복잡하므로 새로운 루프용 변수를 취득할 것

sqlQuery : sql문을 담음

errorScript : 

errorTask : 

emailReceiver : 


-변수 외에는 절대 하드코딩 하지 않는다. 예를 들어 파일패스와 같은 경우는 변수에 값을 넣고 변수를 전달하지, 파일패스에 직접 하드코딩하는 일은 없도록한다. 나중에 메인테넌스 시 어디를 하드 코딩 했는지 판단이 불가능하고 이는 프로그램 오류를 발생하기 때문이다. 언제 누구에 의해서라도 통제될 수 있도록 변수만 활용하도록 한다.



[Maintainance]

▶스케쥴러를 실행한 어카운트가 로그 아웃 시 스케쥴러의 시행도 불가능하다.


▶스케쥴러보다 트리거가 우선된다.


▶스케쥴러가 여러개 동일한 시간에 시행될시 priority에 따라 실행 순서가 바뀐다.


▶ development 권한을 가진 clinet 유저는 세부적 스케쥴링이 불가능하고, one time only 스케쥴링만 가능하게된다.


▶ os가 영어가 아닐시 monthly 스케쥴러가 실행되지 않는다.


▶ 컨트롤룸은 20분이 지나면 자동으로 유저가 로갓된다.

+ Recent posts