natsume-simpleは日本語の係り受け関係を検索できるシステム
本プロジェクトを動かすにはソースコードをパソコンにダウンロードする必要がある。 GitHub上からは,ZIP圧縮ファイルでのダウンロードか,Gitでのクローンか,で利用できる。
ソースコードの最新版が入っているZIPファイルのダウンロードは,ここからできる。 Git利用には事前にインストール必要がある。
コマンドライン以外でもインストール可能であるが,以下はそれぞれのOSのコマンドラインインターフェースを利用したインストール方法:
- Linux (Debian/Ubuntuの場合):
sudo apt get install git
- macOS:
brew install git
- Windows (最新版でないとWingetの設定が必要):
winget install -e Git.Git
それでgit
での入手方法は:
git clone https://github.com/borh/natsume-simple.git
インストールは2022年10月時点で,poetryを使用することをおすすめするが,以下は標準のPython/pipによるインストール方法を紹介する。
Python以外にもPandocなど外部プログラムも使用しているので,下記OS別にインストール基準も書いている。
brew install pandoc
パッケージマネージャでpandoc
をインストールする。
バージョン1ではなく2もしくは3系が必要になる。
winget install pandoc
natsume-simpleはPoetryを使用しているが,pip/condaの場合も可能である。
必要なPythonのパッケージはrequirements.txt
に記載されている。
以下のコマンドでは,現在のPython環境に必要パッケージがインストールし始める。
他のPythonプログラム・環境と干渉しないためには,仮想環境の利用をおすすめする。
pip install -r requirements.txt
GPUがあれば,上記のrequirements.txt
の代わりに以下のコマンドで一括インストールできる:
pip install -r requirements-cuda.txt
requirements.txt
, requirements-apple-silicon.txt
及びrequirements-cuda.txt
はPoetryから自動生成される。
GPUの利用には,OSでの適切なドライバとCuDNNなどのペッケージのインスールの他,GPU対応のspaCyやPyTorchのインストールも必要になる。
例えば,CUDA使用時はGPU対応のPyTorch(Transformersパッケージで使用)とCuPY(spaCyパッケージで使用)をインストールする。
PyTorch (https://pytorch.org/get-started/locally/):
pip install torch
spaCy (https://spacy.io/usage):
pip install -U 'spacy[cuda-autodetect]'
あるいは
pip install cupy-cuda12x
spaCyはthincというライブラリを使用しているので,PyTorch以外,thincの正しいバージョンをインストールする必要がある。
下記のrequirements-apple-silicon.txt
ですべて記載されているので,インストールするとGPUが使用できるはずである。確認方法はここにある。
pip install -r requirements-apple-silicon.txt
まず,現在利用しているPythonのバージョン・場所を確認する:
which python
python -V
Pythonは従来バージョン2と3にわかれていて,OSとそのバージョンによってpythonを実行時,どちらか一方のバージョンを指す。 間違いなくPython 3を使いたい場合は,python3, pip3の通り,末尾に3をつける。 現在ではPython 2を使う場面がほとんどないが,同じくpython2で指定することができる。 また,将来的にはPython 2がインストールされず,pythonが常に3を指すことになる。
上記pipインストールで問題が発生すると,使用するPythonが3.8かそれより最新のものであることを確認するとよい。 また,他のパッケージとの干渉を除外するために簡単な仮想環境を作る方法がある。 Python内蔵の仮想環境を作成する場合はここを参照。
上記の手動の仮想環境作成以外にも,poetry, pipenv, condaの環境・システムがある。
2022年10月時点では,poetryとそのpyproject.toml
の定義ファイルが人気であろう。
Anacondaも総括的な環境提供という点で人気である。
Poetryは仮想環境・プロジェクト管理の総合的なツールで,その定義ファイルはpyproject.toml
で記述されている。
VS Codeなど一部エディターではプロジェクト内のフォルダ以外に仮想環境を見つけ出せないために,仮想環境を作る前に以下のコマンドでPoetry使用時にフォルダ内に作る設定にする。
poetry config virtualenvs.in-project true
Poetryを使う場合は下記コマンドで仮想環境作成,使用ペッケージのインストールを一斉に行える:
poetry install
あるいはNVIDIAのGPU搭載時:
poetry install -E cuda
上記によりpoetry.lock
というファイルが作成される。中身はpyproject.toml
で記述されている依存パッケージの実際にインストールされたバージョンなどの情報になる。
poetry shell
脱出方法はdeactivate
(またはControl+d)。
PDMはPythonの最新スタンダード(PEP 582, 517, 621)に従い,プロジェクト管理を可能にする。
PDMを使う場合は,pyproject.toml
のbuild-tools
のセクションをPoetryのものと入れ替えることが必要である。
conda (Anaconda)でnatsume-simple
という仮想環境にインストールする:
conda env create -n natsume-simple -f environment.yml
インストール後は以下のコマンドで仮想環境を有効にできる:
conda activate natsume-simple
必要な場合はGPUサポート用のrequirements-*も参照してインストールして下さい。
仮想環境から脱出したいときはconda deactivate
でできる。
動作確認はAnacondaの2023.09で行われたが,最新のバージョンの使用をおすすめする。 同じ環境を作る場合は以下のコマンドでできる:
conda update conda
conda install anaconda=2023.0]
- 特定の係り受け関係(名詞ー格助詞ー動詞,名詞ー格助詞ー形容詞など)における格助詞の左右にある語から検索できる
- 検索がブラウザを通して行われる
- 特定共起関係のジャンル間出現割合
- 特定共起関係のコーパスにおける例文表示
このプロジェクトは以下のファイルを含む:
.
├── data # データ
│ ├── jnlp-sample-3000.txt # scripts実行後にできるコーパスファイル
│ └── ted_corpus.txt
├── environment.yml # conda仮想環境用
├── notebooks # ノートブック
│ ├── pattern-extraction.ipynb
│ └── pattern_extraction_colab.ipynb # Google Colab用
├── Pipfile # pipenv仮想環境用
├── pyproject.toml # poetry仮想環境用
├── README.md # このファイル
├── requirements.txt # デフォルトの依存ペッケージ定義
├── requirements-electra.txt # Electraモデル/GPU使用時の依存ペッケージ定義
├── requirements-colab.txt # Google Colab用の依存ペッケージ定義
├── scripts # スクリプト(データ入手用)
│ ├── convert-jnlp-corpus.sh # 自然言語処理コーパスの作成
│ └── get-jnlp-corpus.sh # 自然言語処理コーパスのダウンロード
├── server.py # APIサーバ
├── static # (古い)検索インターフェースの静的ファイル
│ ├── app.js
│ └── index.html
└── svelte-frontend # (新)検索インターフェース
├── package.json # nodejsの依存パッケージ
├── public
├── README.md
├── scripts
└── src
各種のデータはdataに保存する。 特にscriptsやnotebooks下で行われる処理は,最終的にdataに書き込むようにする。
特に動的なプログラミングをするときや,データの性質を確認したいときに活用する。 ここでは,係り受け関係の抽出はすべてノートブック上で行う。
VS Codeなどでは,使用したいPythonの環境を選択の上,実行してください。
Google Colabで使用する場合は,リンクから開くか,pattern_extraction_colab.ipynb
のファイルをColabにアップロードして利用する。
Jupyter Notebook/JupyterLabでは使用したPythonの環境をインストールの上,Jupterを立ち上げてください。
jupyter lab
右上のメニューに選択できない場合は環境に入った上で下記コマンドを実行するとインストールされる:
python -m ipykernel install --user --name=$(basename $VIRTUAL_ENV)
定めた手順で,コーパスの前処理・データ整理などを行う。 ここでは,Hugginface Datasets以外のコーパスを扱う。 Huggingface Datasetsの方は,直接ノートブックで読み取っている。
注意:scripts/
に置かれているBashスクリプト(.sh拡張子)はbash, awk, GNU grep, wgetなどを必要とするので,Windowsから実行するときはその環境整備が必要になる。
また,$\LaTeX$からGiNZAで読み取れる形式に変換するプログラムとしてpandocを使っているため,pandocのインストールは別途必要になる。
一回ダウンロードしたあとに再度ダウンロードせずに前処理課程を修正できるため,スクリプトはデータ処理をダウンロードと変換に分けている。
./get_jnlp_corpus.sh
./convert_jnlp_corpus.sh
並行して,Bashスクリプトと同様な処理を行うPythonスクリプトもある。 変換処理では,無作為にコーパス全体から3,000文を抽出しているために,
Svelteで書かれた検索インターフェース。
Svelteのインターフェース(html, css, jsファイル)は以下のコマンドで生成できる:
(svelte-frontend/
フォルダから実行)
npm run build
Svelteの使用にはnodejsの環境整備が必要になる。
サーバ読む静的ファイルを含むファルダ。
ここに置かれるものは基本的にAPIのstatic/
URL下で同一ファイル名でアクセス可能。
係り受け解析に使用されるモデルを利用するために以下のようにloadする必要がある。 環境設定が正常かどうかも以下のコードで検証できる。
import spacy
nlp = spacy.load('ja_ginza_bert_large')
あるいは
import spacy
nlp = spacy.load('ja_ginza')
ノートブックでは,優先的にja_ginza_bert_large
を使用するが,インストールされていない場合はja_ginza
を使用する。
現在はデータがnotebooks
下にあるJupyter Notebookによって生成される。
その結果がdata
に保存される。
結果はモデルによって異なるとしてファイル名の末尾にモデル名も記載されている。
それぞれの依存パッケージ定義ファイルでは,Jupyterのカーネルは定義されていない。 必要な場合は別途インストールください(VS Codeでは自動でインストールできる)。
(仮想環境を使う場合はまず有効にしてからサーバを立ち上げる)
uvicorn server:app --reload
上記コマンドでは,server.pyをUnicornというウエブサーバで起動し,ブラウザからアクセス可能にする。
server.py
では,モデルの指定があるのでご注意。
サーバを起動後は,出力される手順に従い,http://127.0.0.1:8000/app/にアクセスする。 FastAPIによるドキュメンテーションはhttp://127.0.0.1:8000/docsにある。