自然言語処理の深遠

Deep Dive Into Natural Language Processing

Pythonで日本語の文字分散表現を学習する

f:id:Hironsan:20171108110523p:plain:w500

最近の自然言語処理では、文字レベルの言語処理が行われることがあります。 これら文字レベルの言語処理は、ユーザ生成コンテンツに有効であると言われています。 その理由として、ユーザ生成コンテンツのような崩れたテキストでは、形態素解析の性能が大幅に低下し、単語レベルの処理が上手くいかなくなることが挙げられています。

文字レベルの言語処理を行うなら、単語レベルの場合と同じく文字分散表現を事前学習したくなります。 文字分散表現を事前学習しておくことで、①良い文字ベクトルの初期値を得られる、②学習データに現れない文字のベクトルを教師なしで得られる、といった恩恵を受けられます。

本記事では、日本語の文字に対して文字分散表現を学習してみます。 本文は次の2つの内容で構成されています。

  • 学習データの準備
  • 文字分散表現の学習
続きを読む

Pythonで単語分散表現のクラスタリング

最近の自然言語処理では、単語の分散表現は当たり前のように使われています。 単語分散表現では、各単語が高次元ベクトル空間に配置され、加減乗除等の演算を行えるようになります。 これらのベクトルは、意味の近い単語に対しては同じようなベクトルになることがわかっています。

本記事では、単語分散表現のベクトルをクラスタリングし、意味が近い単語のクラスタを作ってみたいと思います。 これらのクラスタは、眺めて楽しむだけでなく、機械学習の素性として使うこともできます。

イメージ的には、以下のような感じで単語をクラスタにまとめます。 f:id:Hironsan:20171101055538g:plain

では、単語分散表現をクラスタリングして、単語のクラスタを作ってみましょう。

続きを読む

Wikipediaのリンクを解析して同義語を抽出する

自然言語処理をする際、同義語を考慮したい時があります。 たとえば情報検索を例に挙げると、「car」と検索したときその同義語である「automobile」も検索にかかってくれると嬉しい場合があります。

同義語を獲得する方法は色々考えられますが、本記事では、Wikipedia のリンクを解析して、同義語を抽出します。 手法としてはかなり単純です。一言で言うと「リンク先が同じなら、それらのアンカーテキストは同義語である可能性が高い」という仮定に基づいて同義語を抽出します。

図にすると以下のようなイメージです。 f:id:Hironsan:20171031105429p:plain

では、日本語版 Wikipedia を用いて、同義語を抽出してみます。

続きを読む