since 2021-11-24
「spaCyは産業応用向きの自然言語処理用Pythonライブラリです。」
解説(v2)
バージョン3
ビジュアライザー
PyPI
spaCy/GiNZA を用いた自然言語処理
spaCy 3.0 で Transformer を利用する
spacy_streamlit
GiNZA
Windows 11 + WSL2 + Linux Python 3.10 でやってみる
$ /usr/local/bin/python3.10 -m venv .env310 $ . .env310/bin/activate $ pip install -U pip setuptools wheel $ pip install spacy
$ python -m spacy download en_core_web_sm $ python Python 3.10.0 (default, Oct 6 2021, 09:20:06) [GCC 7.5.0] on linux Type "help", "copyright", "credits" or "license" for more information. >>> from spacy.lang.en import English >>> nlp = English() >>> doc = nlp("Hello world!") >>> for token in doc: ... print(token.text) ... Hello world ! >>> doc = nlp("It costs $5.") >>> [token.text for token in doc] ['It', 'costs', '$', '5', '.'] >>> [token.is_alpha for token in doc] [True, True, False, False, False]
統計モデル
>>> import spacy >>> nlp = spacy.load("en_core_web_sm") >>> doc = nlp("She ate the pizza") >>> [(token.text, token.pos_) for token in doc] [('She', 'PRON'), ('ate', 'VERB'), ('the', 'DET'), ('pizza', 'NOUN')]
Token
>>> type(doc[0]) <class 'spacy.tokens.token.Token'> >>> [(token.text, token.lemma_) for token in doc] [('She', 'she'), ('ate', 'eat'), ('the', 'the'), ('pizza', 'pizza')]
Named Entity / Span
>>> doc = nlp("Apple is looking at buying U.K. startup for $1 billion") >>> [(ent.text, ent.label_) for ent in doc.ents] [('Apple', 'ORG'), ('U.K.', 'GPE'), ('$1 billion', 'MONEY')] >>> type(doc.ents[0]) <class 'spacy.tokens.span.Span'>
explain
>>> spacy.explain("NNP") 'noun, proper singular'
モデル一覧
$ python -m spacy download ja_core_news_sm
下記で止まる
Collecting sudachidict-core>=20200330 Using cached SudachiDict-core-20210802.post1.tar.gz (9.1 kB) Preparing metadata (setup.py) ... -
乗り換えてみるか
$ /usr/local/bin/python3.9 -m venv .env39 $ . .env39/bin/activate $ pip install -U ginza ja-ginza-electra
since 2021-11-30
Python 3.9 でやり直したら動いた
$ /usr/local/bin/python3.9 -m venv .env39 $ . .env39/bin/activate $ pip install -U pip setuptools wheel spacy $ python -m spacy download ja_core_news_sm You can now load the package via spacy.load('ja_core_news_sm')
$ python Python 3.9.9 (main, Nov 16 2021, 10:06:29) [GCC 7.5.0] on linux Type "help", "copyright", "credits" or "license" for more information. >>> import spacy >>> nlp = spacy.load("ja_core_news_sm") >>> text = "この無料のオンラインコースでは、ルールベースと機械学習を用いた先進的な自然言語処理システム をspaCyで作る方法をインタラクティブに学ぶことができます。" >>> doc = nlp(text) >>> [(token.text, token.pos_) for token in doc] [('この', 'DET'), ('無料', 'NOUN'), ('の', 'ADP'), ('オンライン', 'NOUN'), ('コース', 'NOUN'), ('で', 'ADP'), ('は', 'ADP'), ('、', 'PUNCT'), ('ルール', 'NOUN'), ('ベース', 'NOUN'), ('と', 'ADP'), ('機械', 'NOUN'), ('学習', 'NOUN'), ('を', 'ADP'), ('用い', 'VERB'), ('た', 'AUX'), ('先進', 'NOUN'), ('的', 'PART'), ('な', 'AUX'), ('自然', 'NOUN'), ('言語', 'NOUN'), ('処理', 'NOUN'), ('システム', 'NOUN'), ('を', 'ADP'), ('spaCy', 'NOUN'), ('で', 'ADP'), ('作る', 'VERB'), ('方法', 'NOUN'), ('を', 'ADP'), ('インタ ラクティブ', 'ADJ'), ('に', 'AUX'), ('学ぶ', 'VERB'), ('こと', 'NOUN'), ('が', 'ADP'), ('でき', 'AUX'), ('ます', 'AUX'), ('。', 'PUNCT')]
>>> doc = nlp("アップルはイギリスのスタートアップを10億円で買いそうだ") >>> doc.ents (アップル, イギリス, 10億円)
ちょっと大きいモデルを試すが、違いがあるかどうかはテキストによるようだ。
$ python -m spacy download ja_core_news_md >>> import spacy >>> nlp = spacy.load("ja_core_news_md")