/hololi2vec

Analyze hololivers' tweet data using Item2Vec-based distributed representation learning model by hierarchization and aggregate operation (proposal model)

Primary LanguageHTML

hololi2vec

v1.1: 2021.03.15更新

2021春 データ分析ミニプロジェクト

階層化と集約演算によるItem2Vecベース分散表現学習モデル(提案モデル)を使ったホロライバーツイートデータの分析

Analyze hololivers' tweet data using Item2Vec-based distributed representation learning model by hierarchization and aggregate operation (proposal model)

概要

  • 非常にざっくりと言うと,卒論で提案したアイテム推薦システムのための分散表現学習モデル(以下,提案モデル)を,推薦以外の分野として自然言語処理に応用(というか逆輸入)させてみた,というプロジェクトになります.
  • 研究の一環ではなく,自身のデータ分析スキルを向上させるための趣味的なプロジェクトです.
  • hololi2vecという名前は,hololive(ホロライブ)と***2Vec(Word2VecやItem2Vec)を組み合わせた造語です.
  • 提案モデル,本プロジェクトに至る動機,プロジェクトの流れの3点を順を追って説明していきます.

提案モデル

詳しくは以前参加した研究会のスライドを確認してください.以下で示すページ番号はすべてスライド中のものです.

WI2研究会発表スライド (slideshareに飛びます)

  • ユーザのセッション集合(pp.2-3やノート03_Format_Datasetの4節参照)において,Item2Vec(Word2Vecをバスケットデータに適用してアイテムの分散表現を構築するモデル)を適用しています.
  • ただItem2Vecを適用するだけでなく,セッションやユーザに対してもアイテム分散表現をベースにリアルタイムに分散表現(セッション・ユーザ表現)を学習(構築・更新)しています(pp.7-9).
  • セッション・ユーザ表現のリアルタイム学習法が提案モデルにあたり,この提案モデルを導入した推薦システム(pp.10-11)が上記スライドで示すメインテーマになります.
  • 上記発表を以降,データセットの整形ミスやモデルコードのバグの修正を行っており,各評価結果(pp.15-19)は最新の結果とは若干変わってます.これは今後予定している学会スライドに反映予定です.

動機

  • 提案モデルが対象とするユーザのセッション集合はTwitterのデータ構造と非常に似ており,自然言語にも適用できるのではないかと考えたため.
    • Item2VecのベースであるWord2Vecは元々自然言語処理分野における技術であるため,応用というよりは逆輸入という表現が正しいです.
    • セッション集合はユーザがいくつかのセッションを持ち,セッションは順序を持つアイテム(商品,Webページ,音楽 etc.)の並びになっている.
      → Twitterはユーザがいくつかのツイートを持ち,ツイートは単語の並びになっている.
      → 提案モデルを適用することで,ツイート(セッション)表現やユーザ表現を構築でき,単語・ツイート・ユーザ間の関係性を予測できるのではないか?
  • 単語・ツイート・ユーザ間の関係を推測できると,ツイッターにおける推薦機能(おすすめユーザ・トピック)の向上を図れる可能性があり,取り組む価値があると考えたため.
  • テキストデータを本格的に扱った経験がなく(これまではサイトログやテーブルデータが中心),自身の新たな方面のスキル向上を図れると考えたため.
    • 今回SNSの特定界隈のユーザのテキストデータを扱うため,崩した表現や語録など前処理は非常に大変でやりがいがあることが予想される.
  • 分析を通して発見できたことが,自身のモデルの性能向上のヒントになるかもしれないため.
    • 研究の一環ではないとしていますが,研究のことを全く意識せずに取り組むわけではありません.

プロジェクトの流れ

以下のように考えてますが,先が見えないので適宜方向転換・脱線すると思います.余力がなければ5で一旦クローズします.

  1. データ収集 - Twitterからホロライバーのツイートデータ収集.Developer申し込みから始まりTweepyを使ってAPIを叩く.
  2. テキストの前処理 - テキストから不要な単語を省いたり(記号等),逆に1単語として認識させる作業(ユーザ辞書作成)を行う.絶対大変.
  3. Word2Vecモデルへの適用 - 分かち書きを行ってモデルを訓練し,単語の分散表現を構築する.単語分散表現の質をざっくりと調べる.
  4. 提案モデルへの適用 - 訓練した単語分散表現を使い,提案モデルへ適用してツイートやユーザに対しても分散表現を構築する.2種類のツイート表現構築法からなる2つの提案モデルを使う.
  5. 簡易的な分析 - Plotlyなどインタラクティブなグラフライブラリをフル活用して,コサイン類似度や2次元空間への可視化など様々な観点で分析し,提案モデルがツイートデータにも有効か調べる.
  6. (必要に応じて)詳細な分析 - 6でより詳しく分析する必要がある事柄が見つかれば,新たなデータ収集も視野に詳細な分析を行う.

