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