#1. 1. 待ち合わせ日時を含む100件以上のメールを用意する
前回からの続きです。
精度を向上させるために試行錯誤を繰り返していくと、結果的に少なくとも100件以上のメールが必要になると考えられます。個人で100件以上のメールを集めたり、作成したりするのは大変ですので、周囲の皆様の協力を得る必要があります。この場を借りてお礼申し上げます。
#2. 最初に数十件程度でモデルを作成する
要は、延々とDocumentsに含まれる日付に関する単語をクリックして(=選択して)、EntityとしてDATEを割り当てて、という繰り返し作業が精神的に辛くてしょうがないので、精度が適当でもよいので、とにかく数十件程度でGround truthを作成して、プレアノーテションを実行してみよう、という意図です。単語の出現頻度が1単語/textくらいだったら許容範囲ですが(それでも、100件以上をアノテーションすると終わりの見えない作業できついが)、打ち合わせ候補日時などなどでテキストの最初から終わりまで読んで10件以上をアノテーションする、これが延々と続くと思うと本当に辛い。当然ですが、プレアノテーションの結果、全く関係ない単語がDATEとしてアノテーションされてしまったり、DATEとしてアノテーションされるべき単語が手つかずだったりすることは、よくあります。それは、プレアノテーションのためのGround truthの精度に依存しています。経験的には、あまりにもシンプルすぎる文面は不適切です。なるべく、複雑でアノテーション対象になる単語が多く含まれる文面が望ましいです。かといって、Ground truthの精度を上げるために作業量を増やすとプレアノテーションの意味がなくなってしまいます。結局、適当に数十件程度に決めます。
なお、WKSによるプレアノテーションは、この記事で扱っているヒューマンアノテーションによるGround truthだけでなく、辞書、ルールベースでも可能です。そして、日付を抽出する場合は、ルールベースは有効な手段です(が、今回は取り扱っておりません)。
##2.1 Workspace作成とType SystemのUpload
IBM Cloudにログインし、WKSのWorkspaceを作成します(Language of documentsでJapaneseを選択しています)。
そして、Asset & Tools - Entity TypesでUploadをクリックし、事前にローカルにダウンロードしていたen-klue2-types.jsonをドラッグアンドドロップでType SystemとしてUploadします。
Type Systemとはアノテーションの元ネタになるもので、DATE、TIME、LOCATIONなど、文章中の単語の属性を意味します(主観的解釈であり、当然、それだけではありません)。正確な定義は、こちらに記載されています。en-klue2-types.jsonはIBMが広範囲なニュース記事の分析結果に基づいてチュートリアル用に提供しているType Systemです。自分で最初からType Systemを定義することは可能ですが、アノテーション中に、その都度、属性の定義を追加してアノテーションして、途中から定義が納得できなくなってやり直すことになる、など本当に本当に大変なので、まずは、チュートリアル用のen-klue2-types.jsonを使用します。
##2.2 DocumentのUploadからモデル作成
DocumentをUploadします。複数のテキストファイルを選択し、ドラッグアンドドロップします。
次にAnnotation setを作成します。Base setにUploadした一連のDocumentが指定されていることを確認します。Overlapは複数のメンバーでアノテーションを実施する際に重複する割合です。例えば、10件のファイルを2人でアノテーションすると場合にOverlapを100%に設定すると、メンバーごとに10件のテキストファイルをアノテーションすることになります。複数のメンバーで同一のファイルをアノテーションすることになるので非効率かもしれませんが、最終的にアノテーションの内容がメンバー同士で一致しないと次の処理に進めないようになっているのでアノテーションの精度が向上します。適当なSet nameとして、ここではSet1と設定します。
次にSet1にアノテーションを追記するためにTaskを作成します。
作成時にAnnotation setとしてSet1を選択します。
Set1タスクが作成されたら、Set1タスクをクリックして開きます。
Annotateをクリックして各ファイルに対してアノテーションを追加します。具体的には、文中の日付に関する単語を選択し、Entity-TypeでDATEを設定します。画像ではDATEとしてアノテーションされる単語は"6月29日(木)"のみですが、メールによっては、10個以上存在する場合、本当に疲弊しました。これが、プレアノテーションを行うきっかけになりました。さておき、アノテーションが完了したら、Saveします。Completeを選択することも可能ですが、やり直す場合は全DocumentをSubmit後にRejectする必要があるようです。不便ですので、ここではSaveしておいて、すべてのDocumentのアノテーションが終了したらまとめてSubmit all documentを選択します。アノテーションに関するキー操作(削除、undo、redoなど)についてはこちらのTipsで説明されています。なお、↓の画像におけるメール文面はサニタイズしてまして、登場人物はすべて仮名です。
全てのDocumentに関するアノテーションが完了したらSubmit all documentsをクリックします。
その後、Train and evaluateに進むためにAccept処理をする必要があります。Accept処理自体は複数メンバーでアノテーション作業を実施している状況で、メンバー間のアノテーション不整合が発生した場合に、解消されたことを確認して次の処理に進めるために存在します。Back to Workspaceをクリックし、再度日付抽出(Workspace)に入りなおします(そうしないと本環境ではAccept処理の画面が出てきませんでした)。
次にModel Management-PerformanceでTrain and evaluateを選択、アノテーションが完了しているSet1を選択し、Train and evaluateをクリックします。
Train and evaluateが完了したら、PrecisionやRecallの値が表示されます。また、Current version InsightsのBottom 10をクリックするとTop 10に表示が変わります。今回はDATEのみをアノテーションしていますのでDATEの横棒しか表示されていませんが、実際にはアノテーションを行ったEntityがリストされます。Detailed statisticsをクリックするとモデルに関する詳細を参照できます。この時点で、プレアノテーションを行うためのモデルが完成しました。
次に残りのメールに対してアノテーションを実施しますが、その前にModel Management - Versionsを開き、Snapshotを取得しておきます。作成されたモデルがどのように変化するかを把握したり、やり直したりできるようにするためです。
次に続きます。