品詞タグ付けは、トークンの品詞を判別する処理です。
品詞タグ付け
トークンごとの品詞を確認するコードは以下の通りです。
品詞タグとして2種類表示します。
- SudachiPyの品詞タグ
- Universal Dependenciesの品詞タグ
[Google Colaboratory]
1 | import spacy |
実行結果は以下の通りです。
[実行結果]
1 | 新橋, 名詞-普通名詞-一般, NOUN |
次回は、レンマ化を行います。
品詞タグ付けは、トークンの品詞を判別する処理です。
トークンごとの品詞を確認するコードは以下の通りです。
品詞タグとして2種類表示します。
[Google Colaboratory]
1 | import spacy |
実行結果は以下の通りです。
[実行結果]
1 | 新橋, 名詞-普通名詞-一般, NOUN |
次回は、レンマ化を行います。
形態素解析とは、文章を形態素と呼ばれる言葉の最小単位に分割し形態素の品詞や見出し語を判定する処理です。
具体的には次のような処理に分けることができます。
GiNZAではトークン化の処理を行う場合、3種類の分割単位に切り替えて利用することができます。
分割単位を指定するためにはset_split_mode()を使います。
まずは分割単位Aでトークン化を行います。
[Google Colaboratory]
1 | import spacy |
[実行結果]
1 | あの |
次に分割単位Bでトークン化を行います。
[Google Colaboratory]
1 | import spacy |
[実行結果]
1 | あの |
最後にに分割単位Cでトークン化を行います。
[Google Colaboratory]
1 | import spacy |
[実行結果]
1 | あの |
分割単位によって「国家公務員」という単語の分け方が異なっていることが分かります。
次回は、品詞のタグ付けを行います。
自然言語処理を行うライブラリであるGiNZAを利用してみます。
GiNZAは日本語の自然言語処理ライブラリで、次のような用途で使われます。
GiNZAをインストールするには次のコマンドを実行します。
[Google Colaboratory]
1 | # GiNZAのインストール |
次のようなログが出力されていれば、インストールは成功しています。
[実行結果]
1 | Collecting ginza==4.0.5 |
メニューから「ランタイム → ランタイムを再起動」を選択し、Google Colaboratoryを再起動しておきます。
きちんとインストールできているかどうかを確認するために、トークン化を行ってみます。
[Google Colaboratory]
1 | import spacy |
実行結果は以下の通りです。
[実行結果]
1 | リモートワーク |
きちんとトークン化できました。
次回からは、GiNZAを使って形態素解析を行います。
学習したモデルを使って要約を行います。
要約を行うコードは以下の通りです。
5行目で、日本語T5事前学習済みモデルのトークナイザーを読み込んでいます。
6行目では、前回ファインチューニングした要約モデルをoutputフォルダから読み込んでいます。
9行目に、要約対象の文章を設定しています。
[Google Colaboratory]
1 | import torch |
要約結果は以下の通りです。
[実行結果]
1 | /usr/local/lib/python3.7/dist-packages/torch/_tensor.py:575: UserWarning: floor_divide is deprecated, and will be removed in a future version of pytorch. It currently rounds toward 0 (like the 'trunc' function NOT 'floor'). This results in incorrect rounding for negative values. |
・・・要約と言えば要約されていますが、主語が全部とんでますし、中盤以降を全部省略とずいぶん大胆な要約となっています。
なんらかの改善が必要なのかもしれません。
学習データと検証データを使ってファインチューニングを行います。
次のコマンドを実行し、要約のファインチューニングを行います。
[Google Colaboratory]
1 | %%time |
実行結果は以下の通りです。
[実行結果]
1 | 10/06/2021 11:45:03 - WARNING - __main__ - Process rank: -1, device: cuda:0, n_gpu: 1distributed training: False, 16-bits training: False |
35分ほどかかりました。
outputフォルダに学習結果となるモデルを表す複数ファイルが出力されています。
TensorBoardで学習結果を確認します。
[Google Colaboratory]
1 | # 学習状況の確認 |
[実行結果]

