スポンサードリンク



こんにちは。sinyです。

自然言語処理系のディープラーニングに興味があり色々勉強しているのですが、如何せん日本語用のデータセットでまともに使えるものがないのですが、chABSA-datasetという割とよさそうな日本語のデータセット(約2800データ)を見つけたので、学習に使える形に前処理してみました。
NLP系の勉強している方には日本語データがなくて困っているという方も多いと思うので、参考になれば幸いです。

さて、ディープラーニング系の書籍もいろいろ読んでいますが、良いデータセットがないために英語データを題材とした内容になっている書籍も結構多い印象です。

現状で公開されていて、多少使えそうなデータセットとしては以下くらいかと思いますが、個人的には学習データに使うにはなんか微妙…という印象を持っていました。

他に使えそうな日本語データセットはないものか?

 

と、ネット検索していたところchABSA-datasetという日本語公開データセットを見つけました。

データセットは以下のgithubで無料公開されています。

 

chABSA-datasetはどんなデータセット?

chABSA-datasetは上場企業の有価証券報告書(2016年度)をベースに作成されたデータセットになっており、各文に対してネガティブ・ポジティブの感情分類だけでなく、「何が」ネガティブ・ポジティブなのかという観点を表す情報が含まれています

細かいアノテーション仕様については以下のページに記載されています。

データセットの生データ自体はこちらからダウンロードできます。

解凍すると、「e*****_ann.json」というアノテーションされたjson形式のデータファイルが230個あります。
データ自体は1ファイル内に複数存在していて全体のデータ数としては約2800データ程あります。

1つのデータを取り出すと以下のような形式になっています。

ざっと見た感じ以下のような形式になっているようです。

  • "sentence_id":データを一意に特定するID
  • "sentence":文章データ
  • "opinions":オプションの中には{target,category,porarity,from,to}のセットが複数含まれているようです。(中にはoptionが空のデータもある。)
  • "target": targetにはsentenceの中でキーとなる単語が指定されている。
  • "category":業種の情報
  • "polarity":targetのキーワードがポジティブか、ネガティブか?
  • from, to :targetのキーワードがsentenceの何文字目から何文字目に存在しているか?

ざっとみてみましたが、全体のsentence自体がポジティブなのか、ネガティブなのかを直接表す情報は見当たりませんでした。

このデータセットでどうやって文章がポジティブかネガティブかを判定すればいいんだろう・・・

と悩んでいたのですが、参考になるgitリポジトリを見つけました。

上記リポジトリ内にchABSA.ipynbというnotebookがありますが、こちらのコードが参考になったので流用させていただきました。

具体的には、「sentence毎に存在するoption内に含まれているキーワード(target)のpolarityの値(negative or positive)を見て、positiveならスコアを+1、negativeならスコアをー1してすべてのtargetに対して感情スコアの合計値を計算し、0より多きければpositive、小さければnegativeな文章としてアノテーションする」という方法です。

具体的なコードは以下のgithubで公開しています。

上記コードを実行すると以下のように「文章 1 or 0」という形式の学習データが出来上がります。

※1がpositive、0がnegativeを表すラベルになっています。

 

 上記notebookにも記載していますが、いくつかのデータがうまく分割、アノテーションされないものがあるので、手動で微修正が必要です。(コードを修正したかったのですが該当データがどのファイルにあるかチェックするのもめんどくさいので割愛しています・・・

次回記事では、上記で作成したネガポジ学習用のchABSA-datasetデータセットを使ってディープラーニングの手法の1つであるTransformerを使ったネガポジ分類機を作成していきたいと思います。

 

 

おすすめの記事