最近、プライベートで機械学習系の調査をすることが何回かありました。その中で、KerasやOpenPoseを触っているうちに、また機械学習ネタで面白いことがやりたいなぁ。と考えていたら、「人工知能に声優を性転換させる」というネタを思いついたので、やってみたいと思います。
声優を性転換させる方法
ここでは、word2vecという手法を用いてやってみたいと思います。
word2vecとはどのようなものか?有名な例を出します。
王様 - 男 + 女 = 女王
パリ - フランス + 日本 = 東京
直感的には、「王様」から「男性」を引いたことで、「国の長」という概念が残る。それに、「女性」という概念を加えることで、「女王」という概念になる。
「パリ」という概念は、「フランス」の「首都」という概念だと考えられる。ここで、「フランス」を引き、「日本」を足すことで、「日本」の「首都」である「東京」になる。
このような操作をコンピュータでできるようになったのが、word2vecのすごいところでした。
したがって、word2vecを使い、「王様 - 男 + 女」と入力すると、「女王」と出力することができます。
この例を見ていてふと思いました。
花澤香菜 - 女 + 男 = ?
これで花澤香菜さんが男性へ性転換した場合の人が分かるのでは?
そのような操作をした時、どんな声優が導き出されるのか?
純粋に疑問がでたのでやってみました。
word2vecのデータ
以前に、「文章を○○風に変換する機械学習をやってみた」ということをやってみました。この時には、doc2vecというものを使っていましたが、あまりうまくできませんでした。そのため、次に自然言語処理を行う際には、自分で学習するのではなく、世の中に公開されているモデルを使ってみようと思っていました。
word2vecは、有名なモデルなので、世の中に公開された良い学習済みモデルがあるだろうと思って調べました。そうしたところ、以下のものが良さそうでした。
少し試してみましょう。
import gensim
model = gensim.models.KeyedVectors.load_word2vec_format("entity_vector/entity_vector.model.txt")
print(model.most_similar(positive=["王様","女"],negative=["男"]))
print(model.most_similar(positive=["パリ","日本"],negative=["フランス"]))
#王様 - 男 + 女 = 女王
[('お姫様', 0.7259089946746826), ('[シンデレラ]', 0.6741880774497986), ('貴婦人', 0.6695671081542969), ('[アリス_(不思議の国のアリス)]', 0.6475883722305298), ('花嫁', 0.645860493183136), ('妖精', 0.6455655097961426), ('道化師', 0.6381885409355164), ('姫君', 0.6307608485221863), ('魔女', 0.6281230449676514), ('魔法使い', 0.6276963949203491)]
#パリ - フランス + 日本 = 東京
[('[日本]', 0.6431803703308105), ('東京', 0.6326844692230225), ('[東京]', 0.6148374080657959), ('日本国内', 0.5847295522689819), ('大阪', 0.5656221508979797), ('都内', 0.5597202777862549), ('東京都内', 0.5482653975486755), ('[大阪]', 0.5426324605941772), ('神戸', 0.520367443561554), ('[横浜]', 0.5199852585792542)]
「王様 - 男 + 女」に近い概念は、「お姫様」「シンデレラ」「貴婦人」のようです。
「パリ - フランス + 日本」に近い概念は、「[日本]」「東京」「[東京]」のようです。
"[]"で囲まれているものは、Wikipediaの特定の記事を指しています。そのため、「東京」は一般名詞として、「[東京]」はWikipediaの「東京」の記事を指しているようです。
ちょっとズレがありそうですが、そこそこ合っているようですね。
声優ランキング
声優のランキング情報については以下のリンクを参考にいたしました。
他にも色々なランキングはありましたが、男性女性20人ずつなので、非常にデータが取り扱いやすいので、このランキングを選びました。
人気声優ランキング2017 TOP20!(女性声優)
人気声優ランキング2017 TOP20!(男性声優)
検証法
非常に直感的な手法で行います。先ほどのランキングの声優のデータに対し、
[女性声優] - [女] + [男]
[男性声優] - [男] + [女]
という操作を行います。
word2vecでは、あくまで"近い"概念のベクトルを見つけることができます。
そのため、ランキングでは近い3つの概念と、その近似度を求めます。
コード
import gensim
model = gensim.models.KeyedVectors.load_word2vec_format("entity_vector/entity_vector.model.txt")
actors = [
"[花澤香菜]",
"[水瀬いのり]",
"[早見沙織]",
"[沢城みゆき]",
"[茅野愛衣]",
"[悠木碧]",
"[佐倉綾音]",
"[雨宮天]",
"[釘宮理恵]",
"[戸松遥]",
"[南條愛乃]",
"[高橋李依]",
"[内田真礼]",
"[東山奈央]",
"[水樹奈々]",
"[林原めぐみ]",
"[小倉唯]",
"[三森すずこ]",
"[種田梨沙]",
"[堀江由衣]"
]
for i,actor in enumerate(actors):
print("|"+str(i+1)+ "|"+actor[1:-1]+"|"+"|".join("%s(%5.3f)"%(a[0][1:-1],a[1]) for a in model.most_similar(positive=[actor,"男"],negative=["女"])[:3])+"|")
actors = [
"[神谷浩史]",
"[宮野真守]",
"[中村悠一]",
"[梶裕貴]",
"[福山潤]",
"[小野大輔]",
"[松岡禎丞]",
"[櫻井孝宏]",
"[諏訪部順一]",
"[杉田智和]",
"[下野紘]",
"[岡本信彦]",
"[細谷佳正]",
"[石田彰]",
"[鈴木達央]",
"[斉藤壮馬]",
"[鈴村健一]",
"[木村良平]",
"[KENN]",
"[蒼井翔太]"
]
for i,actor in enumerate(actors):
print("|"+str(i+1)+ "|"+actor[1:-1]+"|"+"|".join("%s(%5.3f)"%(a[0][1:-1],a[1]) for a in model.most_similar(positive=[actor,"女"],negative=["男"])[:3])+"|")
TOP20女性声優の性転換
結果
順位 | 名前 | 候補1位 | 候補2位 | 候補3位 |
---|---|---|---|---|
1 | 花澤香菜 | 小野大輔(0.808) | 釘宮理恵(0.804) | 喜多村英梨(0.804) |
2 | 水瀬いのり | 森永理科(0.753) | KENN(0.729) | 寺島拓篤(0.724) |
3 | 早見沙織 | 寿美菜子(0.803) | 堀江由衣(0.798) | 後藤邑子(0.792) |
4 | 沢城みゆき | 小野大輔(0.770) | 子安武人(0.764) | 福山潤(0.756) |
5 | 茅野愛衣 | 真田アサミ(0.747) | 阿澄佳奈(0.741) | 佐倉綾音(0.741) |
6 | 悠木碧 | 神谷浩史(0.751) | 岡本信彦(0.748) | 喜多村英梨(0.745) |
7 | 佐倉綾音 | 阿澄佳奈(0.758) | 真田アサミ(0.755) | 大坪由佳(0.754) |
8 | 雨宮天 | 榎あづさ(0.716) | 森永理科(0.693) | 日野聡(0.691) |
9 | 釘宮理恵 | 小野大輔(0.802) | 新谷良子(0.795) | 花澤香菜(0.786) |
10 | 戸松遥 | 平野綾(0.808) | 寿美菜子(0.806) | 水樹奈々(0.804) |
11 | 南條愛乃 | 寿美菜子(0.750) | 日笠陽子(0.747) | 諏訪部順一(0.742) |
12 | 高橋李依 | ュアマジカ(0.774) | ュアミラク(0.765) | 牧島有希(0.734) |
13 | 内田真礼 | 南條愛乃(0.764) | 原田ひとみ(0.761) | 豊崎愛生(0.749) |
14 | 東山奈央 | 戸松遥(0.761) | 保志総一朗(0.760) | 小野大輔(0.753) |
15 | 水樹奈々 | V6_(グループ)(0.790) | 田村ゆかり(0.781) | 茅原実里(0.779) |
16 | 林原めぐみ | 水樹奈々(0.746) | 新谷良子(0.739) | 白石涼子(0.732) |
17 | 小倉唯 | 森永理科(0.776) | KENN(0.768) | 喜多修平(0.767) |
18 | 三森すずこ | 日笠陽子(0.788) | 豊崎愛生(0.779) | 神谷浩史(0.777) |
20 | 種田梨沙 | 日高里菜(0.744) | 内山夕実(0.738) | 大坪由佳(0.733) |
20 | 堀江由衣 | 水樹奈々(0.819) | 平野綾(0.813) | 新谷良子(0.812) |
考察
量が多いのでTOP3に限って考察したいと思います。
花澤香菜さんを男性へ性転換すると??
花澤香菜さんを男性へ性転換させると、小野大輔さんになるようですね。小野大輔さんは「2018年冬アニメ出演声優の統計と所属プロダクションの可視化」でも書いたように、2018年冬アニメの最多出演声優であるように人気なので、この結果はある程度納得しますね。
水瀬いのりさんを男性へ性転換すると??
女性声優さんの中では、一番近い概念の人が、男性声優ではなかった人が何人か、いらっしゃいました。水瀬いのりさんも、そのような人の1人で、一番目は、森永理科さんでした。そこで、次点であるKENNさんを選びました。
水瀬いのりさんとKENNさんに接点があるのかな?と思いまして調べてみたのですが、共演作はないようです。
早見沙織さんを男性へ性転換すると??
早見沙織さんの場合は、想起されるTOP3に男性声優はいなかったようですね・・・そこで、ちょっと手動で求めてみようと思います。
>>> model.most_similar(positive=["[早見沙織]","男"],negative="女")
[
('[寿美菜子]', 0.8027510643005371),
('[堀江由衣]', 0.7979062795639038),
('[後藤邑子]', 0.7921093702316284),
('[喜多村英梨]', 0.7913559079170227),
('[小野大輔]', 0.7909026741981506),
('[花澤香菜]', 0.7901667356491089),
('[平野綾]', 0.7868325114250183),
('[新谷良子]', 0.7857359051704407),
('[小清水亜美]', 0.7838313579559326),
('[水樹奈々]', 0.7837316393852234)]
しいて選ぶとすると小野大輔さんのようですね。それにしても、早見沙織さんを男性化させても、近い人が女性ばかりですね・・・女性度が高いのでしょうか・・・?
気になったこと
高橋李依さんのデータに気になる点がありました。
順位 | 名前 | 候補1位 | 候補2位 | 候補3位 |
---|---|---|---|---|
12 | 高橋李依 | ュアマジカ(0.774) | ュアミラク(0.765) | 牧島有希(0.734) |
"ュアマジカ"、"ュアミラク"ってなんだ?と思って見ていたのですが、どうやら"キュアマジカル"、"キュアミラクル"、というデータのようです。高橋李依さんは、「魔法つかいプリキュア!」で、「キュアミラクル」役を演じていたので、その影響がデータにも出ているようです。しかし、なぜキュアマジカルの方が上なのでしょうね?それと、今回のword2vecのモデルは、データを作る際にMecabを使っているようですが、どうやらキュアミラクルやキュアマジカルなどはうまくパースできないようですね・・・
他にも水樹奈々さんのデータも興味深いものがありました。
順位 | 名前 | 候補1位 | 候補2位 | 候補3位 |
---|---|---|---|---|
15 | 水樹奈々 | V6_(グループ)(0.790) | 田村ゆかり(0.781) | 茅原実里(0.779) |
一番近い概念がV6というのが、面白いですね。V6にいるアイドル。というわけではなく、"グループと似ている"というのはなかなか面白いですね。紅白出演声優ということで、そのようなところで似た概念としてグルーピングされているのでしょうか?
これは個人的な感想ですが、総じて綺麗に推論できていない。という印象があります。この結果に正確な結果はないと思います。しかし、一方で、女性を引いて、男性を足したのに、一番近いと推論された人が男性声優でないという点で、あまりうまく推論できていないなぁ。と感じました。
TOP20男性声優の性転換
結果
順位 | 名前 | 候補1位 | 候補2位 | 候補3位 |
---|---|---|---|---|
1 | 神谷浩史 | 伊藤静(0.809) | 福圓美里(0.807) | 花澤香菜(0.807) |
2 | 宮野真守 | 戸松遥(0.801) | 今井麻美(0.789) | 釘宮理恵(0.785) |
3 | 中村悠一 | 新井里美(0.770) | 洲崎綾(0.767) | 明坂聡美(0.758) |
4 | 梶裕貴 | 花澤香菜(0.792) | 福圓美里(0.790) | 戸松遥(0.787) |
5 | 福山潤 | 福圓美里(0.809) | 井上喜久子(0.808) | 早見沙織(0.804) |
6 | 小野大輔 | 伊藤静(0.827) | 神谷浩史(0.823) | 花澤香菜(0.822) |
7 | 松岡禎丞 | 津田健次郎(0.758) | 斉藤壮馬(0.758) | 松井恵理子(0.757) |
8 | 櫻井孝宏 | 緑川光(0.800) | 井上喜久子(0.776) | 石田彰(0.768) |
9 | 諏訪部順一 | 福圓美里(0.796) | 矢作紗友里(0.795) | 三森すずこ(0.792) |
10 | 杉田智和 | 緑川光(0.817) | 田中理恵_(声優)(0.810) | 井上喜久子(0.800) |
11 | 下野紘 | 東山奈央(0.796) | 花澤香菜(0.795) | 福圓美里(0.794) |
12 | 岡本信彦 | 明坂聡美(0.792) | 東山奈央(0.790) | 花澤香菜(0.780) |
13 | 細谷佳正 | 緑川光(0.746) | 下野紘(0.745) | 福圓美里(0.744) |
14 | 石田彰 | 関俊彦(0.811) | 緑川光(0.807) | 井上喜久子(0.799) |
15 | 鈴木達央 | 伊藤静(0.763) | 福圓美里(0.758) | 保志総一朗(0.756) |
16 | 斉藤壮馬 | 津田健次郎(0.787) | 山下七海(0.785) | 松岡禎丞(0.783) |
17 | 鈴村健一 | 竹達彩奈(0.801) | 戸松遥(0.800) | 伊藤静(0.800) |
18 | 木村良平 | 下野紘(0.722) | 明坂聡美(0.719) | 山本希望(0.717) |
19 | KENN | 千葉紗子(0.770) | 小倉唯(0.770) | 野中藍(0.764) |
20 | 蒼井翔太 | 新田恵海(0.759) | 宮野真守(0.754) | 三森すずこ(0.748) |
考察
神谷浩史さんを女性へ性転換すると??
神谷浩史さんを性転換させると伊藤静さんのようです。個人的には結構意外な方が出てきました。ランキング上位の方を性転換させた場合、性転換先の方もランキングに入っている。と思っていたのですが、そうでいない方が想起された。というのはなかなか面白い結果ですね。
宮野真守さんを女性へ性転換すると??
宮野真守さんを性転換させると、戸松遥さんです。神谷さんの時とは、対照的に、こちらはランキングの方が選ばれました。少し、Wikipediaを見てみましたが、両者とも最近はアニメのお仕事は抑え気味なのでしょうか?あまり接点はなさそうですね・・・
中村悠一さんを女性へ性転換すると??
中村悠一さんを女性化させると、新井里美さんになるようです。なにか接点はないか・・・と思って探してみたところ、目立った共演作はあまりないようでした。そこで、ふとWikipediaを見てみると、中村悠一さんの生年月日は1980年2月20日、新井里美さんは1980年7月4日。と、見ると同じ年齢という共通点ぐらいしかないですね・・・
気になったこと
男性声優の女性化は割とうまくいった。感じがします。推論で一番近いとされている人々が、きちんと女性声優になっていますね。それと、ダイバーシティがある。というのが面白い。割と特定の女性声優に固まったりするのかな?と思ったのですが、かなり多種多様な方々が想起されているのを見ると、なるほど結構おもしろいな。と思って見ていました。
完全に個人的な趣味で性転換シリーズ
関智一さんを女体化
>>> model.most_similar(positive=["[関智一]","女"],negative=["男"])
[
('[緑川光]', 0.8139966130256653),
('[伊藤静]', 0.7908090353012085),
('[山口勝平]', 0.7903541326522827),
('[名塚佳織]', 0.7823753356933594),
('[井上喜久子]', 0.7795151472091675),
('[高山みなみ]', 0.7748219966888428),
('[水谷優子]', 0.77407306432724),
('[置鮎龍太郎]', 0.7737675309181213),
('[石田彰]', 0.7736620903015137),
('[福圓美里]', 0.7733497023582458)
]
うーむ。若干の風評被害感はありますが、伊藤静さんみたいですね・・・結構ベテランな方が想起されてる印象。
たかはし智秋さんを男体化
model.most_similar(positive=["[たかはし智秋]","男"],negative=["女"])
[
('[子安武人]', 0.763537585735321),
('[福山潤]', 0.7575809359550476),
('[小清水亜美]', 0.7548916339874268),
('[花澤香菜]', 0.7457536458969116),
('[森久保祥太郎]', 0.7399146556854248),
('[小野大輔]', 0.7389250993728638),
('[大谷育江]', 0.7362715005874634),
('[浅野真澄]', 0.7356562614440918),
('[釘宮理恵]', 0.7354475259780884),
('[白石涼子]', 0.7339612245559692)
]
セクシーすぎる声優というチアキングですが、性転換して見ると、子安武人さんのようです。せく・・・しー・・・?
檜山修之さんを女体化
>>> model.most_similar(positive=["[檜山修之]","女"],negative=["男"])
[
('[三木眞一郎]', 0.7624213695526123),
('[関俊彦]', 0.7552656531333923),
('[井上喜久子]', 0.7461692094802856),
('[小西克幸]', 0.7413111925125122),
('[洲崎綾]', 0.7394375205039978),
('[石田彰]', 0.7393702268600464),
('[朴ロ美]', 0.7391438484191895),
('[岡村明美]', 0.7386763095855713),
('[平田広明]', 0.7373508810997009),
('[神田朱未]', 0.7355822324752808)
]
井上喜久子さんか、洲崎綾さん・・・というところでしょうか。どうしてもこの2人が「光になれぇぇぇぇっ!!!」って叫んでる図は想像できないですが・・・
若本規夫さんを女体化
>>> model.most_similar(positive=["[若本規夫]","女"],negative=["男"])
[
('[緑川光]', 0.7807250022888184),
('[銀河万丈]', 0.7737233638763428),
('[玄田哲章]', 0.7735342979431152),
('[井上喜久子]', 0.7663689255714417),
('[山口勝平]', 0.7632290124893188),
('[田中秀幸_(声優)]', 0.7576064467430115),
('[関俊彦]', 0.7570361495018005),
('[三木眞一郎]', 0.7560485601425171),
('[櫻井孝宏]', 0.7516177892684937),
('[石塚運昇]', 0.7512613534927368)
]
アナゴさんを女体化すると・・・井上喜久子さん・・・でしょうか・・・やっぱりこれは世代が反映されている気がしますね。それにしても、男成分引いて、女性成分を足しても、男成分の高いリストだ・・・
南央美さんを男体化
model.most_similar(positive=["[南央美]","男"],negative=["女"])
[
('[中村悠一]', 0.6711170673370361),
('[甲斐田ゆき]', 0.6591244339942932),
('[澤部佑]', 0.6528176665306091),
('[日高里菜]', 0.6468334794044495),
('[仁後真耶子]', 0.6439378261566162),
('[沢田亜矢子]', 0.64299476146698),
('[鹿谷弥生]', 0.6393709778785706),
('[逢坂良太]', 0.6380208730697632),
('[諏訪部順一]', 0.6375082731246948),
('[半場友恵]', 0.63703453540802)
]
作者が人間の道を踏み外したシリーズ。機動戦艦ナデシコの星野ルリの声優を男体化した場合誰になるか?中村祐一さんというのは意外でした。しかし、澤部佑さんって・・・ハライチやないか!と、割と面白い?結果が出ていますが、類似度が、0.6程度とちょっと低めですね。
横山智佐さんを男体化
model.most_similar(positive=["[横山智佐]","男"],negative=["女"])
[
('[子安武人]', 0.7820948362350464),
('[釘宮理恵]', 0.74967360496521),
('[速水奨]', 0.7456263899803162),
('[中原麻衣]', 0.7451604008674622),
('[浅野真澄]', 0.741085410118103),
('[山寺宏一]', 0.7408943176269531),
('[福山潤]', 0.739687442779541),
('[小野大輔]', 0.739596962928772),
('[石田彰]', 0.7388269305229187),
('[森久保祥太郎]', 0.738325834274292)
]
作者が人間の道を踏み外したシリーズ。その2。サクラ大戦の真宮寺さくら役の声優さんを男体化すると、子安さんのようですね。子安さんって横山さんと共通点あったのかな?と思って調べて見ましたが、そうか、子安さんはサクラ大戦で加山雄一だったのですね・・・しかし、なぜ大神さんの陶山さんが出ない・・・
感想
完全にジャストアイデアだけのネタでしたが、やってみると結構面白かったです。その昔、キョン子という涼宮ハルヒの憂鬱に出てくる男性キャラのキョンを女体化したネタが流行ったなぁ。みたいなことを思い出しました。あれは完全なフィクションの世界でしたが、リアルの世界でやってみても、へーっと思うことはありますね。
正直、答えがなくて、うーん。となるネタで、着地点が難しかったのですが、改めてword2vecのすごさも感じた内容でした。結構雑な操作をしていると思うのですが、推論されるのはだいたい声優になっているあたり素晴らしいな。と。普通に個人でこういうことをすると、山寺宏一さんをシステムに入れたのに、出力が大根とか出てきて頭抱えることになると思うのですが、人間、ましてや同業の声優さんまで出ているあたり、やはりそこそこ精度があるモデルなんだなぁ。と思いました。
プログラム的な話を少ししておくと、結構この推論はしんどいです。理由は簡単で、word2vecのモデルが2.1GBあるからです。推論する際は軽く動くのですが、最初のロード。これには結構時間がかかりますし、メモリも持って行かれます。2回から3回メモリ不足でブラウザを落としたり、パソコンを再起動させたりしたので、みなさんご注意ください。