損失(Loss)が0に収束・・・してはいないのですが、少しずづ減少し1.4以下になってはいるので、それなりに学習していることが分かります。
次回は、学習したモデルを使って要約を行います。
前回ダウンロードしたニュース記事から学習データと検証データを作成します。
前回取得したニュース記事は、output.tsvに出力されています。
このファイルから、学習データ(8割)と検証データ(2割)を作成します。
[Google Colaboratory]
1 | import os |
処理が成功すると、以下のファイルが出力されます。
次回ファインチューニングを行う前準備として、必要なライブラリをインストールしておきます。
[Google Colaboratory]
1 | # ソースからのHuggingface Transformersのインストール |
メニューから「ランタイム → ランタイムを再起動」を選択し、Google Colaboratoryを再起動しておきます。
さらに以下のライブラリをインストールします。
[Google Colaboratory]
1 | # Huggingface Datasetsのインストール |
以上で、ライブラリのインストールが完了しました。
次回は、準備した学習データと検証データを使ってファインチューニングを行います。
要約を全4回に分けて説明していきます。
要約は、本文(長い文章)を要約(短い文章)に変換する処理です。
「livedoorニュースの3行要約データセット」を使って、要約の処理を確認していきます。
まずはニュース記事の公開年月、カテゴリ、記事IDがまとまっているCSVファイルをダウンロードします。
ダウンロード後にファイル名を変更します。
[Google Colaboratory]
1 | !wget https://raw.githubusercontent.com/KodairaTomonori/ThreeLineSummaryDataset/master/data/train.csv |
[実行結果]
1 | --2021-10-06 08:20:12-- https://raw.githubusercontent.com/KodairaTomonori/ThreeLineSummaryDataset/master/data/train.csv |
ニュース記事の一覧(CSVファイル)を元に、ニュース記事をダウンロードします。
beautiful soupというスクレイピング用のライブラリを使って、ニュース記事の取得を行います。
(サーバに負荷がかからないように10秒間に1記事を取得するようにしています)
[Google Colaboratory]
1 | from urllib.request import urlopen |
[実行結果]
1 | index: 0 |
以上で、ニュース記事のダウンロードが完了しました。
output.tsvというファイルにニュース記事が出力されています。
次回は、ダウンロードしたニュース記事を学習データと検証データに分けます。
前回は、わかち書きとファインチューニングを行いました。
今回は、学習したモデルを使って質疑応答を行います。
学習したモデルを使って質疑応答を行ってみます。
8行目のfrom_pretrained関数で、学習済みモデルをロードしています。
11行目でコンテキストを設定し、12行目で質問を指定しています。
[Google Colaboratory]
1 | import torch |
回答結果は以下の通りです。
[実行結果]
1 | 土曜 日 に 友達 と 表 参道 に 遊び に 行き まし た 。 |
応答は「表 参道」と的確な回答になっています。
次に、コンテキストはそのままで質問の内容を変えてみます。
[Google Colaboratory]
1 | import torch |
回答結果は以下の通りです。
[実行結果]
1 | 土曜 日 に 友達 と 表 参道 に 遊び に 行き まし た 。 |
応答は「土曜 日」と、こちらも的確な回答になっています。
前回のファインチューニングは2時間以上とかなり時間がかかりましたが、一度学習を完了してしまえば質問に対して的確な応答を得られるようになるのでかなり実用的だと感じました。
前回は、質疑応答のためのデータセットの準備と必要なライブラリのインストールを行いました。
今回は、わかち書きとファインチューニングを行います。
日本語はわかち書きに変換すると精度が上がります。
下記のコードでわかち書きを行います。
[Google Colaboratory]
1 | import json |
実行結果は以下の通りです。
[実行結果]
1 | Warning Remove Text: 冬 期間 |
実行結果として次の2ファイルが出力されます。
質疑応答のファインチューニングを行います。
各パラメータの意味は次の通りです。
[Google Colaboratory]
1 | %%time |
[実行結果]
1 | 10/03/2021 00:15:58 - WARNING - __main__ - Process rank: -1, device: cuda, n_gpu: 1, distributed training: False, 16-bits training: False |
2時間7分ほどかかりました。(;^_^A
TensorBoardで学習結果を確認します。
[Google Colaboratory]
1 | # 学習状況の確認 |
[実行結果]

損失(Loss)が0に収束しているため、きちんと学習できていることが分かります。
次回は、学習したモデルを使って質疑応答を行います。
質疑応答を3回に分けて説明していきます。
質疑応答は、コンテキスト(ひとまとまりの文章)と質問からコンテキスト内に含まれる応答を抽出する処理です。
今回は、データセットの準備と必要ライブラリのインストールまで行います。
データセットとしては運転ドメインQAデータセットを使います。
下記のURLから、ダウンロードリンクよりDDQA-1.0.tar.gzファイルをダウンロードしてください。
運転ドメインQAデータセット - https://nlp.ist.i.kyoto-u.ac.jp/?Driving+domain+QA+datasets
次にダウンロードしたファイルを、Google Colaboratoryにアップロードし、下記コマンドを使って解凍します。
[Google Colaboratory]
1 | !tar xzvf DDQA-1.0.tar.gz |
[実行結果]
1 | DDQA-1.0/ |
これでデータセットの準備は完了です。
ソースからHuggingface Transformersのインストールを行います。
[Google Colaboratory]
1 | # ソースからのHuggingface Transformersのインストール |
下記のような実行結果になれば、Huggingface Transformersのインストールは成功しています。
[実行結果]
1 | Cloning into 'transformers'... |
ここで、一旦ランタイムの再起動を行います。
メニューからランタイム → ランタイムを再起動を選択してください。
Huggingface Datasetsのインストールを行います。
[Google Colaboratory]
1 | # Huggingface Datasetsのインストール |
[実行結果]
1 | Collecting datasets==1.2.1 |
MeCabのインストールを行います。
MeCabは、簡単なテキスト解析や、分かち書きができるライブラリです。
[Google Colaboratory]
1 | # MeCabのインストール |
[実行結果]
1 | Collecting mecab-python3 |
以上で、必要なライブラリのインストールが完了しました。
次回は、わかち書きとファインチューニングを行います。