LoginSignup
7
9

More than 3 years have passed since last update.

GiNZAを使って分かち書きをしてみた話

Last updated at Posted at 2019-12-19

3行でわかるまとめ

GiNZAというNLPライブラリを使ってみた!

GiNZAでは、spaCy(NLPフレームワーク)とSudachipy(形態素解析器SudachのPythonクローン)が使われている!

インストールはpip一発で簡単!いい感じで分かち書きもできるし使ってみたらハッピー!

はじめに

読むと良さそうな人

janome,MeCabを使って形態素解析したことがあるよって人

環境

MacbookAir
python3.7.4(pyenv)

きっかけ

NLP界隈の強い人達がGiNZAを使っていると聞き、自分も試してみようと思いました。

GiNZAについて

GiNZAとは

リクルートのAI研究機関と国立国語研究所が共同で開発した,日本語の自然言語処理ライブラリ。

「GiNZA」の概要

「GiNZA」は、ワンステップでの導入、高速・高精度な解析処理、単語依存構造解析レベルの国際化対応などの特長を備えた日本語自然言語処理オープンソースライブラリです。「GiNZA」は、最先端の機械学習技術を取り入れた自然言語処理ライブラリ「spaCy」(※5)をフレームワークとして利用しており、また、オープンソース形態素解析器「SudachiPy」(※6)を内部に組み込み、トークン化処理に利用しています。「GiNZA日本語UDモデル」にはMegagon Labsと国立国語研究所の共同研究成果が組み込まれています。

「GiNZA」の主な特長
1. 高度な自然言語処理をワンステップで導入完了
2. 高速・高精度な解析処理と依存構造解析レベルの国際化に対応
3. 国立国語研究所との共同研究成果の学習モデルを提供

https://www.recruit.co.jp/newsroom/2019/0402_18331.html より

GiNZAのインストール

インストールはpip一発です。

$ pip install "https://github.com/megagonlabs/ginza/releases/download/latest/ginza-latest.tar.gz"

ただし、実行環境について公式に下記のように記載がある通り、Python3.6以上が想定されているので要注意です。

(私はPython3.5以下での検証はしていません。)

実行環境

このプロジェクトは Python 3.6以上(および対応するpip)で動作検証を行っています。 Anaconda環境ではpipによるインストールが正常に行えない場合があります。 (Anaconda環境は将来のバージョンでサポートする予定です)

https://megagonlabs.github.io/ginza/ より

GiNZAのqiita記事

【Python】日本語NLPライブラリ”GiNZA”で言語処理100本ノック(第4章)やってみた

@derodero24

GiNZAを活用したtwitter文章の分かち書き

今回は自分のツイートを取得したcsvをインプットに、分かち書きしてみようと思います。

1. ライブラリのインポート

import spacy
import pandas as pd

2. インプットデータ(取得済みのtweetdata)読み込み

df = pd.read_csv('pchanGGO.csv')
df.head(5)

読み込んだ結果はこんな感じです(textしか使いませんが…)

id created_at text fav RT
0 1206053627317518337 2019-12-15 03:29:26 RT @mikanmarusan: Hackday 2019 もうすぐハッカソンプレゼンステ... 0 3
1 1206035284120334336 2019-12-15 02:16:33 今日はこれからhackdayいくぞ! #hackday2019 0 0
2 1205076105075363840 2019-12-12 10:45:07 長期的なチームでなく、フリーランスのように短期間で入れ替わるチームだからこそ、コミュニケーシ... 4 0
3 1205068742041825282 2019-12-12 10:15:51 エムスリーさんでは、AIチームでは全員が全員のコードをレビューしている! #mlpp 1 0
4 1205068442270724097 2019-12-12 10:14:40 命名の由来がマリオカートなの好き #mlpp 1 0

3. GiNZAのインプット用にlist形式にします。

tweets = df['text'].tolist()

4. GiNZAのpipeメソッドを用いた処理

%%time
docs = list(nlp.pipe(tweets))
CPU times: user 2.33 s, sys: 87.4 ms, total: 2.42 s
Wall time: 2.47 s

5. 分かち書き結果取り出し・格納

tweets_wakati =[]
for doc in docs:
    tweet_wakati = []
    for word in doc:
        tweet_wakati.append(word)
    tweets_wakati.append(tweet_wakati)

6. 整えて表示

print(*tweets_wakati[0:5], sep='\n')
[RT, @, mikanmarusan, :, Hackday, 2019, もう, すぐ, ハッカソンプレゼンステージ, 始まり, ます, 。, #, hackdayjp, #, つくる, って, たのしい, ね, https, :, /, /, t, ., co, /, 1, sRv, 6, XrCOz]
[今日, は, これ, から, hackday, いく, ぞ, !, #, hackday, 2019]
[長期的, な, チーム, で, なく, 、, フリーランス, の, よう, に, 短期間, で, 入れ替わる, チーム, だ, から, こそ, 、, コミュニケーション, を, 減らす, って, いう, 観点, な, の, よ, ね, #, mlpp]
[エムスリー, さん, で, は, 、, AI, チーム, で, は, 全員, が, 全員, の, コード, を, レビュー, し, て, いる, !, #, mlpp]
[命名, の, 由来, が, マリオ, カート, な, の, 好き, #, mlpp]

いい感じに分かち書きができました!

特に、「ハッカソンプレゼンステージ」,「フリーランス」といった単語が1単語として取り出せているのがいいですね。

今度はこの分かち書きを使った文章ベクトルの生成,GiNZAのその他機能についてやってみた記事を書きたいです。

参考・おすすめリンク

GiNZA

はじめての自然言語処理 spaCy/GiNZA を用いた自然言語処理 | オブジェクトの広場

7
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
9