blog

DeNAのエンジニアが考えていることや、担当しているサービスについて情報発信しています

2023.11.07 インターンレポート

「Pococha」における配信の話題抽出・カテゴライズの検証

by Kairi Furui

#pococha #internship #natural-language-processing #topic-modeling

はじめに

AIスペシャリストコースのインターンシップに参加した古井海里( @YumizSui )です。大学ではバイオインフォマティクスやAI創薬に関わる研究をしています。

今回のインターンではライブコミュニケーションアプリ「Pococha」の配信音声やコメント・タグから話題を抽出できるか検証するという課題に取り組みました。本稿ではその内容について解説したいと思います。

1. 課題説明

Pocochaとは

「Pococha」は、DeNAが提供するライブコミュニケーションアプリです。数多くあるライブ配信アプリの中でも、Pocochaは「コミュニティプラットフォーム」として、ライバーとリスナー、リスナー同士のつながりを大切にしています。

Pococha

Pocochaにはタグという機能があります。これは、ライバーのファングループであるファミリーのみが配信につけられるテキストのことを指し、タグをつけることによって配信を盛り上げることができます。

また、話題タイムラインやトレンドにはタグがついた順に配信が列挙されるため、話題タイムラインから気になる配信にアクセスできます。

ライブ配信につけられるタグ

話題タイムラインの課題

現在のPocochaの話題タイムラインは新しくつけられたタグから順に表示される仕様になっています。

しかし、タグは必ずしも配信で話されている具体的な内容、すなわち配信の話題と関係しているとは限らないため、話題タイムラインの閲覧タイミング次第では気になる配信を見つけにくい状況が生じます。

話題タイムラインに表示されるタグの例

たとえば上の図で表示されているタグは「BOX」や「ミュート」、「還元不要」のような単語を含んでいます。これらは「ぽこボックス」と呼ばれる無料でコインをもらえる仕組みに関係するタグです。

例えば、新規リスナーが自分に合う配信枠を見つけるための一つのきっかけとして、時事ネタや趣味などの話題をベースに配信を探すという行動もありえます。その場合、話題タイムラインから「いま配信で話されているトピックス」をより把握しやすくなると、そのニーズに合った体験提供に近づきます。そのためには、このような話題と関連の低いタグ群をフィルタする必要があると考えました。

しかし、このようなタグは表記揺れ等のバリエーションが存在するため、ルールベースでフィルタすることは困難です。

Pocochaにおける話題抽出

本インターンでは

  • そもそも、Pocochaの配信音声やコメントやタグデータを活用することで配信の話題を抽出できるのか?
  • 話題抽出によってどのような新しい価値提供が実現できそうか、それを実現するための手段にはどのような技術が適切か?

という二つの観点で課題に取り組みました。

現在のPocochaでは、リスナーが配信の話題に基づいて好みのライバーを発見するには、キーワードをゼロベースで想像してタグを検索したり、話題で分類されていない配信のリスト表示からサムネイルをひとつひとつ見て判断しなければなりません。

話題に基づいて配信を分類、リスト化できれば、リスナーは好みの配信を直感的に見つけられるようになりそうです。将来的には、ライバーがどのようなコンテンツが人気か知ることでリスナーを集めやすくなる効果も期待できそうです。そのためには、配信タグやコメント、配信音声から話題抽出できる必要があります。

※この課題設定は、あくまで本インターンプロジェクトにおける課題です。

ここで、タグ・コメント・配信音声のうちどのデータが話題抽出に最も適していそうか、データ分析や簡単な手法の適用などの技術検証を元に調査しました。その結果、それぞれ以下のような利点・欠点が見えてきました。

タグ

  • 配信の具体的な内容と特に関連の低いタグ(便宜上以下「ノイズ」と呼ぶ)が多い
  • ノイズさえ除去できれば配信と直接関連した情報を集められる
  • 配信の話題ではなく配信のスタイルを指し示すタグも存在する

コメント

  • タグと概ね同じ利点・欠点を有している
  • より配信の話題や配信のスタイルと関連の低いコメントが多い

音声情報

  • 文字起こしができれば配信の話題を直接推定できそう
  • 話題抽出の精度に加えて文字起こしの精度を要する
  • 配信音声を精度良く文字起こしするシステムコストは非常に高く実用上のハードルとなる

