lemminflect英語の一化と変曲のためのPythonモジュール。
LemminFlectは、辞書アプローチを使用して、英語の単語をレンマ化し、ユーザーが提供するユニバーサル依存関係またはPenn TreeBankタグによって指定されたフォームに活用します。ライブラリは、ニューラルネットワーク手法を適用して単語形式を分類し、適切なモーフィングルールを選択することにより、外れ(ov)単語で動作します。
システムは、スタンドアロンモジュールとして、またはSpacy NLPシステムの拡張機能として機能します。
辞書および形態のルールは、英語の単語形式に関する広範なセット情報を含むNIHの専門家レキシコンから派生しています。
より単純化された変曲唯一のシステムは、pyinflectとして利用可能です。 LemminFlectは、そのプロジェクトの欠点の一部に対処し、...などの機能を追加するために作成されました。
最新のドキュメントについては、 readthedocsを参照してください。
lemminflectおよび他のいくつかの一般的なNLPユーティリティの精度は、自動化された変曲データベース(AGID)をベースラインとして使用してテストされました。これは「ゴールド」標準データセットではありませんが、レンマとそれらの対応する変曲の広範なリストがあり、テスト用の「良い」セットのように見えます。各屈折は、テストソフトウェアによってレンマ化され、コーパスの元の値と比較されました。このテストには、119,194の異なる屈折単語が含まれていました。
| Package | Verb | Noun | ADJ/ADV | Overall | Speed |
|-----------------------------------------------------------------------------|
| LemmInflect 0.2.3 | 96.1% | 95.4% | 93.9% | 95.6% | 42.0 uS |
| Stanza 1.5.0 + CoreNLP 4.5.4 | 94.0% | 96.4% | 93.1% | 95.5% | 30.0 us |
| spaCy 3.5.0 | 79.5% | 88.9% | 60.5% | 84.7% | 393.0 uS |
| NLTK 3.8.1 | 53.3% | 52.2% | 53.3% | 52.6% | 12.0 uS |
|-----------------------------------------------------------------------------|
速度は補題ごとにマイクロ秒で、I9-7940X CPUで実施されました。スタンザはJava CorenLPソフトウェアに電話をかけているため、120Kテストケースはすべて1回の呼び出しにグループ化されました。スペイシーの場合、すべてのパイプラインコンポーネントは、lemmatizerを除き、無効になりました。補題時間あたりの時間は、おそらくパイプラインアーキテクチャの一般的なオーバーヘッドを反映しているでしょう。
レムミンの折り目を実行するための唯一の外部要件は、神経ネットを駆動するマトリックス数学に使用されるnumpyです。これらのネットは比較的小さく、実行するために重要なCPUパワーを必要としません。
インストールするには..
pip3 install lemminflect
このプロジェクトは、Python 3とUbuntuの下で構築およびテストされましたが、Linux、Windows、Macなどで実行する必要があります。システム。 Python 2の下ではテストされていませんが、変更が最小限または変更されない環境で機能する場合があります。
コードベースには、さまざまなデータファイルとニューラルネットを作成するためのライブラリ関数とスクリプトも含まれています。これには...
これらのいずれも、ランタイム操作には必要ありません。ただし、システムを変更する場合は、詳細についてはドキュメントを参照してください。
単語をレンマ化するには、メソッドgetLemma()を使用します。これには、単語と普遍的な依存関係のタグが必要であり、可能なスペルのリストとしてレンマを返します。辞書システムが最初に使用され、補題が見つからない場合、ルールシステムが採用されます。
> from lemminflect import getLemma
getLemma('watches', upos='VERB')
('watch',)
単語を活用するには、メソッドgetInflection使用します。これには、補題とペンのツリーバンクタグが必要であり、そのタグに関連付けられた特定の変曲のタプルを返します。上記の同様に、辞書が最初に使用され、次に必要に応じて変曲ルールが適用されます。
> from lemminflect import getInflection
> getInflection('watch', tag='VBD')
('watched',)
> getInflection('xxwatch', tag='VBD')
('xxwatched',)
ライブラリは、辞書とOOVルールに直接アクセスするための低レベルの関数を提供します。詳細な説明については、lemmatizerまたは変曲を参照してください。
拡張機能として使用するには、Spacyバージョン2.0以降が必要です。バージョン1.9以前は、ここで使用される拡張方法をサポートしていません。
拡張機能をセットアップするには、最初にlemminflectをインポートします。これにより、スパシーTokenごとに新しいlemmaとinflect方法が作成されます。メソッドは、上記の方法と同様に動作しますが、タプルではなく、最も一般的なスペルを含む文字列が返されることを除いて。
> import spacy
> import lemminflect
> nlp = spacy.load('en_core_web_sm')
> doc = nlp('I am testing this example.')
> doc[2]._.lemma()
test
> doc[4]._.inflect('NNS')
examples
バグが見つかった場合は、GitHubの問題リストに報告してください。ただし、正しい変曲を返すことになると、発生する可能性のあるさまざまな種類の問題があることに注意してください。これらのいくつかは容易に修正できません。変化したフォームの問題には...
一般的な問題の1つは、動詞「Be」のいくつかの形式がTreeKbankタグによって完全に指定されていないことです。たとえば、be/vbdは、「was」または「was」のいずれかに変化し、be/vbpは「am」または「are」のいずれかに変身します。これらのフォームを乱用するには、文の他の言葉を検査する必要があります。現時点では、LemminFlectにはこの機能は含まれていません。