自然言語処理

手がかり表現の自動取得方法

こんにちは、マージーです。引き続き、テキストの自動要約技術について書きたいと思います。
前回までで、「手がかり表現」を用いる事によってテキストの自動要約技術の一つである重要文抽出を行えるということを書きました。

前回のおさらい

軽く前回のおさらいをしたいと思います。前回は、「森のくまさん」を題材にしました。

image3

ここから『くまさん』『おじょうさん』という「手がかり表現」を用いることにより、以下のように重要文を抽出することが出来ました。

image6

手がかり表現の取得方法

ここまでが前回の内容です。今回は「ではどうやって、「手がかり表現」を取得するのか」という話です。

「森のクマさん」のような簡単な例だったら、『くまさん』『おじょうさん』という簡単な例で良いのですが、例えば判決文のような複雑な文章だと大量の「手がかり表現」が必要になります。しかし、「森のクマさん」のように手作業で「手がかり表現」を選別するのは大きな手間がかかります。

そこで登場するのが、CrossBootstrap法です。大分高専の野中先生らによって提案された「手がかり表現」を自動で取得するアルゴリズムです。

CrossBootstrap法

CrossBootstrap法の概要は以下のようになります。

1、 CrossBootstapに「初期集合」と「十分な量の該当データ(判決文の自動要約)なら判決文」を入力

MojarSeminarFeb.047

2、 CrossBootstrapが「手がかり表現の集合を出力」

MojarSeminarFeb.048

少々わかりづらいところもあると思うのですが、「森のくまさん」で言えば
1、で「初期集合」というのは、「くまさん」「お嬢さん」にあたり、手作業で見つけられる範囲の「手がかり表現」です。「十分な量の該当データ」というのは、もし今回が「童謡の要約をしたい」という目的だった場合、「数万件程度の童謡データ」となります。

2、「手がかり表現の集合」は「くまさん」「お嬢さん」以外の手がかり表現が大量に出力されることになります。(他の童謡の要約で使える手がかり表現が主に出力されるはずです)

まとめ

以上がCrossbootstrap法の概要になります。次回はCrossBootstrap法のアルゴリズムの内容について書けたら書きたいと思います。難しそうだったら別のテーマにするかもです笑

よろしくお願いします。

自動で文章を要約するには

こんにちは、mergyです。先週に引き続き、テキストの自動要約手法について書きたいと思います。

前回から

前回、テキスト自動要約には、「抽出型要約」と「生成型要約」があり、抽出型要約にはさらに、『重要文抽出』と『文短縮』があることを説明しました。
では、実際には、どうやって自動で要約するのでしょうか?

自動要約手法の使い分け

まず最初にネガティブな話になってしまうのですが、「生成型要約」はとても難しいです。現在の自然言語処理の研究では、実用に耐えうる結果を出せていないと思います。一方で『重要文抽出』と『文短縮』は良い成果も出せているのですが、文章のジャンルによって使い分けが必要です。

『文短縮』は、修飾子が多い小説などの文章に向いており、intronworksで取り扱っている判決文など、表現を豊かにする必要のない文章は『重要文抽出』が向いていると言えます。

image1

手がかり表現

今回は『重要文抽出』に的を絞って説明したいと思います。
『重要文抽出』で一般的に用いられている一つの手法として「手がかり表現」があります。
「手がかり表現」とは”特定の文章箇所を見つける上で手がかりとなる表現”のことです。

この説明だけだとよくわからないと思いますので、実際の例で見てみましょう。
例で用いるのは前回と同じ童謡「森のクマさん」です。

image3

皆さんお馴染みの「森のクマさん」ですが、歌詞を読んでいると、以下のフレーズが重要であることがわかります。

「くまさん」
「お嬢さん」

当たり前なのですが、物語の主役は「くまさん」と「お嬢さん」なので、それ以外の部分は物語の主軸には関係がないという考え方です。

では、「くまさん」「お嬢さん」という”手がかり表現”を用いて『重要文抽出』を行いたいと思います。
image5

要約結果

”手がかり表現”を用いて『重要文抽出』を行うと、以下の文だけが残ります
image6

いかがでしょうか?
文章量は半分になったのにかかわらず、歌詞のストーリーは大体理解できますね。これが『重要文抽出』の一つの手法である”手がかり表現”を用いた要約です。

まとめ

「森のクマさん」はかなり簡単な例ですが、このように適切な”手がかり表現”を設定しておくことで、人手を解することなく自動で文章を要約することが出来ます。

次回は”手がかり表現”の収集方法について書きたいと思います

自然言語処理を用いたテキスト自動要約の手法

こんにちは、mergyです。3月まで大学院生で今は港区のIT企業に勤務しています。
blog投稿は初めてになります。よろしくお願いします。

今回はテキスト自動要約の手法について書かせていただきます。