※分析結果によってはミニプロジェクトという立ち位置から,長期プロジェクトへと格上げするかもしれません.

備考

  • 分散表現のコサイン類似度を元に,ユーザ間の関係性について言及していますが,「類似度が低い=ユーザ同士の仲が良くない」という主張をするつもりは決してありません.
    • あくまでもユーザがツイートに使う単語の傾向が類似していることに過ぎません.
    • 正妻戦争の決着をつけようとしている記述がありますが,ネタの1つとして捉えてもらえると幸いです.
  • 当方(箱推し気味の)シオンちゃん推しであるため,サンプルとしてシオンちゃんのツイートデータを使っていることが多いです.
  • 日本語テキストを扱いたい・データのサイズをあまり大きくしたくないという理由で,ホロライバー全員ではなくホロライブ事務所におけるホロライブ所属のメンバーに限定してます.
    • つまるところ,0~5期&ゲーマーズ所属メンバーが対象です.
    • ホロスタ,イノミュ,ID,ENのメンバーは扱ってません.
  • ホロライブのことは大好きなので,もしファンが見て引っかかるような記述がありましたら,遠慮なく指摘ください.即座に修正します.
  • 研究の一環ではないため,パラメータ設定や考察などは厳密なものではありません.
    • どこかで発表する予定のあるプロジェクトではないため,とりあえずやってみようorこうなるかも精神でガンガン取り組む方向性でプロジェクトを進めていきます.

環境

  • Python 3.8.1
  • requirements.txt
  • venvなどでPython環境を用意の上,以下コマンドを実行してください.
    pip install -r requirements.txt
    
  • Word2Vecの分散表現の再現性は同一環境でしか保証されていないため,ノート通りの値にはなりません.

ノート

  • プロジェクトの記録はJupyter Notebookにまとめています.
  • コードセルだけでなくMarkdownセルで説明を入れている部分がありますが,自分用のメモに過ぎないので荒れた日本語になってかもしれません.
  • もし気になる記述がありましたら,最下部に記載してあるお問い合わせからお願いします.
ノート名 概要 進捗
01_Gather_Data Tweepyを使ったホロライバーツイートデータ収集 終了
02_Format_Data ツイートテキストの分かち書きに向けた前処理 終了
03_Prepare_Dataset 分かち書きとセッション形式のデータセット作成 終了
04_Create_Userdic ホロライブ辞書(オリジナルユーザ辞書)の作成と再分かち書き 終了
05_Apply_Word2vec Word2Vecモデルの訓練と分析 終了
06_Apply_ProposalModel Word2Vecによる分散表現とセッション形式データセットを使った提案モデルの学習 終了
07_Analyze_ProposalCosModel 提案モデル(コサイン類似度)の簡易的な分析 進行中
08_Analyze_ProposalOddModel 提案モデル(順序差減衰)の簡易的な分析 準備中
  • ノート名をクリックするとGitHub上でJupyter Notebookを閲覧できます.ただしサーバ側?の問題でリロード要求が頻発します.
  • ツイートテキストを出力する場合はプッシュ時に非表示にしてます.手動なのでもし見つかれば指摘ください.
  • 各ノートの目次のリンクはJupyter Notebookの拡張機能におけるもので,GitHub上では無効です.

ディレクトリ構成

.
├── README.md
├── bin: 役割ごとに分けたスクリプトファイル
│   ├── analyze.py: 分析・可視化関連
│   ├── dataset.py: データセット(収集・前処理・分割)
│   ├── model.py: モデル(Word2Vec,提案モデル)
│   └── myutil.py: 便利系
├── data: [ignore] ツイートデータなど
├── jupyter: Jupyter Notebookによるプロジェクトノート(詳細は上記参照)
│   ├── 01_Gather_Data.ipynb
│   ├── 02_Format_Data.ipynb
│   ├── 03_Prepare_Dataset.ipynb
│   ├── 04_Create_Userdic.ipynb
│   ├── 05_Apply_Word2Vec.ipynb
│   ├── 06_Apply_ProposalModel.ipynb
│   ├── 07_Analyze_ProposalCosModel.ipynb
│   └── tmp
│       └── 03_sample.txt: "03_Prepare_Dataset"で使用したサンプルテキスト
├── model: モデルバイナリファイル
│   └── word2vec: Word2Vec
│       └── hololive_v1.model: 詳細は"05_Apply_Word2Vec"参照
├── requirements.txt: 必要なPythonライブラリとバージョン
└── result: プロジェクトノートで保存した図表(フォルダ以下略)
    ├── 01_Gather_Data
    ├── 03_Prepare_Dataset
    ├── 05_Apply_Word2Vec
    └── 07_Analyze_ProposalCosModel

お問い合わせ

本リポジトリ中の各ファイルに関する質問等ありましたら,Twitterへのリプライにて対応します.