
- AIのembeddingで文章の意味を数値化し、既存記事とかぶらない『白地』キーワードを探せる
- 類似度の数字だけでは白地かどうか判断できず、比較の基準点を測って初めて意味を持つ
- 意味空間の地図で白地を可視化する場合、軸ラベルは地図を作り直すたびに検算がいる
AIのembedding(エンベディング)を使えば、SEOでまだ書かれていない話題、いわゆる「白地」を見つけられる。そう聞いて試してみたら、思ったより一筋縄ではいかなかった。
このブログには260本を超える記事がある。まだ書いていない話題は、本当にもうないのだろうか。それを確かめたくて、AIに頼ってみることにした。
話題同士の「近さ」を、AIに数えてもらう
embeddingは、文章の「意味」を数字の並びに変換する仕組みだ。Googleのembedding APIに文章を渡すと、その意味を表す数千個の数字が返ってくる。似た意味の文章同士は、この数字の並びも近い場所に集まる。ちょうど、GPSの緯度経度で「近い場所」が測れるのと同じだ、と思っていた。ただし、まったく無関係な話題同士でも、ある程度近い値が出てしまう。これが、あとで効いてくる。
やり方はこうだ。このブログが既に扱っている約100個のキーワード(260本を超える記事から、1記事につき代表のキーワードを1つずつ選んだ数だ)と、まだ書いていない候補のキーワードを、両方ともembeddingで数値化する。近さを測る指標には、コサイン類似度を使う。正確には位置そのものの距離ではなく、2つの数字の並びが指す向きがどれだけ揃っているかを見る数値だが、感覚としては「近いほど似ている」と捉えて差し支えない。1に近いほど意味が近く、0に近いほど遠い、はずだった。ただし実際に無関係な言葉同士を測ってみても、そこまで0には近づかない。近すぎる候補は既存記事とかぶり、遠い候補は本当の白地だと選別できるはずだった。
0.687から0.84という数字を、どう読めばいいのか
わざと会議とは縁遠い候補を50個ほど作って試した。ペットのしつけ、確定申告のやり方、スポーツの指導法。議事録の話とはまるで関係ない話題ばかりだ。ところが、既存キーワードとの類似度は低いものでも0.687、高いものは0.84まで出た。どちらも直感的には「近い」部類の数字に見える。この数字だけを見れば、白地はもう残っていない、そう結論づけてしまいそうになった。
だが、0.687や0.84を「近い」と読んでいいのか、そもそも確かめていなかった。
温度計を例にするとわかりやすい。「23度です」と言われても、それが暑いのか涼しいのかは、平熱や外気温という基準があって初めて判断できる。AIが返す類似度の数字も同じで、比較対象を持たない限り、0.6や0.8がどれくらいの意味を持つのか誰にも分からない。
そこで、2つの基準点を測ることにした。
1つ目は、意味的に何のつながりもない言葉同士の類似度だ。「猫の爪とぎのしつけ」と「確定申告のやり方」のような、完全に無関係な組み合わせを何組も比較すると、平均0.617という数字が出た。無関係な言葉同士でも自然に出てしまう下限、いわば「ノイズの床」である。
2つ目は、既に別記事として両立しているキーワード同士の類似度だ。このブログで実際に両立している「PTA・自治会の議事録」と「全社会議・朝礼の議事録」を比較すると、0.769という数字が出た。別の記事として十分成立する組み合わせでも、これだけの数字は出るということになる。
この2つの基準点から、1つのことが言える。0.65から0.80あたりの類似度は、既存記事に吸収される距離ではなく、別記事として十分成立し得る距離だと読むべきだということだ。切り捨てる前に、この帯に入った候補は中身を見る必要がある。
この物差しで、さっきの候補を読み直す。0.687はノイズの床のすぐ上、無関係な部類に近い数字だ。だが0.84は、別記事として成立する距離である0.769を明確に超えている。候補の0.687から0.84は、1つの結論にまとまる数字ではなく、判定が候補ごとに分かれる帯にまたがっていたのだ。0.84側の候補は既存記事に吸収される恐れがあり、0.687側の候補は白地である見込みが高い。近いのか遠いのか、候補を一つずつ確かめない限り何も言えない。基準点を測る前に結論を出していたら、実際には残っていた白地を、無いものとして切り捨てるところだった。
無関係な組み合わせの下限と、両立している実例の2点を先に測っておかないと、0.687も0.84もただの数字でしかなかった。
地図を作り直したら、ラベルが逆転していた
候補と既存キーワードの類似度が分かっても、数千個の数字の並びのままでは、どこが白地なのか人の目では判断できない。そこで、地図を作ることにした。PCA(主成分分析)という手法を使うと、数千個の数字を2つの数字に要約できる。地球という丸い球体を1枚の平面地図に描き起こすと、どこかの大陸の形や面積が必ず歪むのと同じで、この要約でも情報の一部は失われる。それでも、似た意味のキーワードは地図上でも近くに集まり、空いている場所が白地の候補として見えてくる。この地図の軸に、「右上は法人・Web会議寄り、左下は個人利用寄り」というラベルを貼った。
後日、候補キーワードを足して地図を作り直した。ラベルはそのまま使い回した。ところが実際に配置を見直すと、個人利用系のキーワードが右上に来ていた。ラベルと中身が逆転していたのだ。
原因は、この要約計算の性質にあった。PCAは、軸のどちらをプラスにするかを一意には決めない。候補キーワードを足して計算をやり直すと、軸の向きが変わり、前回付けたラベルが今回も同じ意味を指すとは限らなくなる。もう少し正確に言うと、候補が増えるたびに軸そのものが少しずつ回転し、「右上」が指す意味がずれていく。embedding自体、つまりキーワードが元々持っている意味的な遠近は、候補を足しても変わらない。動くのは、それを2つの数字に要約したときの見え方のほうだ。今回起きていたのは、どちらの方向が何を意味するかという読み方の取り違えだった。
ラベルを貼り直して読み直すと、既存記事が薄かったのは、法人・会議寄りではなく個人利用寄りのほうだった。ラベルを信じたまま法人・会議まわりで白地を探していたら、見当違いの場所を探すところだった。
地図を作り直すたびに、両端のキーワードを見直してラベルが合っているか確かめる。それをしなければ、前回のラベルは使えなかった。
結局、白地はいくつ残っていたのか
AIが返す数字や図は、自信満々に見える。だが自信満々に見えることと、その数字が実際に白地を示せているかは、別の話だった。比較対象を先に用意してから類似度を読み、地図を作り直したらラベルを確かめ直す。地味な作業だったが、これをやるかどうかで、見つかる白地の数も信頼度も変わってくる。
この2つの確認を経て、まだ書いていない話題はいくつか見つかった。この意味空間マップづくりから拾い上げた話題は、記事として公開できたものだけで19個ある。議事録からはだいぶ離れた場所も多かった。たとえば、日々の出来事を音声で記録する「音声ライフログ」、展示会のブースを歩きながら録音してあとでまとめる使い方、TRPGセッションの記録といった具合だ。会議の議事録を探すつもりで始めた作業が、趣味や日常の記録という、最初は想定していなかった領域まで連れて行ってくれた。
AIに探させて終わりではなく、数字を疑ってから確かめた白地だからこそ、記事にする踏ん切りがついた。
あわせて読みたい: