StanfordNLPが公開されました。形態素解析だけでなく、係り受け解析や照応解析までできるやつです。
なんと日本語モデルもあります。これはうれしいです。
It contains packages for running our latest fully neural pipeline from the CoNLL 2018 Shared Task and for accessing the Java Stanford CoreNLP server
https://stanfordnlp.github.io/stanfordnlp/
というわけで早速触ってみます。
インストール
PyTorchを入れます。
https://pytorch.org/get-started/locally/
stanfordnlpを入れます。
pip install stanfordnlp
初回は言語ごとのモデル(2GBくらいあります)をダウンロードすることが必要なので以下を実行しておきます。ダウンロードが終わるまで気長に待ちましょう。
言語はjaだけでも大丈夫のようです。
>>> import stanfordnlp
>>> stanfordnlp.download('ja')
>>> nlp = stanfordnlp.Pipeline(lang='ja')
>>> doc = nlp('望遠鏡で泳いでいる少女を見た')
>>> doc.sentences[0].print_dependencies()
使ってみる
一度モデルファイルをダウンロードしておけば、あとは以下を実行するだけでロードできるようです。
ロードには少し時間がかかります。
nlp = stanfordnlp.Pipeline(lang='ja')
有名なKNPの例文を実行してみます。
>>> doc = nlp('クロールで泳いでいる少女を見た')
>>> doc.sentences[0].print_dependencies()
('クロール', '3', 'obl')
('で', '1', 'case')
('泳い', '6', 'acl')
('で', '3', 'mark')
('いる', '3', 'aux')
('少女', '8', 'obj')
('を', '6', 'case')
('見', '0', 'root')
('た', '8', 'aux')
>>> doc = nlp('望遠鏡で泳いでいる少女を見た')
>>> doc.sentences[0].print_dependencies()
('望遠鏡', '3', 'obl')
('で', '1', 'case')
('泳い', '6', 'acl')
('で', '3', 'mark')
('いる', '3', 'aux')
('少女', '8', 'obj')
('を', '6', 'case')
('見', '0', 'root')
('た', '8', 'aux')
>>> doc = nlp('機内の楽しみって「おやつ」と「機内食」しかなく〜今まで満足したことなかったけど、フィリピンエアライン〜良 かったよ!')
>>> doc.sentences[0].print_dependencies()
('機内', '3', 'nmod')
('の', '1', 'case')
('楽しみ', '4', 'obl')
('っ', '15', 'advcl')
('て', '4', 'mark')
('「', '7', 'punct')
('おやつ', '12', 'nmod')
('」', '7', 'punct')
('と', '7', 'case')
('「', '12', 'punct')
('機内', '12', 'compound')
('食', '15', 'obl')
('」', '12', 'punct')
('しか', '12', 'case')
('なく', '23', 'advcl')
('〜', '17', 'compound')
('今', '19', 'obl')
('まで', '17', 'case')
('満足', '22', 'acl')
('し', '19', 'aux')
('た', '19', 'aux')
('こと', '23', 'obl')
('なかっ', '29', 'advcl')
('た', '23', 'aux')
('けど', '23', 'mark')
('、', '23', 'punct')
('フィリピンエアライン', '28', 'compound')
('〜', '29', 'obl')
('良かっ', '0', 'root')
('た', '29', 'aux')
('よ!', '29', 'punct')
>>>
StanfordNLPは、やっぱり望遠鏡問題を解決できていませんが、pip(と長いダウンロード時間)だけでセットアップできる手軽さはいいですね。
これで係り受け解析なども手軽に組み込めるようになりそうです。
ちなみに、以下はKNPの係り受け解析結果です。KNPもpipだけでセットアップできるようになるといいですね。
http://nlp.ist.i.kyoto-u.ac.jp/?KNP
% juman < test.txt | knp
クロールで──┐
泳いでいる──┐
少女を──┐
見た
EOS
望遠──┐
鏡で──┐
泳いでいる──┐ │
少女を──┤
見た
EOS
機内の──┐
楽しみって──┐
「おやつ」と<P>─┐ │
「機内食」しか<P>─PARA──┤
なく〜──┐
今まで──┤
満足したことなかったけど、──┐
フィリピン──┐ │
エアライン〜──┤
良かったよ!
EOS
おしまい。