上記の利点・欠点を踏まえ、タグ情報はノイズさえ除去できれば話題抽出の実現性の検証に用いるデータとして使えそうだと考えました。

そこで、今回のインターン課題では話題と特に関連の低そうなタグをフィルタアウトする方法、およびフィルタリングしたタグデータを用いて配信の分類をする方法を検討しました。

2. Top2Vec [1] について

Top2Vecと呼ばれる手法が効率的なタグのフィルタ・配信のカテゴライズに効果的である可能性が技術調査の結果から見えてきました。本節ではTop2Vecのアルゴリズムを簡単に説明します。

アルゴリズム解説

Top2Vecは事前学習済みEmbeddingモデルを用いて文書からトピックを自動的に決定する手法です。

Figure from [1]

Top2Vecでは、上図のように文書群のクラスタ中心からトピックベクトルを決定し、その周辺語彙からトピックを解釈できます。

まず、文書群をクラスタリングします。このとき、高次元ベクトルをそのまま扱うと次元の呪いによりスパースであり、密なクラスタを発見するのに高い計算コストを要するという問題があります。そこで、UMAPによって次元圧縮された空間に対してHDBSCANを適用し、密な文書クラスタを発見します。

この文書クラスタの平均ベクトルによって各トピックのトピックベクトルを決定します。 そして、トピックはトピックベクトルとのコサイン類似度が高い上位N単語のトピックワードによって意味付けられます。

また、各文書のトピックは、全てのトピックとのコサイン類似度の高い順で決定されます。

Top2Vecを採用した理由

Top2Vecを採用した理由として、以下の3つが挙げられます。

  1. 例えば、LDA(潜在的ディリクレ配分法)などの手法で十分な精度を出すためには大量かつ高品質なデータを用いてモデルを1から学習する必要があります。しかし、Top2Vecは事前学習済みEmbeddingモデルの埋め込みベクトルを利用するため少ないデータに適用できます。また、形態素解析、ストップワード除去や見出し語化などは必要ありません。
  2. テキストの属するトピックを決定するには、テキストのEmbeddingとトピックベクトルのコサイン類似度を計算するだけで済みます。したがって、一度テキストをEmbeddingに変換すれば、以降は類似度ベースで軽量に処理できます。ただし、テキストをEmbeddingに変換する処理の高速化は課題です。
  3. トピックベクトルはトピックモデルによらず、事前学習済みEmbeddingモデルによって意味付けられます。したがって、新しいトピックベクトルをトピックとして追加しても既にあるトピックの解釈は変わりません。

なお、事前学習済みEmbeddingモデルとして universal-sentence-encoder-multilingual-large-3[2] を用いました。

3. ノイズタグの除去

データ収集

今回は2023/8/2~2023/8/3の間の日本の総視聴者数トップ1000配信とそれにつけられたタグを収集しました。この際に「BOX」等のキーワードの入ったタグを文字列一致など単純な方法でフィルタアウトしていますが、特殊文字や表記揺れなどのバリエーションは依然含まれたままです。

取得したタグは60,665件で、配信ごとのタグの重複を除くと46,398件になりました。

埋め込みベースのノイズタグ除去

まず、事前学習済みモデルによってタグテキストをベクトル化し、そのコサイン類似度に基づいてノイズタグをフィルタアウトすることを考えました。 埋め込みベースのフィルタは表記揺れにも対応可能であるという利点があります。 例えば以下の例では、「コメント自由」というタグについて「コメント」という用語が入っているタグだけではなく「コメ推奨枠」のようなバリエーションにも適切に対応できています。

埋め込みベースのフィルタで除去できるタグの例。

ルールベースの方法と組み合わせることで、この時点で46,398件→12,494件のタグが抽出できました。

トピックモデルを用いた効率的なノイズタグの除去

前節のように、埋め込みベースの方法で話題抽出の観点で使いにくいタグをフィルタアウトできます。ただし、この方法ではどのようなフィルタキーワードを用いるかや、フィルタのしきい値をどう設定するかを逐一決める必要があるといった実運用上の課題があります。

そこで、Top2Vecを用いることでタグを分類し、話題抽出のノイズとなるタグ群を効率的に特定できないか試みました。 ノイズを含んだタグデータを用いてTop2Vecによってトピックモデリングすると、合計151トピックが形成されました。

