[Python, NLP] Stanza で div or / is no longer supported エラー

1 min読了の目安(約1200字TECH技術記事

概要

久しぶりにstanfordnlp/stanzaを使用中、いくつかの文で Runtime Error が発生した。
Errorの内容は以下。

RuntimeError: Integer division of tensors using div or / is no longer supported, and in a future release div will perform true division as in Python 3. Use true_divide or floor_divide (// in Python) instead.

環境は以下。

Python 3.7.3
stanza 1.0.1

解決済みなので備忘録程度にまとめておく。
ソースはこちらから

以前使っていて急に使えなくなった時の対処法であり、新規で始める方には関係ない。

原因

どうやらTorchのインターフェイス変更に起因するものだったらしい。

解決策

  • 2020/8/7 devブランチにて解決
$ git clone -b dev https://github.com/stanfordnlp/stanza
$ cd stanza
$ pip install -e .
  • 2020/8/13 公式アップデートにて解決
$ pip install stanza -U

結論

現状はアップデートすればいいだけ。
stanzaだけではなくcorenlpでも同様のエラーが見られる可能性あり。その際にも参考になれば。

実行してみる

  • ソースコード
test.py
import stanza

if __name__ == "__main__":
    stanza.download('en')
    nlp = stanza.Pipeline('en')
    doc = nlp("The quick brown fox jumps over the lazy dog.")
    doc.sentence[0].print_dependencies()
  • 実行結果
('The', 4, 'det')
('quick', 4, 'amod')
('brown', 4, 'amod')
('fox', 5, 'nsubj')
('jumps', 0, 'root')
('over', 9, 'case')
('the', 9, 'det')
('lazy', 9, 'amod')
('dog', 5, 'obl')
('.', 5, 'punct')