Blueskyには他のSNSでは見かけない「モデレーション」「ラベル」という機能があります。仕組みとしても技術としても面白いのですが、今回は仕組みについて説明します。
ラベルは、おおむね2つの機能があります。
投稿に対するラベル
Blueskyでは、Blueskyの基準においてエログロの画像を投稿するには「成人向けコンテンツ」として投稿する必要があります。3つのカテゴリーから選ぶことができ、これを付けずにエログロ投稿をすると公式からペナルティを受けることはあります。
Blueskyではこのカテゴリーのことを「ラベル」と呼びます。
ただし、ついうっかり成人向けコンテンツを付け忘れたり、成人向けコンテンツをつけてもカテゴリが違ったりする場合があります。Blueskyでは、投稿時に成人向けコンテンツというラベルがついている/いないにかかわらず、すべての画像は運営側でAIによるエログロチェックを行い、その結果、エログロと判断されると「この投稿はエログロですので、気を付けたい人は気を付けてください」という警告が表示されます。投稿時のラベルと比べると、後付けのラベルは約20ラベルに細分化されています。
もちろん、エログロを楽しみにされているユーザーもいますので、そのような方は投稿時のラベル、後付けのラベル問わずこのような警告は不要です。両者を両立させるため、Blueskyではラベルごとに「ラベルがついた投稿は一切見たくない(非表示)」「たまに刺激が欲しいので、警告をクリックすると中身が見れる(警告)」「事前通告なしでフルオープンする(オフ)」を利用者が選択できる方式をとっています。
なお、サンプル画像を張ろうと思いましたが、まんまエログロ画像が乗ってしまうので割愛します。
アカウントに対するラベル
一方、問題のある投稿を繰り返すアカウントに対しては、いちいち投稿ごとにラベルをしても間に合わないこともあり得ます。そのため、Blueskyではアカウントに対してもラベルを張ることが出来ます。一部のラベルは、アカウントにのみに対して貼ることを想定しているものもあります。
アカウントに対してはられるラベルの中で、現時点でよく運用されているのは、「Impersonation」(なりすまし)「Spam」(スパム)あたりです。とはいえ、なりすましアカウントも人によっては有益ですから、利用者側がなりすましアカウントをどのように表示するかを選ぶことが出来ます。
アカウントになりすましラベルが張られて、警告するように設定すると、このように表示されます。
公式モデレションサービス
公式がエログロなりすましスパムを判定していますが、これは「公式モデレーションサービス」を通じて提供されています。Blueskyのアプリを使う限り、必ずこのモデレーションサービスの影響を受けることになります。
他方、自分でアプリを作ると公式モデレーションサービスの影響を受けないサードパーティークライアントも実現可能といえば可能です。ただし、bsky.appや公式アプリは常にこの影響を受けますし、サードパーティークライアントもほぼこの影響を受けるように作っているものが多いです。公式アプリどころか公式SDKを使うとこの影響を受けるため、「出来る仕組みはあるけど現実それを作ろうとするとSDKに手をいれるところからスタートになるので正直大変」です。
サードパーティラベラー
Blueskyでは2024年2月からサードパーティラベラーの機能が解放されました。公式では「20のラベル」を用いてエログロ対応を行っていましたが、サードパーティラベラーを用いると「ユーザーが勝手にラベルを作ること」「ユーザーが勝手に投稿やアカウントに対して後付けラベルを張ること」が可能になりました。サードパーティラベラーは「ラベラー」と呼ばれることが多いです。
サードパーティラベラーを作った真なる目的は、Blueskyの運営では気づけないような、公益性を持ったモデレーションの手段を増やしたった、というところだと思います。具体的には、それぞれの国にあったモデレーションは各国のコミュニティにゆだねたい、そんな思いもあったのかもしれません。
そのような目的に使われている、崇高なラベラーもありますが、あまり真面目ではないラベラーも運営されています。
例えば私が運営しているFF14のラベラーは、FFシリーズの有名なフィーチャーの一つであるジョブをラベルとして提供し、アカウントの本人からの申請(チャットボット)でラベルを自由につけたり外したりすることが出来ます。私はメインジョブが黒魔道士なので、黒魔道士をつけています。
するとこのようにラベルが表示されるようになります。
勝手にラベルを付けることの是非
勝手にラベルを第三者に張られたりするの気持ち悪いんですけど?というところはあると思いますが、サードパーティラベラーのラベルは、「そのサードパーティラベラーを購読しないとラベルが張られているかどうかはわからない」仕組みになっています。
先ほどの私のアカウントですが、FF14のラベラーを購読していないアカウントから参照すると
このようになにもラベルが張られていない状態となります。なお、ごく一部ですが、無差別にラベルを貼るようなラベラーもあるようですが、そのラベラーを購読しない限りそれを知ることはありません。
カスタムラベラーの作り方
ここまで読まれた方の2%ぐらいが「私も趣味向けのラベラー作ってみたい!」とお思いになると思いますが、2つのハードルが立ちふさがります。
サーバーを立てる
一つは、どの投稿やアカウントに対してラベルを貼ったかを保存するために、ご自身でサーバーを立てる必要があります。このサーバーは現時点では2つの手段があります。
一つが公式で用意されているOzoneを使用する方法です。
Dockerやら、リバースプロキシーやら、PostgreSQLやら、JSONやら、そのような知識が必要になります。
もう一つは、skywareのlabelerパッケージを使用する方法です
私はOzoneしかない時代にラベラーを立ち上げたのでOzoneを使っていますが、これから始められる方はskywareのパッケージもより軽量になる点でよいかもしれません。(手間は似たり寄ったりです)
ラベルを自動で貼る方法を考える
次に行うのは、「どのようにラベルを張るか」を検討することです
OzoneのUI上で、アカウントごとや投稿ごとにラベルを張るのは(特に投稿は)ぶっちゃけ無理です。先に説明した通り、公式もAIを使って自動でラベルを張る行いをしているためではないかなとは思います。一部のラベラーの運営者は手動で行っているようです。
ラベルを貼ることを自動で行うためには、現状プログラミングを行うしかありません。skywareではこれを行うためのBOT用のライブラリを別に提供しているので、そちらを使うことになります。ライブラリはありますが、TypeScriptでの実装が一部必要です。イレギュラーな対応を行う際も同様にTypeScriptでコードを書いての対応が必要となります。
この記事を書いている途中で、skywareのlabelerパッケージと、独自のJetstreamを使ったラベリングを自動化する仕組みを組み合わせたパッケージがリリースされました。当然、labelerを立ち上げるところは一つ前の方法と同じです。Firehoseを直接監視しない分、ネットワーク面での負荷は少なくすみます。
ご自身に合うものを試していただければと思います。