St_Hakky’s blog

Data Science / Human Resources / Web Applicationについて書きます

自然言語処理向けのデータ作成ツールの「doccano」を使ってみたので、まとめる

こんにちは。

最近、仕事で自然言語処理関係のプロジェクトをやっているのですが、その関係でdoccanoというツールを触ってみることになったので、使い方とかをまとめておきます。

doccanoとは

doccanoとは、オープンソースのテキストアノテーションツールです。

github.com

以下の三つのアノテーションタスクをすることができます。

  • Text Classification
  • Sequence Labeling
  • Sequence to Sequence

demoサイトは以下から。

RESTful APIなども搭載されているので、結果の取得をAPI経由で行うなどもすることができます。

doccanoをとりあえずローカルで立ち上げてみる

doccanoをローカルでとりあえず試してみます。

pipでインストールして立ち上げる

以下のコマンドだけで立ち上げることができます。

$ pip install doccano

$ doccano

これで、 http://0.0.0.0:8000/にアクセスするとツールを見れます。

簡単ですね。

dockerで立ち上げる

dockerで立ち上げるのもそう難しくなく、以下のコマンドで対応できます。

$ docker pull doccano/doccano
$ docker container create --name doccano \
  -e "ADMIN_USERNAME=admin" \
  -e "ADMIN_EMAIL=admin@example.com" \
  -e "ADMIN_PASSWORD=password" \
  -p 8000:8000 doccano/doccano

docker container start doccano

これで、 http://localhost:8000/にアクセスするとツールを見れます。

Sequence Labelingを試してみる

今回は、テキスト中の「偉い人」と「そうでない人」を識別するという意味不明なタスクを想定して、その表現部分をアノテーションしていくことをやってみようと思います。

ローカルで立ち上げてログインする

先ほどの方法でローカルで立ち上げます。ここから先は、AWSやGCPなどの環境で立ち上げても同じです。

f:id:St_Hakky:20210108103854p:plain

ユーザー名とパスワードを入れます。

f:id:St_Hakky:20210108104448p:plain

プロジェクトを作成する

入ると、プロジェクトの一覧を見ることができます。最初は、プロジェクトがないので、一覧には何もないですが、今回の私の例ですと、一つプロジェクトが作られています。

f:id:St_Hakky:20210108104456p:plain

今回のアノテーションタスクに関するプロジェクトを立ち上げます。左上のCreateを押すと、以下のようなモーダルが出るので、それに入力します。

f:id:St_Hakky:20210108104502p:plain

プロジェクトを作成して、プロジェクトのページに行くと、以下のような画面が見れます。

f:id:St_Hakky:20210108104801p:plain

左側に、メニューがありますが、それぞれ以下の役割があります。

  • Home:各ステップのやることがYoutubeの動画で学べる
  • Dataset:AnnotationするデータをImport、Exportすることができ、またAnnotationをデータに対して行うことができる
  • Labels:Annotationをするラベルを登録することができる
  • Members:Annotationをするメンバーの一覧を確認できる
  • Guideline:Annotationのガイドラインをここに記載することができる
  • Statistics:Annotationの実施状況を確認することができる
データセットのインポート

早速、データセットのインポートをしてみます。サイドメニューからインポートをします。

f:id:St_Hakky:20210108104512p:plain

以下のようなモーダルが出てくるので、お好きな方法でデータをインポートします。

f:id:St_Hakky:20210108105430p:plain

Createと押すと、データの取り込みが行われます。

f:id:St_Hakky:20210108105530p:plain

ラベルを作成する

今回のアノテーションでつけるラベルを作成します。

f:id:St_Hakky:20210108105559p:plain

Createを押すと、以下のようなモーダルが表示され、必要な情報を記入します。

f:id:St_Hakky:20210108105701p:plain

今回は、偉い人とそうじゃない人を当てるタスクを解きたいので、以下のようなラベルを作成しました。

f:id:St_Hakky:20210108105705p:plain

これで準備完了です。あとはひたすらアノテーションをするだけです。

Annotatonを開始する

左上の「Start Annotation」からでもいいですし、以下の画像にあるようにDatasetの一覧からAnnotationしたいものからスタートしてもいいですし、なんでも大丈夫です。

f:id:St_Hakky:20210108105900p:plain

Annotationをスタートさせると、以下のようにテキストが出てきます。マウスでテキストを洗濯すると、先ほど作成したラベルが表示され、どのラベルにするかを選択することができます。

f:id:St_Hakky:20210108110031p:plain

選択すると、以下のようにラベルがテキストに対して付与されます。

f:id:St_Hakky:20210108110124p:plain

そして、以下のようにラベルを付与した後に間違えたと思ったらバツボタンを押すことで、消すこともできます。

f:id:St_Hakky:20210108110134p:plain

Annotationの実施状況を確認する

Annotationをこのように行っていくのですが、実施した状況については、以下のように統計情報として得ることができます。便利ですね。

f:id:St_Hakky:20210108110143p:plain

Annotationした結果を受け取る

Annotationが終わったら、データをExportすることができます。以下の画面から、Exportを選択して、

f:id:St_Hakky:20210108111012p:plain

モーダルに必要な情報を入力するとExportできます。

f:id:St_Hakky:20210108111016p:plain


以上で一通りの機能については紹介しました。

感想・まとめ

今回のブログで紹介した以外にも、ショートカットキーで操作ができたり、他にも機能としてはいくつかありそう。

ただ、

  • 1プロジェクトにつき1MBまでしかデータがImportできないっぽい…?
  • Sequence Labelingでラベル付与しなかったものを完了ってするのどうするんだろうという気持ち

というような感じで、ちょいちょいどうしたらいいんだろうっていうところはあったので、使いながら確認して行こうかなーと思っています。


それでは。