Top2Vecによるトピックモデルの構築結果例。

ここで、上図のようにトピックワードを可視化してみると、LDAを用いる方法(詳細はAppendix)と比較して一貫性の高いトピックが形成されました。「夏の思い出」「アイドル」「占い」「ピアノ」のように配信内容と関連性の高そうなトピックができていることが分かります。

そこで、得られた151トピックについて、それぞれ話題と関連が高そうなトピックかどうかを人手で判定し、その結果として39トピックを選びました。 この39トピックに最も近いタグを、話題と関連の高いタグデータとして12,494件→2,315件得ました。

例えば下図のようなトピックは配信の話題と関連が低そうなタグが多く含まれており、本インターン課題である話題抽出には適さないタグ集合としてまとめてフィルタアウトすることにしました。

フィルタアウトされたトピックとそこに含まれるタグの例

また、下記のように表記揺れによるバリエーションが存在するノイズタグについてもタグ集合のまとまりとして捉えられたため、効率的にフィルタアウトすることができました。

BOX関連トピックの様々な表記揺れのBOXタグの一例

配信タグの抽出結果

配信ごとにタグを抽出した例を見ると、下の図のように配信枠の個性が見えづらいタグのみ除去され、配信の話題やライバーに特に関係がありそうなタグを表示できています。

配信ごとのタグ抽出結果(成功例)

一方で以下のように配信内容と(おそらく)無関係に話題性の高いタグ(この場合は地方タグ)をつける下図のケースは地方カテゴリとしてピックアップされてしまう可能性があります。

したがって、もし実際にカテゴリ機能を実装するならば、つけられたタグが配信内容と真に関係しているかをコメント情報などをもとに検証するような仕組みが必要かもしれません。

配信ごとのタグ抽出結果(失敗例)

話題タイムラインの改善

今回行った埋め込みベースのノイズタグ除去を実施することで、話題タイムラインを図のように配信の話題やライバーに関連の深そうなタグのみにすることができました。

ノイズタグの除去結果

このように配信枠の個性が見えやすくなることで、リスナーがより好みの配信を直感的に見つけられる蓋然性を高めることができそうです。本稿冒頭で述べたユースケースである「いま配信で話されているトピックス」を元に配信枠を見つけるサポートをより確実に実現するためには、より「話題」のみを抽出・表示した話題タイムラインにしていく必要があり、配信のスタイルを言及したタグを検出しフィルタアウトしていく必要がありそうです。

4. 配信のカテゴライズ

ここからは前節のフィルタリングされたタグデータを用いて配信をカテゴライズする方法について検討していきます。具体的な話題やスタイルは配信についたタグを見ればわかると仮定し、リスナーが自分に関連の深そうな配信枠をより効率的に探せるようになることを目指して、少数かつ抽象度の高い語群で配信をグルーピングできるか検証していきます。

具体的なイメージは下図のようなカルーセルタブです。

カルーセルタブによる配信カテゴリ機能のイメージ

例えば、アニメに興味があり特に具体的なアニメについて語り合いたいと思っているリスナーがいるとします。上図のようにアニメと関連の深そうなタグがついた配信を一覧表示できれば、全てのジャンルについて一覧表示された配信リストからタグをひとつひとつ見て判断する場合に比べて認知負荷が低く済みます。

具体的なアニメについてその単語でタグを検索する場合と比較しても、特定カテゴリの一覧表示は潜在的なニーズ(「言われれば興味ある」程度の具体的なアニメ)を引き出せる可能性があり、ユーザー同士が繋がるきっかけを提供する機能として差別化できそうです。

具体的には、まずタグを少数かつ抽象度の高い語群でカテゴライズしたのち、配信についたタグが属するカテゴリの分布から配信をカテゴライズします。

タグのカテゴライズ

前節のノイズタグ除去によって以下のように39個のトピックが形成されましたが、これらについて各トピックを一つのカテゴリワードで表すことで、タグをタグが属するトピックのカテゴリワードでカテゴライズすることができます。

UMAPで次元圧縮して可視化したタグのベクトル空間

今回は39トピックを以下の14のカテゴリに手動で分類しました。

アイドル アニメ イベント エンターテイメント コスプレ トーク 占い 地域 夏 好き 癒し 音楽 その他

