自然言語処理を活用してみよう!(固有表現抽出編) | SiTest (サイテスト) ブログ

メニューボタン閉じるボタン

自然言語処理を活用してみよう!(固有表現抽出編)

自然言語処理は、人間が日常的に使っている自然言語をコンピュータに処理させる一連の技術です。Web上では膨大なテキストデータがあり、テキストデータを解析し、色々なサービスで活用されています。その活用例を簡単にご紹介したいと思います。
自然言語処理の技術は、非常に広く毎年のように、様々な分野で新たな技術が研究されています。
今回はその中でも「固有表現抽出」という技術を実際のプロジェクト例を参考にご紹介したいと思います。

  • ■ 固有表現抽出とは

固有表現抽出は、テキストに出現する人名や地名などの固有名詞や、日付や時間や数値などを抽出する技術になります。
固有表現抽出は、チャットボットなどの対話システムや情報抽出といった自然言語処理を用いた要素技術として応用アプリケーションとしても利用されます。
固有表現抽出の手法としては、色々ありますが現在は、機械学習に基づく固有表現抽出が主流となっています。
そこで、今回は機械学習に基づく固有表現抽出について、実際のプロジェクト例を基に簡単にご説明したいと思います。

  • ■ 機械学習に基づく固有表現抽出の手法

機械学習に基づく固有表現抽出では、文書を適当な 解析単位(トークン)に分割して 、固有表現を構成する1つもしくは複数のトークンとしてまとめあげると同時に、まとめあげられたトークン列がどの種類の固有表現なのかを判別するという手法が一般的です。
現在は、様様な手法が提案されていますが、ここでは、 SVM (サポートベクトルマシン) を用いた固有表現抽出において精度が良いと報告されている 「 Inside-Outside法 」 のバリエーションの1つである、 IOB2 と呼ばれるチャンクタグ集合を用いる手法についてご説明します。

ここでの固有表現タグとは、チャンクタグと固有表現の種類をハイフンで結んだもののこととします。
IOB2 では固有表現の先頭トークンに Bタグ を付与し、それ以降のトークンに Iタグ を付与します。 Oタグ は固有表現以外のトークンに付与されます。
まとめあげの単位として形態素を用いています。 しかしながら形態素の境界が固有表現の境界と一致しないと抽出することができないという問題が出てきます。
たとえば「大阪市内で」を Mecab を用いて形態素解析を行うと

大阪市内で
大阪  名詞,固有名詞,地域,一般,*,*,大阪,オオサカ,オーサカ
市内  名詞,一般,*,*,*,*,市内,シナイ,シナイ
で   助詞,格助詞,一般,*,*,*,で,デ,デ

のように分割されてしまうために「大阪市内で」を地名として認識できないです。そこで、まとめあげの単位として文字単位を採用してみます。
形態素を単位とする場合と異なり,文字には直接品詞情報を付加することはできないので、各文字が属する単語と品詞に該当する文字の単語中の位置に対して「 Start-End法 」に基づくチャンクタグを付与したものを素性として用います。
SE法 では形態素の先頭文字に対し Bタグ を末尾に Eタグ を内部に Iタグ を1文字からなる形態素には Sタグ を付与します。
また、タグに加え、品詞情報やカナ情報も加えてみます。

「今日は夜しっとりと旨いものを食べつつ飲みたい!」
といった文章では、以下のようになります。

今   B-今日    B-67    OTHER   O
日   E-今日    E-67    OTHER   O
は   S-は S-16    HIRA    O
夜   S-夜 S-67    OTHER   O
し   B-しっとり  B-35    HIRA    O
っ   I-しっとり  I-35    HIRA    O
と   I-しっとり  I-35    HIRA    O
り   E-しっとり  E-35    HIRA    O
と   S-と S-20    HIRA    O
旨   B-旨い    B-10    OTHER   O
い   E-旨い    E-10    HIRA    O
も   B-もの    B-63    HIRA    O
の   E-もの    E-63    HIRA    O
を   S-を S-13    HIRA    O
食   B-食べ    B-31    OTHER   O
べ   E-食べ    E-31    HIRA    O
つ   B-つつ    B-18    HIRA    O
つ   E-つつ    E-18    HIRA    O
飲   B-飲み    B-31    OTHER   O
み   E-飲み    E-31    HIRA    O
た   B-たい    B-25    HIRA    O
い   E-たい    E-25    HIRA    O
!   S-! S-4 OTHER   O

