Pythonにおける「アノテーション」は2つの意味が存在します。
1つはソースコード上で引数等に対して注釈をつける機能としてのアノテーションで、もう一つはPythonを使用したAI開発において、機械学習の際に使用するデータに注釈をつける作業としてのアノテーションです。
今回は、後者の「Pythonを使用したAI開発におけるアノテーション」について解説します。
AI開発にてアノテーションを行いたいと思っている方はぜひ参考にしてください。
まずアノテーションとは?
そもそもアノテーション(annotation)とは、「注釈」という意味の英単語です。
AI開発の文脈において「アノテーション」という単語が出てきた場合、主に機械学習のモデルに対して学習するためのデータを作成することを指します。
この時作成されたデータは「教師データ」と呼ばれ、教師データを使った機械学習は「教師あり学習」と呼ばれることが多いです。
具体的にどのような形でアノテーションが行われるかというと、画像や文書・音声・映像といったデータに対して「このデータは正解」というタグをつけていきます。よくある例では、迷惑メールフィルタが挙げられるでしょう。
「このメールは迷惑メールである」としてタグを付けていくことで、実際にメールが来た時にAIが迷惑メールかどうかを過去の学習結果から判断できるようになっていきます。
データのサンプルが多ければ多いほど、迷惑メールをより正確に振り分けられるようになっていくのです。
Pythonを使ってアノテーションをする5ステップ
さて、実際にPythonを使ってアノテーションを行ってみましょう。
以下では、テキストデータに形態素解析エンジン「MeCab」を使ったアノテーションのやり方を説明するので、これを参考にして実際にアノテーションを行ってみてください。
①Python3を導入する
まず下準備として、Python3の導入を行います。形態素解析エンジンのMeCabをPythonで使用する場合は、Python3環境で動作するライブラリを使用する必要があります。よって、まずはPython3環境を導入しましょう。
②MeCabと辞書データを用意する
MeCabを機械学習環境にインストールします。環境によって導入方法が異なるので注意しましょう。
同時に、MeCab用の辞書データもインストールを行います。MeCabでは、システム辞書としてIPA辞書とUniDicが使われることが多いです。
それぞれMeCab用の「mecab-ipadic」と「mecab-unidic」という辞書データが存在するため、環境内にインストールを行っておくと良いでしょう。
③MeCabをPython上で使用するライブラリを導入する
MeCabをPython上で使用するために、「mecab-python3」というライブラリパッケージを導入します。
Pythonのバージョンが3になっていることを確認したら、pipコマンドを使ってmecab-python3をインストールしましょう。
④形態素解析を行う
テキストを読み込み、形態素解析を行います。形態素解析によって、文章の各単語が分割されて「名詞」や「動詞」、「助詞」といった形態素のタグがつきます。例えば、「私は日本人です」というテキストを形態素解析すると、「私(代名詞)は(助詞)日本人(名詞)です(助動詞)」といった形で出力が行われます。
このようにして形態素解析を行うことで、テキスト内の各形態素にタグが付与されていくのです。MeCabでは品詞以外にも
- 品詞細分類
- 活用形
- 活用形
- 原形
- 読み
- 発音
についても出力が行われ、特定の要素のみを出力することも可能です。
ちなみに、形態素解析によってテキストの文章を分割して各要素ごとにタグ付けを行うことを「意味的アノテーション」と呼びます。
テキストのアノテーションには他にも「言語的アノテーション」という手法がありますが、これは代名詞の指示対象や単語間の係り受け関係を中心にタグを付与していくという手法です。
⑤タグ付けしたテキストデータを出力する
タグ付けしたテキストデータを出力し、アノテーション済みのデータとして蓄積させていきます。
出力フォーマットはいくつか用意されており、単語の分割して分かち書きにした結果のみを出力する「wakati」、読み方を出力する「yomi」、形態素とそれぞれの素性を出力する「simple」、表層文字列、形態素、基本形、素性を列ごとに分割して返す「chasen」などが代表的です。
出力フォーマットは自分で作ることも可能なので、目的に合わせたフォーマットを作っても良いでしょう。
Pythonを利用したアノテーションの注意点
以下では、Pythonを利用したアノテーションを行うに当たっての注意点を解説します。
注意点をしっかりと頭に入れて、機械学習の際に役に立つ教師データを作っていきましょう。
目的をはっきりとさせよう
やみくもにタグ付けを行っても、無駄が増えてしまいます。
先述した形態素解析を利用したタグ付けを行う場合、品詞の情報だけが欲しいのに読みや原型といったタグを用意してしまうと、無駄の多い教師データが蓄積されていってしまうことでしょう。
どのような目的で機械学習を行うのか、そのためにはどういった情報を学習させる必要があるのかをしっかりと念頭に置いた上で、アノテーションを進めていくことが大事です。
動画にアノテーションを行う方法に関しては下記記事で解説しているので、目的が動画や動画音声の場合はこちらも参考にしてください。
ライブラリやエンジン・辞書データによって出力フォーマットが変わる
使用するライブラリやエンジン、辞書データによって使用可能な出力フォーマットが異なる場合が多いです。
上記で解説した形態素解析ではIPA辞書データを使用しましたが、別の辞書データを使用した場合、出力フォーマットも大幅に変わります。その一方で、分かち書きを出力する「wakati」に関しては別の辞書データでも使用可能だったりすることがあるため注意が必要です。
今使っているライブラリやエンジン、辞書データではどのような出力フォーマットが使用可能なのかを事前にしっかりと確認しましょう。
機械学習モデルを作る上では、出力フォーマットに合わせてコーディングを行っていくことも重要です。
データはなるべく多めに用意する
アノテーションを行う上では、できるだけ大量のデータを用意する必要があることは常に念頭に置きましょう。
上記で例を挙げた迷惑メールフィルタは、回数を重ねていくごとに正確さを増していきます。
つまり、フィルタリングの際に参考となるデータの母数が多いのです。もちろん、闇雲に大量のデータを用意すればよいというわけではありません。システムによっては、少ない教師データで質の高い機械学習を行うことができる場合もあります。
しかし、大量の教師データが用意できるのであれば、それに越したことはありません。できるだけ多くのアノテーションを行い、大量の教師データを用意することが機械学習の基本となるのです。
アノテーションデータに偏りを持たせないようにする
集めたデータは、なるべく偏りを持たせないようにするのが質の高いアノテーションのコツです。
上記の自然言語処理においては、固有名詞が使われた文章と一般名詞が使われた文章を均等に用意したり、動詞の活用形のうち命令形ばかりにならないようにしたり、といった形でデータを用意するようにしましょう。
仮に自然言語処理を行う上で、命令形のデータばかりを学習してしまうと、命令形以外のデータを正確に処理することができないシステムができてしまいます。
正確な判断が行えるAIシステムを作るためにも、アノテーションデータはなるべく様々な性質のものを用意するようにしましょう。
アノテーションは一見簡単に見えますがしっかりとした知識がないとミスしやすいので、自身では難しいと感じたら無理せず代行会社に外注しましょう。
Pythonでアノテーションを行ってAIシステムを学習しよう
アノテーションは、機械学習を行う上では欠かせない作業となります。
質の高いAIシステムは、質の高い教師データから生まれると言っても過言ではありません。アノテーションをしっかりと行って良質な教師データを作り、AIシステムの品質を高めていくことが重要です。