Credits: Christine Doig 皆さん、こんにちは。 前回、さまざまなタイプのレコメンダーシステムについてブログを書いてからずいぶん時間が経ちました。 今回は、トピック モデルについて書きます。
トピック モデルとは何かについて学べる資料は数多くありますが、そのほとんどはやや専門的で、数学とマルコフ連鎖などの技術に関する十分な知識が必要だと思われます。 この記事では、トピック・モデリングの背後にある考え方を、最小限の数学と技術で非常に直観的に説明しようと思います。 この記事は2つのパートに分かれています。 最初のパートでは、トピック モデリングとは何かを説明し、次のパートでは、実際のデータセットでトピック モデリングを行う方法についての Python チュートリアルを提供したいと思います。 Edward McFowland の講義、Higher School of Economics による Coursera の自然言語処理のコース、および Jordan Boyd-Graber による Gibbs サンプリングの説明から多大な影響を受けたことを認めたいと思います。 これは、クラスタリングと同じように考えることができるが、異なる点がある。 現在、数値的な特徴の代わりに、単語のコレクションがあり、各グループがドキュメント内のトピックを表すようにグループ化します。
なぜトピック モデリングが必要なのでしょうか。 周りを見渡すと、ニュース記事、研究論文、ソーシャルメディアの投稿など、非構造化形式で膨大な量のテキスト データが転がっており、情報に基づいた意思決定を行うためにこのデータを理解、整理、ラベル付けする方法が必要なのです。 トピックモデリングは、スタックオーバーフローで互いに類似している質問を見つける、ニュースフローの集約と分析、推薦システムなど、様々なアプリケーションで使用されている。 ツイート、投稿、研究論文など、私たちが書くすべてのテキストは、スポーツ、物理、航空宇宙などのテーマで構成されていると考えられているため、これらはすべて、テキスト内の隠れたテーマ構造を見つけることに焦点を当てています。 これはThomas Hoffmanが1999年に開発した確率的潜在意味解析(PLSA)を拡張したもので、文書単位の分布をどう扱うかという点で非常に細かい違いがある。 では、さっそくLDAの仕組みを見ていきましょう。
Latent Dirichlet Allocation
LDAの仕組みを理解するために必要なことは、このタイトルにあるそれぞれの単語の意味に含まれていると思いますので、まずはそれを理解することから始めましょう。 これは、先験的に知らない、データの中に隠されているすべてのものを指します。 ここでは、文書が構成するテーマやトピックは不明だが、それらのトピックに基づいてテキストが生成されるので、存在すると考えられる。
ディリクレ。 それは「分布の分布」である。 はい、ちゃんと読んでますね。 しかし、これはどういう意味なのでしょうか。 例を挙げて考えてみましょう。 サイコロを作る機械があり、その機械が常にすべての面に均等な重みを持つサイコロを出すか、ある面に偏りがあるかを制御できるとします。 つまり、サイコロを製造する機械は、さまざまな種類のサイコロを製造しているので、分布となるわけです。 また、サイコロを振ると複数の値が出るので、サイコロ自体も分布であることがわかります。 これが分布の分布であるということであり、ディリクレとはこういうものである。 ここで、トピックモデリングの文脈では、ディリクレとは、文書中のトピックの分布、トピック中の単語の分布のことである。 今の時点ではあまりピンとこないかもしれませんが、しばらくしたら詳しく見ていきますので大丈夫です。
配置。 これは、Dirichletができたら、トピックを文書に、文書の単語をトピックに割り当てるということです。
以上です。 LDAとは一言で言うとこういうことです。 では、これがトピックモデリングでどのように機能するかを理解しましょう。
ただ、要約すると、LDAが言うのは、各文書の各単語はトピックから来ており、トピックはトピックに対する文書ごとの分布から選択される、ということです。 ϴtd = P(t|d) は文書内のトピックの確率分布
2. Фwt = P(w|t) はトピック内の単語の確率分布
そして、ある単語の文書内の確率は i. と言うことができる。P(w|d)は、
ここでTは話題の総数である。 また、全文書の語彙数がW個であるとする。
条件付き独立を仮定すると、
P(w|t,d) = P(w|t)
したがって、P(w|d)は、以下に等しいと言える。
つまり各トピックtに対するϴtdとФwtのドットプロダクトである。
これは次のような行列の形で表すことができる:
これを見ると、LDAは行列分解やSVDと同様に、文書中の単語の確率分布行列を、文書中のトピックの分布とトピック中の単語の分布の2つの行列に分解していると考えることができます。
したがって、得られるのは、たとえば次のようなものです:
まず、両方の行列にランダムに重みを割り当て、次の手順でデータを作成するとします。 割り当てられた重みに基づいて、文書内のトピックの分布からトピックをランダムに選択する。 前の例では、ピンクのトピックを選んだとします
2 次に、選んだトピックの単語の分布に基づいて、ランダムに単語を選んで文書に入れます
3 この手順を文書全体で繰り返します
このプロセスで、重みの推測が間違っていた場合、実際に観測したデータは想定した重みとデータ生成プロセスの下ではとてもありえないものになるでしょう。 たとえば、次のテキストで構成されるドキュメント D1 があるとします。
“Qualcomm® Adreno™ 630 Visual Processing Subsystem featuring room-scale 6DoF with SLAM, Adreno Foveation”
そして、スプーン、皿、玉ねぎなどの単語に高い重みがあるトピック T1 に、私たちのデータ生成方法の仮定から、T1 が D1 に属しているかこれらの単語が T1 に属しているとは非常に考えられないことがわかると思います。 したがって、私たちがやっていることは、これらの 2 つの行列を与えて、データの尤度を最大化しようとすることです。
正しい重みを特定するために、ギブスサンプリングと呼ばれるアルゴリズムを使用します。 ギブス サンプリングとは何か、LDA でどのように機能するかを理解しましょう。
ギブス サンプリング
ギブス サンプリングは、変数の条件付き分布を連続的にサンプリングするアルゴリズムであり、その状態上の分布は長期的に真の分布に収束するものである。 これはやや抽象的な概念で、モンテカルロ・マルコフ連鎖とベイズの定理をよく理解する必要があります。 これらの概念とその背後にある数学はかなり複雑で、このブログの範囲外です。 ここでは、文書内のトピックを特定するためにギブス サンプリングがどのように機能するかについて、直感的に理解できるようにします。
先に述べたように、まず最初に、ϴとФの行列を知っていると仮定します。 これから行うのは、これらの行列を少しずつ変更し、今あるデータの尤度を最大化するような答えを導き出すことです。 これは単語ごとに、1つの単語のトピックの割り当てを変更することで行います。 与えられた単語のトピックの割り当てを知らないが、テキスト内の他のすべての単語の割り当てを知っていると仮定し、この単語にどのようなトピックが割り当てられるかを推測しようとする。
これを数学的に見ると、我々がやっていることは、残りのトピック割り当てを条件に、1 つの単語のトピック割り当ての条件付き確率分布を見つけようとしています。 すべての数学的な計算を無視すると、得られるのは、トピック k に属する文書 d の単語 w に対して次のような条件付き確率の式になります: