|
自然言語処理(NLP)は、チャットボット、音声アシスタント、予測入力、そして私たちの生活に浸透しているその他の音声/テキストアプリケーションの基盤となる技術であり、ここ数年で大きな進歩を遂げてきました。この記事では、音声またはテキストベースのアプリケーションの計画に役立つオープンソースのNLPツールをいくつかご紹介します。 I. Pythonツール 1. 自然言語ツールキット(NLTK) Natural Language Toolkit(NLTK)は、最も包括的なツールキットです。分類、トークン化、構文解析、意味推論など、必要なNLPコンポーネントをほぼすべて実装しています。さらに、各手法には通常複数の実装が用意されているため、使用するアルゴリズムや手法を的確に選択できます。また、複数の言語をサポートしています。ただし、すべてのデータを文字列として表現するため、シンプルなアーキテクチャには適していますが、特定の高度な機能の使用は困難です。また、他のツールと比較して開発が遅いのも欠点です。総じて、実験、探索、そして特定のアルゴリズムの組み合わせを必要とするアプリケーションに最適なツールキットです。 2. スパーシー SpaCyはNLTKの主要な競合相手です。ほとんどの場合NLTKよりも高速ですが、NLPコンポーネントごとに実装が1つしかありません。さらに、すべてを文字列ではなくオブジェクトとして表現するため、アプリケーションのインターフェース構築が簡素化されます。これは他の多くのフレームワークやデータサイエンスツールとの統合にも役立ち、テキストデータの理解を深めることで、より多くの操作を実行できるようになります。ただし、SpaCyはNLTKほど多くの言語をサポートしていません。シンプルなインターフェース、簡素化されたオプションセット、優れたドキュメント、そして言語処理と分析の様々なコンポーネントに対応する複数のニューラルモデルを備えています。全体として、SpaCyは、特定のアルゴリズムを必要としない、本番環境で高いパフォーマンスが求められる新しいアプリケーションに最適なツールです。 3. テキストブロブ TextBlobはNLTKの拡張機能です。TextBlobを使えば、多くのNLTK関数に簡単にアクセスできます。また、Patternライブラリの機能も含まれています。NLTKを使い始めたばかりの方にとって、TextBlobは学習に最適なツールであり、過度な実行を必要としないアプリケーションであれば、本番環境でも使用できます。全体的に見て、TextBlobは様々な場面で使用されており、小規模なプロジェクトに適しています。 4. テキストアシー Textacyも優れたツールです。SpaCyをコアNLP機能として採用していますが、かなりの量の前処理と後処理を担っています。SpaCyを使用する予定であれば、Textacyも併用できます。Textacyを使用すると、追加のヘルパーコードを記述することなく、様々な種類のデータを簡単にインポートできます。 5. PyTorch-NLP PyTorch-NLPは登場からしばらく経ちますが、既に巨大なコミュニティを形成しています。ラピッドプロトタイピングに最適なツールです。また、研究を通して頻繁にアップデートされており、企業や研究者は画像変換など、様々な優れた処理タスクに対応するツールを数多くリリースしています。PyTorchは研究者向けに設計されていますが、最先端のアルゴリズムを備えているため、プロトタイピングや初期の本番環境ワークロードにも使用できます。PyTorchをベースに構築されたライブラリも検討する価値があります。 II. ノードツール 6. テキスト変更 RetextはUnified Collectiveの一員です。Unifiedは、複数のツールやプラグインを統合し、効果的に連携させるためのインターフェースです。RetextはUnifiedツールで使用される3つの構文のうちの1つで、他の2つはMarkmark用のRemarkとHTML用のRehypeです。Retextは基盤となる技術をあまり公開しておらず、プラグインを使用することでNLPで目指す結果を実現します。これにより、スペルチェック、タイポグラフィの修正、感情の検出、シンプルなプラグインによるテキストの読み取り確認などが容易になります。全体として、基盤となるプロセスのすべてを理解することなく特定のタスクを実行したい場合、Retextは優れたツールであり、コミュニティでもあります。 7. 妥協 Compromise は、確かに最も複雑なツールではありません。最先端のアルゴリズムや最も包括的なシステムを求めているなら、これは適していないかもしれません。しかし、クライアント上で実行できる高度な機能を備えた高性能ツールをお探しなら、Compromise を検討してみる価値はあるでしょう。 8. ナチュラル Naturalには、典型的なNLPライブラリに期待されるほとんどの機能が含まれています。主に英語に重点を置いていますが、他のいくつかの言語も既に含まれており、コミュニティはさらなる貢献を歓迎しています。トークン化、ステミング、分類、音声認識、用語頻度(逆文書頻度)、WordNet、文字列類似度、およびいくつかのバリエーションをサポートしています。NLTK***はあらゆる機能を1つのパッケージにまとめようとしているため、NLTK***に匹敵するかもしれませんが、NLTKの方が使いやすく、必ずしも研究に重点を置いているわけではありません。全体的に非常に完成度の高いライブラリですが、まだ活発に開発が進められており、完全に効果的に機能させるには、低レベルの実装に関する追加の知識が必要になる場合があります。 9. Nlp.js Nlp.jsは、FrancやBrain.jsを含む複数のNLPライブラリをベースに構築されています。分類、感情分析、ステミング、固有表現抽出、自然言語生成など、多くのNLPコンポーネントに優れたインターフェースを提供します。また、複数の言語をサポートしているため、英語以外の言語を使用する予定がある場合に非常に便利です。全体として、Nlp.jsは他のツールとのインターフェースを簡素化する優れた汎用ツールです。より強力で柔軟な機能が必要になるまで、アプリケーションで長く使い続けられるでしょう。 III. Javaツール 10. オープンNLP OpenNLPはApache Foundationによってホストされているため、Apache Flink、Apache NiFi、Apache Sparkなどの他のApacheプロジェクトとの統合が容易です。NLPの一般的な処理コンポーネントをすべて網羅した汎用NLPツールであり、コマンドラインまたはアプリケーションからライブラリとして使用できます。また、複数の言語を幅広くサポートしています。全体として、OpenNLPは多くの機能を備えた強力なツールであり、Javaを使用している場合は本番環境のワークロードにもすぐに使用できます。 11. スタンフォード大学NLP Stanford CoreNLPは、統計NLP、ディープラーニングNLP、ルールベースNLP機能を提供するツールスイートです。多くのプログラミング言語へのバインディングが用意されているため、Java以外でも使用できます。一流の研究機関によって開発された非常に強力なツールですが、本番環境のワークロードには最適な選択肢ではない可能性があります。このツールはデュアルライセンスで提供されており、商用利用には特別なライセンスが必要です。全体として、研究・実験には最適なツールですが、本番環境システムでは追加コストが発生する可能性があります。 12. コグコンプNLP イリノイ大学が開発したCogCompNLPにも、同様の機能を備えたPythonライブラリがあります。ローカルシステムまたはリモートシステムでのテキスト処理に使用でき、ローカルデバイスの負荷を大幅に軽減できます。トークン化、品詞タグ付け、チャンキング、固有表現タグ付け、レマタイズ、係り受けと領域の分析、意味役割タグ付けなどの処理機能を提供します。全体として、多くのコンポーネントを探索できる優れた研究ツールです。本番環境のワークロードに適しているかどうかはわかりませんが、Javaを使用する予定であれば試してみる価値はあります。 |