気の向くままに辿るIT/ICT
ソフトウェア

自然言語処理ライブラリspaCy

ホーム前へ次へ
フリーソフト・オープンソースを活用しよう。

自然言語処理ライブラリspaCy

自然言語処理ライブラリspaCy

2021/11/15

 spaCyは、PythonとCythonで書かれたオープンソースのPythonの自然言語処理用ライブラリです。

 単独で他の多くの言語で利用できた一方、日本語未対応だった頃のspaCyを日本語対応すべく登場?spaCyやsudachiPyも併せてインストール、利用されるGiNZAもありますが、既にspaCyも日本語対応しているのでspaCy単独で日本語の自然言語処理が可能となっています。

 spaCyのインストールで必要な項目をチェックすると環境に応じた必要なインストール方法が提示されます。

debian~:$ python -V
Python 3.9.2
debian~:$ pip3 install -U pip setuptools wheel
debian~:$ pip3 install -U spacy[transformers,lookups,ja]
debian~:$ python -m spacy download en_core_web_sm
debian~:$ python -m spacy download ja_core_news_sm
debian~:$

 自身は、Debian GNU/Linux、x86、pip、CPU版、train models(自分で用意した依存関係やデータを利用して学習させるモデル)、英語と日本語の辞書、efficiency(速度重視)を指定したところ、こうなりました(ただし、pipはpip3にしましたが)。

 train modelsを選択しない場合は、[transformers,lookups,ja]は不要です。

 これ以外のvirtual envやcondaを利用する場合、更にGPUの利用など詳細については、リンク先を参照ください。

debian~:$ python
...
>>>import spacy
>>> nlp = spacy.load("ja_core_news_sm")
>>> doc = nlp("JPOPを再生して")
>>> print([(w.text, w.pos_) for w in doc])
[('JPOP', 'NOUN'), ('を', 'ADP'), ('再生', 'VERB'), ('し', 'AUX'), ('て', 'SCONJ')]
>>>
[Ctrl]+[D]
debian~:$

 pythonインタプリタを起動、import spacyとしてエラーが出なければ、インストール完了です。

debian~:$ vi spacy_test.py
debian~:$ chmod u+x spacy_test.py
debian~:$ cat spacy_test.py
#!/usr/bin/env python3
 
import spacy
nlp = spacy.load("ja_core_news_sm")
 
doc = nlp("日本テレビとテレビ朝日とTBSとフジテレビとテレビ東京はテレビ局だよね。液晶テレビは製品だよね。")
for ent in doc.ents:
  print(ent.text, ent.label_)
debian~:$ ./spacy_test.py
日本テレビ ORG
テレビ朝日 ORG
TBS ORG
フジテレビ ORG
テレビ東京 ORG
debian~:$

 辞書ja_core_news_smを使った固有名詞を抜き出すスクリプトだとこんな感じ。

 液晶テレビの件は検出されていないですが、見事にテレビ局は全部抽出、ORG(辞書にないオリジナルって意味?)と認識。

debian~:$ vi spacy_test1.py
debian~:$ chmod u+x spacy_test1.py
debian~:$ cat spacy_test1.py
#!/usr/bin/env python3
 
import spacy
nlp = spacy.load('ja_ginza')
 
doc = nlp("日本テレビとテレビ朝日とTBSとフジテレビとテレビ東京はテレビ局だよね。液晶テレビは製品だよね。")
for ent in doc.ents:
  print(ent.text, ent.label_)
debian~:$ ./spacy_test1.py
日本テレビ Company
テレビ朝日 Company
TBS Company
フジテレビ Company
テレビ東京 Company
debian~:$

 実は、GiNZAも入れてみて辞書ja_ginzaもあったので試してみた同じく固有名詞を列挙させるスクリプトだとこんな感じ。

 やっぱり、液晶テレビの件はないですが、見事に全てのテレビ局を検出し、Companyと認識。

 この一文にするまで何度かやった中で、これらの辞書にとって良さげなのがこれだったってことで。

debian~:$ pip install -U spacy
debian~:$ python -m spacy validate
debian~:$

 尚、アップデートと他のパッケージとの互換性チェックを行うには、このようにするとのこと。

ホーム前へ次へ