自然言語処理の日本語用データセット【chABSA-dataset】

スポンサードリンク



こんにちは。sinyです。

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

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

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

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

 

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

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

 

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

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

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

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

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

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

      "sentence_id": 1,
      "sentence": "当連結会計年度におけるわが国経済は、企業の収益環境の改善が持続している他、堅調な雇用・所得情勢を受け、個人消費の持ち直しが見られるなど、緩やかな回復基調にあります",
      "opinions": [
        {
          "target": "わが国経済",
          "category": "NULL#general",
          "polarity": "positive",
          "from": 11,
          "to": 16
        },
        {
          "target": "収益環境",
          "category": "NULL#general",
          "polarity": "positive",
          "from": 21,
          "to": 25
        },
        {
          "target": "雇用",
          "category": "NULL#general",
          "polarity": "positive",
          "from": 40,
          "to": 42
        },
        {
          "target": "所得情勢",
          "category": "NULL#general",
          "polarity": "positive",
          "from": 43,
          "to": 47
        },
        {
          "target": "個人消費",
          "category": "NULL#general",
          "polarity": "positive",
          "from": 51,
          "to": 55
        }
      ]
    },

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

  • "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を表すラベルになっています。

当社グループを取り巻く環境は、実質賃金が伸び悩むなか、消費者の皆様の生活防衛意識の高まりや節約志向により、個人消費は本格的な改善には至らず、また少子高齢化、人口減少による社会構造の変化、雇用改善に伴う労働コストの上昇、企業間競争の激化など、引き続き厳しい状況となりました	0
春から夏にかけましては個人消費の低迷などにより、きのこの価格は厳しい状況で推移いたしました	0
また、運営現場の効率化により、業務時間の大幅な短縮を図るなど運営コスト削減に努めた結果、収益を大きく改善することができました	1
以上の結果、ホテル運営事業部門における売上高は8,230百万円(前期比1.2%増)、営業利益は1,207百万円(前期比40.0%増)となりました	1

 

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

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

 

 

おすすめの記事