こんにちワンコ。
ちゅらデータ株式会社の山内です。
この記事は、"ちゅらデータアドベントカレンダー"の16日目です。
私の好きな分野の一つ「自然言語処理」について書きたいと思います。
はじめに
自然言語処理は、データ分析の様々な研究分野の中でも大きく注目されているテーマで、日々たくさんの論文が発表されていますが、最近では、実際の業務レベルでの要望、課題解決の手段としても利用されることが多くなってきました。
この記事は、そのような業務で利用される自然言語処理のライブラリのひとつ「spaCy」について書きたいと思います。
spaCyについて
spaCy は Python と Cython で実装されたオープンソースの自然言語処理ライブラリです。
プロダクト環境で利用するためにデザインされていることが特徴的です。
本家サイトには、自然言語処理の「Ruby on Rails」のようなものだと記載されています(^^;)
私が spaCy を利用しようと考えたのも、「プロダクト環境で利用できる」という点で目についたからです。
NLPのライブラリには、NLTK や CoreNLP などの有名なものがいくつかありますが、研究で利用されることを目的に実装されています。
これらは、BERTやTransformerをお試しで実行するには便利なライブラリですが、
顧客の用意した自由なフォーマットデータに対して前処理を行う場合や、ビジネスロジックに沿ったデータオブジェクトを実装したりするといった用途では使い勝手が良いとは言えません。
spaCyを使うことで、業務コードを便利に実装することができます。
具体的な特徴
自然言語処理のさまざまな概念が基本APIとして用意されている
下記の図は、spaCyのアーキテクチャ図です。
ドキュメントやトークン、形態素などの基本オブジェクトや、
トーカナイザー、Tagger(品詞のタグ付などに利用)、Dependency Parser(構文解析)、固有表現抽出など、設計段階で構想されています。
これらは、処理を実行するための具体的な実装だけでなく、
ビジネスロジックを拡張実装するためのベースコードとして利用できるようになっています。
https://spacy.io/api#_title Library architectureより
「Span」は、単語分割がややこしい日本語NLPではとても便利な概念です。
https://spacy.io/api/span
パイプライン処理
NLPで必須な前処理に関しても便利な機能がたくさんあります。
実用で必須なパイプライン処理は、使いやすく独自処理の追加も簡単な実装で実現することができます。
ルールベースの利用
深層学習モデルに注目があつまるNLPですが、
業務要件では、ルールベース(単純な単語マッチなど)や正規表現を利用した手法も課題解決のため必要な実装です。
辞書を用いたMatcherや、辞書や言語資源をを効率的に扱うために、 Vocab , StringStore などのデータ格納のための概念も設計に組み込まれています。
https://spacy.io/usage/rule-based-matching
モデルの組み込み
統計モデルやML、深層学習系モデルを組み込むことも想定されており、
言語ごと(英語、ドイツ語など)のモデルや、いくつかのアルゴリズムがすぐに利用できる状態で実装されています。
もちろん、自前のモデルも利用することが可能です(使い方にやや癖があります)
https://spacy.io/models
処理の効率化
処理速度やメモリ効率化のため、Cythonでの実装を筆頭に、巨大データを扱うための実装や、データ格納時サイズ削減の機構など(Hashing化)、実運用を見据えた様々な工夫がなされています。
おわりに
以上、本記事はspaCyの紹介のみに終わってしまいますが、
プロダクトレベルで実装で役立つライブラリーとして、spaCyの良さが少しでも伝わっていると幸いです。
弊社では、実際のプロダクトコードとしての利用や、この設計を元に独自ライブラリの実装の参考にしたりと便利に利用しています。
データ分析業界は、「AI」というバズワードが先行していた夢物語のフェーズから、
実際に業務課題に対してどのように実装するか、機能としてどう組み込むかといったフェーズに入っています。
これからは、spaCyのような実務で使えて役に立つOSSライブラリがたくさん開発されていくことでしょう。
ちゅらデータもそういったライブラリやサービスをどんどん開発して顧客やデータ分析業界の力になれるよう日々技術磨いています。