これらの表現法を用いて固有表現タグを定義することよって、固有表現のまとめあげの規則の学習は、解析対象文書の各トークンに固有表現タグを付与する分類規則の学習として定式化することが可能になります。

  • ■ 試してみよう

実際のプロジェクトでは、グルメに特化したブログ記事を対象とした、固有表現抽出を行う必要がありました。
そこで以下のようなカテゴリのタグを定義しました。

GOURMET_NAME (店舗名)
AREA (地域名)
STATION (駅名)
ADDRESS (住所)
ZIP (郵便番号)
TEL (電話番号)
GOURMET_GENRE (グルメのジャンル)
MENU (メニュー名)
PN (ポジネガ情報)

それでは、実際に固有表現抽出の解析をしてみましょう。

上記のタグを教師データとし、グルメ系ブログ記事に対してタグ付けした正解データを作成していきます。
今回は1000記事ほどのグルメ系ブログ記事にタグ付けを行いました。
そして、その記事をSE法の手法によってベクトル化します。
チャンキングには SVM (サポートベクトルマシン)に基づくチャンカ「 yamcha 」を利用し、チャンキングの解析方向は文末から文頭方向へ解析する左向き解析を行い、 SVM のカーネル関数には2次の多項式カーネルを使用します。

以下の文章で試してみましょう。

池上製麺所への達人のクチコミ
[投稿日:2008/06/12]
讃岐うどんなら真っ先にいただきたいのが、香川県高松市内で営業している通称るみばぁちゃんのうどん!それも「釜たまうどん」がいい。茹で上がった熱々のうどんに元気な生玉子をのせて、青ネギをふりかけてからお好みの醤油加減でかき混ぜて完成です♪

麺の食感が絶妙なる歯応えで、これ以上固すぎてもいけなく柔すぎてもいけないのがこのうどんのコシ。しかも噛みしめる程に美味しさを増す小麦の味わいも楽しめます。それこそ五感にウマイっ!水も美味しいからこそ、この味に至っているのだと思おもいます。瑠美ばぁちゃんの工夫と努力にただただ感謝。

この文章を固有表現解析してみます。タグ付けして解析できているみたいです。

<GOURMET_NAME>池上製麺所</GOURMET_NAME>への達人のクチコミ
[投稿日:2008/06/12]
<MENU>讃岐うどん</MENU>なら真っ先にいただきたいのが、<AREA>香川県高松市</AREA>内で営業している通称るみばぁちゃんの<MENU>うどん</MENU>!それも「<MENU>釜たまうどん</MENU>」がいい。茹で上がった熱々の<MENU>うどん</MENU>に元気な<MENU>生玉子</MENU>をのせて、青ネギをふりかけてからお好みの醤油加減でかき混ぜて完成です♪

麺の食感が絶妙なる歯応えで、これ以上固すぎてもいけなく柔すぎてもいけないのがこの<MENU>うどん</MENU>のコシ。しかも噛みしめる程に美味しさを増す小麦の味わいも楽しめます。それこそ五感にウマイっ!水も<PN>美味しい</PN>からこそ、この味に至っているのだと思おもいます。瑠美ばぁちゃんの工夫と努力にただただ感謝。

■ 最後に

今回は、機械学習に基づく固有表現抽出についての手法についてご紹介しましたが、教師データが少ないためか、再現率や精度がそこそこの結果となりました。
もっと多くの教師データが作成できれば、再現率や精度が上がると思われますが、人力でタグ付けなどを行い教師データを作成するのは大変です。
次回は、 wikipedia などの情報源から自動的に教師データを作成し、固有表現抽出に活かせる手法のご紹介と再現率や精度の計測を行いたいと思います。