サイト内の現在位置

LDAを用いた文書分類をFrovedisで高速に実施

no.015scikit-learnとgenism版LDAでの学習時間比較2021.10.22

 前回は教師なし学習のサンプルプログラムとして、クラスタリングによるニュース記事の分類と、t-SNEを使った次元削減を取り上げ、Frovedis版とscikit-learn版で学習に要する時間を比較しました。

 前回はサンプルデータとしてニュース記事を用いました。ニュース記事に含まれる単語の集まりに対してクラスタリングを行うと、各単語はいずれかのグループに割り振られます。例えば、経済、金融、政治といった各分野に多く現れる単語がそれぞれのグループに割り当てられます。Fig.-1に再掲した前回のk-meansクラスタリング結果の通りです。この特徴を使い、文書中の単語がどのグループの単語かを調べることで、その文書が属するグループを知ることができます。一方、「新型コロナウィルス(Covid-19)感染拡大を受けた経済への影響と株価下落、そして中央銀行による金融緩和策」のような複数の分野にまたがった単語を含んだ文書の場合、一つの特定グループにカテゴライズすることは困難となります。


6 ['u.s.', 'market', 'china', 'fed', 'economy', 'covid-19', 'investor', 'economic', 'global', 'growth', 'time', 'business', 'add', 'cut', 'far', 'get', 'think', 'move', 'continue', 'demand', 'people', 'well', 'world', 'policy', 'inflation']
----------------------------------
0 ['year', 'trade', 'rise', 'last', 'week', 'stock', 'month', 'price', 'new', 'expect', 'report', 'point', 'data', 'gain', 'dollar', 'high', 'yield', 'end', 'day', 'increase', 'accord', 'fell', 'close', 'show', 'wednesday']
----------------------------------
3 ['company', 'share', 'firm', 'group', 'announce', 'revenue', 'airline', 'france', 'corp', 'shareholder', 'maker', 'operate', 'stake', 'unit', 'co', 'giant', 'retailer', 'dividend', 'rival', 'electric', 'boeing', 'ltd', 'motor', 'chip', 'spain']
----------------------------------
7 ['bank', 'government', 'include', 'fund', 'plan', 'work', 'debt', 'use', 'issue', 'cost', 'tax', 'loan', 'finance', 'offer', 'source', 'pay', 'purchase', 'provide', 'public', 'benefit', 'program', 'rule', 'cash', 'account', 'reduce']
----------------------------------
2 ['donald trump', 'deal', 'country', 'president', 'tell', 'u.k.', 'meet', 'state', 'e.u.', 'official', 'call', 'talk', 'news', 'comment', 'two', 'joe biden', 'administration', 'statement', 'agreement', 'agree', 'national', 'foreign', 'election', 'italy', 'decision']
__________________________________________________
1 ['analyst', 'investment', 'chief', 'financial', 'economist', 'note', 'capital', 'head', 'strategist', 'equity', 'security', 'executive', 'senior', 'research', 'new york', 'manager', 'write', 'strategy', 'director', 'partner', 'management', 'goldman sachs', 'manage', 'portfolio', 'jpmorgan']
__________________________________________________

Fig.-1 k-meansクラスタリング結果一例


 今回は、LDA (Latent Dirichlet Allocation)と呼ばれるアルゴリズムを使用して、前回使用したニュース記事の分類を行います。LDAによる文書の分類では、各記事が複数のグループ(LDAでは「トピック」と呼びます)に属することを許容します。また、一つの単語が複数のトピックに現れることもあります。これにより、先の例にも挙げた複数のトピックから構成される記事についても対応できるようになります。

 LDAが行う処理内容はここでは触れませんが、Pythonで利用できる代表的なものとしてscikit-learn版(Frovedis版はscikit-learn互換)とgensim版が存在します。サンプルプログラムの中で、まず初めにFrovedis版LDAによる分類するグループ数の決定を実施し、続いてFrovedis, scikit-learnとgenism版による学習時間の測定を行います。

 LDAでは分類するグループ数を人間の判断で決める必要があります。処理するデータに対してグループ数を決める判断指針としてperplexityとscoreが用意されています。グループ数を変えていった際にperplexityはより小さい値、反対にscoreは大きい値となる点を基にグループ数を決めます。デモではまずこの作業を行い、グループ数を決定したうえでLDAを実行していきます。


LDA

 以下のテーブルにFrovedis, scikit-learnとgenism版LDAの学習に要した時間比較をまとめました。scikit-learnではlearning_method='online'を指定することで正確性に対して速度を優先して実行しました。より正確性が期待される’batch’では学習に時間がかかりすぎるためです。なお、学習に要する時間は、CountVectorizer(min_df=0.05, max_df=0.8)で指定する単語出現頻度制限の程度に影響を受け変化します。

学習アルゴリズム Frovedis (秒) Frovedisでの高速化
Frovedis LDA 3.70 -
Scikit-learn LDA (CPU) 280.1 75.7倍
Genism LDA (CPU) 39.74 10.7倍

 データに含まれる情報が頻繁に変化するケースを考えてみます。例えば特許データベースでは新規項目の追加が頻繁に行われます。また多様なジャンルのSNSやニュース記事をデータソースとする際にも新たな単語の追加がしばしば発生します。こうしたデータを扱うため頻繁なLDAの学習は不可欠となります。また、前述した単語出現頻度制限を変化させながらグループ数の見直しまで踏み込まざるを得ない事態も想像されます。データセットが巨大であるほど、このような状況下で学習にかかるコストが増していきます。

 SX-Aurora TSUBASAとFrovedisによるLDAは機械時間を短縮することで短いサイクルでの学習を容易にします。その結果、より高い精度の推論が低コストで実施できるようになります。

関連リンク