Coder Social home page Coder Social logo

qichaoliang / natsume-simple Goto Github PK

View Code? Open in Web Editor NEW

This project forked from borh/natsume-simple

1.0 0.0 0.0 6.7 MB

natsume-simpleは日本語の係り受け関係を検索できるシステム

Shell 1.12% JavaScript 7.81% Python 4.23% Nix 3.34% HTML 0.65% Jupyter Notebook 80.50% Svelte 2.34%

natsume-simple's Introduction

natsume-simple

概要

natsume-simpleは日本語の係り受け関係を検索できるシステム

開発用OSインストール手順

本プロジェクトを動かすにはソースコードをパソコンにダウンロードする必要がある。 GitHub上からは,ZIP圧縮ファイルでのダウンロードか,Gitでのクローンか,で利用できる。

ソースコードの最新版が入っているZIPファイルのダウンロードは,ここからできる。 Git利用には事前にインストール必要がある。

コマンドライン以外でもインストール可能であるが,以下はそれぞれのOSのコマンドラインインターフェースを利用したインストール方法:

  • Linux (Debian/Ubuntuの場合):
sudo apt get install git
  • macOS:
brew install git
winget install -e Git.Git

それでgitでの入手方法は:

git clone https://github.com/borh/natsume-simple.git

インストールは2022年10月時点で,poetryを使用することをおすすめするが,以下は標準のPython/pipによるインストール方法を紹介する。

Python以外にもPandocなど外部プログラムも使用しているので,下記OS別にインストール基準も書いている。

OS別手順

macOS

brew install pandoc

Linux

パッケージマネージャでpandocをインストールする。 バージョン1ではなく2もしくは3系が必要になる。

Windows

winget install pandoc

Python環境のインストール

natsume-simpleはPoetryを使用しているが,pip/condaの場合も可能である。

pip

必要な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

CUDA/ROCM (Linux/Windows)

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

Apple Silicon (macOS)

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を指すことになる。

virtualenv仮想環境

上記pipインストールで問題が発生すると,使用するPythonが3.8かそれより最新のものであることを確認するとよい。 また,他のパッケージとの干渉を除外するために簡単な仮想環境を作る方法がある。 Python内蔵の仮想環境を作成する場合はここを参照。

上記の手動の仮想環境作成以外にも,poetry, pipenv, condaの環境・システムがある。 2022年10月時点では,poetryとそのpyproject.tomlの定義ファイルが人気であろう。 Anacondaも総括的な環境提供という点で人気である。

poetry

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

PDMはPythonの最新スタンダード(PEP 582, 517, 621)に従い,プロジェクト管理を可能にする。 PDMを使う場合は,pyproject.tomlbuild-toolsのセクションをPoetryのものと入れ替えることが必要である。

conda

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

各種のデータはdataに保存する。 特にscriptsやnotebooks下で行われる処理は,最終的にdataに書き込むようにする。

notebooks

特に動的なプログラミングをするときや,データの性質を確認したいときに活用する。 ここでは,係り受け関係の抽出はすべてノートブック上で行う。

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)

scripts

定めた手順で,コーパスの前処理・データ整理などを行う。 ここでは,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-frontend

Svelteで書かれた検索インターフェース。

Svelteのインターフェース(html, css, jsファイル)は以下のコマンドで生成できる: (svelte-frontend/フォルダから実行)

npm run build

Svelteの使用にはnodejsの環境整備が必要になる。

static

サーバ読む静的ファイルを含むファルダ。 ここに置かれるものは基本的にAPIのstatic/URL下で同一ファイル名でアクセス可能。

モデルの使用(Pythonコードから)

係り受け解析に使用されるモデルを利用するために以下のように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にある。

natsume-simple's People

Contributors

borh avatar

Stargazers

Mourick avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.