下の図は、各カテゴリに属するタグの数を示しています。「その他」カテゴリを除くと、タグには「音楽」に関連するものが最も多いことがわかります。このカテゴリには「歌枠」といった配信のスタイルを指し示すタグだけでなく、歌手名や曲名など配信のコンテンツを指し示すタグも混合して存在しています。

カテゴリごとのタグの数

配信のカテゴライズ

次に、配信についた複数のタグから配信をカテゴライズします。

ここで、例えば「ガラガラ声」という単語を含んだタグが「音楽」カテゴリに割り当てられるなど、トピックモデルの精度とカテゴリの粒度の問題でカテゴリの意味が離れているタグが混ざることがあります。 配信を確実にカテゴライズするため、ある配信に同じカテゴリを持つタグが3件以上含まれるとき、その配信にカテゴリを割り当てることにしました。 結果として、分析の対象とした287配信のうち90配信に何らかのカテゴリが割り振られ、その内訳は下図のようになりました。

カテゴリごとの配信の数

配信のカテゴライズ結果

最終的な配信のカテゴライズ結果を図に示します。

配信のカテゴライズ結果

各カテゴリで妥当性の高い配信をピックアップできていることが分かります。

また、例えば5. のアイドルカテゴリのある配信では、乃木坂など「アイドル」以外のキーワードがついたタグを元に適切にカテゴリを割り当てることができています。 このように、トピックモデルを用いることで、大量のタグから配信のコンテンツと関連性が高いタグのみを抽出し、適切にカテゴリを割り当てることができました。

話題タイムラインの改善の節でも述べたように、より「話題」に関連するタグデータのみを抽出できるようになれば、本節で検証したカテゴライズの手法もより「話題」に関連した少数かつ抽象的な語群による配信のグルーピングを実現できるようになりそうです。

5. 結論・今後の展望

今回のインターンプロジェクトでは、Pocochaの配信内容からそもそも話題抽出できるかという課題から出発し、特に配信内容の分かりにくいタグを効率的に除去する方法の検証、およびそれを用いた配信枠の個性が見えやすい話題タイムラインの改善の案出しまでを行いました。また、抽出された配信内容と関連性の高いタグデータを元にトピックモデルを用いてカテゴライズすることで、カルーセルタブの形で配信を探しやすくできないかという提案をしました。

今後の展望として、

  • 真の意味での「話題抽出」の実現:
    • 配信のスタイルについて言及したタグもフィルタアウトする方法の検討
    • コメントデータのノイズの除去とデータの活用
    • 音声文字起こしのシステムコスト調査とデータの活用
    • 実際の配信内容に即したタグやコメントかどうかの検証
  • コミュニティ組成の支援:
    • 抽出された話題に基づいたコンテンツベースのマッチング(単なる類似度ベースの手法では難しそうだった)

などが挙げられます。

おわりに

本インターン期間では様々な交流からDeNAの自由な社風を知ることができ、密度の高いインターン体験になりました。 メンターを始めとするチームの方々の手厚いサポートのおかげで自然言語処理が専門ではない自分でも最後までインターンをスムーズに進められました。 また、事業的な観点でユーザにどのような価値提供ができそうかといったことを意識して課題に取り組むという良い経験ができました。誠にありがとうございました。

参考文献

[1] Angelov, D. arXiv:2008.09470 (2020).

[2] Cer, D, et al. arXiv:1803.11175 (2018).

Appendix

LDAによるトピックモデリング

Top2Vecによってトピックモデルを構築する前に、LDAによるトピックモデルによって配信につけられたタグから話題抽出できるか検討していました。 配信ごと、5分ごとにタグを一つの文書にまとめた後、どのような配信にも含まれているストップワードを除去した上で、gensimのLDAModelを用いてトピックモデルを構築しました。 結果的には、下図のようにLDAでは解釈可能なトピックは得られませんでした。

LDAによるトピックモデルの構築結果例。左上のみアニメらしきトピックが形成されている?

小規模データを使ったことに加え、配信ごとに全く異なる話題のタグがつけられることが多いことが原因だと考えられます。

最後まで読んでいただき、ありがとうございます!
この記事をシェアしていただける方はこちらからお願いします。

recruit

DeNAでは、失敗を恐れず常に挑戦し続けるエンジニアを募集しています。