intronworksの判決文検索サービスleaglesプロジェクトで用いられている技術です。
とりあえず、今回はソースコードなどは出てきませんので、非エンジニアの方も是非読んでいただければと思います。

テキスト自動要約とは

まず、例を見てみましょう
20150717.002
これはlivedoorニュースですが、皆さんも上記の画像のようなニュースサイトを見たことがあるのではないでしょうか?テキスト自動要約はこのように、「長い文章も読まなくても良いように、最低限の必要な情報だけを自動で抽出する」技術です。(livedoorニュースが手動か自動かはわかりませんが)

テキスト自動要約手法

実際にどのようにテキスト要約を自動で行うか、という話ですが、ざっくり分類すると以下のようになります
20150717.001

まず大きく2つ「抽出型要約」「生成型要約」があり、さらに「抽出型要約」には「重要文抽出」と「文短縮」の2つの種類があります。

実際に体験してみる

手法名だけ見てもピンとこないので、具体例で試したいと思います。本来はニュース記事、新聞記事などが対象となることが多いのですが、今回はわかりやすさのため以下の例を使います。
20150717.003

そうです。森のくまさんです。
子供の頃は楽しく聞いていたのですが、大人になって読んでみるとやや冗長な表現が多く、テキスト要約の例にはピッタリです。笑

重要文抽出

20150717.004
まず重要文抽出を行った場合、上記のようになります。
「花咲く森の道 くまさんに 出会った」のような重複した表現が含まれる文、
「スタコラ サッササノサ スタコラ サッササノサ」のような本文の意味を理解する上では不要な文が取り除かれていることがわかります。

重要文抽出&文短縮

20150717.005
次に重要文抽出した文に続けて文短縮を行います。既存研究を見る限り文短縮は重要文抽出と同時に行われることが多そうです。
「ところが」のような接続詞、「ちょっと」のような副詞が取り除かれていることがわかります。

生成型要約

20150717.006

最後に生成型要約です。これは重要文抽出・文短縮とは全く異なったアプローチで行われます。
元々存在した表現とは全く異なっていることがわかります。
生成型要約はこのように、意味を解釈して、文章を再構築・生成する手法です。
この技術はとても難易度が高く、テキスト自動要約技術の中で最も研究が進んでいない分野と言われています。

まとめ

テキスト自動要約の技術を紹介させていただきました。
次回は、実際にどうやって自動で要約を行うかを紹介させていただこうと思います!

それでは失礼します。

Ruby + NokogiriでWebスクレイピング入門

Webスクレイピングとは ※1

ウェブスクレイピング(Web scraping)とは、ウェブサイトから情報を抽出するコンピュータソフトウェア技術のこと。ウェブ・クローラー(Web crawler) あるいはウェブ・スパイダー(Web spider)とも呼ばれる。

Webサイト上のテキストデータを活用したいけど、APIやCSV等が提供されていないというケースは結構多いですよね。
今回はウェブサイトからテキストデータを取得する方法を紹介をしたいと思います。

RubyのNokogiriというライブラリを使います。

 

環境構築

構築環境はUbuntu 14.04です。

という環境が構築できました。

Nokogiriの1.6系のものが入ります。
1.5系まではlibxml2やlibxsltも自分でインストールする必要があったのですが、
libxml2やlibxsltのバージョンの関係で動作しないケースが多々あったみたいです。
1.6系から依存ライブラリを同梱し、Nokogiriのインストール時に環境に合わせてビルドされるようになりました。※2

 

とりあえず動かしてみる

Yahooファイナンスから日経平均株価のヒストリカルデータを取得し、
CSVとして保存するサンプルです。

1-3行目:

必要ライブラリを読み込み

5行目:

スクレイピング先のURLを指定

7-11行目:

スクレイピング先の文字コードとHTMLの取得

13行目:

取得したHTMLをパースしてDOM化

15-23行目:

必要なデータの取得し、CSV化
必要データの抽出にはxpathで指定する方法※3とcssセレクタ※4で指定する方法の大きく2つの方法があります。上記ではxpath方式を使ってDOMを取得しています。

25-27行目:

CSVファイルの出力

 

Nokogiriを使ったWebスクレイピングまとめ

Nokogiriを使ったWebスクレイピングは下記プロセスでほとんど対応できるかと。

スクレイピング先のURLの指定
 ↓
HTMLの取得
 ↓
取得したHTMLをDOM化
 ↓
必要情報の抽出
 ↓
データの保存

あとは、xpathなりcssセレクタを良い感じに書くこと。
各方式の書き方は下記※3※4を参考にしてください。


※1 Wikipedia – ウェブスクレイピング
※2 http://qiita.com/suu_g/items/fcf549e16c797a9d7dc0
※3 実際に書くにあたってはこのサイトや、チートシートが大変役に立ちます。
※4 CSSセレクタの基本的な内容はこのサイトとかを参考に。