みなさんこんにちは。dottの清水です。
さて、前回の「京の夢 大阪の夢」では「固有表現抽出(英語でNamed Entity Recognition, NER)」として、文章の中に「何が書いてあるか」ということを調べる方法について話しました。
汎用的な文書解析の仕組みでも、文章の中に何が書いてあるか、つまり「固有表現」を抽出してくることができますが、必要な処理がニッチであればあるほど、汎用的な仕組みでは十分な解析が行えなくなってしまいます。
固有表現抽出 NERのおさらい
「火事と喧嘩は江戸の花だが」でもBERTという仕組みを使って、文章分類の汎用的な仕組みでは解決できない問題、つまり「AIのラスト1m」を埋める方法をお話ししました。
文章分類は「クラス分類」という問題でしたが、固有表現抽出(NER)の問題でもBERTは活躍します。
前回のおさらいにもなりますが、一般的なNERタスクでは以下のような内容=固有表現を抽出します。例とともに見てみましょう。
- 組織名 Organization
- 株式会社dott / Google / レッドブル・レーシング
- 人名 Person
- 清水俊之介 / ジェフ・ディーン / マックス・フェルスタッペン
- 地名 Location
- 福島県 / マウンテン・ビュー / レッドブル・リンク
- 日付表現 Date
- 1983年7月5日 / 23rd, July, 1968 / 1997-9-30
- 時間表現 Time
- 10時50分 / 18:50 / 0350
- 金額表現 Money
- 三千円 / $25,000 / 300,000ユーロ
- 割合表現 Percent
- 九分九輪 / 99.99999% / 57/58
- 固有物名 Artifact
- NewsPic / BigTable / Formula 1
もちろんシステムによって、抽出できるものの種類は変わってきますが、基本的には固有表現抽出というものが出てきた時に提唱された1~7と、後に8が追加された上記の8つが基本的なものです。
あなたの求める固有表現
ではここでまたラスト1mの話に戻ります。
例えば「2021年に世界で販売されたレッドブルの缶は98億400万本」というを文章から「販売本数」を拾ってこようとする場合、1~8の固有表現のどれにあたるでしょうか?
なかなか適当なものがありません。(前回も紹介したGoogleのNatural Language APIでは「Number」というラベルがあり、単純に「数字」として認識されるものもあります)
さらに災害のニュースの文章の中から「死者」や「負傷者」といった被害の種類を抽出したい場合、その「被害の種類」を抽出するためのラベルはなく、むしろ「人名」や「金額表現」などは不必要です。
このように、実際に文章解析システムを用いて文章を解析しても、ある特定のニーズにマッチした結果を得ることが難しい場合があります。
産む”は”易し
そこでようやく登場するのが、BERTなどの仕組みを利用したNERの独自AIの開発です。
と、ここまで言っておいてなんですが、そのシステムは本当に必要でしょうか?
機械学習やディープラーニングの技術が誰にでも使えるようになり、少し前に比べるとさまざまなものを開発するハードルも下がってきています。しかし運用を考える上で安易に導入するということはとても危険だと考えています。
例えばBERTのモデルは小さくしても約400MBほどのサイズがあり、それがいくつか必要なので、サーバーで動かす場合はメモリが最低4GBくらいは必要になってきます。
それをどこで動かして、どれだけの費用がかかりますか?
最初に作ったAIが満足いかなくなった場合、どうやってメンテナンスしますか?
自前のAIが動かない時、復旧するための仕組みが整っていますか?
AIのラスト1mに向けて出発することは簡単ですが、引き返すことは少しだけ難しいのです。
隣の芝の青さも知っておく
汎用的なシステムを使った方が良いケースもあります。
Web APIのような形で提供されているものであれば、サーバー等を含めて機能自体にメンテナンスも不要で、どんどんアップデートされ改善されていくので、それらを使うメリットも十二分にあると考えているからです。
なのであくまで「自分たちで作る理由と見合う価値」がある時にだけ、dottではAI開発を提案しています。
ではどんなケースが自分たちのAI開発に向いているのか。
それはまた、次回の記事で。